BaupfadFortgeschrittenEin paar Wochenenden

Micromouse bauen: Labyrinth-Roboter mit Flood-Fill

Ein Roboter, der selbstständig ein Wandlabyrinth erkundet, eine Karte davon baut und dann die kürzeste Route von Start bis Mitte ohne Fehlabbiegung fährt.

Technisches Schema: Micromouse bauen: Labyrinth-Roboter mit Flood-FillWALL SENSING → FLOOD FILL

Was du baust

Einen Roboter, der in ein nie gesehenes Labyrinth gesetzt wird, die Mitte findet und dann auf der kürzesten Route zurückfährt, deren Existenz er beweisen kann.

Diese zweite Hälfte unterscheidet eine Micromouse von jedem anderen Roboter dieser Seite. Ein Linienfolger reagiert. Ein Ausweicher reagiert. Eine Micromouse erinnert sich – sie baut beim Fahren eine Karte und plant dann über Zellen, die sie nicht besucht hat. Es ist das kleinste komplette Robotikproblem: Sensorik, Bewegung, Kartierung und Planung – alles muss auf einmal gehen.

Die Zwei-Lauf-Strategie

Wettbewerbsmäuse bekommen mehrere Läufe und werden nach dem schnellsten gewertet. Daraus entsteht eine Strategie, die sich auch ohne Zeitnahme zu kopieren lohnt:

Lauf eins – erkunden. Vorsichtig fahren, aufzeichnen, welche Zellen welche Wände haben, und die Mitte erreichen. Tempo ist egal; die Karte ist das Produkt.

Lauf zwei – ausnutzen. Fertige Karte per Flood-Fill fluten, kürzeste Route berechnen und fahren, ohne anzuhalten, um schon Bekanntes zu tasten.

Die Trennung zählt, weil beide Läufe Gegensätzliches wollen. Erkunden will langsame, vorsichtige Bewegung und ständiges Tasten. Schnelllaufen will Entschlossenheit. Beides auf einmal zu versuchen ergibt einen Roboter, der beides schlecht kann.

Warum der Algorithmus nicht der schwere Teil ist

Flood-Fill ist wirklich simpel: Gib der Zielzelle Distanz 0, jedem Nachbarn 1 mehr als dem niedrigsten erreichbaren Nachbarn, und schreite dann immer zu einer niedrigeren Zahl. Es sind wenige Dutzend Zeilen, und auf einem Gitter ist es beweisbar kürzest.

Der schwere Teil ist, dass er voraussetzt, dass der Roboter weiß, in welcher Zelle er ist.

Eine falsch gezählte Zelle oder ein paar Mal 88° statt 90° gedreht, und der Planer löst nun das Labyrinth für einen Roboter, der woanders ist. Das Symptom macht wahnsinnig: Der Algorithmus ist perfekt, die Verdrahtung in Ordnung, und der Roboter fährt selbstbewusst in eine Wand.

Also steckt die Baureihenfolge unten den größten Aufwand in Bewegung und fügt den Planer zuletzt hinzu. Den Planer beweist du separat im Labyrinthlöser-Simulator, wo Position konstruktionsbedingt exakt ist – genau deshalb lohnt sich dortiges Simulieren zuerst.

Stückliste

Bauteil Menge Ca. Kosten Hinweise
Arduino Uno oder Nano 1 $5 Knapp im RAM – ein 16×16-Labyrinth braucht Sorgfalt. Ein Mega oder ESP32 nimmt die Sorge
VL53L0X 3 $15 Links, vorn, rechts. Drei, nicht einer – siehe unten
MPU-6050 1 $2 Steuerkurs durch Drehungen; Räder schrubben genau dann, wenn es zählt
N20-Encodermotoren 2 $16 1:50 oder 1:100. Metallgetriebe ist essenziell – Spiel summiert sich pro Drehung
TB6612FNG 1 $3
2WD-Chassis 1 $10 Muss mit Freiraum in eine Labyrinthzelle passen – unter etwa 90 mm breit
Akkupack 1 $8 2×18650
Labyrinthwände — $10–30 Schaumplatte oder Sperrholz. Standardzellen sind 180 mm mit 50-mm-Wänden

