Doolhofoplosser-simulatie voor flood-fill-planning
Doolhofrobot in je browser: verkent gangen en dode wegen, vul dan de kaart met flood fill om het kortste pad te vinden en snel af te rennen.
- Categorie
- ESP32
- Tijd
- 2–4 uur
- Platform
- Browser · ESP32
01 / Begin hier
Inleiding
Doolhofrobots verkennen eerst en optimaliseren daarna. Dit lab toont beide fasen: de robot loopt de doolhof diepte-eerst af — elke gang in, doodlopende wegen in en weer terug — tot alles in kaart staat, en past dan vanaf het doel flood fill toe om het ene kortste pad te vinden en af te rennen. Zie hem alle foute paden proberen en dan het juiste nemen — hetzelfde idee dat een echte ESP32-Micromouse gebruikt.
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.
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
- 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.
Bediening
Kies een modus — Verkennen en dan afrennen of Alleen afrennen — en druk op Start om hem te zien oplossen, of gebruik Stap om zet voor zet te volgen. Nieuwe doolhof bouwt een verse willekeurige doolhof; Opnieuw speelt dezelfde doolhof opnieuw af. Drie snelheden, sneltoetsen en Volledig scherm houden de run beheersbaar. Vetgedrukte lijnen zijn de muren van de doolhof, de gearceerde gangen zijn overal waar de robot heeft verkend (doodlopende wegen inbegrepen), en de vetgedrukte lijn is het kortste pad dat flood fill heeft gevonden.
Theorie
Een rasterdoolhof bestaat uit cellen die door open zijden met elkaar verbonden zijn, met muren tussen de rest. Om de kortste route te vinden moet een robot de doolhof eerst kennen — daarom draait dit lab twee fasen.
Verkennen. De robot loopt de doolhof diepte-eerst met een linkerhandregel: bij elke kruising slaat hij linksaf als dat kan, anders rechtdoor, en dan rechtsaf. Bij een doodlopende weg keert hij terug naar de laatste kruising en neemt hij de volgende tak. Dat herhalen tot elke cel bezocht is, brengt de hele doolhof in kaart — inclusief alle verkeerde paden die hij moest uitsluiten.
Optimaliseren. Met de kaart compleet kent een flood fill het doel afstand nul toe en verspreidt het oplopende waarden naar buiten langs elke open zijde. Elke cel bevat nu zijn afstand tot het doel, dus het kortste pad is eenvoudig dit: ga vanaf het startpunt steeds naar een buurcel met een getal lager. De robot rent dat pad af — veel korter dan de zwerpende verkenning.
Algoritme
- Verken de doolhof diepte-eerst met een linkerhandregel, terugkerend uit elke doodlopende weg, tot alle cellen bezocht zijn.
- Leg elke open zijde aan beide kanten vast, zodat de afgeronde kaart elke muur kent.
- Flood-fill vanaf het doel: label het 0 en verspreid oplopende afstanden naar buiten langs elke open zijde.
- Lees het kortste pad van het veld af: ga vanaf het startpunt steeds naar een buurcel waarvan de afstand één lager is.
- Ren dat pad af naar het doel.
- Vergelijk de lengte van de verkenning met die van het kortste pad om te zien hoeveel zweren de kaart heeft bespaard.
Broncode
Splits verkennen, in kaart brengen, plannen en bewegen in afzonderlijke functies:
// 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
Die scheiding maakt dezelfde planner testbaar in dit browserlab, op een desktop en op de uiteindelijke ESP32-controller.
Aannames en hardwareverschillen
Het lab maakt het in kaart brengen overzichtelijk door het lastige deel van een echte Micromouse weg te nemen: de odometrie. De gesimuleerde robot beweegt precies één cel per stap, zonder wielslip, zonder gyro-afwijking en zonder fout bij het 90° draaien, en zijn drie afstandssensoren melden muren perfect, zonder fout-positieven. Een fysieke ESP32-build accumuleert bij elke stap fouten in richting en afstand, moet opnieuw rechtzetten tegen de muren en moet ToF-metingen filteren tegen zonlicht en spanningsval — en daarom besteden de tutorial over precieze bochten en de flood-fill-handleiding meer tijd aan beweging dan aan planning. Gebruik deze simulatie om te begrijpen waarom flood fill opnieuw plant, niet om je bewegingslaag te bewijzen.
Schakelschema
Gebruik een externe spanningsregelaar die gedimensioneerd is op de vastloopstroom van de motor. De ESP32 en de sensoren hebben een stabiele logische voeding nodig, ook wanneer de motoren omkeren.
Hardwarechecklist
Componenten
- ESP32-ontwikkelbord
- Drie time-of-flight- of infraroodafstandssensoren
- Twee gelijkstroommotoren met encoder en tandwieloverbrenging
- Dubbele motordriver en geregelde batterijvoeding
- Compact differentiaalonderstel
Verken de graaf
Waar deze simulator wordt gebruikt
De projecten, leerroutes en tutorials die op dit lab voortbouwen.
Verder bouwen
Hulpmiddelen downloaden
Gebruik deze naslag op de pagina terwijl je het project doorwerkt. Downloadbare projectpakketten komen er pas bij nadat hun broncode en versie zijn gepubliceerd.
Veelgestelde vragen
Veelgestelde vragen
Welk doolhofalgoritme is het beste voor een eerste robot?
Een diepte-eerste verkenning om de doolhof in kaart te brengen, en daarna een flood fill om het kortste pad te vinden. Flood fill is een sterke keuze voor de les, omdat elke bereikbare cel een afstandwaarde krijgt en elke stap te controleren is. Deze simulatie verkent eerst en vult daarna de afgeronde kaart, zodat zowel het in kaart brengen als de planning van het kortste pad helder blijft.
Hoe vindt een doolhofrobot het kortste pad?
Hij kan het kortste pad niet kennen voordat hij de doolhof heeft gezien, dus verkent hij eerst. Deze simulatie gebruikt, net als een echte Micromouse, twee fasen: een verkenning die elke gang en elke doodlopende weg afloopt om de hele doolhof in kaart te brengen, en daarna een snelle rit langs het ene kortste pad dat de flood fill over de afgeronde kaart oplevert. De eerste fase is grondig en traag; de tweede is kort en optimaal.
Hoe verschilt flood fill van BFS of A*?
BFS en A* plannen over een grafiek die je al kent. Flood fill is ontworpen voor een doolhof die je nog aan het verkennen bent: het kent het doel afstand nul toe en vult steeds grotere waarden naar buiten langs elke zijde die niet geblokkeerd blijkt, en herberekent zodra een nieuw waargenomen muur de kaart verandert. Het afstandsveld zelf codeert de route, dus de robot stapt simpelweg naar elke buurcel met een lagere waarde.
Wat is het verschil tussen verkennen en afrennen?
Verkennen brengt de doolhof in kaart: de robot loopt diepte-eerst elke gang en elke doodlopende weg in en keert terug uit de verkeerde, tot hij elke muur kent — en daar zie je hem alle verkeerde paden proberen. Afrennen gebruikt die afgeronde kaart: een flood fill maakt er een afstandsveld van, en de robot volgt het ene kortste pad van start naar doel. Verkennen is traag en grondig; afrennen is kort en optimaal.
Welke sensoren heeft een Micromouse of doolhofrobot nodig?
Op zijn minst afstandssensoren die naar links, voren en rechts kijken om de muren van de huidige cel te classificeren, plus wielencoders om een nauwkeurig aantal cellen af te leggen en bochten recht te zetten. Time-of-flight- of infraroodafstandssensoren zijn gangbaar; encoders zijn belangrijk omdat muurherkenning op zichzelf niet vertelt hoe ver je hebt gereisd.
Waarom flood fill in plaats van muurvolgen?
Muurvolgen (steeds één muur blijven aanraken) is eenvoudig maar bereikt geen doel dat niet aan de buitenmuur vastzit, zoals het midden van een Micromouse-doolhof, en het vindt zelden een korte route. Flood fill bouwt een afstandskaart van de hele bekende doolhof, dus het kan een doel in het binnenste bereiken en stap voor stap dichter bij het kortste pad komen naarmate het verkent.
Verder lezen
Bronnen
Gezaghebbende bronnen om dieper te gaan dan het afgebakende leermodel van deze simulator.