Simulador interactivoIntermedio

Simulador de robot de laberintos con flood-fill

Ejecuta un robot de laberintos en el navegador: observa cómo explora pasillos y callejones, y usa flood-fill para hallar y recorrer la ruta más corta.

Categoría
ESP32
Tiempo
2–4 horas
Plataforma
Browser · ESP32
Esquema técnico de Simulador de robot de laberintos con flood-fillWALL SENSING → FLOOD FILL

01 / Empieza aquí

Introducción

Los robots de laberinto primero exploran y luego optimizan. Este simulador ilustra ambas fases: el robot recorre el laberinto en profundidad explorando cada pasillo y callejón sin salida hasta mapearlo por completo; luego aplica flood-fill desde la meta para identificar la ruta más corta y recorrerla velozmente. Es la misma estrategia de exploración y optimización que emplea un robot Micromouse real.

Live lab / Maze exploration & flood-fill shortest path

Maze solver simulator

Watch a robot explore a real maze — down every corridor, into dead ends, backtracking out — then flood-fill the map and speed-run the one shortest path to the centre.

Browser native
A twelve-by-twelve maze solver lab. A robot starts in the bottom-left corner, explores the maze depth-first — backtracking out of dead ends — then flood-fills to find and run the shortest path to the centre. Use the controls below to run it one move at a time.

Bold lines are maze walls. The shaded corridors are everywhere the robot explored (including dead ends it backtracked out of); the bold line is the shortest path found by flood fill; the triangle is the robot and its heading.

  • Wall
  • Explored (wrong paths)
  • Shortest path
  • Goal
Simulation

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

Phase
Ready
Explored
1 / 144
Exploration
— moves
Shortest path
— 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

Selecciona un modo (Explorar y carrera rápida o Solo carrera rápida) y pulsa Iniciar para ver la resolución, o usa el botón Paso para avanzar celda a celda. Nuevo laberinto genera una configuración procedural aleatoria; Restablecer repite el escenario actual. Tres velocidades de ejecución, atajos de teclado y vista en pantalla completa facilitan el análisis. Las líneas gruesas delimitan las paredes, las zonas sombreadas señalan los pasillos explorados (incluyendo fondos de saco) y el trazo destacado exhibe la ruta mínima hallada por flood-fill.

Teoría

Un laberinto en cuadrícula está formado por celdas interconectadas por pasos abiertos, separadas por paredes en las aristas restantes. Para hallar el camino más corto, el robot debe mapear primero el entorno en dos fases secuenciales:

Exploración. El robot recorre la cuadrícula en profundidad guiándose por la regla de la mano izquierda: en cada encrucijada gira a la izquierda si el paso está abierto, de lo contrario avanza de frente, y si no, hacia la derecha. Ante un callejón cerrado, retrocede hasta la bifurcación anterior y explora la rama restante. La iteración exhaustiva permite registrar todos los muros del laberinto.

Optimización. Con el mapa consolidado, el algoritmo flood-fill asigna distancia cero a la meta y propaga valores numéricos crecientes a través de cada arista transitable. Cada celda almacena así su distancia métrica a la meta; la ruta más corta consiste simplemente en desplazarse en cada celda hacia un vecino con valor numérico inferior.

Cuadrícula de ocho por ocho coloreada según la distancia flood-fill hacia el centro. Las cuatro celdas de meta centrales están enmarcadas con valor cero, y cada celda circundante muestra un número creciente igual a su distancia en pasos hasta la meta, formando un gradiente hacia las esquinas con valor seis.
Flood-fill etiqueta cada celda con su distancia al objetivo. El robot avanza siempre a un vecino con valor inferior, codificando el propio gradiente la ruta óptima. Descargar SVG

Algoritmo

  1. Explorar el laberinto en profundidad aplicando la regla de la mano izquierda y retrocediendo de los callejones sin salida hasta visitar todas las celdas.
  2. Registrar cada arista abierta bidireccionalmente para consolidar el mapa de obstáculos.
  3. Ejecutar flood-fill desde la meta: fijar su potencial en 0 e irradiar distancias crecientes a través de los pasos libres.
  4. Trazar la ruta óptima: partiendo del inicio, seleccionar reiteradamente la celda contigua de menor valor numérico.
  5. Ejecutar la carrera rápida recorriendo dicha trayectoria calculada.
  6. Comparar la longitud del trayecto exploratorio frente a la ruta óptima para constatar la eficiencia del algoritmo.

Código fuente

Estructura el software separando con claridad exploración, mapeo, planificación y control cinemático:

// Phase 1 — map the whole maze, backtracking out of dead ends
exploreDepthFirst(map, robot);        // left-hand rule until every cell is visited

