Simulador de desvio de obstáculos para robôs móveis
Aprenda a navegação reativa, a medição de distância e a parada segura em um simulador de desvio de obstáculos para projetos de robótica com Raspberry Pi.
- Categoria
- Raspberry Pi
- Tempo
- 2–3 horas
- Plataforma
- Navegador · Raspberry Pi
01 / Comece aqui
Introdução
O desvio de obstáculos transforma medições incompletas e ruidosas em movimento seguro. Este projeto separa percepção, segurança e direção para que você possa raciocinar sobre cada camada antes de implantá-lo em um robô móvel. O simulador expõe a cobertura dos sensores, a distância de parada e os casos de falha, em vez de fingir que uma única regra reativa resolve todo problema de navegação.
Live lab / Reactive range-sensing navigation
Obstacle avoidance simulator
Drive a mobile robot toward the goal while a fan of range sensors keeps it clear of obstacles. Reposition the scene by dragging or with the coordinate controls, add noise, and compare two steering rules.
Lines are sensor rays; a brighter ray marks the nearest reading. The dashed line ahead is the predicted stopping distance. The green ring is the goal. Drag a scene item or use the position controls below.
- Status
- Seeking
- Distance to goal
- 630 px
- Min clearance
- 170 px
- Stopping distance
- 24 px
- Elapsed
- 0.0 s
Keyboard: focus the workspace, then use Space to run/pause, N to step, R to reset, D to add an obstacle, and F for full screen.
Controles
O espaço de trabalho inclui obstáculos móveis, velocidade do robô, alcance de medição, campo de visão, ruído de medição e um limiar de distância segura. Os raios dos sensores e a distância de parada prevista permanecem visíveis. O modo passo a passo revela exatamente qual observação causou cada decisão de direção.
Teoria
Um robô precisa parar ou virar antes que a área varrida pelo robô encontre um obstáculo. A distância segura depende da velocidade atual, da latência do controlador, da capacidade de frenagem, da incerteza da medição e do raio físico do robô — não apenas do último valor de distância.
Controladores reativos como campos potenciais transformam obstáculos próximos em vetores repulsivos e o objetivo em um vetor atrativo. Eles respondem rapidamente, mas podem ficar presos em mínimos locais. Uma arquitetura prática combina segurança reativa com um planejador global ou local.
Algoritmo
- Rejeite leituras de distância antigas e fisicamente impossíveis.
- Transforme observações válidas para o referencial de coordenadas do robô.
- Aumente o raio de cada obstáculo em uma quantia igual ao raio do robô mais uma margem de segurança.
- Calcule a distância de parada a partir da velocidade e da desaceleração estimada.
- Pare quando o corredor à frente for inseguro; caso contrário, dirija para o setor livre mais bem alinhado ao objetivo.
- Limite a aceleração e a velocidade angular antes de enviar comandos aos motores.
Código-fonte
Mantenha a decisão de emergência pequena o suficiente para ser testada exaustivamente:
def safe_velocity(target, ranges, stop_distance):
front = [r for angle, r in ranges if abs(angle) < 0.35]
if not front or min(front) <= stop_distance:
return 0.0, choose_clear_turn(ranges)
return limit_acceleration(target), steer_toward_clearance(ranges)
Em um sistema real, registre as marcações de tempo dos sensores e entre em um estado seguro de parada quando os dados necessários ficarem indisponíveis.
Premissas e diferenças do hardware
O mundo é visto de cima e em duas dimensões: os raios dos sensores são instantâneos, perfeitamente finos e nunca ficam ocultos pelo próprio corpo do robô, e o robô é um disco que pode frear até zero sem inércia. Em um robô com Raspberry Pi, os feixes ultrassônicos se espalham por 15°, as leituras por tempo de voo dependem da superfície e do sol, e a distância de parada é definida pela massa real, pelo torque do motor e pela latência de medição-decisão-atuação — tudo isso é discutido no roteiro de navegação reativa. O simulador também ignora a variação de temporização do laço e a queda de tensão, portanto trate a curva de distância de parada como um padrão a internalizar, não como um número para copiar.
Diagrama do circuito
Faça a conversão de nível de qualquer sinal de eco de 5 V antes que ele alcance o GPIO do Raspberry Pi. Alimente os motores separadamente e conecte os terras em um ponto comum deliberado.
Experimentos guiados
1. Derive o limiar de parada em vez de adivinhá-lo
Defina uma velocidade baixa e reduza o limiar de parada até o robô começar a bater nos obstáculos. Anote o valor. Agora dobre a velocidade e repita.
O limiar necessário não dobra, porque ele é a soma de um termo que escala com a velocidade e outro que escala com seu quadrado:
stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
| Velocidade | Termo de latência (80 ms) | Termo de frenagem (1 m/s²) | Total, com raio de 90 mm + margem de 50 mm |
|---|---|---|---|
| 0,15 m/s | 12 mm | 11 mm | 16 cm |
| 0,30 m/s | 24 mm | 45 mm | 21 cm |
| 0,60 m/s | 48 mm | 180 mm | 37 cm |
| 0,90 m/s | 72 mm | 405 mm | 62 cm |
É por isso que um robô que desvia com confiabilidade na velocidade de caminhada começa a colidir quando você acelera — e por isso que a correção é um limiar dependente da velocidade, e não um único valor fixo grande que torna o robô tímido em todos os lugares.
2. Produza a oscilação causada pelo limiar e depois corrija-a
Posicione o robô para que ele fique exatamente na distância de parada. Com um único limiar, ele alterna entre avançar e virar muitas vezes por segundo.
Agora separe os dois: pare a 20 cm e não retome até 30 cm. A oscilação desaparece porque a regra passa a exigir uma decisão firme. Esse intervalo é histerese, e o mesmo padrão corrige quase toda oscilação orientada por limiar em código de robôs.
3. Prenda-o de propósito
Construa um canto côncavo — como uma ferradura — e deixe o robô entrar. Com uma regra determinística de “virar para a direção mais livre”, ele vira, dirige e volta para onde começou, para sempre.
Isso não é um defeito a ser corrigido. É o que significa não ter um mapa, e é a demonstração mais clara possível do limite da navegação reativa. As mitigações são um componente aleatório na escolha da curva e um detector de travamento que escala após várias tentativas malsucedidas; a correção real é memória, que é um caminho totalmente diferente.
4. Compare a resolução da varredura com o tempo da varredura
Aumente a quantidade de ângulos de varredura e observe duas coisas se moverem em direções opostas: as decisões de direção melhoram e o robô passa mais tempo parado.
Uma varredura é um momento cego — o robô está parado e não avança. A faixa usual é de três a cinco ângulos; além disso, a informação extra raramente compensa o tempo extra.
O que observar
| Comportamento | Causa |
|---|---|
| Bate nos obstáculos em alta velocidade | Limite não escalado para o termo quadrático de frenagem |
| Oscila a uma distância fixa | Um único limiar, sem histerese |
| Oscila para a esquerda e para a direita no lugar | Toma uma nova decisão antes que a curva tenha mudado alguma coisa |
| Entra em um ciclo infinito em um canto | Fuga determinística de uma armadilha simétrica |
| Para muito cedo em todos os lugares | Limite definido para o pior caso, e não para a velocidade atual |
| Vira para a borda de um vão | Escolhe o ângulo máximo em vez de um centroide ponderado |
Aplicação em hardware
Os raios do simulador são instantâneos, sem ruído e infinitamente finos. Um sensor ultrassônico real não é nada disso, e as diferenças são o principal trabalho no hardware:
| Neste laboratório | Um HC-SR04 em um robô real |
|---|---|
| Um raio fino | Um cone de aproximadamente 15°, com cerca de 53 cm de diâmetro a 1 m |
| Toda superfície reflete | Superfícies macias e muito inclinadas não devolvem nada |
| Leituras instantâneas | Até 25 ms por ping, cerca de 60 ms entre eles |
| Sem servo | 100–200 ms de tempo de acomodação por ângulo de varredura |
| Sem ruído | Valores ocasionais muito fora do normal que exigem filtro de mediana |
| Vê tudo | Uma cortina é invisível — por isso você instala chaves de colisão |
Encontre uma distância de parada segura e uma regra que escolha a direção mais livre aqui, onde um erro não custa nada. Depois, no hardware, adicione o filtro de mediana, o atraso de acomodação do servo e a detecção de colisão — o tutorial do algoritmo de desvio de obstáculos mostra cada um em código.
Lista de verificação de hardware
Componentes
- Raspberry Pi com uma fonte de alimentação compatível
- Dois ou mais sensores por tempo de voo ou ultrassônicos
- Módulo de câmera opcional para detecção visual
- Driver de motor com alimentação separada para os motores
- Chassi de acionamento diferencial e encoders
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 um sensor voltado para a frente não basta?
Um único feixe deixa áreas cegas perto do robô e não consegue distinguir um objeto estreito de uma parede. Múltiplos pontos de vista ou um sensor de varredura fornecem geometria suficiente para escolher uma curva mais segura.
O desvio de obstáculos substitui o planejamento de caminho?
Não. O desvio reativo lida com perigos imediatos, enquanto um planejador escolhe o avanço em direção a um objetivo. Robôs robustos combinam os dois e deixam a camada de segurança substituir qualquer movimento planejado que seja inseguro.
Sensor ultrassônico ou por tempo de voo — qual é melhor para desviar de obstáculos?
Sensores ultrassônicos são baratos e funcionam na maioria das superfícies, mas têm baixa resolução angular e uma zona cega próxima ao sensor. Sensores por tempo de voo (ToF) fornecem uma leitura de distância de curto alcance mais rápida e precisa, com um feixe estreito, mas podem ser perturbados por luz do sol forte, superfícies escuras ou espelhadas e reflexões em cantos. Muitos robôs usam sensores ultrassônicos para cobertura ampla e ToF onde a medição precisa de curto alcance importa.
O que é uma zona cega do sensor e por que ela importa?
A zona cega é a distância mínima abaixo da qual um sensor não consegue informar uma distância válida — para sensores ultrassônicos, ela é definida pelo comprimento do pulso emitido. Um obstáculo dentro da zona cega é lido como livre, portanto um robô que confia no valor bruto pode dirigir para algo bem à sua frente. Mantenha os sensores montados de modo que a zona cega fique dentro da área ocupada pelo robô e trate leituras suspeitamente pequenas como inválidas.
Como calculo uma distância de parada segura?
A distância segura é a soma da distância de reação com a de frenagem, do raio do robô e de uma margem. A distância de reação cresce linearmente com a velocidade (velocidade vezes a latência de medição-decisão-atuação), mas a distância de frenagem cresce com o quadrado da velocidade, portanto a folga necessária cresce mais rápido que a própria velocidade. É por isso que um pequeno aumento de velocidade pode exigir uma distância segura muito maior.
Por que meu robô fica preso na frente de um obstáculo?
Métodos reativos como campos potenciais podem chegar a um mínimo local em que a força repulsiva de um obstáculo cancela a atração ao objetivo, e o robô entra em travamento ou oscila. Uma regra de direção que se decide pelo maior vão livre, combinada com um planejador global ou local acima da camada reativa, impede que o robô se prenda.
Como filtrar leituras de distância ruidosas?
Rejeite valores fisicamente impossíveis e saltos súbitos em vez de agir sobre eles, registre o tempo de cada amostra e aplique um filtro leve de mediana ou temporal para suprimir ecos espúrios. Se os dados necessários ficarem antigos ou indisponíveis, entre em um estado seguro de parada em vez de dirigir com base em uma suposição.
Leitura complementar
Referências
Fontes confiáveis para ir além do modelo educacional limitado deste simulador.