Gesamt: ca. $70–95, plus Labyrinth.

Drei Distanzsensoren, nicht einer. Ein einzelner Frontsensor zwingt den Roboter zum Drehen, um zu schauen – was Zeit kostet und, weit schlimmer, bei jeder Beobachtung Steuerkursfehler einführt. Drei feste Sensoren lassen den Roboter alle drei Wände einer Zelle in einem Moment lesen, ohne sich zu bewegen. Das ist der Unterschied zwischen einer Maus, die verlässlich kartiert, und einer, die bei jeder Wandprüfung Fehler anhäuft.

Denke daran, dass alle drei VL53L0X-Sensoren auf Adresse 0x29 hochkommen – du brauchst also drei GPIOs an XSHUT, um sie nacheinander hochzufahren und Adressen neu zu vergeben – und das bei jedem Boot neu, weil die Änderung flüchtig ist.

Achte auf den RAM. Ein 16×16-Flood-Fill-Distanzfeld als uint8_t gespeichert sind 256 Byte, plus Wandkarte, plus Queue. Auf 2 KB eines Uno passt das – aber nur absichtlich, was selbst eine gute Übung ist und ein Grund, warum viele hier zum ESP32 wechseln.

Baureihenfolge

1 – Drei saubere Distanzmesswerte besorgen. Vorn, links, rechts, per VL53L0X-Time-of-Flight-Sensoren. Sie teilen einen I²C-Bus und booten auf derselben Adresse – also einen nach dem anderen hochfahren, indem du die anderen in Reset hältst und beim Start Adressen neu vergibst. Jeden an einer Wand bekannter Distanz bestätigen, bevor du etwas montierst.

2 – Geradeaus fahren und eckig drehen lassen. Das ist das echte Projekt. Folge Wandfolgen und präzise Drehungen: PID-Regelkreis auf die Seitensensoren zum Mittighalten, kreiselintegrierte Drehungen statt Encodercounts und Neu-Ausrichten an einer Vorderwand, wann immer eine da ist. Erst weitergehen, wenn der Roboter zehn Drehungen fahren kann und noch richtig schaut.

3 – Zellen verlässlich zählen. Encoder sagen vorher, wo eine Grenze sein sollte; die fallende Flanke einer Seitenwand bestätigt, wo sie wirklich ist. Bei Widerspruch der Wand glauben – sie ist eine physische Landmarke, keine akkumulierte Schätzung.

4 – Wände in eine Karte aufzeichnen. Zwei Bit pro Zelle für vier Wände, und ein 16×16-Labyrinth passt in wenige Hundert Byte. Aufzeichnen, was du siehst, sobald du es siehst.

5 – Flood-Fill hinzufügen. Jetzt hat der Planer ehrliche Daten. Distanzen neu berechnen, sobald eine neu entdeckte Wand den aktuellen Plan entwertet – dieses Umplanen ist der ganze Grund, warum Flood-Fill statt einer Einmalsuche genutzt wird.

Hardware-Notizen, die zählen

Klein schlägt schnell. Der Roboter muss in einer Zelle wenden. Ein enges Chassis mit Rädern nah am Drehzentrum wendet sauber; ein langes streift bei jeder Drehung Wände – und keine Abstimmung repariert Geometrie.

Spiel ist Steuerkursfehler. Jede Wendedrehung kehrt die Motoren um, und ein loses Getriebe verliert die ersten paar Grad – etwa 0,9° Steuerkurs auf 42-mm-Rad bei 4° Spiel. N20-Motoren mit Metallgetriebe gibt es aus diesem Grund.

Seitensensoren leicht vorn und angewinkelt montieren. Geradeaus zeigend sehen sie eine Wand erst, wenn sie perfekt danebenstehen – der Roboter erfährt also spät von der Wand. Ein kleiner Vorwärtswinkel gibt dem Regelkreis Vorschau.

