Simulador de evitación de obstáculos para robots
Aprende navegación reactiva, telemetría de distancia y frenado seguro con un simulador de robótica para proyectos con Raspberry Pi y sensores.
- Categoría
- Raspberry Pi
- Tiempo
- 2–3 horas
- Plataforma
- Browser · Raspberry Pi
01 / Empieza aquí
Introducción
La evitación de obstáculos convierte mediciones ruidosas e incompletas en trayectorias seguras. Este proyecto independiza la percepción, la seguridad y el guiado para evaluar cada nivel antes de desplegar un robot móvil. El simulador expone la cobertura sensorial, la distancia de frenado y los modos de falla, en vez de asumir que una regla reactiva simple resuelve cualquier reto de navegación.
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
El espacio de trabajo incluye obstáculos móviles, velocidad del robot, alcance de sensado, campo de visión, ruido de medición y un umbral de distancia de seguridad. Los rayos del sensor y la distancia de frenado prevista permanecen visibles. El modo paso revela exactamente qué observación causó cada decisión de dirección.
Teoría
Un robot debe detenerse o girar antes de que su huella barrida interseque un obstáculo. La distancia segura depende de la velocidad actual, la latencia del controlador, la capacidad de frenado, la incertidumbre de la medición y el radio físico del robot, no solo del último valor de distancia.
Los controladores reactivos como los campos de potencial convierten los obstáculos cercanos en vectores repulsivos y el objetivo en un vector atractor. Responden rápido pero pueden quedar atrapados en mínimos locales. Una pila práctica combina la seguridad reactiva con un planificador global o local.
Algoritmo
- Descarte las muestras de distancia obsoletas y físicamente imposibles.
- Transforme las observaciones válidas al marco de coordenadas del robot.
- Expanda cada obstáculo por el radio del robot más un margen de seguridad.
- Calcule la distancia de frenado a partir de la velocidad y la deceleración estimada.
- Deténgase cuando el corredor frontal sea inseguro; en caso contrario, dirija hacia el sector despejado mejor alineado con el objetivo.
- Limite la aceleración y la velocidad angular antes de enviar las órdenes a los motores.
Código fuente
Mantenga la decisión de emergencia lo bastante pequeña como para poderla probar a fondo:
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)
En un sistema real, registre las marcas de tiempo de los sensores y entre en un estado de parada segura cuando los datos necesarios dejen de estar disponibles.
Suposiciones y diferencias con el hardware
El mundo es cenital y bidimensional: los rayos del sensor son instantáneos, perfectamente finos y nunca ocluidos por el propio cuerpo del robot, y el robot es un disco que puede frenar hasta cero sin inercia. En un robot con Raspberry Pi, los haces de ultrasonido se abren 15°, las lecturas de tiempo de vuelo dependen de la superficie y del sol, y la distancia de frenado la fijan la masa real, el par del motor y la latencia de sensar-decidir-actuar, todo ello cubierto en la ruta de navegación reactiva. El simulador también ignora la oscilación del bucle y la caída de alimentación, así que trate la curva de distancia de frenado como la forma que hay que interiorizar, no como un número que haya que copiar.
Diagrama de circuito
Desplace el nivel de cualquier señal de eco de 5 V antes de que llegue a un GPIO de la Raspberry Pi. Alimente los motores por separado y una las masas en un punto común deliberado.
Experimentos guiados
1. Deduzca el umbral de parada en vez de adivinarlo
Ponga una velocidad baja y baje el umbral de parada hasta que el robot empiece a rozar obstáculos. Anote el valor. Ahora duplique la velocidad y repita.
El umbral que necesita no se duplica, porque es la suma de un término que escala con la velocidad y otro que escala con su cuadrado:
stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
| Velocidad | Término de latencia (80 ms) | Término de frenado (1 m/s²) | Total, con radio de 90 mm + margen 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 eso un robot que esquiva de forma fiable a paso de paseo empieza a golpear cosas cuando usted lo acelera, y por eso el arreglo es un umbral dependiente de la velocidad en vez de un único valor fijo grande que vuelva tímido al robot en todas partes.
2. Produzca la titilación del umbral y luego arréglela
Coloque el robot de modo que quede justo en la distancia de parada. Con un único umbral alterna entre avanzar y girar muchas veces por segundo.
Ahora separe los dos: pare a 20 cm y no reanude hasta 30 cm. La titilación desaparece porque el comportamiento tiene que comprometerse. Esa diferencia es la histéresis, y el mismo patrón arregla casi todas las oscilaciones por umbral del código de un robot.
3. Atrápelo a propósito
Construya una esquina cóncava —una herradura— y deje entrar al robot. Con una regla determinista de «girar hacia la dirección más abierta» giraré, avanzará y llegará otra vez donde empezó, para siempre.
Esto no es un fallo que arreglar. Es lo que significa no tener mapa, y es la demostración más clara posible del techo de la navegación reactiva. Las mitigaciones son un componente aleatorio en el giro y un detector de atasco que escala tras varios intentos fallidos; el arreglo de verdad es la memoria, que es una ruta completamente distinta.
4. Compare la resolución de barrido contra el tiempo de barrido
Aumente el número de ángulos de barrido y observe cómo se mueven dos cosas en direcciones opuestas: las decisiones de giro mejoran y el robot pasa más tiempo quieto.
Un barrido es un momento a ciegas: el robot está detenido y no avanzando. De tres a cinco ángulos es el punto dulce habitual, y a partir de ahí la información extra rara vez justifica el tiempo extra.
Qué debería observar
| Comportamiento | Causa |
|---|---|
| Roza obstáculos a velocidad | Umbral no escalado para el término cuadrático de frenado |
| Titila a una distancia fija | Un umbral, sin histéresis |
| Vacila izquierda-derecha en el sitio | Re-decidir antes de que el giro haya cambiado nada |
| Da vueltas eternamente en una esquina | Escape determinista de una trampa simétrica |
| Se detiene demasiado pronto en todas partes | Umbral fijado para el peor caso en vez de para la velocidad actual |
| Gira hacia el borde de un hueco | Elegir el ángulo máximo en vez de un centroide ponderado |
Llevarlo al hardware
Los rayos del simulador son instantáneos, sin ruido e infinitamente finos. Un sensor de ultrasonidos real no es nada de eso, y las diferencias son todo el trabajo en hardware:
| Este laboratorio | Un HC-SR04 en un robot real |
|---|---|
| Un rayo fino | Un cono de ~15°, unos 53 cm de ancho a 1 m |
| Toda superficie refleja | Las superficies blandas y muy angulosas no devuelven absolutamente nada |
| Lecturas instantáneas | Hasta 25 ms por pulso, ~60 ms entre ellos |
| Sin servo | 100–200 ms de estabilización por ángulo de barrido |
| Sin ruido | Valores disparatados ocasionales que necesitan un filtro de mediana |
| Lo ve todo | Una cortina es invisible, y por eso se instalan microinterruptores |
Encuentre aquí una distancia de frenado segura y una regla de dirección despejada, donde un error no cuesta nada. Luego en hardware añada el filtro de mediana, el retardo de estabilización del servo y la detección de contacto: el tutorial del algoritmo de evitación de obstáculos tiene cada uno en código.
Lista de hardware
Componentes
- Raspberry Pi con fuente de alimentación adecuada
- Dos o más sensores ultrasónicos o de tiempo de vuelo
- Módulo de cámara para detección visual complementaria
- Driver de motor con alimentación de potencia aislada
- Chasis de tracción diferencial con encoders
Explora el grafo
Dónde se usa este simulador
Los proyectos, rutas de aprendizaje y tutoriales que se basan en este laboratorio.
Sigue construyendo
Descargar recursos
Usa estas referencias de la página mientras trabajas en el proyecto. Los paquetes descargables del proyecto se añadirán solo cuando se publiquen su código fuente y su versión.
Preguntas comunes
Preguntas frecuentes
¿Por qué no basta con un único sensor frontal?
Un solo haz deja zonas ciegas contiguas al chasis y es incapaz de discriminar entre un obstáculo estrecho y una pared continua. Múltiples puntos de medición o un sensor con servomecanismo de barrido proporcionan la información geométrica necesaria para seleccionar un giro seguro.
¿La evitación reactiva sustituye a la planificación de rutas?
No. La evitación reactiva esquiva amenazas inminentes en tiempo real, mientras que el planificador traza el avance global hacia el objetivo. Los sistemas robustos combinan ambos, permitiendo que la capa de seguridad vete o corrija cualquier trayectoria planificada que resulte peligrosa.
¿Sensor ultrasónico o sensor de tiempo de vuelo (ToF): cuál elegir?
Los sensores ultrasónicos son económicos y leen sobre la mayoría de superficies, pero presentan baja resolución angular y una zona ciega cercana. Los sensores de tiempo de vuelo (ToF) entregan lecturas rápidas y precisas con un haz estrecho, aunque sufren ante luz solar intensa o superficies especulares. Se suelen combinar ultrasonidos para cobertura perimetral gruesa y ToF para distancias cortas críticas.
¿Qué es la zona ciega de un sensor y por qué reviste peligro?
Es la distancia mínima por debajo de la cual el sensor no puede medir (en ultrasonidos depende de la duración del pulso acústico emitido). Un objeto dentro de la zona ciega suele reportarse como espacio libre, arriesgando que el robot colisione de frente. Se debe montar el sensor retrasado para que la zona ciega quede dentro del perímetro del robot y descartar lecturas sospechosamente anómalas.
¿Cómo se calcula la distancia de frenado seguro?
La distancia segura es la suma de la distancia de reacción (velocidad por latencia del lazo), la distancia de frenado dinámico (proporcional al cuadrado de la velocidad), el radio del robot y un margen de guarda. Como el frenado escala con v², duplicar la velocidad exige cuadruplicar el espacio de frenado.
¿Por qué el robot se queda atascado frente a ciertos obstáculos?
Los métodos reactivos basados en campos de potencial pueden converger a mínimos locales donde la repulsión del obstáculo y la atracción de la meta se anulan mutuamente, provocando oscilación o inmovilidad. Algoritmos como follow-the-gap o la integración de un planificador global evitan que el vehículo caiga en estas trampas cinemáticas.
¿Cómo se filtra el ruido en sensores de distancia?
Rechaza lecturas físicamente imposibles, registra la marca de tiempo de cada muestra y aplica un filtro de mediana móvil ligero para suprimir ecos espurios. Si los datos se vuelven obsoletos o se interrumpen, conmuta el robot a un estado de parada segura en lugar de navegar a ciegas.
Lecturas adicionales
Referencias
Fuentes autorizadas para profundizar más allá del modelo educativo acotado de este simulador.