Linienlabyrinth-Simulator mit LSRB-Routing
Fahre ein Linienlabyrinth im Browser: Klebeband-Labyrinth, Kreuzungserkennung und LSRB-Regeln, die eine Sackgassenroute zur kürzesten falten.
- Kategorie
- Arduino
- Zeitaufwand
- 2–3 Stunden
- Plattform
- Browser · Arduino
01 / Hier starten
Einführung
Ein Linienlabyrinth-Roboter ist ein Linienfolger, der auch entscheiden kann. Dieses Labor fährt ihn über schwarzes Klebeband, klassifiziert jede Kreuzung und schreibt ein Zeichen pro Zug. Am Ziel siehst du die LSRB-Ersetzungen einzeln feuern, bis eine Zeichenkette ohne B bleibt — die kürzeste Route, die der Roboter dann erneut fährt.
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.
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.
- 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.
Steuerung
Modus wählt zwischen vollem Dreiakter — erkunden, vereinfachen, dann Bestzeit fahren — und direktem Sprung zur fertigen Route. Fahrgeschwindigkeit setzt das Tempo. Start, Pause und Schritt fahren kontinuierlich oder Zug um Zug, Zurücksetzen wiederholt dasselbe Labyrinth, und Neues Labyrinth erzeugt ein frisches. Fokussiere die Zeichenfläche und nutze Leertaste, N, R, M und F für dieselben Funktionen per Tastatur.
Der Routenspeicher-Streifen unter dem Labyrinth ist der sehenswerte Teil. Er füllt sich pro Zug um ein Symbol, während der Roboter fährt, und schreibt sich in der Vereinfachungsphase um, wenn jede Ersetzung feuert.
Theorie
Ein Linienlabyrinth-Roboter ist in zwei Schichten gebaut, und sie getrennt zu halten macht ihn handhabbar.
Die untere Schicht ist ein gewöhnlicher Linienfolger. Ein Achtkanal-Reflexionsarray liest das Band, die Messwerte kollabieren zu einem einzigen gewichteten Fehler, und ein PID-Kreis macht daraus zwei verschiedene Raddrehzahlen. Diese Schicht weiß nichts über Labyrinthe.
Die obere Schicht wacht nur auf, wenn das Band verzweigt. Sie klassifiziert die Kreuzung — links, rechts, T, Kreuz, Sackgasse oder Ziel — wählt per Linke-Hand-Regel einen Abzweig und hängt ein Zeichen an eine Zeichenkette. Der quer über die Roboternase gezeichnete Balken in diesem Simulator ist dieses Array, und du kannst zusehen, wie eine ganze Seite aufleuchtet, wenn sich ein Abzweig öffnet.
Der Haken: Die Momentanlesung ist mehrdeutig. T-Kreuzung, Vierweg und Zielblock melden alle jeden Kanal schwarz. Der Roboter muss sich über die Kreuzung hinaus festlegen und erneut lesen, bevor er weiß, was er gerade querte.
Algorithmus
Erkundung nutzt die Linke-Hand-Regel: An jeder Zelle die linkeste verfügbare Option nehmen und nur umkehren, wenn eine Sackgasse nichts anderes lässt. In einem Labyrinth ohne Schleifen erreicht das immer das Ziel und ist zustandslos genug, um es von Hand zu prüfen.
Jeder Zug hängt ein Symbol an. L, S und R sind Abbiegungen; B erscheint nur, wo der Roboter aus einer Sackgasse zurücksetzte. Jedes B in der fertigen Zeichenkette markiert also einen Fehler samt Zug davor und danach.
Dieses Dreizeichenfenster ist immer durch einen einzigen Zug ersetzbar, denn die drei Züge sind nur Winkel, die sich addieren. Mit links als −90°, geradeaus als 0°, rechts als +90° und zurück als 180° summiert sich L B L zu 0°, also S — fahre geradeaus durch statt in den Stichweg. Die sechs Ersetzungsregeln sind diese Arithmetik, tabelliert.
Ein Durchlauf genügt nicht: Das Falten eines Umwegs kann zwei Züge zusammenschieben, die nun ein neues reduzierbares Fenster bilden — die Regeln laufen daher wiederholt, bis sich nichts mehr ändert. Wenn die Schleife endet, bleibt kein B in der Zeichenkette — das ist der Beweis des Abschlusses, denn jede restliche Sackgasse zeigte noch eines.
Quellcode
// 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;
}
}
}
fold ist die Ersetzungstabelle und kurz, denn es ist nur Winkelarithmetik: Beide Züge um die 180°-Kehrtwende addieren, in ±180° wickeln und Ergebnis zurück auf ein Symbol abbilden.
Annahmen und Unterschiede zur Hardware
Klebeband ist als perfektes Schwarz auf perfektem Weiß gerendert, ohne Wölbung, Glanz oder Schatten, und das Reflexionsarray meldet ideale Binärwerte bei fester Höhe. Ein echtes IR-Array sieht Graustufen-Reflexionen, die sich mit Umgebungslicht, Sensorhöhe und Bandverschleiß verschieben — jeder Hardware-Lauf muss daher Weiß und Schwarz per Schwenk kalibrieren, wie der Verdrahtungsabschnitt notiert. Der Simulator fährt den PID-Kreis zudem in perfekter Periode und rückt pro Entscheidung eine saubere Zelle vor; auf einem Arduino erscheinen Schleifenjitter, Schlupf und 2-mm-Montageoffset als Fehlklassifikationen von Kreuzungen. Behandle Verstärkungen und LSRB-Zeichenkette hier als zu übertragende Logik, nicht als zu kopierende Zahlen.
Schaltplan
Der Roboter, den dieses Labor modelliert, ist der aus dem Linienlabyrinth-Baupfad: Ein Arduino Nano liest ein Achtkanal-Reflexionsarray an seinen Analogeingängen und treibt zwei Getriebemotoren über einen TB6612FNG.
Die wichtigste Verdrahtungsregel ist die Leistungstrennung. Die Motorbatterie erreicht den VM-Pin des Treibers und nichts sonst; die 5 V des Arduino versorgen nur Logik; und jede Masse — Board, Treiber, Sensorarray, Batterieminus — muss verbunden sein, sonst haben die Steuersignale keine Referenz, und der Fehler bleibt stumm.
Hardware-Checkliste
Bauteile
- Arduino Nano oder Uno
- Achtkanal-IR-Reflexionssensor-Array
- TB6612FNG-Dual-Motortreiber
- Zwei Getriebe-DC-Motoren auf 2WD-Chassis
- Schwarzes Isolierband auf heller Platte
Den Graphen erkunden
Wo dieser Simulator verwendet wird
Die Projekte, Lernpfade und Tutorials, die auf diesem Labor aufbauen.
Weiterbauen
Ressourcen herunterladen
Nutze diese Referenzen auf der Seite, während du das Projekt durcharbeitest. Herunterladbare Projektpakete kommen erst hinzu, wenn ihr Quellcode und ihre Version veröffentlicht sind.
Häufige Fragen
Häufig gestellte Fragen
Was ist ein Linienlabyrinth-Roboter?
Ein Linienfolger mit Entscheidungsschicht darüber. Die untere Schicht hält den Roboter per Reflexionsarray und PID-Kreis mittig auf schwarzem Klebeband, genau wie ein gewöhnlicher Linienfolger. Die obere Schicht beobachtet die Momente, in denen das Band verzweigt, klassifiziert die Kreuzungsart, wählt eine Richtung und protokolliert den Zug. Dieses Protokoll lässt ihn das Labyrinth ein zweites Mal ohne einzigen Fehlzug fahren.
Was unterscheidet ein Linienlabyrinth von einem Micromouse-Labyrinth?
Welt und Sensorik sind völlig verschieden. Ein Linienlabyrinth ist schwarzes Klebeband auf heller Platte, gelesen von einem nach unten schauenden Reflexionsarray; ein Micromouse-Labyrinth hat physische Wände, gelesen von Distanzsensoren. Was den Tausch überlebt, ist die Strategie — erst erkunden für Wissen, dann die beste Route fahren. Das Linienlabyrinth ist weit billiger zu bauen, darum nutzen Schul- und Hochschulwettbewerbe meist eines. Vergleiche beide im Labyrinthlöser-Simulator.
Wofür steht LSRB?
Links, Geradeaus, Rechts und Zurück — die vier Dinge, die ein Roboter an einer Kreuzung tun kann. Der Roboter hängt pro Zug im Erkundungslauf ein Zeichen an, und jedes B markiert eine Sackgasse, aus der er zurücksetzen musste. Sechs Ersetzungsregeln ersetzen dann jedes Dreizeichenfenster um ein B durch den einzelnen Zug gleicher Wirkung und löschen so den Umweg vollständig.
Warum kann der Roboter nicht im Moment der Kreuzung entscheiden?
Weil das Sensormuster mehrdeutig ist. T-Kreuzung, Vierweg und Zielmarkierung beleuchten alle das ganze Array auf einmal, und ein linker Abzweig liest sich gleich, ob die Linie geradeaus weitergeht oder nicht. Der Roboter muss festhalten, welche Abzweige auftauchten, etwa eine Roboterlänge vorfahren und erneut lesen, um zu erfahren, ob es geradeaus weiterging. Auf die erste Lesung zu entscheiden ist die häufigste Ursache selbstsicherer Fehlzüge.
Funktioniert LSRB in jedem Labyrinth?
Nur in einem perfekten Labyrinth — ohne Schleifen, wo genau eine Route zwei Punkte verbindet. Geklebte Wettbewerbslabyrinthe sind das fast immer, und dieser Simulator erzeugt eines. Enthält das Labyrinth einen Kreis, kann die Linke-Hand-Regel ewig kreisen, und es gibt keine Sackgasse zum Falten; dann brauchst du eine echte Karte und Graphensuche wie Flood-Fill.
Wie viel Speicher braucht das auf einem Arduino?
Fast keinen, das ist der ganze Reiz. Die gesamte Karte ist ein Zeichenarray — wenige Dutzend Bytes für ein Wettbewerbslabyrinth — denn der Roboter speichert nie das Labyrinth selbst, nur seine Züge. Ein Flood-Fill-Roboter hält dagegen einen Distanzwert je Gitterzelle. Das ist der Handel: LSRB ist winzig, braucht aber ein schleifenfreies Labyrinth; Flood-Fill ist schwerer, kommt aber mit allem zurecht.
Weiterführende Literatur
Quellen
Maßgebliche Quellen, um tiefer einzusteigen als das begrenzte Lernmodell dieses Simulators.