Den Sensoren stabile Versorgung geben. Ein VL53L0X liefert auf einbrechender Schiene plausibel aussehende falsche Zahlen statt offensichtlich zu versagen – die schlimmste Fehlerart, weil sich die Karte mit Wänden füllt, die nicht da sind.

Wie gut aussieht

Messung Erste laufende Maus Gut abgestimmt
Erkundungsgeschwindigkeit 0,2–0,3 m/s 0,3–0,5 m/s
Schnelllauf 0,4–0,6 m/s 1,0–2,0 m/s
Zellmittenfehler nach 10 Zellen 10–20 mm Unter 5 mm
Steuerkursfehler nach 10 Drehungen 8–15° Unter 3°
Wanderkennungs-Genauigkeit Muss 100 % sein 100 %
Volle 16×16-Erkundung 3–6 Minuten 1–2 Minuten

Zwei dieser Zeilen verdienen Betonung.

Wanderkennung kennt keine Teilpunkte. Eine falsch aufgezeichnete Wand verdirbt die Karte, Flood-Fill berechnet dann einen selbstbewussten Weg durch eine Wand, und der Schnelllauf fährt geradewegs hinein. Es gibt keine gnädige Degradation – weshalb der Erkundungslauf langsam fährt.

Die Driftzeilen sind das echte Projekt. Der Algorithmus ist nicht der schwere Teil – Flood-Fill sind etwa vierzig Zeilen, und du kannst ihn vollständig im Simulator ohne Hardware testen. Schwer ist, dass der Roboter nach zehn Zellen nicht mehr dort ist, wo er sich wähnt – und eine Maus, die 20 mm pro zehn Zellen driftet, berührt an der fernen Labyrinthseite eine Wand. Alles, was eine echte Micromouse funktionsfähig macht – Wandfolgekorrektur, kreiselgestützte Drehungen, Encoderkalibrierung –, existiert, um diese eine Zahl zu bekämpfen.

Wenn es schiefgeht

Symptom Meist
Fährt selbstbewusst in eine Wand Zellzählung daneben – Position, nicht Planung
Steht nach mehreren Drehungen diagonal Gyro-Bias nicht subtrahiert oder Drehungen nicht neu ausgerichtet
Ruckt in Seitenöffnungen Wandpräsenzprüfung fehlt in der Folgeschleife
Kartiert Wände, die nicht da sind Sensordversorgung bricht ein oder Übersprechen zwischen Modulen
Löst langsam, kracht schnell Schnelllauf zu schnell für die Bewegungsschicht – verlangsamen, dann erhöhen

Fast jeder Eintrag dieser Tabelle ist ein Bewegungs- oder Tastfehler statt Algorithmus. Diese Verteilung ist das Nützlichste, was du vor Beginn wissen kannst – denn sie sagt dir, wohinein du deine Wochenenden steckst.

Willst du die Kartierungs- und Planungsideen ohne Hardware, fährt der Labyrinthlöser-Simulator dieselbe Zwei-Phasen-Strategie im Browser, und der Pfadplanungs- und Kartierungs-Lernpfad trägt sie weiter zu A* und SLAM. Für einen weit billigeren ersten Labyrinthroboter nutzt der Linien-Labyrinthlöser Band statt Wänden und braucht gar keine Distanzsensoren.

Projekt-Roadmap

Der Baupfad

Folge dem Technikbaum von den Bauteilen bis zum funktionierenden Roboter. Jeder Knoten wird freigeschaltet, sobald seine Voraussetzungen erledigt sind, und dein Fortschritt wird auf diesem Gerät gespeichert.

0 / 16 erledigt

100%
Lernpfad

Pfadplanung und Kartierung

Lernpfad

Pfad öffnen
Bau

Labyrinth kartieren lassen

Aufbau

Ziel

Route fahren lassen

Ziel

