Preste serviços de manutenção à navegação do robô em um campo de golfe. Construindo um caminho e evitando obstáculos

Qual é a melhor maneira de navegar e evitar obstáculos para um robô de serviço?


Os robôs são sistemas mecânicos e de software que interagem com o mundo real. Para um robô de serviço, é extremamente importante entender sua posição atual no espaço, a posição do alvo e a capacidade de construir uma rota para o alvo, evitando possíveis obstáculos. Estamos desenvolvendo um robô para coletar bolas de golfe no driving range . Consideramos opções diferentes para a construção de uma rota, a fim de encontrar a melhor para nós mesmos, talvez essa informação seja interessante para alguém.



A maneira mais fácil de fazer com que o robô direcione para seu objetivo final no espaço bidimensional. O veículo espacial aqui é um pequeno ponto em frente ao qual não há obstáculos. Portanto, o robô nessa situação se move em linha reta e, quando atinge a meta, para.

Este método é adequado se houver apenas um robô no mundo e o objetivo que ele deve alcançar. O Direct permitirá que você alcance a configuração final o mais rápido possível.

Mas esse algoritmo não pode ser aplicado se um obstáculo surgir repentinamente na frente do robô. Movendo-se em linha reta, o veículo espacial não poderá contorná-lo ou passar por ele. Nesse contexto, ele simplesmente para na frente de um obstáculo e não segue em frente.

Como contornar um obstáculo? A maneira mais fácil de resolver o problema é a opção de comportamento chamada "Prevenção de Obstáculos". Na prática, é representado por vários algoritmos.

Walk To Algorithm


Se o objetivo não for alcançado:

  • Avance para o objetivo.
  • Caso contrário: pare.

Este método é adequado se houver apenas um robô no mundo e o objetivo que ele deve alcançar. O Direct permitirá que você alcance a configuração final o mais rápido possível. Mas qual algoritmo deve ser aplicado se surgir um obstáculo na frente do alvo na frente do robô?

Um obstáculo não permite que o robô chegue ao seu destino em uma linha reta, o rover nesta situação apenas para na frente dele. Nesse caso, você também pode usar o algoritmo “Walk To”, mas ele precisa ser complementado.

Algoritmo de Bug


Na vida cotidiana, uma pessoa, quando vai de um ponto a outro ao objetivo e se depara com um obstáculo, simplesmente o ignora. Esse comportamento é chamado de "evitar obstáculos". Ele será aplicado para atingir a meta do robô. A maneira mais fácil de aplicar o algoritmo de besouro.
O algoritmo Bug é chamado por especialistas dessa maneira porque o comportamento do besouro é tomado como base - se ele vê um obstáculo, ele o ignora.

Os passos que o robô dá ao se mover em direção ao alvo (inclusive ao andar em torno de um obstáculo) são chamados de trajetória.



O algoritmo de bug serviu de base para os conceitos usados ​​na construção de rotas de um tipo mais complexo. Estes incluem:

Conceito de trajectória. Esta é uma sequência simples de movimentos do robô, que ele realiza para atingir o objetivo final. O algoritmo do besouro também é um "Planejador de trajetória". Tendo recebido as coordenadas dos pontos em que o robô e seu alvo estão localizados, o algoritmo desenvolve uma trajetória de movimento apropriada.

Conceito de política . Se usar o algoritmo de besouro, certas instruções de movimento são transmitidas ao robô, então essa maneira de construir a rota é chamada de “Política de Gerenciamento”.

Conceito heurístico. Este é o nome da regra usada para informar o robô sobre o próximo estágio do algoritmo. Nessa situação, a heurística é a linha pela qual o objeto se move. Ao criar um caminho, você precisa determinar corretamente a heurística. Se isso for feito incorretamente, a rota construída ficará inoperante.

No entanto, esse algoritmo limita o desenvolvedor, porque com sua ajuda será possível construir uma rota com tamanho limitado. Ao usar esse algoritmo para construir um caminho, é necessário que todos os obstáculos tenham a forma de um polígono convexo.

