Construye un robot esquivador de obstáculos autónomo
Un robot que deambula solo —detectando obstáculos, buscando huecos y girando hacia el espacio libre— probado y calibrado primero en simulación.
Un robot esquivador de obstáculos es el siguiente paso natural tras haber construido un seguidor de línea. Un seguidor de línea sigue: traza un camino previamente dibujado. Este robot decide: sin trayectorias ni mapas preestablecidos, analiza el entorno circundante y escoge hacia dónde dirigirse. Esa diferencia fundamental —reaccionar activamente al entorno físico en lugar de seguir una guía pasiva— constituye la primera experiencia genuina de autonomía robótica, manteniéndose lo bastante intuitiva para ser comprendida en su totalidad.
El núcleo del sistema es un bucle cíclico y conciso: detectar–escanear–decidir–girar. El sensor ultrasónico HC-SR04 emite pulsos hacia el frente y mide el tiempo transcurrido hasta recibir el eco para calcular la distancia. Cuando un obstáculo se sitúa por debajo del umbral de seguridad, el robot se detiene, realiza un barrido angular a izquierda y derecha con un servomotor SG90 y vira hacia la orientación más despejada. Ese umbral no es un valor arbitrario: es una distancia de frenado calculada a partir de la velocidad, la latencia de procesamiento y actuación, la desaceleración física (que escala con el cuadrado de la velocidad), el radio de giro del chasis y un margen preventivo, todo ello parametrizable en el simulador interactivo.
Integrarás cada elemento esencial de un robot móvil aprendiendo su función exacta: un Arduino Uno con niveles lógicos tolerantes de 5 V, el sensor ultrasónico y su zona ciega mínima, el servo que dota al haz de múltiples ángulos de visión, el puente en H L298N que conmuta las intensidades que la lógica de control no puede suministrar directamente, dos motores TT con caja reductora que transforman revoluciones en par útil, un chasis 2WD con rueda loca para tracción y giro diferencial, y una fuente de alimentación con raíles desacoplados para motores y lógica. La estructura formativa te guía además por dos rutas de aprendizaje —control de motores y navegación reactiva— para consolidar conceptos de modulación por ancho de pulsos (PWM), odometría y filtrado de señales.
Antes de adquirir componentes o arriesgar conexiones erróneas, calibra el comportamiento de evasión en el simulador del navegador hasta conseguir una navegación limpia en entornos complejos. El entorno virtual ofrece un plano bidimensional cenital con haces ideales instantáneos; en el mundo real, el cono acústico se dispersa cerca de 15°, interactúa con la silueta del propio vehículo y rebota de forma atípica sobre superficies blandas o muy inclinadas. Por ello aprenderás a implementar un filtro de mediana y un tiempo de reposo tras cada movimiento del servo antes de aceptar una lectura como válida en hardware.
Tras validar el algoritmo, procede al ensamblado físico: conexiones de disparo y eco a los niveles de tensión correctos, señal de control del servo a un pin con capacidad PWM, señales de dirección y velocidad al controlador de motores, alimentación directa de la batería al pin VM del driver y una masa común de referencia. Al finalizar, el robot se desplazará autónomamente salvando sillas, paredes y cajas. Estos mismos fundamentos de percepción y filtrado facilitan la transición directa hacia el laberinto cerrado del micromouse con mapeo interno o hacia la navegación avanzada con ROS 2 acoplando una placa monoplaca como Raspberry Pi.
Sigue el árbol de desarrollo superior ordenadamente: cada bloque se habilita tras completar los requisitos previos y tu progreso queda guardado para estructurar la construcción a lo largo de un fin de semana.
Lista de materiales (BOM)
| Componente | Cantidad | Coste aprox. | Notas |
|---|---|---|---|
| Arduino Uno | 1 | 5–8 $ | Su lógica de 5 V es idónea: el eco del HC-SR04 opera a 5 V |
| HC-SR04 | 1 | 2 $ | Un VL53L0X es un gran sensor complementario, no un sustituto |
| Servo SG90 | 1 | 2 $ | Para el cabezal oscilante. El MG90S con piñonería metálica es más duradero |
| L298N | 1 | 2–4 $ | O un TB6612FNG, con caídas de tensión significativamente menores |
| Motorreductor TT | 2 | 4 $ | Motores de corriente continua estándar con caja reductora integrada |
| Chasis 2WD | 1 | 6–10 $ | Incluye dos ruedas motrices y una rueda loca pivotante |
| Pack de batería | 1 | 6 $ | 6 pilas AA NiMH o 2 celdas 18650 |
| Sensores de choque (bump switches) | 2 | 1 $ | Muy recomendables. Ver explicación abajo |
Total: aproximadamente 30–40 $.
Los dos finales de carrera o interruptores de choque frontales constituyen la mejor inversión en el diseño del robot, a pesar de ser habitualmente omitidos. Todo sensor de distancia tiene superficies ciegas: el sonar es ineficaz frente a cortinas absorbentes o tabiques alcanzados en ángulos rasantes. Sin detección táctil de apoyo, el robot seguirá empujando la tela indefinidamente. Montar dos conmutadores mecánicos tras un parachoques flexible transforma un vehículo que “suele esquivar casi todo” en un sistema que “jamás queda atascado ante lo que no puede percibir ópticamente”.
Esquema general de conexiones
| Desde | Hacia | Nota |
|---|---|---|
HC-SR04 VCC, GND |
5 V, GND | ~15 mA, con picos transitorios durante la emisión del pulso |
HC-SR04 Trig |
D9 | Cualquier pin digital |
HC-SR04 Echo |
D10 | Salida a 5 V (directa en Uno, precisa divisor resistivo en placas de 3.3 V) |
| Señal de servo | D6 | La librería Servo se apropia del Timer 1 (inhabilitando el PWM en D9/D10) |
| Alimentación de servo | 5 V independiente, GND común | Hasta 650 mA en calado: nunca conectes al pin 5 V de Arduino |
Driver ENA, ENB |
D5, D3 | Pines con capacidad PWM. Retira los puentes (jumpers) del L298N |
Driver IN1–IN4 |
D8, D7, D4, D2 | Pines de control de dirección |
| Interruptores de choque | D11, D12, INPUT_PULLUP |
Terminal COM a masa, NO al pin digital |
Batería + |
Driver VM / +12V |
Nunca alimentes los motores a través de la placa Arduino |
| Conexiones de masa | Punto común | Arduino, controlador de motor, batería y servo en masa compartida |
Atención al conflicto de temporizadores: la librería oficial Servo de Arduino toma el control del Timer 1, anulando la funcionalidad analógica (PWM) por hardware en los pines 9 y 10 del microcontrolador ATmega328P. Asignando las señales de modulación de los motores a los pines 3, 5, 6 u 11 evitarás interferencias operativas.
Cálculo analítico de la distancia de parada
El umbral de parada no debe establecerse mediante ensayo y error fortuito; es el sumatorio directo de cuatro magnitudes físicas:
stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
| Término | Origen | Magnitud típica |
|---|---|---|
| Latencia de percepción y decisión | Emisión de eco (hasta 25 ms), reposo de servo y ciclo de bucle | 60–100 ms |
| Distancia física de frenado | Cuadrado de la velocidad sobre el doble de la deceleración | Crece de forma cuadrática |
| Radio físico del robot | Distancia desde el eje de giro hasta el extremo delantero | 80–100 mm |
| Margen de seguridad | Dispersión angular del haz (15°) y absorción acústica | 50 mm |
Ejemplo práctico para una velocidad de 0.3 m/s con 80 ms de latencia total y 1.0 m/s² de frenada:
= (0.3 x 0.08) + (0.09 / 2.0) + 0.09 + 0.05
= 0.024 + 0.045 + 0.09 + 0.05 = 0.21 m
El resultado es 21 cm. Si duplicamos la velocidad hasta alcanzar 0.6 m/s:
= 0.048 + 0.18 + 0.09 + 0.05 = 0.37 m
La distancia requerida no se duplica, sino que aumenta un 76% debido a la componente cuadrática del frenado dinámico. Esto explica por qué un robot que sortea obstáculos con holgura a baja velocidad colisiona sistemáticamente al acelerar, y evidencia la necesidad de un umbral dinámico adaptado a la velocidad en lugar de un valor estático sobredimensionado.
Hitos progresivos de validación
| # | Hito | Procedimiento de prueba | Criterio de éxito |
|---|---|---|---|
| 1 | Tracción motriz | Avance, retroceso y giro sobre soportes | Los seis estados operan; banda muerta de PWM identificada |
| 2 | Telemetría ultrasónica | Apuntar a pared estática a 30 cm durante un minuto | Lecturas estables con variaciones inferiores a 2 cm, sin ceros |
| 3 | Control de tiempo de espera | Apuntar hacia espacio abierto y techo | El bucle mantiene su frecuencia sin congelarse ante ecos ausentes |
| 4 | Filtrado de mediana | Pasar la mano rápidamente por delante del haz | Picos transitorios descartados; aproximación real registrada |
| 5 | Barrido con servo | Comandar −60°, 0°, +60° y registrar distancia | Lecturas repetibles con pausa de reposo previa a la emisión |
| 6 | Verificación de reposo | Retirar deliberadamente el retardo de reposo | Dispersión y solape angular evidentes (fallo documentado) |
| 7 | Umbral de frenada | Dirigir el robot contra una pared a velocidad nominal | Detención limpia respetando el margen calculado |
| 8 | Selección de trayectoria | Posicionar ante una esquina asimétrica | Vira consistentemente hacia el cuadrante con mayor holgura |
| 9 | Histéresis de seguridad | Mantener el robot justo en el umbral crítico | Selecciona una acción firme sin oscilaciones espasmódicas |
| 10 | Recuperación por contacto | Conducir deliberadamente hacia un cojín o tela | El sensor falla, el final de carrera conmuta y el robot recula |
| 11 | Navegación libre | Cinco minutos en sala con mobiliario diverso | Supervivencia continua; atascos identificables en la máquina de estados |
El hito 10 diferencia un prototipo de laboratorio de un robot operativo. Los tejidos blandos absorben por completo la onda acústica provocando lecturas de espacio despejado; sin un microconmutador mecánico frontal de apoyo, la tracción forzará los motores hasta el bloqueo eléctrico.
Diagnóstico y resolución de anomalías
| Síntoma | Causa probable | Solución recomendada |
|---|---|---|
| El robot se detiene aleatoriamente | pulseIn ejecutado sin temporizador de escape |
Especificar un timeout de 25000 µs y gestionar la falta de eco |
| Frenazos de emergencia en salas vacías | Interpretar el desbordamiento de timeout como 0 cm | Tratar el timeout como distancia infinita, no como proximidad |
| Colisiones contra cortinas o sillones | Absorción acústica de materiales textiles | Incorporar interruptores mecánicos de choque en el frontal |
| Choques en paredes oblícuas | Reflexión especular del pulso fuera del receptor | Reducir velocidad de aproximación e incrementar ángulos de escaneo |
| Virajes directos contra obstáculos | Lectura emitida durante la aceleración del servo | Aplicar pausa de 100–200 ms tras ordenar el ángulo del servo |
| Oscilaciones erráticas ante obstáculos | Falta de banda muerta (histéresis) en el umbral | Frenar a 20 cm y no reanudar marcha hacia adelante hasta superar 30 cm |
| Movimientos espasmódicos del servo y reinicios | Caída de tensión por alimentar el servo desde la placa | Alimentar el servomotor desde un raíl de 5 V con masa compartida |
| Pérdida de control de velocidad PWM | La librería Servo deshabilita el Timer 1 (pines 9 y 10) |
Reubicar las señales de habilitación del driver en pines 3, 5, 6 u 11 |
| Bloqueo permanente en esquinas | Falta de memoria de estados en navegación reactiva | Añadir un componente pseudoaleatorio de giro o detección de atasco |
| Funciona a baja velocidad pero choca rápido | Umbral fijo insensible a la deceleración cuadrática | Calcular el margen de detención en función de la consigna de velocidad |
| Mediciones erráticas con varios robots | Interferencia acústica cruzada por emisión síncrona | Desfasar temporalmente los intervalos de disparo de cada unidad |
Siguientes pasos evolutivos
Seguimiento de paredes. Controlar una distancia constante respecto a un paramento lateral permite bordear perímetros de forma estructurada, transformando un patrullaje errático en una exploración sistemática preliminar.
Fusión de sensórica heterogénea. Un sensor óptico de tiempo de vuelo VL53L0X falla en circunstancias inversas al sonar (superficies especulares o negras mates versus tejidos absorbentes y ángulos agudos). Su combinación mitiga las debilidades individuales de cada tecnología.
Transición hacia el mapeo deliberativo. Un sistema reactivo puro carece de memoria espacial: no puede dirigirse a coordenadas específicas ni verificar si cubrió completamente una estancia. Cuando se requieran garantías de cobertura o planificación global, el proyecto Micromouse introduce resolución estructurada de laberintos y el robot de cobertura de salas aborda la cobertura sistemática del suelo.
Hoja de ruta del proyecto
La ruta de construcción
Sigue el árbol tecnológico desde las piezas hasta un robot que funciona. Cada nodo se desbloquea cuando completas sus requisitos previos, y tu progreso se guarda en este dispositivo.
0 / 18 completados
Componentes
- ControladorArduino UnoLa tolerante placa de 8 bits con la que la mayoría descubre la robótica.
- SensorHC-SR04 Ultrasonic SensorEl sensor de ecolocalización clásico para detección de obstáculos sin contacto.
- ActuadorSG90 Micro ServoEl ligero actuador rotativo de 9 gramos con control de ángulo absoluto mediante PWM.
- DriverL298N Motor DriverEl clásico módulo de puente H dual para mover motores de continua y paso a paso.
- ActuadorDC GearmotorEl motorreductor compacto que convierte alta velocidad en el par necesario para mover un robot.
- Chasis2WD Robot ChassisLa plataforma donde se atornillan dos motores, una rueda loca y toda tu electrónica.
- AlimentaciónBattery Power PackLa fuente de energía determinante: por qué la química y la resistencia interna importan más que los voltios.
Tutoriales de esta ruta
- Principiante · 22 min de lecturaAlgoritmo de evitación de obstáculos: medir, escanear, girarEl bucle de sensado, barrido, decisión y giro que permite a un robot sortear obstáculos de forma autónoma.
- Principiante · 20 minLeer un sensor ultrasónico HC-SR04: distancia fiable en códigoConvierte el ping y el eco en una distancia estable en cm, con tiempo de espera y filtro de mediana.
- Principiante · 18 min de lecturaBarrido de sensor ultrasónico con servomotorBarre un HC-SR04 con un servomotor para identificar el camino más libre antes de girar.
- Principiante · 18 min de lecturaControla motores de CC con PWM y un puente HCablea y controla un motor de CC con escobillas con seguridad usando PWM, un puente H y límites de corriente realistas.
- Intermedio · 20 min de lecturaOdometria diferencial con codificadores de ruedaIntegra el movimiento de las ruedas izquierda y derecha en la pose de un robot movil y despues identifica y calibra la deriva.
Practica antes de cablear
Ajústalo en el simulador en vivo
La ruta de construcción pasa por un laboratorio en el navegador. Consigue aquí el comportamiento correcto y luego traslada tus ajustes al robot real.
Preguntas frecuentes
¿Cómo funciona un robot esquivador de obstáculos?
Avanza hacia adelante mientras un sensor ultrasónico monitoriza la distancia frontal. Cuando un obstáculo se encuentra más cerca del umbral establecido, el robot se detiene, barre el sensor a izquierda y derecha mediante un servo para medir la distancia en cada dirección, gira hacia el lado con mayor espacio libre y reanuda la marcha. Todo el sistema es un bucle compacto de detección–escaneo–decisión–giro ejecutado muchas veces por segundo.
¿Qué sensor es mejor para un robot esquivador de obstáculos?
El sensor ultrasónico HC-SR04 es el estándar indiscutible: es muy económico, fácil de cablear y fiable hasta varios metros. Un sensor de tiempo de vuelo (ToF) ofrece lecturas más estrechas, rápidas y precisas si se requiere, pero para un primer robot de evasión el ultrasonido proporciona el equilibrio perfecto entre coste, sencillez y campo de visión.
¿Necesito comprar los componentes antes de empezar este proyecto?
No. La lógica de sensórica y evasión se ejecuta íntegramente en el simulador del navegador, por lo que puedes comprender y ajustar el comportamiento antes de gastar dinero. Solo las etapas finales de montaje y cableado precisan el hardware físico (Arduino, HC-SR04, servo, driver, motores, chasis y portapilas).
¿Por qué no funciona mi robot esquivador de obstáculos?
Los tres problemas más frecuentes son: una lectura ultrasónica con ruido o bloqueada (añade un filtro de mediana y mantén el sensor despejado), leer el sensor antes de que el servo complete su movimiento (añade una pequeña pausa de estabilización), y alimentar los motores directamente desde la salida de 5 V de Arduino en lugar del driver (lo que provoca caídas de tensión y reinicia la placa).
¿En qué se diferencia este robot de un seguidor de línea?
Un seguidor de línea sigue un carril dibujado para él en el suelo; un robot esquivador de obstáculos no dispone de guía previa y debe decidir autónomamente hacia dónde desplazarse. Introduce un sensor con cabezal orientable y un bucle de toma de decisiones en tiempo real, lo que lo convierte en el segundo proyecto idóneo a construir tras dominar el seguidor de línea.