Bauteile

Tutorials in diesem Pfad

Üben, bevor du verdrahtest

Im Live-Simulator abstimmen

Der Baupfad führt durch ein Browser-Labor. Bring das Verhalten hier in Ordnung und übertrage deine Einstellungen dann auf den echten Roboter.

Häufig gestellte Fragen

Was ist eine Micromouse?

Ein kleiner autonomer Roboter, der ein Wandlabyrinth löst – und der älteste ununterbrochen laufende Robotikwettbewerb der Welt. Das Standardlabyrinth hat 16 mal 16 Zellen à 18 cm mit dem Ziel in der Mitte, und der Roboter bekommt keine Karte – er muss erkunden, eine bauen und dann die schnellste Route finden, die er kann. Es ist ein komplettes Robotikproblem in einer Kiste: Sensorik, präzise Bewegung, Kartierung und Planung müssen zusammenspielen – und jedes Versagen davon ist sofort sichtbar.

Warum Time-of-Flight-Sensoren statt Ultraschall?

Drei Gründe, die ein Labyrinth alle verschärft. Ein Ultraschallstrahl spreizt rund 15 Grad – in einem engen Korridor trifft er also die Wände links und rechts vom Ziel. Mehrere Ultraschallsensoren stören einander und hören gegenseitig ihre Pings. Und jede Messung kostet Millisekunden Flugzeit, was begrenzt, wie schnell dein Regelkreis laufen kann. Ein VL53L0X hat einen schmalen Strahl, bleibt von Nachbarn unbeeinflusst und liest in etwa 20 ms.

Brauche ich einen Kreisel, wenn ich Encoder habe?

Für ein Labyrinth ja. Encoder messen Raddrehung, nicht Roboterdrehung – und die unterscheiden sich jedes Mal, wenn ein Rad rutscht, was genau bei Drehungen auf der Stelle passiert. 2 Grad Fehler pro Drehung sind einmal unmerklich und nach zehnmal fatal. Der Kreisel misst die echte Drehung des Roboters direkt – Drehungen bleiben also eckig, egal was die Räder taten.

Worin unterscheidet sich das vom Linien-Labyrinthlöser?

Es sind verschiedene Roboter, die zufällig ein Wort teilen. Ein Linienlabyrinth ist schwarzes Band auf einer Platte, gelesen per Abwärts-Reflexionsarray, und LSRB-Routengedächtnis klappt die Sackgassen aus einer Abbiegefolge. Eine Micromouse hat physische Wände, liest sie per Distanzsensoren und muss eine echte Karte des Labyrinths bauen, um über nie befahrene Zellen zu planen. Das Linienlabyrinth ist weit billiger zu bauen; die Micromouse lehrt Kartierung.

Warum löst mein Roboter das Labyrinth, kracht aber im Schnelllauf?

Weil Tempo die Physik ändert, nicht den Algorithmus. Schnelleres Fahren heißt mehr Radschlupf, längere Bremswege und weniger Zeit für die Wandfolgeschleife zum Korrigieren vor der nächsten Zelle. Die übliche Lösung ist kein weiteres Abstimmen, sondern erst ein langsamerer Schnelllauf, dann erhöhen, sobald die Bewegungsschicht bewiesen ist. Darum richten sich Wettbewerbsmäuse auch an Wänden neu aus, wann immer sie können – es entfernt als Einziges akkumulierten Fehler, statt ihn zu begrenzen.

Kann ich eine Micromouse auf Arduino Uno bauen?

Für eine erste Maus ja. Der Uno kann drei VL53L0X-Sensoren und eine IMU an I²C fahren und eine 16-mal-16-Wandkarte in ein paar Hundert Byte halten. Was er nicht kann, ist Wettbewerb – ernste Mäuse nutzen schnellere 32-Bit-Controller, damit die Bewegungsschleife im Kilohertz läuft und der Planer ständig neu rechnen kann. Baue erst die langsame; fast alles Gelernte überträgt sich.