Robot resuelto de laberintos de línea con memoria LSRB
Un robot que explora un laberinto sobre cinta de forma autónoma, memoriza intersecciones y ejecuta la ruta óptima sin desviarse en callejones sin salida.
Un seguidor de línea sigue. Un solucionador de laberintos sobre línea decide. Ese es el salto completo que hace este proyecto, y es mayor de lo que parece: el robot deja de ser un lazo de control con ruedas y se convierte en algo que explora un entorno que nunca ha visto, recuerda lo que encontró y actúa en función de ese recuerdo.
La gracia es que nada de eso sustituye al seguidor de línea: se apoya encima de él. Debajo, la misma matriz de reflectancia y el mismo lazo PID mantienen el robot centrado en la cinta, sin saber nada de laberintos. Encima, una capa de decisión fina vigila los momentos en que la línea se bifurca, clasifica de qué tipo de cruce se trata, elige una dirección y escribe un carácter. Esa separación es lo que hace tratable el proyecto, y es la misma división en dos capas que usan los robots reales en todas partes.
Así que el orden de construcción importa más de lo habitual. Primero obtienes un seguimiento de línea plano realmente estable —ajustado en el simulador y luego en un óvalo grande de cinta real— y solo entonces añades cruces. Salta esa disciplina y cada problema mecánico, cada deriva de calibración, cada rueda que se sale 2 mm de alineación aparecerá disfrazado de fallo de resolución de laberintos.
Sigue el árbol tecnológico de abajo de arriba abajo. Cada nodo se abre cuando sus prerrequisitos están cumplidos, y tu progreso se guarda en este dispositivo, para que puedas construir el robot a lo largo de un fin de semana sin perder el hilo.
Lista de materiales
| Componente | Cant. | Coste aprox. | Notas |
|---|---|---|---|
| Arduino Nano | 1 | $5 | A0–A7 da ocho canales analógicos; los seis de un Uno no bastan |
| Matriz IR de reflectancia, 8 canales | 1 | $8–12 | Ocho, y analógicos. La detección de cruces necesita los sensores exteriores |
| TB6612FNG | 1 | $3 | Aquí compensa: la caída de ~2 V del L298N perjudica las maniobras precisas a baja velocidad |
| Motorreductor TT | 2 | $4 | Se recomiendan fuertemente las versiones con encoder para giros repetibles |
| Chasis 2WD | 1 | $6–10 | |
| Pack de baterías | 1 | $6 | 2×18650, portapilas protegido |
| Cinta negra mate, 19 mm | 1 rollo | $3 | Y un suelo o tablero grande de color claro sobre el que trazar el laberinto |
Total: unos $35–45. La matriz de 8 canales es la única pieza en la que no conviene escatinar, y el motivo es concreto: un robot detecta una rama hacia la izquierda al observar que los sensores más exteriores del lado izquierdo se han puesto en oscuro mientras el centro sigue sobre la línea. Una matriz apenas más ancha que la cinta físicamente no puede verlo, así que la detección de cruces se convierte en adivinación por muy bueno que sea el código.
Por qué la matriz debe ser más ancha que la línea
left branch array (8 channels, ~60 mm wide)
────────────────┐ [ x x x . . . . . ] outer left dark -> a branch
│
════════════════╪═══════ [ . . . x x . . . ] centre still on the line
│
Regla práctica: la matriz debería ser de al menos tres veces el ancho de la cinta. Para cinta de 19 mm eso son unos 60 mm, que es exactamente lo que te da una matriz de 8 canales con paso de 8 mm. Más estrecha y el robot no puede distinguir entre “la línea se ha curvado bruscamente” y “la línea se ha bifurcado”, que es la decisión central sobre la que se apoya todo el proyecto.
Constrúyelo por hitos
El orden de construcción importa aquí más que en cualquier otro proyecto del sitio. Un solucionador de laberintos es un seguidor de línea con una capa de decisión, y cada fallo mecánico o de calibración del seguidor reaparece disfrazado de fallo de resolución de laberintos.
| # | Hito | La prueba | Superado se ve así |
|---|---|---|---|
| 1 | El seguimiento de línea funciona | Diez vueltas de un óvalo grande y llano | Cero pérdidas. No “casi” — cero |
| 2 | Repetibilidad de giro | Manda un pivote de 90° diez veces y mide | Dentro de ±3°, y repetible |
| 3 | Cruce detectado | Pasa lentamente sobre una T e imprime la matriz | Los sensores exteriores se ponen en oscuro antes que el centro |
| 4 | Cruce clasificado | Pasa lentamente por cada tipo de cruce | Izquierda / derecha / T / cruz / final de línea, todos bien nombrados |
| 5 | Un giro ejecutado | Encuentra una rama a la izquierda, gira a la izquierda y retoma el seguimiento | Recupera la línea y continúa |
| 6 | Ruta registrada | Conduce un laberinto corto e imprime la cadena | Una secuencia como LSRB que coincida con lo que viste |
| 7 | Simplificación LSRB | Pasa la ruta registrada por el simplificador | LBL se convierte en S, y cada regla se dispara correctamente |
| 8 | Segunda pasada | Ejecuta la ruta simplificada | Llega a la meta sin giros erróneos y sin explorar |
| 9 | Laberinto completo | Un laberinto con varios finales sin salida | Explora, simplifica y luego ejecuta la ruta más corta |
El hito 1 no es negociable. “Sigue la línea casi siempre” se convierte en “de vez en cuando inventa un cruce”, y te pasarás una tarde depurando la simplificación de rutas por un fallo que en realidad es una rueda 2 mm fuera de alineación.
El hito 2 es el que se salta la gente. Un solucionador de laberintos ejecuta cientos de giros por pasada, y un giro que se queda sistemáticamente 5° corto se acumula hasta que el robot abandona la línea por completo. Aquí es exactamente donde aparece el backlash del reductor: un error que cambia de signo con la dirección es mecánico, no un fallo de ajuste.
La división en dos capas, en código
Merece la pena ver explícitamente la separación que hace tratable este proyecto:
┌─────────────────────────────────────┐
decision │ classify junction -> choose turn │ runs only at junctions
layer │ record a character -> simplify │ knows nothing about PWM
└──────────────────┬──────────────────┘
│ "turn left" / "keep going"
┌──────────────────▼──────────────────┐
following │ read array -> position -> PID │ runs every loop, ~200 Hz
layer │ -> left and right wheel speeds │ knows nothing about mazes
└─────────────────────────────────────┘
La capa inferior nunca aprende qué es un laberinto. La capa superior nunca toca un motor. Cuando algo va mal, ese límite te dice en qué mitad mirar, y si no puedes decir en qué mitad vive un fallo, es que las capas no están bien separadas.
Qué significa hacerlo bien
| Medida | Típico |
|---|---|
| Velocidad de exploración | 0.15–0.25 m/s: lo bastante lenta para clasificar cruces con fiabilidad |
| Velocidad de la pasada de vuelta | 0.3–0.5 m/s: sin decisiones que tomar, así que puede apretar |
| Precisión de clasificación de cruces | 100 %. Cualquier cosa menos y la ruta registrada está mal |
| Repetibilidad de giro | ±3° |
| Simplificación de la ruta | Una ruta de exploración de 30 caracteres suele reducirse a 8–12 |
La precisión en los cruces es genuinamente de todo o nada, y eso sorprende a la gente. Un cruce mal leído corrompe la cadena registrada, el simplificador produce entonces una ruta de aspecto válido pero equivocada, y la pasada de vuelta se mete con confianza en una pared. No hay crédito parcial, y por eso la exploración va lenta y la pasada de vuelta es donde recuperas el tiempo.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| Ve cruces que no están | Una curva cerrada leída como rama | Ensancha la matriz; exige que los sensores exteriores sigan en oscuro una distancia mínima |
| No ve cruces | Va demasiado rápido, o la matriz es demasiado estrecha | Baja la velocidad de exploración; comprueba que la matriz es ≥3× el ancho de la cinta |
| Los giros son inconsistentes | Backlash, o sin encoders | Acércate siempre al giro de la misma manera; mide el juego |
| La ruta registrada tiene caracteres de más | Crucero detectado dos veces | Añade un tiempo muerto tras el cruce antes de buscar el siguiente |
| La simplificación produce una ruta equivocada | Una regla aplicada en el orden equivocado | Prueba LBL→S, LBR→B, SBL→R y similares por separado primero |
| La pasada de vuelta falla en el primer giro | Ruta registrada respecto al rumbo equivocado | La cadena es una secuencia de giros relativos: comprueba la convención |
| Funciona en un laberinto y en otro no | Separación entre cruces demasiado corta para el tiempo muerto | Reduce el tiempo muerto, o baja aún más la velocidad |
| Pierde la línea tras un giro | El giro se pasa de la nueva línea | Gira hasta que los sensores centrales recuperen la línea, en vez de un ángulo fijo |
| Deriva más a medida que avanza la pasada | La batería se hunde y cambian las ganancias efectivas | Cierra un lazo de velocidad con encoders |
Hacia dónde llevarlo después
Añade encoders y gira por distancia en vez de por tiempo. Los giros temporizados son la mayor fuente de irreproducibilidad en un primer solucionador de laberintos, porque el tiempo necesario cambia con la tensión de batería y con la superficie. Los giros con encoders no.
Pasa a un laberinto con paredes —el micromouse—, que sustituye la cinta por paredes y la regla LSRB por flood fill. Ese es el paso realmente mayor: LSRB es una heurística de seguimiento de pared que encuentra un camino, mientras que el flood fill calcula el más corto y replanifica según se descubren paredes nuevas.
Optimiza la pasada de vuelta. Una vez conocida la ruta, ya no queda ninguna decisión que tomar, así que el robot puede acelerar en rectas y bajar solo para los giros. Un perfil de movimiento sobre la ruta conocida es de donde salen las mejoras drásticas de tiempo, a menudo la mitad de la pasada de vuelta.
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 / 21 completados
Componentes
- ControladorArduino UnoLa tolerante placa de 8 bits con la que la mayoría descubre la robótica.
- SensorIR Reflectance Sensor ArrayEl sensor óptico esencial para seguidores de línea y resolución de laberintos.
- DriverTB6612FNG Motor DriverPuente en H dual con tecnología MOSFET: alta eficiencia y tamaño ultracompacto para robots móviles.
- 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 · 20 min de lecturaConstruye un robot seguidor de línea: de sensores a dirección PIDDe sensores de reflectancia IR a un error ponderado a una dirección PID suave: cómo funciona realmente un seguidor de línea.
- Principiante · 20 minLeer una matriz de sensores IR de reflectancia para seguir líneasConvierte una fila de sensores IR en una posición de línea única y suave sobre la que dirigir.
- Principiante · 18 min de lecturaCómo sintonizar un controlador PID: guía práctica paso a pasoUn orden riguroso y práctico para sintonizar ganancias P, I y D sin tanteos a ciegas.
- Intermedio · 14 min de lecturaDetección de cruces en laberintos de línea con una matriz IRClasifica T, cruz, izquierda, derecha, callejón sin salida y meta con una matriz de reflectancia y resuelve las ambigüedades.
- Intermedio · 15 min de lecturaSimplificacion de rutas LSRB para robots de laberintos de lineaRegistra los giros como L, S, R y B, y compacta cada desvio por callejon sin salida en la ruta optima.
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 se implementa un robot solucionador de laberintos con Arduino?
Se parte de un seguidor de línea estable: sensores infrarrojos, lazo de control PID y puente en H. Sobre esa base se superpone una capa de toma de decisiones que clasifica los cruces, selecciona ramas según la regla de la mano izquierda y registra cada maniobra con cuatro caracteres: L (Left / izquierda), S (Straight / recto), R (Right / derecha) o B (Back / retroceso). Al detectar la meta, se procesa la cadena con reglas de sustitución para eliminar callejones sin salida, ejecutando la ruta directa en la segunda pasada.
¿Qué representa el algoritmo LSRB en robótica de laberintos?
Corresponde a las iniciales de las cuatro acciones posibles: Left, Straight, Right, Back. En la fase de exploración el robot registra cada cruce, donde cada 'B' identifica un callejón sin salida del que hubo que salir retrocediendo. Seis reglas algebraicas sustituyen cada ventana de tres caracteres centrada en 'B' por el giro equivalente directo (por ejemplo, LBL se transforma en S). Repitiendo el proceso hasta eliminar todas las 'B', se obtiene el recorrido óptimo.
¿Qué diferencia existe entre un laberinto de línea y un laberinto Micromouse?
Un laberinto de línea está formado por cinta aislante negra pegada sobre un suelo liso claro y se detecta mediante fotosensores infrarrojos reflectivos inferiores. Un laberinto Micromouse tiene paredes verticales físicas de madera que se miden con sensores de distancia ópticos o de ultrasonidos. Aunque la sensórica es totalmente distinta, la capa lógica superior es conceptualmente idéntica: explorar para cartografiar y optimizar para ejecutar la carrera veloz.
¿Se requieren componentes físicos antes de comenzar el proyecto?
No. El seguidor de línea base, la sintonización de ganancias y el algoritmo de exploración y reducción de rutas LSRB pueden validarse completamente en los simuladores interactivos web. Solo los pasos de montaje, calibración en pista y ensayo físico requieren la placa Arduino, los motores y el chasis.
¿Por qué el robot efectúa giros erróneos en ciertas intersecciones?
La causa más habitual es tomar la decisión prematuramente en el primer instante de detección. La lectura transversal instantánea no distingue un cruce en T de una intersección en cruz de 4 vías: en ambos casos toda la matriz lee negro. El robot debe detectar la presencia de ramales laterales, avanzar una pequeña distancia equivalente a la longitud de su morro y volver a leer para comprobar si la línea central continúa de frente.
¿El método LSRB es aplicable a cualquier laberinto?
Solo a laberintos 'perfectos': aquellos sin bucles cerrados ni islas centrales donde existe un único camino continuo entre dos puntos cualesquiera. Los circuitos de competición sobre cinta casi siempre cumplen esta condición. Si el laberinto incluye ciclos cerrados, la regla de la mano izquierda puede quedar atrapada en bucle infinito; en tales casos se requiere un mapa en rejilla y algoritmos como Flood Fill.