Simulador interactivoIntermedio

Simulador de laberinto de líneas con enrutamiento LSRB

Prueba un robot de laberinto de líneas: detección de intersecciones y reglas de sustitución LSRB para simplificar callejones sin salida en la ruta más corta.

Categoría
Arduino
Tiempo
2–3 horas
Plataforma
Browser · Arduino
Esquema técnico de Simulador de laberinto de líneas con enrutamiento LSRBJUNCTIONS → L S R B → ROUTEBB

01 / Empieza aquí

Introducción

Un robot de laberinto de líneas es un seguidor de línea capaz de tomar decisiones. Este simulador guía al robot sobre cinta negra, clasificando cada intersección y registrando cada maniobra. Al alcanzar la meta, las reglas de sustitución LSRB simplifican los callejones sin salida hasta obtener la ruta óptima sin retrocesos, la cual el robot recorre a máxima velocidad en su segunda pasada.

Live lab / Junction detection & LSRB route memory

Line maze simulator

A line follower drives a taped maze, recording every turn as L, S, R or B. Watch it back out of dead ends, then watch the substitution rules collapse that string into the shortest route — and drive it again.

Browser native
A line maze lab. A robot starts at the bottom-left of a taped maze and follows the left-hand rule to the finish at the top-right, recording one turn symbol per junction and backing out of every dead end. The LSRB substitution rules then collapse that record into the shortest route, which the robot drives again as a speed run. Use the controls below to run it or step one move at a time.

The dark lines are the tape. The orange trail is everywhere the robot drove while exploring, dead ends included; the teal line is the simplified route it speed-runs. The bar above the robot is its eight-channel reflectance array — a whole side lights up when a branch opens there.

  • Tape
  • Explored (dead ends included)
  • Simplified route
  • Finish

Route memory

The robot writes one symbol per move. Every B is a dead end it had to reverse out of.

Press Start — the string builds as the robot drives.

Simulation

Ready. Press Start to explore the line maze, or Step one move at a time.

Phase
Ready
Junction
—
Explored turns
— moves
Simplified turns
— moves
Saved
—
Maze
—

Keyboard: focus the maze, then use Space to run/pause, N to step, R to reset, M for a new maze, and F for full screen.

Controles

Modo permite alternar entre la ejecución completa en tres actos (exploración, simplificación y carrera rápida) o saltar directamente a la ruta resuelta. Velocidad de ejecución gradúa la rapidez de marcha. Iniciar, Pausar y Paso ejecutan la simulación de forma continua o movimiento a movimiento, Restablecer repite el mismo laberinto y Nuevo laberinto genera una distribución procedural diferente. Con el foco en el lienzo, usa Espacio, N, R, M y F para los controles equivalentes de teclado.

La franja de memoria de ruta bajo el laberinto es el elemento visual más revelador: añade un símbolo por maniobra durante la marcha y se reescribe dinámicamente al aplicar las sustituciones en la fase de simplificación.

Teoría

Un robot de laberinto de líneas opera dividiendo su control en dos capas bien diferenciadas:

La capa inferior actúa como un seguidor de línea clásico. Una matriz de reflectancia de ocho canales lee la cinta, las mediciones se reducen a un error ponderado central y un lazo PID modula la velocidad de ambas ruedas. Esta capa no gestiona la lógica del laberinto.

La capa superior se activa exclusivamente ante discontinuidades de la cinta. Clasifica la intersección (izquierda, derecha, T, cruz, fondo de saco o meta), selecciona la opción según la regla de la mano izquierda y registra el símbolo en la memoria. La barra frontal representada sobre el robot en el simulador ilustra la activación de los sensores en tiempo real.

El desafío radica en la ambigüedad del instante de cruce: una T, una cruz y la casilla de meta saturan todos los sensores en negro. El robot debe franquear el cruce unos milímetros y contrastar si la línea recta continúa.

Algoritmo

La fase de exploración implementa la regla de la mano izquierda: ante cualquier cruce, toma la alternativa más a la izquierda disponible y solo retrocede si encuentra un callejón sin salida. En laberintos sin ciclos, garantiza alcanzar la meta sin estados complejos.

Cada decisión añade un símbolo: L (izquierda), S (recto) y R (derecha) representan giros; B (retroceso de 180°) aparece únicamente al regresar de un callejón cerrado. Cada B en la cadena representa un error de exploración, acotado entre el giro de entrada y el de salida.

Esa terna de caracteres puede sustituirse por un único giro equivalente sumando algebraicamente sus ángulos de orientación (−90° para izquierda, 0° para recto, +90° para derecha y 180° para retroceso). Por ejemplo, L B L equivale a 0° (S): avanzar en línea recta omitiendo ingresar al callejón. Las seis reglas de simplificación tabulan dicha equivalencia.

Una sola pasada no resulta suficiente: eliminar un desvío puede juntar dos giros adyacentes formando una nueva terna simplificable, por lo que el algoritmo itera hasta que la cadena no experimenta cambios. Al concluir, ninguna B subsiste en el registro, certificando que se ha obtenido la ruta directa.

Código fuente