O algoritmo Bug também tem limitações:

  • os obstáculos devem estar a uma certa distância um do outro, é impossível que eles tenham um terreno comum;
  • os limites dos obstáculos são curvas fechadas, embora devam ser tais que a linha reta ao longo da qual o robô se move intercepte cada um deles por um número limitado de vezes;
  • um robô é um ponto desproporcionalmente pequeno, para que possa se mover entre obstáculos, independentemente da passagem entre eles.

Algumas dessas limitações podem ser superadas usando o algoritmo avançado DH-Bug. Sua característica é que, com sua ajuda, o robô será capaz de lidar com obstáculos em movimento. Além disso, esse algoritmo consiste em duas camadas. O primeiro é consultivo. Ele permite que você pré-avalie a rota sem usar informações adicionais. A segunda camada é adaptável. Graças a ele, o robô responde oportunamente aos obstáculos que não foram estabelecidos no programa inicialmente.

Algoritmo CBUG


O algoritmo CBUG é uma versão da construção de rotas de maneira a levar em consideração todos os detalhes. Durante o seu desenvolvimento, os especialistas levaram em conta o tamanho do robô e também resolveram problemas relacionados à otimização do caminho criado. Uma característica distintiva de um algoritmo aprimorado é que, para gerar uma rota, é necessário que o ponto de partida permaneça sempre na memória do objeto. Invariavelmente para o algoritmo CBUG, apenas que para sua aplicação é necessário ter uma quantidade fixa de memória.



Algoritmo de Dijkstra


O algoritmo usado nos gráficos foi criado por E. Dijkstroy na segunda metade do século passado. Com sua ajuda, será possível determinar o caminho mais curto de um dos vértices do gráfico para outros. Esse algoritmo termina quando o robô visita todos os picos. Se aqueles que ele ainda não visitou montam, um pico com uma marca mínima é selecionado.

As vantagens do algoritmo Deister incluem:

  • prestando atenção ao comprimento do caminho e seu custo;
  • nós são atualizados se um mais ideal for encontrado.

A desvantagem desse método de construção de uma rota é que ela é adequada apenas para gráficos em que não há arestas de peso negativo. É inconveniente que ele esteja mal orientado ao pesquisar em largura.

Algoritmo de Bellman-Ford


Mas muitas vezes surgem situações em que é necessário construir uma rota em que haja costelas com peso negativo. O algoritmo Bellman-Ford ajudará a resolver esse problema. Se, como resultado, a soma dos pesos das arestas do caminho final tiver um valor negativo, será chamado de ciclo negativo.

Algoritmo de Johnson


Este algoritmo foi introduzido pelo DB Johnson, a fim de identificar todas as rotas mais curtas de um pico para outro. Nesse caso, o método pode ser usado para arestas com pesos positivos e negativos. A única desvantagem do algoritmo é que não há ciclos negativos.

Algoritmo A *


Para encontrar a melhor maneira de usar gráficos, você precisa aplicar o algoritmo A *. Ele permite que você determine a melhor rota do robô para o alvo pela primeira partida no gráfico. A base desse algoritmo é a fórmula heurística, que é a seguinte:

f(n)=g(n)+h(n).
f(n) - , n.
g(n) - n .
h(n) - .


Esse algoritmo permite encontrar o caminho mais curto para a meta até que h (n) obtenha o valor máximo permitido. Uma característica do algoritmo A * é a sua flexibilidade. Na maioria das vezes, o estado é a célula ou a localização do robô. Mas também pode ser velocidade ou orientação.

Ao mesmo tempo, os estados vizinhos variam de acordo com o caso específico.

A flexibilidade do algoritmo também se manifesta no fato de que o objetivo que o robô precisa alcançar pode consistir em várias posições ao mesmo tempo. Em tal situação, a aproximação heurística h (n) deve ser válida imediatamente para todos os propósitos disponíveis.

A eficácia do algoritmo A * depende do expoente h (n). Quanto melhor a qualidade da aproximação heurística, maior a eficiência. Além disso, a quantidade de memória livre e o tempo do processador afetam a operação do algoritmo.

Algoritmo de rastreamento de ondas


