Interaktiver SimulatorMittelstufe

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
Technisches Schema: Linienlabyrinth-Simulator mit LSRB-RoutingJUNCTIONS → L S R B → ROUTEBB

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.

Browser native
A line maze lab. A robot starts at the bottom-left of a taped maze and follows the left-hand rule to the finish at the top-right, recording one turn symbol per junction and backing out of every dead end. The LSRB substitution rules then collapse that record into the shortest route, which the robot drives again as a speed run. Use the controls below to run it or step one move at a time.

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.

Simulation

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

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.