Simulador interativoIniciante

Simulador de robô seguidor de linha no navegador

Construa um robô seguidor de linha virtual, visualize seus sensores e ajuste um controlador PID com um simulador de robótica interativo baseado no navegador.

Categoria
Arduino
Tempo
45–90 min
Plataforma
Navegador · Arduino
Esquema técnico de Simulador de robô seguidor de linha no navegadorSENSOR ERROR

01 / Comece aqui

Introdução

Um robô seguidor de linha transforma leituras de sensores em correções de direção. Este projeto permite desenhar uma pista, alterar a geometria do robô e dos sensores e observar um controlador PID determinístico responder em tempo real. Use-o para conectar a teoria de controle ao comportamento que você veria em um robô Arduino em uma pista física.

Live lab / Deterministic 60 Hz model

Line follower simulator

Run the starter track, tune the controller, or pause and draw a course of your own.

Browser native
A top-down line-follower robot simulator. Use the controls below to run the simulation or read the complete algorithm and theory after this lab.

Bright nodes are sensors currently detecting the track. The lavender heading line shows steering output. Drawing pauses the robot automatically.

Simulation

Paused. Press Start or Step to begin.

Robot geometry
PID calibration
Elapsed
0.0 s
Distance
0 units
Line error
0.000
Steering
0.000
Track contact
100%

Keyboard: focus the course, then use Space to run/pause, N to step, R to reset, D to draw, and F for full screen.

Controles

Use as predefinições de pista para estabelecer uma linha de base, ou pause a execução e desenhe diretamente no percurso. Os controles de velocidade do robô determinam quanto o chassi avança por atualização. A quantidade e o espaçamento dos sensores alteram o campo de visão. Os controles de ganho P, I e D mudam a resposta de direção; Passo avança uma atualização determinística enquanto a execução está pausada.

Comece com velocidade moderada, cinco sensores e os ganhos padrão. Altere uma variável por vez e compare as métricas de erro, tempo de volta e tempo na pista.

Teoria

A barra de sensores amostra a refletância na frente do robô. Cada sensor ativo contribui com sua posição relativa com sinal para uma média ponderada. O centro da barra corresponde a erro zero; leituras à esquerda ou à direita do centro produzem erro negativo ou positivo.

Gráfico de barras de cinco sensores de refletância na barra do robô. A linha fica à direita do centro, portanto os sensores do lado direito fazem as leituras mais fortes. Uma linha tracejada marca o centro da barra (erro zero) e uma linha sólida marca a posição ponderada pela refletância em mais 0,69, o erro de correção calculado.
A média ponderada das leituras dos sensores fornece uma posição ponderada da linha: aqui a linha fica à direita do centro, portanto o erro é positivo e o controlador corrige a direção até zerá-lo. Baixar SVG

O controlador combina três termos:

$$u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}$$

A correção $u(t)$ acelera uma roda e desacelera a outra. O controle proporcional reage ao desvio atual, o integral corrige o viés persistente e o derivativo amortece mudanças rápidas.

Algoritmo

  1. Amostre todos os sensores em intervalos fixos.
  2. Calcule uma posição ponderada da linha e normalize-a em torno do centro.
  3. Reutilize a última direção observada da linha quando todos os sensores perderem a pista.
  4. Atualize os termos integral e derivativo usando o mesmo passo de tempo fixo.
  5. Limite a correção, calcule os comandos dos motores esquerdo e direito e integre a pose do robô.

Ajuste o ganho proporcional até o robô acompanhar curvas suaves, aumente o ganho derivativo até a oscilação se estabilizar e introduza apenas ganho integral suficiente para remover um erro constante e reproduzível.

Código-fonte

O simulador no navegador e um microcontrolador usam a mesma forma de controle. Um laço compacto no estilo do Arduino parece assim:

float integral = 0.0f;
float previousError = 0.0f;

void controlStep(float dt) {
  float error = readWeightedLinePosition();
  integral = constrain(integral + error * dt, -2.0f, 2.0f);
  float derivative = (error - previousError) / dt;
  float correction = kp * error + ki * integral + kd * derivative;

  setMotorSpeeds(baseSpeed - correction, baseSpeed + correction);
  previousError = error;
}

Mantenha o intervalo real de controle estável. Um atraso variável altera os termos derivativo e integral mesmo quando os ganhos não mudam.

Premissas e diferenças do hardware