Além disso, um algoritmo de onda é frequentemente usado para desenhar uma rota em um gráfico. Ao construir um caminho dessa maneira, é utilizado o método de pesquisa da primeira largura.

O próprio algoritmo inclui as seguintes etapas:

  1. inicialização
  2. construção de ondas;
  3. recuperação de rota.

No estágio inicial, a imagem de muitas células é criada, cada uma das quais se torna aceitável ou intransitável para o robô.

O robô, movendo-se de uma célula para outra, determina sequencialmente se é possível passá-lo e se ele não o marcou antes.

Depois disso, o caminho mais curto da célula inicial até a final é criado pela força bruta, cuja realização é o objetivo do rover.



Algoritmo de espaço discreto


  1. O espaço de configuração tem um tamanho constante em todas as dimensões.
  2. Discrete todas as medições para que elas tenham um número constante de células.
  3. Todas as células localizadas no espaço de configuração dentro do obstáculo devem ser marcadas como intransitáveis.
  4. Como resultado, todas as células passáveis ​​se transformaram em nós.
  5. Cada nó se conecta a todos os vizinhos no gráfico.

Localizador de Caminho Aleatório


Os aspectos mais difíceis ao planejar uma rota são calcular o espaço de configuração e determinar o caminho mais conveniente ao passar por esse espaço. Graças aos roteiros, será possível resolver esses problemas. A essência do método é dividir o espaço em quadrados idênticos, conectando todos os vértices mais próximos. Iterar sobre todos os caminhos. Classifique todos os caminhos para encontrar o caminho com o menor valor.

Algoritmo probabilístico de mapas de estradas


  • 1. Crie um gráfico vazio G.
  • 2. Adicione ao gráfico G os nós do robô e seu objetivo final.
  • 3. Para o enésimo número de integrações:
    1. Encontre uma amostra aleatória uniforme do espaço de configuração e dê o nome R.
    2. Se o robô estiver em conflito com a configuração R, você poderá continuar.
    3. Caso contrário: adicione R à coluna G.
  • 4. Identifique todos os nós no gráfico que estão localizados nos pontos d e R.
  • 5. Para todos os N nós que se encaixam neste parâmetro:




Explorando Rapidamente o Algoritmo de Árvores Aleatórias


Às vezes, você precisa criar um caminho sem aplicar consultas de planejamento anteriores. Em tais situações, você deve usar o seguinte método:

  1. Crie uma árvore T. vazia
  2. Adicione à T a configuração inicial do robô.
  3. Até que a meta seja alcançada:
    1. Busca para o nó R.
    2. Defina em T o nó localizado mais próximo de R. Dê a ele o nome K.
    3. Mova o robô de K para R até que a seguinte condição seja atendida:
      1. No caso de uma colisão, prossiga para a definição de uma amostra aleatória.
      2. Caso contrário: adicione um novo nó a T nesta configuração.
      3. Se a distância máxima entre d e K for alcançada, comece a trabalhar na amostragem aleatória novamente.
  4. A solução é obtida se o nó da cadeia estiver localizado dentro da distância d de qualquer nó T.



Conclusão


Para nós, é ideal separar a questão da construção de rotas em global e local. Uma rota global é uma lista de pontos de destino para ignorar o campo ou o objetivo de retornar à base. Uma rota local começa quando sensores ultrassônicos ou um para-choque detectam um obstáculo.

Como em nossas especificidades todos os obstáculos são convexos, usamos o algoritmo BUG mais simples e ainda mais simples. Um certo método de navegação "infantil". Quando um ultrassom detecta um obstáculo, o veículo espacial gira no sentido horário 90 graus, passa 1m e gira 90 no sentido anti-horário. Se um obstáculo for detectado pelo pára-choques, antes de virar o robô 0,5 metros para trás.

Planos


Durante o início do projeto, no verão de 2018. Um grande número de eventos aconteceu. Estamos preparando um post sobre o desenvolvimento do nosso projeto. Obrigado pela atenção!

Referências


Source: https://habr.com/ru/post/pt426693/


All Articles