Construa um rover GPS de pontos de passagem que dirige sozinho
Um rover que percorre sozinho uma lista de pontos de passagem GPS em um campo, mantendo a trajetória dentro de um metro e parando por conta própria se sair da cerca geográfica.
O que você está construindo
Um robô ao qual você entrega uma lista de coordenadas, coloca na grama e deixa.
Todos os outros robôs móveis deste site reagem ao que está diretamente à sua frente — uma linha, uma parede, um obstáculo, uma borda. Este executa um plano, em um mundo sem referências, usando um sensor que mente para ele algumas vezes por minuto. Essa combinação é o que faz dele a construção móvel mais difícil aqui e aquela que mais ensina.
As três coisas que decidem tudo
O seguidor é a parte fácil. O pure pursuit tem doze linhas e um único ajuste. Com uma estimativa de posição perfeita, ele mantém 0,09 m de erro RMS no percurso do laboratório.
A estimativa de posição é o projeto inteiro. O mesmo controlador, com uma correção GPS de 1 Hz e ruído na escala de metros, mantém 1,25 m — quatorze vezes pior — e precisa de quatro vezes e meia mais correção de esterçamento para fazer isso. O controlador contribui com menos de um décimo do erro final.
Portanto, a ordem de construção é: seguidor em ambiente interno, estimativa em ambientes externos. Prove o esterçamento onde a posição é quase exata e depois vá enfrentar o sensor. Fazer as duas coisas ao mesmo tempo produz um robô que vagueia por motivos que você não consegue separar.
Lista de materiais
| Peça | Qtd. | Custo aproximado | Observações |
|---|---|---|---|
| Arduino Uno ou Mega | 1 | US$ 5–12 | Vale a pena um Mega: quatro pinos de interrupção para decodificação completa ×4 dos encoders, mais UARTs extras |
| Módulo GPS (NEO-6M) | 1 | US$ 8–12 | Um NEO-M8N é a melhor melhoria aqui — multiconstelação e geometria melhor |
| MPU-6050 | 1 | US$ 2 | Orientação entre as correções. Sem ele, o rover não sabe para onde está voltado |
| Motores N20 com encoder | 2 | US$ 16 | Encoders não são opcionais nesta construção |
| TB6612FNG | 1 | US$ 3 | |
| Chassi 2WD | 1 | US$ 10–20 | Rodas maiores ajudam em ambientes externos; a grama é hostil a uma roda de 65 mm |
| Pacote de bateria | 1 | US$ 10 | 2×18650 protegidas ou 3S com regulador |
| Suporte alto para antena | 1 | US$ 2 | A antena plana precisa de visão direta do céu — metal acima dela custa satélites |
Total: aproximadamente US$ 55–80.
A peça que mais muda o projeto é o receptor. Um NEO-6M funciona e é o que a maioria dos tutoriais pressupõe; um NEO-M8N vê GPS, GLONASS e Galileo, o que melhora a geometria dos satélites e, portanto, o HDOP. Perto de prédios e árvores — onde um rover realmente dirige — isso é uma melhoria real maior do que a especificação de precisão sugere.
Não pule os encoders para economizar US$ 12. Este projeto inteiro é navegação por estimativa corrigida por correções ocasionais; sem encoders, não há nada sobre o qual fazer a estimativa, e o rover simplesmente persegue o ruído do GPS.
Ordem de construção
1 — Ajuste o seguidor no simulador. Passe uma hora no laboratório de seguimento de trajetória na velocidade que pretende dirigir. Encontre o ponto de antecipação em que a curva de erro chega ao mínimo; observe que ele muda quando você altera a velocidade.
2 — Construa o conjunto motriz e faça a odometria funcionar. Encoders na odometria de direção diferencial, depois dirija um quadrado de 2 m e veja quanto se afasta da partida. Esse número é seu orçamento em ambiente interno.
3 — Integre uma orientação confiável. Um giroscópio na taxa do laço, corrigido por uma referência absoluta. O erro de orientação é o termo que ambos os controladores ponderam mais, e é a primeira coisa que a odometria perde — o filtro complementar que estabiliza um robô autobalanceador faz o mesmo trabalho aqui.
4 — Siga um percurso com fita em ambiente interno. Sem GPS. Cole um caminho no piso, execute o pure pursuit na estimativa dos encoders e meça o erro transversal com uma régua em dez pontos. Se não ficar abaixo de 10 cm em ambiente interno, não ficará abaixo de um metro em ambientes externos.
5 — Adicione o receptor e não o conecte ainda ao controlador. Registre correções por dez minutos enquanto o rover fica parado e plote-as. Você verá o ruído, o desvio ocasional e como o HDOP acompanha os dois. Esse gráfico vale mais do que qualquer número de uma folha de dados.
6 — Integre, não siga diretamente. Faça a navegação por estimativa na taxa do laço; puxe a estimativa suavemente em direção a cada boa correção. A aritmética e a filtragem estão aqui. Rejeite qualquer coisa com status void ou HDOP acima de cerca de 2,5.
7 — Defina a cerca e então vá para fora. Distância máxima desde a partida, tempo limite de missão e corte físico. Depois faça uma missão curta, na grama, com você andando ao lado.
Observações dos componentes que importam
Monte a antena no topo, voltada para o céu e longe de tudo. Uma antena plana cerâmica sob uma placa do chassi perde satélites, e satélites perdidos significam geometria ruim, não ausência de correção — uma resposta errada com confiança em vez de uma falha evidente.
Use rodas maiores do que seu instinto interno sugere. Grama, cascalho e a borda de um gramado são problemas de diâmetro de roda. Eles também alteram o fator de escala da sua odometria, então recalibre na superfície em que realmente vai dirigir.
Mantenha o magnetômetro longe dos motores, ou dispense-o. A corrente dos motores produz um campo que sobrepõe o da Terra. Se não conseguir 15 cm de separação, use um giroscópio combinado com a direção de deslocamento sobre o solo e evite o problema.
Registre a missão. Uma falha em ambientes externos que você não gravou é uma falha que não pode depurar — o robô estava a 40 m e você não estava olhando a porta serial. Um cartão SD ou um registro Wi-Fi de pose, correção, HDOP e erro transversal transforma cada execução em evidência.
Espere que a primeira execução em ambientes externos termine cedo. É para isso que existe a cerca geográfica, e isso é sucesso.
Como fica um bom resultado
| Medição | Seguimento de GPS bruto | Fundido com odometria |
|---|---|---|
| Erro transversal, RMS | 3–5 m | 0,3–0,6 m |
| Erro transversal, pior caso | 8–12 m | 1,0–1,5 m |
| Atividade de esterçamento | Constante, correções grandes | Suave, ocasional |
| Tolerância de chegada ao ponto de passagem | 5 m, e até isso é otimista | 0,5–1 m |
| Variação da posição estimada com o rover parado | Nuvem de 2–4 m | N/A — a odometria o mantém parado |
A primeira coluna não é um rover mal construído; é o que uma correção de 2,5 m CEP a 1 Hz faz com um controlador que confia nela. A melhora de ordem de grandeza na segunda coluna vem do estimador, não do controlador — o mesmo código de pure pursuit, alimentado com uma pose fundida.
Antes de escrever qualquer código de navegação, faça isso uma vez: deixe o receptor parado em ambientes externos por dez minutos e registre cada correção. A nuvem que você obtém tem vários metros de diâmetro, e nada se moveu. Esse gráfico é a coisa mais útil que você pode olhar neste projeto, porque explica por que seguir correções brutas não funciona e por que a correção está antes do controlador.
Quando algo dá errado
| Sintoma | Geralmente |
|---|---|
| Faz zigue-zague em uma reta em ambientes externos, mas está bem em ambiente interno | Está seguindo correções brutas em vez de fundi-las |
| Faz zigue-zague em ambiente interno também | Antecipação curta demais para o atraso; reajuste no laboratório |
| Arredonda todos os cantos | Antecipação longa demais — o compromisso, não um erro |
| Posição confiante a dezenas de metros | Geometria ruim dos satélites; você não aplicou o limite de HDOP |
| Dirige para o lado errado a partir da parada | Não há orientação utilizável; a direção de deslocamento sobre o solo é ruído abaixo de ~1 m/s |
| Deriva continuamente para um lado | Escala da odometria ou largura entre rodas errada para esta superfície |
| Nada acontece nos primeiros dois minutos | Partida a frio do GPS. Mostre isso, não assuma a origem |
| Saiu do campo | A cerca geográfica não foi escrita antes do teste |
Seis dessas oito situações são sensoriais, não de controle — a mesma distribuição do micromouse e do robô de cobertura de ambiente, e pelo mesmo motivo: o algoritmo é a parte pequena.
Para a sequência completa na ordem, siga a rota de aprendizado de seguimento de trajetória e navegação; para a versão em ambiente interno do mesmo problema, o robô de cobertura de ambiente precisa de um plano e de nenhuma posição absoluta.
Roteiro do projeto
O caminho de construção
Siga a árvore tecnológica das peças até um robô funcionando. Cada nó é desbloqueado quando seus pré-requisitos são concluídos, e seu progresso fica salvo neste dispositivo.
0 / 20 concluídos
Componentes
- ControladorArduino UnoA placa de 8 bits que tolera erros de ligação, pela qual a maioria das pessoas começa na robótica.
- SensorMódulo GPS NEO-6MPosição absoluta em qualquer lugar ao ar livre, depois de esperar um minuto de céu aberto.
- SensorMPU-6050 IMUUm sensor de movimento de seis eixos—como um robô sente a própria inclinação, giro e aceleração.
- AtuadorMotorredutor com encoder N20Micro motorredutor de engrenagens metálicas com encoder traseiro, para o robô saber até onde foi.
- DriverDriver de motor TB6612FNGUma ponte H com MOSFET que preserva a tensão que você realmente pagou.
- ChassiChassi de robô 2WDA plataforma onde se fixam dois motores, uma rodinha livre e toda a eletrônica.
- AlimentaçãoBateria e fonte de alimentação do robôA diferença entre um robô que funciona e outro que fica reiniciando.
Tutoriais deste caminho
- Intermediário · 30 minPure pursuit: seguimento de trajetória com um único parâmetroMire um ponto à frente sobre a trajetória e percorra o arco que passa por ele. Esse é todo o algoritmo.
- Intermediário · 30 minNavegação por pontos de passagem GPS ao ar livreUma solução de GPS chega atrasada, contém ruído e não tem orientação. Veja o que fazer com cada um desses problemas.
- Intermediário · 25 minErro transversal à trajetória: como avaliar o seguimentoUma distância com sinal revela o desempenho de um controlador de trajetória e ajuda a escolher entre as duas opções.
- Iniciante · 17 min de leituraLeia encoders de quadratura para medir distância e velocidadeTransforme pulsos de encoder de quadratura em medições confiáveis do sentido de rotação, da distância e da velocidade das rodas.
- Intermediário · 20 min de leituraOdometria de acionamento diferencial a partir de encoders de rodaIntegre o movimento das rodas esquerda e direita na pose de um robô móvel e identifique e calibre a deriva.
Pratique antes de fazer a fiação
Ajuste no simulador ao vivo
O caminho de construção passa por um laboratório no navegador. Acerte o comportamento aqui e depois transfira suas configurações para o robô real.
Perguntas frequentes
Por que construir o seguidor em ambiente interno antes de adicionar GPS?
Porque, se você construir os dois ao mesmo tempo e ele vagar, não será possível saber qual metade está errada. Em ambiente interno, com encoders, a estimativa de posição é boa a alguns centímetros em um percurso com fita, então qualquer erro visto é do controlador. Ajuste o ponto de antecipação ali, meça o erro transversal com uma régua e só então apresente um sensor que é ruidoso, atrasado e ocasionalmente errado com confiança. Cada hora investida nessa ordem é devolvida duas vezes.
Quão preciso pode ser realmente um rover GPS de hobby?
Cerca de um metro de erro transversal em um bom dia, definido pelo receptor e não pelo controlador. Medido com o mesmo pure pursuit no mesmo percurso, uma estimativa de posição perfeita dá 0,09 metro de erro RMS, enquanto uma correção de 1 Hz com ruído na escala de metros dá 1,25 — então o controlador contribui com menos de um décimo do total. Se precisar de mais, a melhoria é um receptor mais rápido e multiconstelação, depois RTK, não mais ajuste.
Preciso de um magnetômetro além do giroscópio?
É preciso ter alguma referência absoluta de orientação, e há três opções. Um magnetômetro fornece isso com o robô parado, mas exige calibração de ferro duro e macio e funciona mal perto dos motores. Um giroscópio é excelente por dezenas de segundos e depois deriva. A direção de deslocamento sobre o solo medida pelo GPS é absoluta e gratuita, mas só é significativa acima de cerca de um metro por segundo. A resposta usual para um rover é usar um giroscópio para a taxa do laço, corrigido pela direção de deslocamento sobre o solo sempre que o robô estiver rápido o bastante para confiar nela — é o que esta construção faz, e evita a calibração por completo.
A que velocidade ele deve dirigir?
Mais devagar do que os motores permitem, e o simulador dirá por quê. O melhor erro transversal possível cresce com a velocidade, não importa como você ajustar: 0,05 metro a 1 m/s se torna 0,23 a 3 m/s no laboratório com uma estimativa de posição perfeita. Em ambientes externos, o receptor domina de qualquer modo, então há pouco a ganhar com velocidade e muito a perder no primeiro teste no campo. Comece a 0,5 m/s.
O que impede que ele entre em uma estrada ou lago?
Uma cerca geográfica escrita antes da primeira execução em ambientes externos: uma distância máxima desde o início da missão, verificada no topo do laço, que para os motores sem condição. Acrescente um tempo limite de missão e um corte físico ao qual você possa chegar — uma chave de batida no painel superior funciona e não precisa de conexão de rádio. São dez linhas de código, e a diferença entre um erro e um robô na água.
Posso usar um ESP32 em vez de um Uno?
Sim, e para este projeto é a melhor escolha. Você ganha uma segunda porta serial física para o GPS sem serial por software, muito mais memória para uma lista de pontos de passagem, matemática de ponto flutuante que não é dolorosa e Wi-Fi para registrar a missão de volta no notebook — a ferramenta de depuração mais útil que um robô que opera em ambientes externos pode ter. O Uno funciona; o ESP32 elimina três incômodos.