// Phase 2 — flood-fill the finished map and run the shortest path
map.floodFill(goal);                  // goal = 0, distances ripple outward
for (Cell c = start; c != goal; c = map.lowerNeighbor(c))
  robot.driveTo(c);                   // always step one distance lower

Esta modularidad permite evaluar el mismo algoritmo de planificación en este simulador de navegador, en pruebas sobre escritorio y finalmente en el microcontrolador ESP32 físico.

Suposiciones y diferencias con el hardware

El simulador aísla la lógica de planificación eliminando el mayor obstáculo de un robot físico: los errores de odometría. El modelo virtual avanza exactamente una celda por paso sin derrape de ruedas, deriva angular ni desviaciones en giros ortogonales, y sus tres telémetros reportan muros con precisión binaria perfecta. Un chasis físico con ESP32 acumula errores de rumbo y traslación en cada maniobra, debiendo realinearse contra los muros y filtrar las lecturas de los sensores ToF frente a reflejos y variaciones lumínicas; aspectos tratados en el tutorial de giros precisos y en la guía de flood-fill.

Diagrama de circuito

Emplea un regulador de tensión externo dimensionado para soportar la corriente de calado de los motores. El microcontrolador ESP32 y los sensores de proximidad demandan un riel de alimentación lógica inmune a las caídas de tensión inducidas por las conmutaciones del puente H.

Diagrama de bloques del cableado del robot de laberinto. Sensores de distancia izquierdo, frontal y derecho conectan al ESP32 por I²C o GPIO, encoders de rueda conectan por pines con interrupción, y el ESP32 comanda el driver por PWM y líneas de dirección para gobernar los motores.
El ESP32 procesa tres telémetros y los encoders de cuadratura, gobernando los motores mediante un driver alimentado con capacidad para corriente de bloqueo. Descargar SVG

Lista de hardware

Componentes

  • Placa de desarrollo ESP32
  • Tres sensores de distancia de tiempo de vuelo o infrarrojos
  • Dos motores con reductora equipados con encoder
  • Driver dual de motores y fuente regulada con batería
  • Chasis compacto de tracción diferencial

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é algoritmo de resolución es más adecuado para un primer robot de laberinto?

Una exploración en profundidad para levantar el mapa, combinada con el algoritmo flood-fill para determinar la ruta más corta. Flood-fill es idóneo con fines formativos porque asigna a cada celda accesible un valor de distancia observable paso a paso. Este simulador separa nítidamente la fase de mapeo de la fase de planificación de la trayectoria óptima.

¿Cómo descubre el robot la ruta más corta?

No puede conocer el camino óptimo a priori sin haber recorrido el entorno. Al igual que un Micromouse de competición, opera en dos etapas: una fase exploratoria sistemática que recorre pasillos y callejones para construir el mapa, y una carrera rápida sobre la ruta más corta revelada por flood-fill. La primera fase es exhaustiva y pausada; la segunda es directa y de tiempo mínimo.

¿En qué se diferencia flood-fill de algoritmos como BFS o A*?

BFS y A* operan sobre un grafo previamente conocido en su totalidad. Flood-fill está concebido para laberintos descubiertos progresivamente: asigna distancia cero a la meta y propaga valores crecientes hacia afuera a través de bordes despejados, recalculando cuando un nuevo muro detectado altera la topología. El campo de distancias codifica la ruta directamente: el robot avanza siempre a cualquier celda vecina con un valor inferior.

¿Cuál es la diferencia entre las fases de exploración y de carrera rápida?

La exploración construye el mapa: el robot inspecciona en profundidad cada pasillo y desanda callejones sin salida erróneos hasta registrar cada pared. La carrera rápida aprovecha ese mapa consolidado: el algoritmo flood-fill lo transforma en un campo de potenciales discretos y el robot viaja directamente del origen a la meta sin titubeos.

¿Qué instrumental sensorial requiere un robot Micromouse?

Como mínimo, sensores de distancia orientados al frente, izquierda y derecha para clasificar las paredes de la celda actual, sumados a encoders de rueda para cuantificar el avance celda a celda y cuadrar los giros ortogonales a 90°. Los sensores ToF o infrarrojos son los más comunes; los encoders son críticos porque los telémetros por sí solos no informan la distancia de traslación.

¿Por qué emplear flood-fill en lugar del seguimiento de paredes?

El seguimiento de pared (mano derecha o izquierda continua) es simple pero no puede alcanzar metas aisladas del perímetro exterior (como la meta central de un Micromouse) y rara vez genera la trayectoria más corta. Flood-fill elabora un mapa integral de distancias del laberinto explorado, permitiendo alcanzar objetivos interiores y refinar la ruta óptima.

Lecturas adicionales

Referencias

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