Ruta de construcciónIntermedioUn fin de semana

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.

Esquema técnico de Robot resuelto de laberintos de línea con memoria LSRBJUNCTIONS → L S R B → ROUTEBB

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

100%
Componente

Selección del microcontrolador

Componente

Ver componente
Componente

Matriz reflectiva de 8 canales

Componente

Ver componente
Componente

Controlador de potencia para motores

Componente

Ver componente
Componente

Alimentación eléctrica independiente

Componente

Ver componente
Ruta de aprendizaje

Ruta de control PID

Ruta de aprendizaje

Abrir ruta
Simulador

Sintonización interactiva en simulación

Interactivo

Abrir simulador
Ruta de aprendizaje

Ruta de control de motores

Ruta de aprendizaje

Abrir ruta
Tutorial

Detección y clasificación de intersecciones

14 min

Abrir tutorial
Montaje

Cableado e integración física

45 min

Tutorial

Simplificación de rutas mediante algoritmo LSRB

15 min

Abrir tutorial
Montaje

Calibración empírica en pista

20 min

Simulador

Simulación completa del laberinto en navegador

Interactivo

Abrir simulador
Montaje

Validación de estabilidad sobre línea

60 min

Montaje

Fase de exploración del laberinto

45 min

Montaje

Carrera rápida sobre la ruta optimizada

30 min

Objetivo

Solucionador de laberintos completado

Proyecto completado

Componentes

Tutoriales de esta ruta

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.