Como especificar uma posição-alvo apropriada pode ser complicado em muitas situações, vale a pena considerar a abordagem a seguir, com base em mapas de grade de ocupação 2D. É geralmente chamado de "iteração de valor" e, combinado com a descida / ascensão do gradiente, fornece um algoritmo de planejamento de caminho simples e bastante eficiente (dependendo da implementação). Devido à sua simplicidade, é bem conhecido na robótica móvel, principalmente nos "robôs simples" que navegam em ambientes internos. Conforme implícito acima, essa abordagem fornece um meio de encontrar um caminho para longe de uma posição inicial sem especificar explicitamente uma posição-alvo da seguinte maneira. Observe que uma posição de destino pode opcionalmente ser especificada, se disponível. Além disso, a abordagem / algoritmo constitui uma busca pela primeira vez,
No caso binário, o mapa de grade de ocupação 2D é um para células de grade ocupadas e zero em outro lugar. Observe que esse valor de ocupação também pode ser contínuo no intervalo [0,1]. Voltarei a isso abaixo. O valor de uma determinada célula da grade g i é V (g i ) .
A versão básica
- Supondo que a célula da grade g 0 contenha a posição inicial. Defina V (g 0 ) = 0 e coloque g 0 em uma fila FIFO.
- Tomar a próxima célula da grelha g i a partir da fila.
- Para todos os vizinhos g j de g i :
- Se g j não estiver ocupado e não tiver sido visitado anteriormente:
- V (g j ) = V (g i ) +1
- Marque g j como visitado.
- Adicione g j à fila FIFO.
- Se um determinado limite de distância ainda não for atingido, continue com (2.), caso contrário, continue com (5.).
- O caminho é obtido seguindo a subida mais gradiente a partir de g 0 .
Notas na etapa 4.
- Conforme indicado acima, a etapa (4.) exige que se mantenha o controle da distância máxima percorrida, que foi omitida na descrição acima por razões de clareza / concisão.
- Se uma posição de destino é dada, a iteração é interrompida assim que a posição de destino é alcançada, ou seja, processada / visitada como parte da etapa (3.).
- É claro que também é possível simplesmente processar o mapa de grade inteiro, ou seja, continuar até que todas as células de grade (gratuitas) tenham sido processadas / visitadas. O fator limitante é obviamente o tamanho do mapa de grade em conjunto com sua resolução.
Extensões e outros comentários
A atualização-equação V (g j ) = V (g i ) +1 deixa muito espaço para aplicar todos os tipos de heurísticas adicionais, reduzindo a escala V (g j )ou o componente aditivo para reduzir o valor de certas opções de caminho. A maioria, se não todas, essas modificações podem ser bem e genericamente incorporadas usando um mapa de grade com valores contínuos de [0,1], que efetivamente constitui uma etapa de pré-processamento do mapa de grade binário inicial. Por exemplo, adicionar uma transição de 1 a 0 ao longo dos limites dos obstáculos faz com que o "ator" fique de preferência limpo de obstáculos. Esse mapa de grade pode, por exemplo, ser gerado a partir da versão binária por desfoque, dilatação ponderada ou similar. Adicionar as ameaças e os inimigos como obstáculos com grande raio de desfoque, penaliza os caminhos que se aproximam deles. Pode-se também usar um processo de difusão no mapa geral como este:
V (g j ) = (1 / (N + 1)) × [V (g j ) + soma (V (g i ))]
onde " soma " se refere à soma de todas as células de grade vizinhas. Por exemplo, em vez de criar um mapa binário, os valores iniciais (inteiros) podem ser proporcionais à magnitude das ameaças, e os obstáculos apresentam ameaças "pequenas". Após a aplicação do processo de difusão, os valores da grade devem / devem ser redimensionados para [0,1] e as células ocupadas por obstáculos, ameaças e inimigos devem ser definidas / forçadas a 1. Caso contrário, o redimensionamento na atualização-equação pode não funciona como desejado.
Existem muitas variações nesse esquema / abordagem geral. Obstáculos etc. podem ter valores pequenos, enquanto células de grade livres têm valores grandes, o que pode exigir uma descida gradual na última etapa, dependendo do objetivo. Em qualquer caso, a abordagem é, IMHO, surpreendentemente versátil, bastante fácil de implementar e potencialmente bastante rápida (sujeita ao tamanho / resolução do mapa da grade). Finalmente, como em muitos algoritmos de planejamento de caminho que não assumem uma posição-alvo específica, existe o risco óbvio de ficar preso em becos sem saída. Até certo ponto, pode ser possível aplicar etapas dedicadas de pós-processamento antes da última etapa para reduzir esse risco.
Aqui está outra breve descrição com uma ilustração em Java-Script (?), Embora a ilustração não funcione com o meu navegador :(
http://www.cs.ubc.ca/~poole/demos/mdp/vi.html
Muito mais detalhes sobre o planejamento podem ser encontrados no livro a seguir. A iteração de valor é discutida especificamente no Capítulo 2, Seção 2.3.1.
http://planning.cs.uiuc.edu/
Espero que ajude, Atenciosamente, Derik.