Simulatore interattivoIntermedio

Simulatore di risolutore di labirinto con flood fill

Nel browser, un robot risolutore esplora corridoi e vicoli ciechi, poi applica il flood fill alla mappa per trovare e percorrere l'unico percorso più breve.

Categoria
ESP32
Tempo
2–4 ore
Piattaforma
Browser · ESP32
Schema tecnico: Simulatore di risolutore di labirinto con flood fillWALL SENSING → FLOOD FILL

01 / Inizia qui

Introduzione

I robot che risolvono labirinti prima esplorano, poi ottimizzano. Questo laboratorio mostra il robot che percorre ogni corridoio e vicolo cieco, torna indietro finché tutto il labirinto è mappato e poi applica il flood fill dall'obiettivo per trovare e percorrere a velocità l'unico percorso più breve. Guardalo provare rotte sbagliate prima di scegliere quella giusta, come un vero Micromouse con ESP32.

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.

Controlli

Scegli una modalità — Esplora, poi corri o Solo corsa rapida — e premi Avvia per guardarlo risolvere, oppure Passo una mossa alla volta. Nuovo labirinto costruisce un nuovo labirinto casuale; Reimposta riproduce quello stesso. Tre velocità, scorciatoie da tastiera e Schermo intero mantengono controllabile l’esecuzione. Le linee in grassetto sono i muri del labirinto, i corridoi ombreggiati sono ovunque il robot ha esplorato (vicoli ciechi inclusi) e la linea in grassetto è il percorso più breve trovato dal flood fill.

Teoria

Un labirinto a griglia è fatto di celle collegate da bordi aperti, con muri tra tutte le altre. Per trovare la rotta più breve un robot deve prima conoscere il labirinto, quindi questo laboratorio esegue due fasi.

Esplora. Il robot percorre il labirinto in profondità con la regola della mano sinistra: a ogni giunzione gira a sinistra se può, altrimenti va dritto e poi a destra. Quando incontra un vicolo cieco torna all’ultima giunzione e prende il ramo successivo. Ripetere l’operazione finché ogni cella è stata visitata mappa l’intero labirinto, inclusi tutti i percorsi sbagliati che ha dovuto escludere.

Ottimizza. Con la mappa completa, un flood fill assegna alla destinazione distanza zero e propaga valori crescenti verso l’esterno attraverso ogni bordo aperto. Ogni cella contiene ora la propria distanza dalla destinazione, quindi il percorso più breve è semplice: dalla partenza, passa sempre a un vicino con un numero inferiore di uno. Il robot percorre a velocità quel percorso, molto più corto dell’esplorazione con divagazioni.

Griglia otto per otto colorata in base alla distanza flood-fill dal centro. Le quattro celle centrali della destinazione sono contrassegnate e etichettate zero e ogni cella circostante mostra un numero crescente pari alla distanza in passi dalla destinazione, formando un gradiente fluido verso sei agli angoli.
Il flood fill etichetta ogni cella con la sua distanza dalla destinazione. Il robot passa sempre a un vicino con numero inferiore di uno, quindi il campo stesso codifica la rotta. Scarica SVG

Algoritmo

  1. Esplora il labirinto in profondità con la regola della mano sinistra, tornando indietro da ogni vicolo cieco finché tutte le celle sono visitate.
  2. Registra ogni bordo aperto su entrambi i lati, così la mappa finale conosce ogni muro.
  3. Applica il flood fill dalla destinazione: etichettala 0 e propaga distanze crescenti verso l’esterno attraverso ogni bordo aperto.
  4. Leggi il percorso più breve dal campo: dalla partenza, passa ripetutamente a un vicino la cui distanza è inferiore di uno.
  5. Corri a velocità lungo quel percorso fino alla destinazione.
  6. Confronta la lunghezza dell’esplorazione con quella del percorso più breve per vedere quanta divagazione abbia evitato la mappa.

Codice sorgente

Mantieni esplorazione, mappatura, pianificazione e movimento come funzioni separate:

// 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

Questo confine rende lo stesso pianificatore testabile in questo laboratorio nel browser, su un desktop e sul controllore ESP32 finale.

Ipotesi e differenze hardware

Il laboratorio rende pulita la mappatura eliminando la parte difficile di un vero Micromouse: l’odometria. Il robot simulato si muove esattamente di una cella per passo senza slittamento delle ruote, bias del giroscopio o errore di inversione a 90°, e i suoi tre sensori di distanza riportano i muri perfettamente senza falsi positivi. Una realizzazione ESP32 fisica accumula errore di orientamento e distanza a ogni mossa, deve riallinearsi rispetto ai muri e deve filtrare le letture ToF contro la luce del sole e il calo dell’alimentazione — ed è per questo che il tutorial sulle inversioni precise e la guida al flood fill dedicano più tempo al movimento che alla pianificazione. Usa questo simulatore per capire perché il flood fill ripianifica, non per dimostrare il tuo strato di movimento.

