Tutorial · Intermediário · 25 min
Parar em uma borda: latência e distância de frenagem
Entenda como latência e frenagem dividem a distância disponível depois que o sensor de borda detecta a linha e qual velocidade o robô pode manter com segurança.
O orçamento está em milímetros, não em milissegundos
Um robô com um sensor voltado para baixo recebe uma informação — branco, agora — e tem uma distância fixa para agir com base nela. Uma arena de mini sumo oferece 25 mm de borda. Uma mesa oferece a distância correspondente ao deslocamento frontal do sensor. De qualquer forma, essa é uma distância, e o robô a gasta de duas maneiras muito diferentes:
overshoot = v × t_latency + v² / (2a)
O primeiro termo é consumido antes de qualquer frenagem começar. O segundo é o que o piso cobra quando a frenagem começa.
Os dois se comportam de maneiras completamente diferentes conforme a velocidade aumenta, e saber qual deles está sendo pago é a diferença entre corrigir o problema em uma tarde e reescrever o laço de controle sem necessidade.
Para onde a latência realmente vai
“Latência” não é o sensor. É tudo o que acontece entre os fótons sofrerem uma mudança e os pneus aplicarem força na direção contrária, e quase sempre é dominada por um componente que ninguém mediu:
| Etapa | Valor típico |
|---|---|
| Estabilização do emissor IR e do fototransistor | ~1 ms |
| Espera pela próxima passagem do laço | até 20 ms |
| Decisão e escrita do PWM | <1 ms |
| Inversão da corrente do motor | ~3 ms |
| Travessia da folga da caixa de engrenagens antes de o torque chegar à roda | ~1 ms |
| Total no pior caso | ~25 ms |
O período do laço corresponde a quatro quintos desse total, e é o único componente que você pode corrigir gratuitamente.
Um sensor lido a 50 Hz é um sensor que você ignora durante 20 ms de cada vez. A causa usual não é um processador lento — é uma chamada bloqueante. Uma chamada pulseIn() em um sensor ultrassônico pode causar até 30 ms de cegueira total, e um delay(20) para um servo é a mesma coisa escrita de outra forma. Ler o sensor de borda a cada passagem de um laço não bloqueante não custa nada e reduz a maior parte da distância de reação.
A última linha é a que surpreende as pessoas. Inverter os motores não inverte as rodas até que as engrenagens tenham atravessado sua folga. Portanto, a folga da caixa de engrenagens representa curso livre no pior momento possível: 4° de folga na saída, em uma roda de 32 mm, correspondem a 1,1 mm de deslocamento antes de qualquer torque de frenagem chegar.
A frenagem é um problema de atrito, não de motor
O segundo termo parece que deveria depender da força dos motores. Não depende.
Os mesmos motores capazes de fornecer 25 N de força de empurrão desacelerariam um robô de 500 g a 50 m/s². O contato com o piso permite µg — 11,8 m/s² em silicone e 6,9 m/s² em plástico duro. O conjunto de acionamento tem quatro vezes mais capacidade do que pode utilizar; portanto, a distância de parada é determinada inteiramente pelos pneus, e um motor maior não a reduz em nada.
É por isso que o painel inferior tem duas curvas em vez de uma. Com 25 ms de latência, passar de plástico para silicone eleva a velocidade segura de 0,79 para 0,98 m/s — um ganho de 24% com um componente que também oferece 72% mais força de empurrão.
Uma ressalva importante: o µ medido arrastando um robô parado corresponde ao coeficiente estático, enquanto uma reversão brusca desliza as rodas e faz o cálculo passar a usar o coeficiente cinético, normalmente 10–20% menor. Trate a velocidade calculada como um limite otimista e opere a cerca de 80% dela.
Qual termo domina e, portanto, o que corrigir
Iguale os dois termos e o ponto de cruzamento fica claro:
v × t = v² / 2a → v = 2at
Com 25 ms e µ 1,2, isso equivale a 0,59 m/s.
- Abaixo disso, a latência é o limite. Reduzir pela metade o período do laço proporciona mais ganho do que trocar os pneus. Esse é o regime de um robô de busca e a boa notícia: a correção é uma mudança de software.
- Acima disso, a aderência no contato é o limite. A aderência e a distribuição de massa importam mais que a taxa do laço e, depois de certo ponto, a única resposta restante é diminuir a velocidade.
A maioria dos robôs que caem de superfícies está no primeiro regime e está sendo ajustada como se estivesse no segundo.
Aumente a distância disponível
O orçamento não é fixo. Ele é a largura da borda somada à distância em que o sensor é montado à frente das rodas, e o segundo termo é uma variável livre de projeto:
budget = border + sensor lead
Um sensor 40 mm à frente do eixo motriz transforma 25 mm de borda em 65 mm de espaço de parada, a diferença entre 0,60 m/s e 0,98 m/s. Resolva na outra direção quando tiver uma velocidade-alvo:
budget = v·t + v²/(2a)
Há limites práticos para avançar o sensor:
- O sensor precisa detectar a borda, não a área externa à arena. Montado muito à frente, ele observa além da linha enquanto o robô ainda está seguro, o que reduz a velocidade sem necessidade.
- Monte-o baixo e proteja-o. Um sensor de reflexão IR a 3 mm está lendo a superfície; a 15 mm, está lendo a superfície mais as luzes do ambiente. Esse é o mesmo problema de limiar e calibração de um seguidor de linha, mas com um modo de falha muito pior.
- Coloque um em cada canto dianteiro. Um único sensor central informa que a borda está em algum lugar à frente. Dois informam para qual lado girar, sem latência adicional.
- Não esqueça a traseira. Um robô empurrado para trás atravessa a borda na direção errada, e os sensores dianteiros nunca a detectarão.
Dê ré primeiro, vire depois
Dado um orçamento fixo, a ordem das operações importa mais que o ajuste.
Acione a ré imediatamente, com toda a força. Não deixe o robô rolar livremente — um robô nessa situação desacelera apenas pela resistência ao rolamento, uma pequena fração de µg, e o excedente quase triplica. Nem freie gradualmente: este é o momento em que um perfil de movimento é a escolha intuitivamente errada, porque a restrição é distância, não suavidade.
Depois vire, assim que tiver parado. Girar enquanto ainda se avança converte seu problema de linha reta em um arco que leva um canto do robô mais para fora do que seu centro. Pare primeiro e só depois reoriente — e lembre-se de que um giro no lugar arrasta os pneus lateralmente durante todo o movimento.
Mantenha a detecção após o primeiro disparo. Uma única amostra de branco basta. Esperar duas leituras consecutivas para confirmar dobra a distância de reação no pior caso, e o falso positivo evitado é muito mais barato que a queda.
Medindo sua própria latência
O número na tabela é uma estimativa inicial. O seu pode ser medido em cerca de quinze minutos.
Pela temporização interna. Registre micros() quando o sensor cruza o limiar e novamente na linha que escreve o PWM invertido. Isso mede a metade de software, que é a metade que você pode corrigir. Imprima o pior valor observado em cem detecções, não a média — o pior caso é o que determina se o robô cai.
Pela filmagem externa. Filme a 240 quadros por segundo com um celular. Conte os quadros entre a passagem do sensor pela linha e a inversão visível das rodas; cada quadro corresponde a 4,2 ms. Isso captura o atraso elétrico e mecânico que o software não revela e é a única maneira de confirmar o total.
De ponta a ponta. Acesse uma linha com fita a uma velocidade conhecida e meure até onde o robô a ultrapassa ao parar. Subtraia a distância de frenagem calculada v²/2a; o que resta é v × t — a latência total, medida com uma régua.
O último teste leva cinco minutos e vale ser feito antes de qualquer ajuste, porque mostra qual dos dois termos está sendo pago.
Quando dá errado
| Sintoma | Normalmente |
|---|---|
| Para com segurança a baixa velocidade, mas cai em alta velocidade | Funcionando como projetado — você ultrapassou a velocidade que o orçamento permite |
| Excede a linha por uma quantidade constante | Latência; meça de ponta a ponta e reduza o período do laço |
| Excede a linha por uma quantidade variável | Uma chamada bloqueante em algum lugar — o período do laço não é o que você pensa |
| Detecta a linha tarde | Sensor montado alto demais ou muito atrás, ou limiar definido para outro ambiente |
| Detecta uma borda que não existe | Piso reflexivo ou IR ambiente; proteja o sensor e recalibre |
| Para a tempo, mas mesmo assim sai andando | O afastamento ocorreu enquanto o robô ainda estava em movimento; pare primeiro |
| Cai para trás | Não há sensores traseiros |
A mesma aritmética vale para um robô na borda de uma mesa, um aspirador que evita escadas e uma parada diante de um obstáculo — apenas o orçamento muda. O simulador de desvio de obstáculos expõe exatamente esta geometria de distância de parada com um sensor voltado para a frente em vez de para baixo, e o projeto mini sumo é onde ela precisa funcionar contra um oponente tentando fazer o robô falhar.
Explore o grafo
Faz parte destas montagens
Projetos e caminhos de aprendizagem que incluem este tutorial.
Leitura complementar