A decomposição de células de Boustrophedon está simplesmente subdividindo um ambiente em áreas que podem ser eficientemente cobertas por um caminho de Boustrophedon. Uma decomposição trapezoidal fará e pode ser realizada usando um algoritmo de varredura de linha. Veja [Choset 2000], Este site
, ou (eu recomendo!) O excelente livro "Computational Geometry" de Mark de Berg, et. al, para uma descrição completa das estruturas de dados e algoritmos necessários.
Choset, Howie. "Cobertura de espaços conhecidos: a decomposição celular de Boustrophedon" Robots Autônomos , 2000.
Por exemplo, considere o conjunto de obstáculos como arestas e vértices. Digamos que o ambiente também seja limitado por um polígono especial. Temos algo como o seguinte. Para decompor esse espaço, basta adicionar arestas verticais entre todos os vértices e a linha ou vértice mais próximo.
Para fazer isso no código, você precisa apenas de um teste de interseção de segmento de linha, uma lista classificada de arestas e uma lista classificada de vértices.
- vEu
- euEuvEu
- Em cada interseção, crie um novo vértice.
Quando isso é feito, o conjunto de novas arestas e vértices inclui apenas trapézios. Mas enfatizo que você não pode fazer isso online (sem o conhecimento prévio dos obstáculos). Se você deseja fazer uma cobertura robusta sem conhecimento prévio, consulte "algoritmos de erros". Em particular, aqui está um algoritmo simples, supondo que o ambiente seja limitado.
A partir da posição inicial, mova-se para cima e para a esquerda até chegar ao canto superior esquerdo do ambiente. Se você encontrar um obstáculo primeiro, deve percorrê-lo. Você sabe que algo é um obstáculo se puder ser circunavegado (bater e mover).
Do canto superior esquerdo, mova para a direita até encontrar o limite. Em seguida, mova-se para baixo e para a esquerda (estamos fazendo um boustrophedon de todo o espaço).
Quando você está na linha esquerda-direita e encontra um obstáculo, você tem duas opções. (i) Podemos circunavegar até chegar à linha esquerda-direita que estamos tentando cobrir e continuar. (ii), podemos nos virar e cobrir uma nova linha esquerda-direita até encontrarmos o caminho para superar o obstáculo ou acabar nessa situação novamente. Vou ilustrar.
À esquerda, contornamos o obstáculo até retornar à "linha" que estávamos tentando seguir. À direita, continuamos cobrindo a área (menor) de um lado do obstáculo.
A vantagem do primeiro método é que você sempre mapeia completamente o obstáculo antes de tomar uma decisão sobre como contorná-lo, assim pode seguir o caminho mais curto. A vantagem do segundo método é que você não precisa contornar o obstáculo, basta prosseguir para cobrir a área em que está.
Observe que isso define sua decomposição de microfones em uma maneira on-line : você cobre a área entre os obstáculos ou entre os obstáculos e os limites.
No entanto, tanto quanto eu sei, o primeiro método é mais fácil de analisar. Os algoritmos mais complicados (como BFS, etc), são escolhidos porque o ambiente é ilimitado (você não quer gastar eternamente procurando por um limite) ou há um obstáculo realmente desagradável na maneira como basicamente divide o ambiente. Por que isso é ruim? veja este exemplo:
Movendo-se da esquerda para a direita, em seguida, circulando cada obstáculo produz maneira demasiados capas das peças pequenas entre cada obstáculo. De fato, sem o planejamento de caminho global, você pode tornar isso tão ruim quanto a resolução da sua grade, colocando essas colunas com 1 px de largura, com a altura de todo o ambiente e 1 px de distância. Então você teria que se mover ao redor do obstáculo cada vez que o atingisse.
É por isso que perguntei se você tinha alguma idéia de onde estava no ambiente ou se poderia fazer um planejamento global do caminho. Mas a discussão online versus offline e os algoritmos ideais para isso não é o que você realmente queria.
Atualização: tive que remover as imagens (não https) e publicarei isso que é frequentemente usado em aplicativos práticos do mundo real. http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf