Seguimento de caminhos para robôs: roteiro de aprendizagem
Você pode fornecer a um robô uma lista de pontos de passagem e fazê-lo percorrê-los, além de dizer em metros quão bem ele os percorreu.
Planejamento e seguimento são problemas diferentes, e a maior parte do material de robótica ensina apenas o primeiro. O A* fornece uma rota; nada nela diz o que as rodas devem fazer. Esta trilha é o degrau que falta — tudo entre uma lista de pontos de passagem e um robô que realmente os percorre.
Siga os nós em ordem. Cada um pressupõe o anterior, e pular qualquer um produz um robô que vagueia por um motivo que você não consegue isolar.
Antes de começar
Você precisa de um robô com acionamento por diferencial que já consiga comandar — dois motores, um driver e um laço que executa em ritmo constante. A trilha de controle de motores cobre tudo isso e esta trilha espera que ela seja concluída primeiro. Não é preciso conhecer teoria de controle; pure pursuit é geometria, não PID.
O que você será capaz de fazer
- Converter as contagens dos encoders das rodas em uma pose e dizer quanto essa pose deriva por metro percorrido no seu piso.
- Fundir um giroscópio com uma referência absoluta para obter um rumo que não se perca ao longo de uma missão.
- Implementar pure pursuit a partir da fórmula de curvatura em cerca de uma dúzia de linhas e explicar cada uma delas.
- Escolher a distância de antecipação pelo atraso de controle medido no seu robô, em vez de por tentativa e erro, e adaptá-la à velocidade.
- Medir o erro transversal contra uma referência verdadeira e informar o RMS, o pior caso e onde o erro se concentra no caminho.
- Explicar por que o mesmo controlador produz um erro quatorze vezes maior com uma leitura bruta de GPS e corrigir isso sem mudar o controlador.
Onde as pessoas costumam travar
Ajustar o controlador quando o problema é a estimativa. Se o robô acredita que está no caminho, informa erro zero e entra com confiança em uma sebe. Meça contra uma referência externa antes de mexer em um ganho — uma trena serve.
Confiar em uma simulação sem atraso. Um pure pursuit puramente cinemático melhora conforme a antecipação diminui, então um modelo sem atraso recomenda a única configuração que oscila no equipamento real. Inclua uma constante de tempo da direção do robô e um atraso de leitura dos sensores em qualquer modelo usado para ajuste.
Uma busca global pelo ponto mais próximo. Essa é a implementação óbvia, e ela falha silenciosamente em qualquer caminho que retorna sobre si mesmo, associando o robô a um segmento percorido há um minuto. Acompanhe o comprimento do arco, pesquise uma janela ao redor dele e nunca permita que o progresso retroceda.
Resolver um empate no vértice pelo segmento de entrada. Após uma curva, os dois segmentos adjacentes são projetados no mesmo ponto e à mesma distância. Se você mantiver o segmento errado, um controlador baseado no rumo e no erro lateral verá aproximadamente zero de ambos enquanto o robô sai direto do caminho. É o bug mais discreto desta página.
Implemente-o como o rover de pontos de passagem com GPS, que segue exatamente esta sequência — primeiro em ambiente interno com encoders, depois ao ar livre com GPS e odometria fundidos.
O que você precisa
| Item | Por que esta trilha precisa dele | Observações |
|---|---|---|
| Encoders nas duas rodas | A estimativa de pose consumida por todo o restante | Não é opcional aqui — esta trilha trata de saber onde você está |
| Um giroscópio ou uma IMU | As rodas não conseguem medir uma rotação causada por patinação | MPU-6050 basta |
| Um laço com ritmo constante | Tanto o estimador quanto o controlador integram dados ao longo do tempo | Intervalo fixo ou passagem do tempo real decorrido |
| Uma referência para medir | Não é possível ajustar o seguimento sem uma referência verdadeira | Uma linha de giz e uma trena valem mais que qualquer quantidade de telemetria |
| Um módulo GPS (somente para a parte externa) | Os dois últimos nós | Em ambiente interno, ele nem obtém posição |
Por que a trilha segue esta ordem
Esta trilha é incomum porque os cinco primeiros nós não tratam de direção. Eles constroem a estimativa de pose, porque um controlador de caminho operando sobre uma pose errada falha de um modo que parece exatamente um controlador mal ajustado — o robô informa erro zero enquanto entra em uma sebe. Ajustar corretamente a estimativa primeiro significa que, ao finalmente mexer em um ganho, você poderá acreditar no que medir.
Encoders, depois odometria e, por fim, patinação, nessa ordem. Cada etapa corrige o otimismo da anterior. Encoders informam que a roda girou; a odometria transforma dois movimentos de roda em uma pose; a patinação informa quanto dessa pose é ficção e, especificamente, que o erro sistemático cresce linearmente com a distância, enquanto o erro aleatório cresce apenas com sua raiz quadrada.
A IMU entra antes do controlador porque o rumo é a parte da pose mais importante para um seguidor de caminho e a que as rodas determinam pior. Um giro no lugar raspa os dois pneus por definição, então a manobra que mais altera o rumo é aquela que a odometria pior mede. Um filtro complementar combina a boa taxa de curto prazo de um giroscópio com a boa média de longo prazo de uma referência absoluta, produzindo um rumo que não se perde.
Perfis de movimento vêm antes de pure pursuit porque um seguidor de caminho comanda velocidade continuamente, e um comando de velocidade em degrau produz um robô que avança aos trancos e patina — reintroduzindo exatamente o erro de odometria que você passou três nós controlando.
Pure pursuit, depois o laboratório e, por fim, o erro transversal. O controlador tem cerca de uma dúzia de linhas e sua geometria é fácil; o difícil é escolher a antecipação e avaliar o resultado. O laboratório permite observar a escolha da antecipação, e o nó de erro transversal transforma “dirige bem” em um número com RMS e pior caso.
GPS por último, e somente por último. Ele não muda nada no controlador, mas muda tudo na estimativa. Fazê-lo por último garante que, quando o erro ficar quatorze vezes maior, você já sabe com certeza que o controlador não é o motivo.
Pontos de verificação: como saber que uma etapa foi dominada
| Etapa | Verificação | Como é um resultado aprovado |
|---|---|---|
| Encoders | Empurre o robô 2 m à mão ao longo de uma linha de giz | As contagens convertem para 2000 mm com erro abaixo de 2%, nas duas rodas |
| Odometria | Percorra um quadrado de 1 m e volte ao início | A pose informada fecha com alguns centímetros de erro, e você pode informar o erro por metro |
| Patinação | Faça um giro no lugar e compare o rumo do giroscópio com o estimado pela odometria | Eles discordam, e a diferença mostra o giro perdido na patinação |
| Fusão da IMU | Gire o robô lentamente 360° e depois deixe-o parado por dois minutos | O rumo retorna ao valor inicial e não deriva enquanto o robô está parado |
| Perfis de movimento | Comande uma mudança de velocidade em degrau e depois uma com perfil | O movimento com perfil não provoca chiado nos pneus; o movimento em degrau provoca |
| Pure pursuit | Siga uma linha reta começando 0,5 m ao lado | A trajetória converge sem sobrepasso, e você pode informar a antecipação em metros |
| Ajuste da antecipação | Reduza deliberadamente a antecipação à metade | O robô oscila — agora você conhece o modo de falha e por que um simulador sem atraso o oculta |
| Erro transversal | Percorra uma figura de oito e registre o erro contra a referência verdadeira | Você pode informar o RMS e o pior erro, além de dizer onde o pior ocorre no caminho |
| GPS | Registre uma leitura estática por dez minutos sem se mover | Você vê a variação da posição, em metros, que o controlador tentaria perseguir |
Onde esta trilha termina
Esta trilha recebe um caminho dado e o percorre. Ela não produz o caminho — isso é planejamento de caminhos e mapeamento, e os dois juntos formam a pilha completa de navegação.
Ela também termina antes de três assuntos. Desvio de obstáculos durante o seguimento — reagir a algo que surge em um caminho já escolhido — exige um planejador local executando sob o seguidor, e esse é um problema realmente mais difícil do que cada metade isolada. Direção Ackermann e omnidirecional alteram a geometria: pure pursuit se adapta facilmente a um robô semelhante a um carro, mas a etapa de converter curvatura em velocidade das rodas aqui é especificamente de acionamento por diferencial — para uma base capaz de deslocamento lateral, comece em acionamento holonômico e observe que um robô holonômico pode superar qualquer controlador aqui, pois corrige a posição sem alterar o rumo. E GPS RTK, que faz a leitura da posição ao ar livre passar de metros para centímetros, é o que torna o seguimento de caminhos ao ar livre realmente preciso — vale saber que ele existe antes de concluir que a navegação ao ar livre é apenas imprecisa.
Roteiro de aprendizagem
O caminho
Siga os nós em ordem — cada um desbloqueia o próximo depois que você o conclui. Seu progresso fica salvo neste dispositivo.
0 / 11 concluídos
Dúvidas comuns
Perguntas frequentes
Qual é a diferença entre planejamento de caminhos e seguimento de caminhos?
O planejamento produz uma rota; o seguimento faz as rodas percorrerem essa rota. O A* fornece uma lista de pontos de passagem e não diz absolutamente nada sobre direção, velocidade ou o que fazer quando o robô acaba meio metro à esquerda de onde pretendia estar. O seguimento de caminhos é essa metade que falta: dadas a posição em que o robô acredita estar e para onde o caminho vai, decidir o que as rodas devem fazer neste instante. A maior parte do material de robótica ensina planejamento com profundidade e quase nada sobre seguimento, e por isso um robô com um plano correto tão frequentemente vagueia.
Como escolho a distância de antecipação do pure pursuit?
Pelo atraso de controle medido no seu robô, não por tentativa e erro. A antecipação precisa ser longa o suficiente para que o robô consiga chegar fisicamente, dado o tempo que a direção do robô leva para responder — se for curta demais, há oscilação; se for longa demais, os cantos são cortados. Meça o intervalo entre comandar uma curva e o robô realmente girar, multiplique pela velocidade e comece por esse valor. Depois, adapte-a à velocidade: o mesmo robô precisa de uma antecipação maior a 1 m/s do que a 0,2 m/s, porque o atraso corresponde a uma distância maior.
Por que meu seguidor de caminho funciona na simulação, mas oscila no robô?
Quase certamente porque a simulação não tem atraso. Um modelo puramente cinemático de pure pursuit melhora continuamente conforme a antecipação diminui, portanto ajustá-lo por esse modelo recomenda a menor antecipação possível — exatamente a configuração que oscila no robô real. Qualquer modelo usado para ajuste precisa incluir uma constante de tempo da direção do robô e um atraso de leitura dos sensores; caso contrário, ele ensina com confiança o oposto do que o robô real precisa.
Pure pursuit ou Stanley — qual controlador de caminho devo usar?
Use pure pursuit em robôs com acionamento por diferencial e caminhos suaves; use Stanley quando a precisão no eixo dianteiro importar mais que a suavidade. O pure pursuit orienta o robô em direção a um ponto à frente no caminho, o que o torna tolerante e naturalmente suave, ao custo de cortar cantos. O Stanley combina diretamente o erro de rumo e o erro transversal, o que permite um seguimento mais preciso, mas é menos tolerante a uma pose ruidosa. Para um pequeno robô interno, o pure pursuit quase sempre é a primeira escolha certa.
Por que o seguimento do meu robô é muito pior ao ar livre com GPS?
Porque o controlador está correto; a estimativa de pose não está. Uma leitura de GPS de consumo tem precisão de alguns metros e é atualizada a 1–10 Hz, enquanto a odometria das rodas é precisa em centímetros e é atualizada na velocidade da leitura. Se você fornece ao mesmo controlador uma leitura que salta dois metros entre atualizações, ele persegue os saltos. A solução não está no controlador — está em fundir o GPS com a odometria e uma fonte de rumo para que a pose vista pelo controlador seja suave, e deixar o GPS corrigir a deriva lenta em vez de conduzir a malha rápida.
Por que meu robô sai do caminho logo após uma curva?
Este é o empate no vértice, o bug mais discreto de toda a trilha. Logo após uma curva, os dois segmentos adjacentes do caminho são projetados no mesmo ponto e à mesma distância, então uma busca ingênua pelo ponto mais próximo pode associar o robô a um segmento que ele já terminou. Um controlador baseado no rumo e no erro lateral vê aproximadamente zero de ambos e segue em linha reta para fora do caminho, informando que o seguimento está perfeito o tempo todo. Acompanhe o comprimento do arco ao longo do caminho, pesquise apenas uma janela ao redor da última posição e nunca permita que o progresso retroceda.