Este é um modelo didático, não uma réplica do hardware. A pista é uma máscara binária plana e de alto contraste, sem variação de luz ambiente, portanto a barra de sensores vê preto e branco perfeitos — em fita real, iluminação da sala, brilho da superfície e altura dos sensores alteram as leituras e você precisa calibrar seguindo os passos das notas de fiação. A temporização é ideal: o controlador roda em intervalos fixos, sem variação do intervalo de execução causada por delay(), enquanto um laço físico de Arduino varia conforme outras tarefas, e essa variação altera a resposta do PID. O chassi é cinemático: as rodas nunca derrapam, os motores respondem instantaneamente e a bateria nunca perde tensão. Considere os ganhos encontrados aqui um ponto de partida próximo e reajuste no robô real depois da calibração.

Diagrama do circuito

Conecte as saídas dos sensores a entradas compatíveis com sinais analógicos, compartilhe o terra entre todos os módulos e acione os motores por uma ponte H, nunca diretamente pelos pinos do controlador.

Diagrama de blocos da fiação do robô seguidor de linha. Uma matriz de sensores IR alimenta entradas analógicas de um Arduino; o Arduino envia sinais de PWM e direção a um driver de motor; e o driver alimenta os motores. Uma bateria e um regulador separados alimentam o Arduino.
O sinal flui da esquerda para a direita; a corrente dos motores vem de uma alimentação regulada separada, nunca pelo regulador lógico do controlador. Baixar SVG

Verifique a tensão nominal da alimentação dos motores e adicione desacoplamento local próximo ao controlador e ao driver. Nunca encaminhe a corrente dos motores pelo regulador lógico da placa de desenvolvimento.

Experimentos guiados

Cada um isola uma variável — o que é especialmente difícil no hardware real, onde tudo muda de uma vez.

1. Encontre o ganho crítico e depois divida-o por dois

Defina os ganhos integral e derivativo como zero e aumente o ganho proporcional até o robô oscilar de forma constante em um trecho reto — serpenteando com amplitude constante, em vez de crescer ou diminuir. Divida esse valor por dois.

Agora você tem um Kp inicial derivado de uma medição, e não de um palpite, e ele estará próximo. Aumente o ganho derivativo a partir daí até a oscilação ser amortecida.

2. Prove que os ganhos dependem da velocidade

Ajuste o robô até que ele acompanhe corretamente a uma velocidade base baixa. Agora aumente a velocidade pela metade e execute os mesmos ganhos sem mudar mais nada.

Ele vai oscilar, cortar cantos ou perder a linha. Nada mudou no controlador — mas a mesma correção de direção agora produz uma mudança maior de orientação por unidade de pista, portanto o ganho efetivo aumentou com a velocidade. Todo ajuste é um ajuste em uma velocidade específica, e é por isso que um robô de competição reduz a velocidade nos cantos em vez de usar o mesmo ganho em todo o percurso.

3. Veja a quantidade de sensores mudar o que é possível

Execute a mesma pista e os mesmos ganhos com três, cinco e oito sensores.

Sensores Sinal de posição Efeito no ajuste
3 Grosseiro, essencialmente três regiões Acompanha, mas não pode ser ajustado com precisão — o erro é quantizado
5 Suficientemente suave para direção proporcional O ponto ideal usual
8 Fino Permite ganhos maiores e maior velocidade antes de oscilar

O resultado interessante é que mais sensores elevam o teto em vez de melhorar o piso. Em baixa velocidade, três sensores são suficientes. A resolução extra só começa a compensar nas velocidades em que o sinal de erro grosseiro se torna o fator limitante.

4. Quebre-o de propósito em um canto agudo

Aumente a velocidade até o robô perder a linha no canto mais fechado. Observe o que ele faz em seguida. Depois pense no que o robô real deveria fazer: seguir em frente é a pior opção, porque a linha estava se curvando para longe.

É esse o raciocínio por trás de manter o último erro quando a linha é perdida, em vez de zerá-lo — zero significa “centralizado”, o que comanda velocidade máxima em linha reta. Manter o último erro faz o robô continuar virando na direção em que já estava, que é para onde a linha foi.

O que observar

Sintoma no gráfico Causa Correção
Serpenteio constante em retas Kp alto demais ou Kd baixo demais Divida Kp e depois aumente Kd
Serpenteio que cresce Kp acima do ganho crítico Reduza-o
Cortes amplos e lentos nos cantos Velocidade alta demais para o avanço dos sensores Diminua a velocidade ou mova a matriz para a frente
Esforço de controle irregular Kd agindo sobre uma posição ruidosa Filtre ou reduza Kd
Acompanha sempre um pouco fora do centro Calibração desigual por sensor Normalize cada canal em relação à sua própria faixa
Perde a linha e segue em frente Erro zerado ao perder a linha Mantenha o último erro

