Simulador interactivoIntermedio

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
Esquema técnico de Simulador de evitación de obstáculos para robotsCLEARANCE FIELD

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.

Browser native
A top-down obstacle-avoidance robot simulator. Use the controls below to run it, or read the full theory and algorithm after this lab.

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.

Simulation

Paused. Press Start or Step to begin.

Robot & sensing
Scene position
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.

Gráfico de líneas de la distancia de seguridad requerida frente a la velocidad del robot. La componente de reacción crece linealmente con la velocidad, pero la distancia total requerida se curva hacia arriba porque el término de frenado crece con el cuadrado de la velocidad. Una línea de base marca el radio fijo del robot más el margen de seguridad.
La holgura requerida sube más rápido que la velocidad: la distancia de reacción es lineal, pero la distancia de frenado crece con v², así que un pequeño aumento de velocidad exige una separación segura mucho mayor. Descargar SVG

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

  1. Descarte las muestras de distancia obsoletas y físicamente imposibles.
  2. Transforme las observaciones válidas al marco de coordenadas del robot.
  3. Expanda cada obstáculo por el radio del robot más un margen de seguridad.
  4. Calcule la distancia de frenado a partir de la velocidad y la deceleración estimada.
  5. Deténgase cuando el corredor frontal sea inseguro; en caso contrario, dirija hacia el sector despejado mejor alineado con el objetivo.
  6. 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.

Diagrama de bloques de la arquitectura de sensores para la evitación de obstáculos. Sensores de distancia por GPIO o I²C, una cámara por CSI y encoders de rueda por GPIO alimentan todos una Raspberry Pi. La Pi maneja un driver de motores por PWM y por líneas de dirección, y el driver de motores alimenta los motores.
Percepción, cómputo y actuación permanecen separados: varios canales de sensado alimentan la Pi, que maneja los motores a través de un driver aislado con su propia alimentación. Descargar SVG

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.