// Repeat until a full pass changes nothing: collapsing one detour
// can push two turns together that are themselves reducible.
void simplify(String& route) {
  bool changed = true;
  while (changed) {
    changed = false;
    for (int i = 1; i + 1 < route.length(); i++) {
      if (route[i] != 'B') continue;          // windows centre on a turn-back
      route = route.substring(0, i - 1)
            + fold(route[i - 1], route[i + 1])
            + route.substring(i + 2);
      changed = true;
      break;
    }
  }
}

La función auxiliar fold contiene la tabla de sustitución basada en aritmética angular: suma los ángulos correspondientes a los giros adyacentes al retroceso de 180°, normaliza el resultado al rango de ±180° y devuelve el carácter simplificado correspondiente.

Suposiciones y diferencias con el hardware

La cinta se modela como negro absoluto sobre blanco perfecto sin arrugas, brillos ni sombras parásitas, y los sensores entregan valores binarios ideales a altura invariable. Una matriz física registra niveles analógicos de escala de grises influenciados por iluminación ambiente, desgaste de la cinta y ondulaciones del terreno, requiriendo un barrido de calibración previo. En hardware, el deslizamiento de rueda y ligeros desajustes mecánicos pueden provocar errores de clasificación en intersecciones si los umbrales no están bien filtrados.

Diagrama de circuito

El modelo emula el sistema desarrollado en la guía de construcción del robot solucionador de laberintos de líneas: un Arduino Nano leyendo una matriz reflectiva de ocho canales mediante entradas analógicas y controlando dos motores con reductora mediante un driver TB6612FNG.

La precaución eléctrica esencial consiste en aislar la alimentación de potencia: la batería de tracción alimenta exclusivamente el pin VM del puente H, mientras que los 5 V del microcontrolador alimentan la electrónica de control, asegurando una unión equipotencial en la línea de masa (GND).

Lista de hardware

Componentes

  • Arduino Nano o Uno
  • Matriz de sensores de reflectancia IR de ocho canales
  • Driver dual de motores TB6612FNG
  • Dos motorreductores de CC sobre chasis 2WD
  • Cinta aislante negra sobre tablero de fondo claro

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

¿Qué es un robot de laberinto de líneas?

Es un seguidor de línea con una capa superior de toma de decisiones. La capa inferior mantiene al robot centrado sobre la cinta negra mediante una matriz de reflectancia y un lazo PID, tal como un seguidor convencional. La capa superior detecta cuándo la cinta se bifurca, clasifica el tipo de intersección, elige un ramal y registra la maniobra. Ese registro histórico le permite recorrer el laberinto por segunda vez sin cometer un solo error.

¿En qué se diferencia de un laberinto tipo Micromouse?

El entorno y los sensores son totalmente distintos. Un laberinto de líneas consiste en cinta negra sobre superficie clara leída por sensores ópticos cenitales; un laberinto Micromouse consta de paredes físicas verticales detectadas por sensores de distancia. Lo que comparten es la estrategia: explorar para mapear y recorrer luego la ruta más corta. El laberinto de líneas resulta mucho más económico de construir, siendo el estándar en certámenes escolares y universitarios.

¿Qué significa la sigla LSRB?

Izquierda (Left), Recto (Straight), Derecha (Right) y Retroceso (Back): las cuatro decisiones posibles ante una intersección. El robot añade un carácter por maniobra durante la exploración, y cada 'B' identifica un callejón sin salida del que tuvo que retroceder. Seis reglas de sustitución reemplazan secuencias de tres caracteres centradas en 'B' por el giro equivalente directo, eliminando el desvío por completo.

¿Por qué el robot no puede decidir en el instante exacto en que detecta la bifurcación?

Porque la lectura sensorial instantánea es ambigua. Una intersección en T, un cruce de cuatro vías y la marca de meta activan todos los sensores simultáneamente; asimismo, un ramal izquierdo arroja la misma lectura tanto si la línea continúa al frente como si no. El robot debe registrar qué ramas aparecieron, avanzar la longitud de su propio chasis y verificar si el camino recto persiste. Decidir en la primera lectura es el error más recurrente.

¿El método LSRB funciona en cualquier clase de laberinto?

Solo en laberintos perfectos: aquellos que carecen de bucles o islas y donde dos puntos cualesquiera se conectan por una ruta única. Los laberintos de competencia sobre cinta suelen ser de este tipo. Si el laberinto contiene ciclos cerrados, la regla de la mano izquierda entraría en un bucle infinito; en tales casos se requiere un mapa completo y algoritmos de grafos como flood-fill.

¿Cuánta memoria consume este algoritmo en un microcontrolador Arduino?

Prácticamente nada, lo que constituye su mayor ventaja. Todo el mapa se resume en un arreglo de caracteres (unas pocas decenas de bytes para pistas de concurso), pues no memoriza la topología geométrica, sino únicamente la secuencia de decisiones tomadas. En contraste, un algoritmo flood-fill almacena una matriz de costos celda a celda.

Lecturas adicionales

Referencias

Fuentes autorizadas para profundizar más allá del modelo educativo acotado de este simulador.