Aplicação em hardware

Neste laboratório Um robô real
Laço perfeitamente periódico Varia, a menos que você meça dt; um delay() anula completamente o Kd
Calibração ideal Precisa ser refeita a cada execução, na superfície real
Pista binária de alto contraste Fita brilhante, poeira e infravermelho ambiente reduzem o contraste
Sem derrapagem das rodas Derrapagem em alta velocidade e duas zonas mortas de motor diferentes
Motores respondem instantaneamente As duas rodas começam a girar em ciclos de trabalho diferentes
Bateria constante A tensão cai, portanto o mesmo ciclo de trabalho produz menos velocidade conforme a execução avança

Os ganhos encontrados aqui são transferidos como um ponto de partida próximo, e o procedimento de ajuste é totalmente transferido. Espere reajustar na sua própria fita — e espere que a maior melhoria individual no hardware venha não dos ganhos, mas da frequência do controlador, pois uma primeira construção costuma rodar a 20–50 Hz e pode chegar a várias centenas de Hz apenas removendo chamadas bloqueantes. A construção completa está em construir um robô seguidor de linha.

Lista de verificação de hardware

Componentes

  • Arduino Uno ou controlador compatível
  • Três a nove sensores de refletância IR
  • Dois motorredutores CC e rodas
  • Driver de motor com ponte H dupla
  • Bateria, chassi e rodízio

Explore o grafo

Onde este simulador é usado

Os projetos, caminhos de aprendizagem e tutoriais que se apoiam neste laboratório.

Continue construindo

Baixar recursos

Use estas referências da página enquanto trabalha no projeto. Pacotes de projeto para download serão adicionados somente depois que seu código-fonte e sua versão forem publicados.

Dúvidas comuns

Perguntas frequentes

Por que o robô oscila ao redor da linha?

A oscilação normalmente significa que o ganho proporcional está alto demais, o amortecimento derivativo está baixo demais ou o robô está se movendo mais rápido do que a taxa de atualização dos sensores consegue sustentar. Reduza a velocidade primeiro e depois ajuste P e D. Em um robô físico, um delay() longo no controlador é uma causa oculta frequente: o tempo morto que ele acrescenta torna o termo derivativo ineficaz, por mais alto que você o defina.

Quantos sensores um robô seguidor de linha deve usar?

Cinco sensores são um bom ponto de partida — revelam a direção e a magnitude do erro e mantêm o cálculo da posição ponderada da linha fácil de inspecionar. Três sensores funcionam em velocidades baixas, enquanto robôs de competição costumam usar oito para obter uma resolução de posição mais fina em alta velocidade.

Por que meu robô seguidor de linha perde a linha em curvas fechadas?

O chassi está se movendo mais rápido do que a barra de sensores consegue resolver a curva, portanto a linha deixa a matriz antes de o controlador reagir. Reduza a velocidade, alargue a barra de sensores ou aumente a taxa de atualização. Um bom controlador também reutiliza a última direção conhecida da linha quando todos os sensores perdem a pista, para virar de volta em direção à linha em vez de seguir reto para fora.

Devo usar sensores IR analógicos ou digitais para seguir linha?

Sensores de refletância analógicos informam um valor contínuo, o que permite calcular uma posição ponderada da linha de forma suave e dirigir proporcionalmente. Sensores digitais só informam ligado ou desligado depois de um limiar interno, o que é mais simples, mas fornece uma informação de posição mais grosseira. Este simulador modela a abordagem analógica com posição ponderada da linha.

Como calibro a matriz de sensores IR?

Antes de uma execução, passe os sensores pela linha e pelo fundo e registre a leitura mínima e máxima de cada sensor; depois normalize as leituras ao vivo em relação a essa faixa. A calibração importa porque a altura dos sensores, a refletividade da superfície e a luz ambiente alteram os valores brutos, e uma matriz sem calibração enviesará a posição ponderada da linha.

Quais são bons valores iniciais de PID para um robô seguidor de linha com Arduino?

Trate os ganhos publicados como ponto de partida, não como resposta para copiar e colar: a resposta dos motores, a altura dos sensores, a tensão da bateria, a refletividade da superfície e a temporização do controlador mudam os ganhos de que um robô físico precisa. Comece apenas com o proporcional, aumente-o até o robô acompanhar curvas suaves com uma leve oscilação e então aumente o ganho derivativo para remover a oscilação; use um ganho integral muito pequeno somente se restar um erro constante e reproduzível.

Leitura complementar

Referências

Fontes confiáveis para ir além do modelo educacional limitado deste simulador.