Schema elettrico

Usa un regolatore esterno dimensionato per la corrente di stallo dei motori. ESP32 e sensori necessitano di una pista logica stabile anche quando i motori si invertono.

Diagramma a blocchi del cablaggio del robot da labirinto. I sensori di distanza sinistro, frontale e destro raggiungono un ESP32 tramite I²C o GPIO, gli encoder delle ruote tramite GPIO capaci di interrupt e l'ESP32 comanda un driver dei motori tramite PWM e linee di direzione, il driver alimenta i motori.
L'ESP32 legge tre sensori di distanza e gli encoder, poi comanda i motori tramite un driver su un'alimentazione dimensionata per la corrente di stallo. Scarica SVG

Checklist hardware

Componenti

  • Scheda di sviluppo ESP32
  • Tre sensori di distanza a tempo di volo o a infrarossi
  • Due motori con riduttore e encoder
  • Driver doppio del motore e alimentazione a batteria regolata
  • Telaio compatto a trazione differenziale

Esplora il grafo

Dove si usa questo simulatore

I progetti, i percorsi di apprendimento e i tutorial che si basano su questo laboratorio.

Continua a costruire

Scarica le risorse

Usa questi riferimenti nella pagina mentre lavori al progetto. I pacchetti di progetto scaricabili verranno aggiunti solo dopo la pubblicazione del loro codice sorgente e della loro versione.

Domande comuni

Domande frequenti

Quale algoritmo di labirinto è migliore per un primo robot?

Un'esplorazione in profondità per mappare il labirinto, poi un flood fill per trovare il percorso più breve. Il flood fill è una scelta didattica forte perché assegna un valore di distanza a ogni cella raggiungibile e ogni mossa può essere ispezionata. Questo simulatore esplora prima e poi applica il flood fill alla mappa completata, così mappatura e pianificazione del percorso più breve restano chiare.

Come trova un robot da labirinto il percorso più breve?

Non può conoscere il percorso più breve finché non ha visto il labirinto, quindi prima esplora. Questo simulatore, come un vero Micromouse, usa due fasi: un'esecuzione di esplorazione che percorre ogni corridoio e vicolo cieco per mappare tutto il labirinto, poi una corsa rapida lungo l'unico percorso più breve che il flood fill della mappa completata rivela. La prima fase è approfondita e lenta; la seconda è breve e ottimale.

In che modo il flood fill differisce da BFS o A*?

BFS e A* pianificano su un grafo già noto. Il flood fill è progettato per un labirinto che stai ancora scoprendo: assegna alla destinazione distanza zero e propaga valori crescenti verso l'esterno attraverso ogni bordo non noto come bloccato, poi ricalcola ogni volta che un muro appena percepito modifica la mappa. Il campo delle distanze stesso codifica la rotta, quindi il robot basta che passi a un vicino con valore inferiore di uno.

Qual è la differenza tra le fasi di esplorazione e corsa rapida?

L'esplorazione mappa il labirinto: il robot percorre in profondità ogni corridoio e vicolo cieco, torna indietro da quelli sbagliati finché non conosce ogni muro — è lì che lo vedi provare tutte le rotte sbagliate. La corsa rapida usa quella mappa finita: un flood fill la trasforma in un campo di distanze e il robot segue l'unico percorso più breve dalla partenza alla destinazione. Esplorare è lento e approfondito; la corsa rapida è breve e ottimale.

Quali sensori servono a un Micromouse o a un robot da labirinto?

Servono almeno sensori di distanza rivolti a sinistra, davanti e a destra per classificare i muri della cella corrente, più encoder delle ruote per spostarsi di un numero preciso di celle e riallineare le inversioni. I sensori di distanza a tempo di volo o a infrarossi sono comuni; gli encoder contano perché la sola percezione dei muri non dice quanto si è percorso.

Perché usare il flood fill invece di seguire il muro?

Seguire il muro (tenere sempre una mano appoggiata a un muro) è semplice, ma non può raggiungere un obiettivo non collegato al muro esterno, come il centro di un labirinto Micromouse, e raramente trova una rotta breve. Il flood fill costruisce una mappa delle distanze dell'intero labirinto noto, quindi può raggiungere un obiettivo interno e migliorare verso il percorso più breve mentre esplora.

Per approfondire

Fonti

Fonti autorevoli per andare oltre il modello didattico, volutamente limitato, di questo simulatore.