Algoritmos e estrutura de dados para problemas de deslocamento no plano Natan Costa Lima 1 e Carlos Eduardo Ferreira(Orientador) 2 1 Universidade de São Paulo (USP), Brasil natan.lima@usp.br 2 Universidade de São Paulo (USP), Brasil cef@ime.usp.br se pensarmos em um mapa ou uma planta do local, isto não se parece mais tão restritivo. Consideraremos também que o ambiente seja estático, ou seja, não levamos em conta pessoas ou outros objetos se movendo pelo cenário. 1. Introdução O problema em estudo neste projeto de iniciação cientíca é o problema de deslocamento no plano bidimensional, onde queremos determinar um caminho no plano em que um certo robô deve se locomover sem colidir com obstáculos. Este problema de deslocamento não é aplicável somente à robótica. Podemos pensar também em um programa usado no GPS -sistema de posicionamento global-,por exemplo, para determinar o trajeto de um carro. Chamemos nosso ambiente, onde estão os obstáculos (em forma de polígono), de R. Considere dois pontos s e t, para os quais queremos traçar um caminho com início em s e término em t. Queremos responder as seguintes questões: 2. O robô pontual Primeiro, consideremos o nosso robô como sendo um ponto e ainda que ele possa andar em todas as direções livremente. Uma forma de acharmos um caminho livre de obstáculos foi proposta por Kedem e alguns outros [4][5]. A idéia consiste em dividir a área livre em trapézios para depois calcularmos um caminho válido. Ao invés de calcularmos um caminho livre entre dois pontos, construiremos um estrutura de dados chamada de mapa trapezoidal. Esta estrutura nos ajudará a calcular um caminho livre de obstáculos. Essa abordagem funciona quando o ambiente de obstáculos não muda e necessitamos calcular vários caminhos diferentes. 1. Existe um caminho de s a t, livre de obstáculos em R? 2. Encontre um caminho de s a t em R, livre de obstáculos. 3. Encontre o caminho de menor distância de s a t. É fácil perceber que uma resposta para questão (3) satisfaz à (2), assim como uma resposta para (2) resolve a (1). Logo, a questão de decisão é a mais fácil das três Quanto a questão (3), sua denição não é tão clara. Se considerarmos um robô como sendo um ponto e ainda que ele possa se mover para todos os lados livremente, então bastaria pegarmos o caminho com a menor distância euclidiana. Suponha agora que seja um carro que precisaria acelerar e desacelerar para fazer curvas, ou ainda pensemos em um robô que demore muito para virar. Nestes casos, a menor distância euclidiana pode não ser a melhor escolha. Aqui iremos aplicar algumas restrições. Talvez a mais drástica à primeira vista, seja considerarmos o ambiente como um plano em duas dimensões, mas Figura 1. Um exemplo de mapa trapezoidal.(fonte: Wikipedia, http://upload.wikimedia.org/wikipedia/ en/4/43/trapezoidal_decomposition.png) 293
2.1 Mapa trapezoidal Aqui, considere um conjunto S de retas que não se cruzam entre si e seja R uma caixa onde todas as retas em S estão encapsuladas. Então, o mapa trapezoidal T (S) é obtido traçando duas linhas verticais de todos os pontos extremos, uma para cima e outra para baixo, parando em outra reta de S ou quando tocarmos uma das arestas de R. veja Figura 1. 2.2 Grafo de caminhos livres Com o mapa trapezoidal em mãos, temos que representar agora a região livre de obstáculos. Para isto, basta retirarmos do nosso mapa os trapézios que se encontram dentro dos polígonos. Vejamos como isso nos ajuda a calcular o caminho livre de obstáculos entre dois pontos, digamos s e t, em P. Se os dois pontos estão contidos no mesmo trapézioi, então é fácil: temos que os trapézios estão em regiões livres, logo, basta traçarmos um linha reta entre os dois. Agora, caso eles estejam em trapézios diferentes, não basta traçarmos uma linha reta, pois algumas vezes precisamos fazer curvas para entrar em determinados trapézios. Para nos ajudar, construiremos o que vamos chamar aqui de grafo de caminhos livres. Neste grafo os centros dos trapézios e o centro de cada linha vertical serão os vértices e haverá arcos ligando os centros dos trapézios aos centros das linhas verticais que são adjacentes a estes trapézios. Note que estes arcos estão na região onde o robô pode andar, pois tanto os trapézios como as linhas verticais estão na região livre do mapa. Figura 2. Um exemplo de grafo de caminhos livres.(fonte: Computacional Geometry Algorithms and Applications,[1]) Com o grafo montado basta adicionarmos uma aresta de s ao vértice que se encontra no meio do trapézio onde s está contido, e adicionamos também uma aresta de t ao vértice do seu trapézio, depois disto usamos busca em largura, busca em profundidade ou até mesmo o algoritmo de dijkstra para acharmos um caminho possível de s a t. 2.3 Caminhos mínimos Vamos considerar agora o problema de encontrarmos o caminho de menor distância euclideana. A imagem a seguir ilustra a diferença entre o método anterior e o melhor caminho: Figura 3. O caminho mínimo não está no grafo.(fonte: Computacional Geometry Algorithms and Applications,[1]) Dito isto podemos enunciar o seguinte lema. Lema 1 Qualquer caminho mínimo entre dois pontos s e t entre os polígonos em P é um caminho poligonal onde seus vértices são vértices dos polígonos em P. Prova. Suponha por absurdo que o caminho C não seja poligonal e seja mínimo. Como os obstáculos são poligonais, isto signica que existe um vértice p em C que está contido no espaço livre, ou seja, existe um ɛ tal que o disco D com centro em p e raio ɛ está totalmente contido em um espaço livre, logo, pegamos os dois pontos onde o caminho se cruza com D e conectamos eles com uma linha reta ao invés de passarmos por p. Isto é um atalho digamos assim, logo, encontramos um caminho de comprimento menor que C, pois qualquer caminho de comprimento mínimo tem que ser mínimo localmente também. Desta forma podemos concluir que o caminho tem que ser poligonal e excluímos a possibilidade de haver pontos contidos no espaço livre. De maneira similar conseguimos excluir os vértices encontrados nas arestas dos polígonos pois podemos usar um argumento semelhante, agora ao invés de ter um disco, temos a metade de um, e podemos usar o 294
mesmo argumento para diminuir o caminho. Logo só nos resta os vértices dos polígonos para p. Podemos denir agora o que chamaremos de Gvis(P ) o grafo de visibilidade de P onde seus vértices são os vértices dos polígonos em P {s, t} = P onde s e t são os pontos para os quais queremos a menor distância. Por denição os arcos em Gvis(P ) são entre vértices -que agora incluem s e t- onde há um caminho em linha reta entre eles, e que não colida com obstáculos. Sabemos assim que o menor caminho entre s e t consiste de arcos neste grafo, logo, podemos usar o seguinte algoritmo para achar o menor caminho: algoritmoshort EST P AT H(P, s, t) entrada. Um conjunto P de polígonos e dois pontos s e t localizados em algum espaço livre. saida. O menor caminho sem colisão entre s e t. G(vis) V ISIBILIT Y GRAP H(P {s, t}) ij G(vis), custo(i, j) a distância euclideana do segmento ij. Use o Algoritmo de Dijkstra para calcular o caminho mais curto entre s e t. encontrado [6]: O(n log(n) + E) onde E é o número de arestas no grafo de visibilidade. Claro que E = O(n 2 ) mas como na gura 4, podemos ver que pode ser bem menor do que n 2. 3. Somas de Minkowski Anteriormente consideramos nosso robô como sendo apenas um ponto,porém, não é mais difícil quando o robô é um polígono. Vamos assumir que nosso robô R seja convexo. Denotaremos por R(x, y) o ponto de referência do robô, para podermos localizá-lo no plano. Nosso problema agora é que se encostarmos com R(x, y) nas bordas dos obstáculos, o robô acabará por colidir com estes. Logo nosso espaço de colisões mudou, deniremos de CP o espaço onde o Robô R não colide com os obstáculos de P. CP := {(x, y) : R(x, y) P φ Figura 5. CP, R, P (Fonte: Computacional Geometry Algorithms and Applications,[1]) Figura 4. Grafo de visibilidade.(fonte: Programa desenvolvido durante a iniciação) 2.4 Construindo o grafo de visibilidade Um algoritmo O(n 3 ) é imediato, basta para cada reta ij com i, j P testar se ij cruza com alguma aresta de polígonos em P. Esse problema foi extensivamente estudado até que um algoritmo ótimo foi Podemos denir assim nossas transformações como: A soma de dois conjuntos S 1 R 2 e S 2 R 2 denotado por S 1 S 2 é denido por S 1 S 2 := p + q : p S 1, q S 2, onde p + q denota o vetor soma dos vetores p e q, isto é, se p = (p x, p y ) e q = (q x, q y ) então temos: p + q := (p x + q x, p y + q y ). Para expressar CP com essas somas, deniremos uma última notação: Para um ponto p = (p x, p y ) denimos p := ( p x, p y ), e para um conjunto S nós denimos S := p : p S Assim podemos enunciar o seguinte teorema: Teorema Seja R um robô planar, que pode se locomover em todas as direções, e seja P um obstáculo. então CP de P é P ( R(0, 0)). prova Temos que provar que R(x, y) intersecta P se e somente se nós temos que (x, y) P ( R(0, 0)). Primeiro suponha que R(x, y) intersecta P e seja 295
q = (q x, q y ) um ponto de intersecção. Segue de q R(x, y) que q(q x x, q y y) R(0, 0) ou equivalentemente ( q x + x, q y + y) R(0, 0). Como temos que q P então (x, y) P ( R(0, 0)). volta. Seja (x, y) P ( R(0, 0)), então existem pontos (r x, r y ) R(0, 0) e (p x, p y ) P tal que (x, y) = (p x r x, p y r y ), ou em outras palavras, tal que p x = r x + x e p y = r y + y, o que implica que R(x, y) intersecta P. Logo essas somas -geralmente chamadas de Minkowski sums- representam o espaço livre para um robô planar, que pode se mover em qualquer direção. (a) 3.1 Alguns resultados Dessas somas derivam várias propriedades, não vou prová-las aqui, mas dentre elas, segue algumas interessantes: Seja P e R polígonos com n e m vértices respectivamente, a complexidade das somas de Minkowski para P R é dada por: (b) O(n + m) se os dois polígonos são convexos. O(nm) se um deles é convexo e outro não. O(n 2 m 2 ) se nenhum deles é convexo. 4. Implementações Por enquanto foi implementado a construção do grafo de visibilidade e o algoritmo de Dijkstra. Note que ao invés de exibir apenas o menor caminho entre os dois pontos, o programa exibe a árvore de caminhos mínimos a partir de s. A construção do grafo foi implementada usando o algoritmo ingênuo. Futuramente será implementada a versão do algoritmo que pode ser encontrada em Computacional Geometry [1], cuja complexidade é O(n 2 log(n)). 5. Imagens Figura 6. Polígonos/Obstáculos.(Fonte: Programa desenvolvido durante a iniciação) (c) Figura 7. Telas do programa mostrando os obstáculos, o grafo e a árvore de custo mínimo. (Fonte: programa desenvolvido durante a iniciação) 6. Conclusão O objetivo desta iniciação cientíca é estudar e implementar o grafo de visibilidade de uma maneira eciente, Futuramente o mapa trapezoidal. Além da implementação convencional focaremos em um software para ns didáticos, que mostre como os algoritmos estão funcionando. O grafo de visibilidade é uma estrutura que foi estudada profundamente até a descoberta do algoritmo ótimo, o problema é que para conseguir a complexidade O(n log(n) + E) o algoritmo e as estruturas se tornam muito complexos. O lema nos permite construir o grafo de visibilidade, onde os vértices desse grafo são os vértices dos polígonos e os arcos são caminhos em linha reta entre estes vértices. 296
[6] S. K. Ghosh and D. M. Mount, An output-sensitive algorithm for computing visibility graphs., SIAM J. Comput 20 (1991), 888910. (a) (b) (c) Figura 8. Telas do programa mostrando os obstáculos, o grafo e a árvore de custo mínimo. (Fonte: programa desenvolvido durante a iniciação) Referências [1] M. de Berg, M. van Kreveld, M. Overmars, and O. Schwarzkopf, Computacional Geometry: Algorithms and applications (second edition), Springer, New York, 2005. [2] Joseph O'Rourke, Computacional Geometry in C (second edition), Cambridge University Press, United Kingdom, 1998. [3] K. Mulmuley, Computacional Geometry:an Introduction through Ramdomized Algorithms., Prentice Hall, Chigago, 1998. [4] K. Kedem, R. Livne, J.Pach, and M.Sharir, On the union of Jordan regions and collision-free translation motion amdst polygonal obstacles, Discrete Comput. Geom. 1 (1986), 5971. [5] K. Kedem and M.Sharir, An ecient algorithm for planning collision-free translation motion of convex polygon object in 2-dimensional space amidst polygonal obstacles., Proceedings of the 1st Annual Symp. Comp. Geom. (1985), 7580. 297