• Nenhum resultado encontrado

Para obter uma trajetória ponto-a-ponto, diversos algoritmos podem ser utilizados. O mais utilizado na literatura é o algoritmo A* (pronuncia-se “A-estrela”), que possui muitas variantes. O objetivo desse algoritmo é gerar uma rota sobre qualquer grafo considerando os pesos das arestas, que representam alguma métrica relacionada ao custo do deslocamento – por exemplo: distância, risco, consumo de combustível, etc.

Iniciando pelo nó de origem, o algoritmo calcula a função F (soma das funções G37 e H38) de cada um dos nós vizinhos. Aquele que tiver o menor valor de F é adicionado numa lista chamada closedlist (mais de um nó pode ser adicionado nessa lista em caso de empate). Então, o processo de avaliação de todos os vizinhos é repetido para cada nó da closedlist até que se alcance o nó de destino. Assim, o algoritmo consegue restringir o espaço de busca verificando apenas os nós mais “promissores”. Quando o nó de destino é encontrado, a melhor trajetória é gerada percorrendo a árvore mais curta (de menor peso) do nó de destino até o nó de origem. A Figura 8 apresenta o pseudocódigo do algoritmo A* e informações detalhadas sobre a implementação podem ser consultadas em (LESTER, 2005).

Entre as variantes do algoritmo A* está o algoritmo Accelerated A*, AA* (SISLAK, VOLF e PECHOUCEK, 2009), também chamado de Sparse A* Search por outros autores (YANG et al., 2009; MENG e GAO, 2010). O princípio básico desse algoritmo é, ao invés de avaliar os nós imediatamente vizinhos ao nó de origem, o algoritmo avalia nós ao redor do ponto de origem, mas que não são imediatamente vizinhos (ou seja, que estão numa distância maior do que apenas uma aresta) – desde que não haja obstáculos entre essa vinzinhaça e o nó de origem. Assim, o algoritmo AA* poupa o processamento em muitos nós.

37 Distância calculada entre o nó de origem e o nó avaliado. Como todos os nós entre esses dois nós

já foram visitados pelo algoritmo A*, essa distância pode ser facilmente computada percorrendo a árvore formada entre os nós (que, na verdade, já está armazenada em cada um dos nós e é constantemente atualizada a cada descoberta de um caminho mais curto).

38 Distância estimada do nó avaliado até o nó de destino. Normalmente, essa estimativa é feita

utilizando uma função heurística. As heurísticas mais comumente utilizadas nesse caso são a distância Euclidiana e a distância Manhatthan.

Também na busca por melhor performance, Kopriva et al. (2010) propuseram o algoritmo chamado Iterative Accelerated A*, IAA*, para evitar colisões em ambientes complexos com um grande número de aeronaves dividindo o espaço aéreo. A diferença em relação ao AA* é que, ao contrário do algoritmo AA*, a distância entre o nó de origem e a vizinhança escolhida para ser avaliada varia decrescentemente, o que reduz consideravelmente o número de nós visitados durante o processamento do algoritmo. Inicialmente, o algoritmo verifica nós de uma vizinhança bastante distante. Se houver alguma colisão na trajetória gerada, o cálculo de trajetória é refeito reduzindo a distância da vizinhança, e assim sucessivamente até que se encontre uma trajetória livre de colisões.

Quigley et al. (2005) utilizaram o algoritmo A*, originalmente proposto para ambientes bidimensionais, para gerar trajetórias de menor custo, considerando também a altitude. Nesse trabalho, as trajetórias geradas eram posteriormente carregadas nos VANTs, que de posse delas cumpriam o trajeto previamente planejado. Os autores também propuseram um procedimento adicional que suaviza a trajetória, eliminando pontos intermediários que pudessem ser aproximados por apenas dois pontos, formando uma trajetória retilínea.

Em outros trabalhos (SISLAK, VOLF e PECHOUCEK, 2010; PECHOUCEK e SISLAK, 2009; KOPRIVA et al., 2010), o algoritmo A* foi adaptado para considerar também a dimensão temporal. Ou seja, foi adicionado um atributo de tempo a cada waypoint gerado. Uma segunda fase de processamento foi concebida para atribuir, a cada waypoint, velocidades diferentes às aeronaves em rota de colisão, de modo que uma aeronave atinja o ponto de cruzamento antes da outra – evitando, consequentemente, a colisão. Apesar de não estar explicitamente dito no trabalho, verifica-se que esse mecanismo é um exemplo do mecanismo de coordenação “planejamento multiagente” (apresentado na subseção 4.2.4).

Figura 8 – Pseudocódigo do algoritmo A* [Adaptado de (LESTER, 2005)]

Assim, por ser razoavelmente eficiente, possuir diversos casos de sucesso na literatura, ser flexível a variações e gerar trajetórias baseadas em waypoints (que podem ser facilmente utilizados para guiar VANTs), o algoritmo A* é considerado um dos mais adequados algoritmos de planejamento de caminhos para VANTs.

Apesar disso, o algoritmo de Dijkstra também possui seu lugar de destaque entre os algoritmos de planejamento de trajetória. Essencialmente, o algoritmo de Dijkstra é uma simplificação do algoritmo A*. Enquanto o algoritmo A* calcula o custo do deslocamento, somando a distância real do nó de origem aos nós intermediários (que vão sendo avaliados recursivamente), com a estimativa da

distância dos nós intermediários até o nó de destino (utilizando uma heurística), o algoritmo de Dijkstra utiliza apenas o cálculo da distância real do ponto de origem até os pontos intermediários. Por esse motivo, o algoritmo de Dijkstra vai “expandindo”39 igualmente em todas as direções, fazendo com que o cálculo da trajetória explore uma área muito maior até encontrar o ponto de destino, tornando- o, assim, mais lento que o algoritmo A*. No entanto, cabe ressaltar que o algoritmo de Dijkstra é mais indicado quando se deseja obter o caminho mínimo para visitar vários pontos, sem um destino certo (LESTER, 2005).

Outro algoritmo utilizado para a navegação ponto-a-ponto é algoritmo baseado em forças virtuais, proposto por Zhuoning et al. (2010). Batizado de fuzzy virtual force (FVF) method, os autores propuseram um método de planejamento de rota utilizando forças virtuais e lógica nebulosa (fuzzy). A ideia básica do algoritmo é criar caminhos viáveis com base nas informações disponíveis sobre a região de sobrevoo, de modo que as áreas que apresentam riscos40 sejam evitadas. Assim, essas áreas são representadas como forças virtuais de repulsão ao VANT e regras fuzzy atuam no controle do VANT – por exemplo, utilizando regras do tipo “SE a força é intensa ENTÃO vire muito à direita (ou esquerda)”.

Embora Zhuoning et al. (2010) tenham obtido resultados que indicam que o método FVF é superior ao algoritmo A*, no que diz respeito ao planejamento de trajetória em tempo real em ambientes com muitos obstáculos, há uma característica que o torna menos aplicável aos VANTs atuais. Esse modelo produz trajetórias contínuas, ou seja, a trajetória não está representada por uma sequência de waypoints, o que define a trajetória são comandos fuzzy do tipo “vire pouco para a esquerda”, “vire muito para a direita”, etc. Isso torna esse algoritmo menos adequado a modelos discretizados.

39 Ou seja, a avaliação dos pontos vizinhos ocorre igualmente em todas as direções, sem direção

certa.

Documentos relacionados