BaupfadMittelstufeEin Wochenende

Linien-Labyrinthlöser bauen: Mit LSRB-Routenspeicher

Ein Roboter, der selbstständig ein Linienlabyrinth erkundet, sich jede Kreuzung merkt und dann die kürzeste Route von Start bis Ziel ohne einen Fehler fährt.

Technisches Schema: Linien-Labyrinthlöser bauen: Mit LSRB-RoutenspeicherJUNCTIONS → L S R B → ROUTEBB

Ein Linienfolger folgt. Ein Linien-Labyrinthlöser entscheidet. Das ist der ganze Sprung, den dieses Projekt macht, und er ist größer, als es aussieht: Der Roboter hört auf, ein Regelkreis mit Rädern zu sein, und wird etwas, das eine nie gesehene Umgebung erkundet, sich merkt, was er fand, und nach diesem Gedächtnis handelt.

Der Trick ist, dass nichts davon den Linienfolger ersetzt – es sitzt darauf. Darunter halten dasselbe Reflexionsarray und derselbe PID-Regelkreis den Roboter mittig auf dem Band und wissen nichts von Labyrinthen. Darüber beobachtet eine dünne Entscheidungsschicht die Momente, in denen sich die Linie verzweigt, klassifiziert, auf welche Kreuzungsart sie traf, wählt eine Richtung und schreibt ein Zeichen auf. Diese Trennung macht das Projekt handhabbar, und es ist dieselbe Zwei-Schichten-Trennung, die echte Roboter überall nutzen.

Also zählt die Baureihenfolge mehr als sonst. Du bekommst reines Linienfolgen erst wirklich stabil – abgestimmt im Simulator, dann auf einem großen Oval aus echtem Band – und fügst erst dann Kreuzungen hinzu. Wer diese Disziplin überspringt, bei dem zeigt sich jedes mechanische Problem, jede Kalibrierungsdrift, jedes 2 mm schief stehende Rad getarnt als Labyrinthlöse-Bug.

Folge dem Technikbaum unten von oben nach unten. Jeder Knoten öffnet sich, sobald seine Voraussetzungen erfüllt sind, und dein Fortschritt wird auf diesem Gerät gespeichert, sodass du den Roboter über ein Wochenende bauen kannst, ohne den Faden zu verlieren.

Stückliste

Bauteil Menge Ca. Kosten Hinweise
Arduino Nano 1 $5 A0–A7 gibt acht Analogkanäle; die sechs eines Uno reichen nicht
IR-Reflexionsarray, 8 Kanäle 1 $8–12 Acht, und analog. Kreuzungserkennung braucht die äußeren Sensoren
TB6612FNG 1 $3 Lohnt sich hier: Der ~2-V-Drop des L298N schmerzt bei präzisen Langsamfahrten
TT-Getriebemotor 2 $4 Encoder-Versionen dringend empfohlen für wiederholbare Drehungen
2WD-Chassis 1 $6–10
Akkupack 1 $6 2×18650, geschützter Halter
Mattes schwarzes Band, 19 mm 1 Rolle $3 Und ein großer heller Boden oder Platte zum Auslegen des Labyrinths

Gesamt: ca. $35–45. Das 8-Kanal-Array ist das Bauteil, an dem nicht gespart wird, und der Grund ist spezifisch: Ein Roboter erkennt einen linken Zweig daran, dass die äußersten linken Sensoren dunkel werden, während die Mitte noch auf der Linie ist. Ein Array, das kaum breiter ist als das Band, kann das physisch nicht sehen – Kreuzungserkennung wird dann Raten, egal wie gut der Code ist.

Warum das Array breiter sein muss als die Linie

    left branch                    array (8 channels, ~60 mm wide)
    ────────────────┐          [ x x x . . . . . ]   outer left dark -> a branch
                    │
    ════════════════╪═══════   [ . . . x x . . . ]   centre still on the line
                    │

Faustregel: Das Array sollte mindestens dreimal so breit sein wie das Band. Für 19-mm-Band sind das rund 60 mm, was ein 8-Kanal-Array bei 8 mm Abstand genau liefert. Schmaler, und der Roboter kann „die Linie kurvt scharf“ nicht von „die Linie verzweigt sich“ unterscheiden – die zentrale Entscheidung, auf der das ganze Projekt ruht.

Baue ihn in Meilensteinen

Die Baureihenfolge zählt hier mehr als in jedem anderen Projekt dieser Seite. Ein Labyrinthlöser ist ein Linienfolger mit Entscheidungsschicht, und jeder mechanische oder Kalibrierungsfehler im Folger erscheint getarnt als Labyrinthlöse-Bug.

Nr. Meilenstein Der Test Bestanden, wenn
1 Linienfolgen geht Zehn Runden auf großem schlichtem Oval Null Verluste. Nicht „meistens“ – null
2 Drehwiederholbarkeit 90°-Drehung zehnmal befehlen, messen Innerhalb ±3°, und wiederholbar
3 Kreuzung gesehen Langsam über ein T fahren, Array ausgeben Äußere Sensoren werden dunkel, bevor es die Mitte tut
4 Kreuzung klassifiziert Jeden Kreuzungstyp langsam fahren Links / rechts / T / Kreuz / Sackgasse alle richtig benannt
5 Eine Abbiegung ausgeführt Linken Zweig treffen, links abbiegen, Folgen wiederaufnehmen Er fasst die Linie wieder und fährt weiter
6 Pfad aufgezeichnet Kurzes Labyrinth fahren, String ausgeben Eine Folge wie LSRB, passend zum Beobachteten
7 LSRB-Vereinfachung Aufgezeichneten Pfad durch den Vereinfacher geben LBL wird S, und jede Regel feuert korrekt
8 Zweiter Lauf Vereinfachten Pfad fahren Erreicht das Ziel ohne Fehlabbiegung und ohne Erkunden
9 Volles Labyrinth Labyrinth mit mehreren Sackgassen Erkundet, vereinfacht, fährt dann die kürzeste Route

Meilenstein 1 ist nicht verhandelbar. „Folgt der Linie meistens“ wird zu „erfindet gelegentlich eine Kreuzung“, und du verbringst einen Abend mit Pfadvereinfachungs-Debugging für einen Fehler, der wirklich ein 2 mm schief stehendes Rad ist.

Meilenstein 2 wird gerne übersprungen. Ein Labyrinthlöser fährt Hunderte Drehungen pro Lauf, und eine konstant 5° zu kurze Drehung summiert sich, bis der Roboter die Linie ganz verlässt. Genau hier zeigt sich Getriebespiel – Fehler, der mit der Richtung das Vorzeichen wechselt, ist mechanisch, kein Abstimmungsfehler.

Die Zwei-Schichten-Trennung, im Code

Die Trennung, die dieses Projekt handhabbar macht, ist es wert, explizit zu sehen:

              ┌─────────────────────────────────────┐
    decision  │  classify junction -> choose turn   │   runs only at junctions
      layer   │  record a character -> simplify     │   knows nothing about PWM
              └──────────────────┬──────────────────┘
                                 │ "turn left" / "keep going"
              ┌──────────────────▼──────────────────┐
    following │  read array -> position -> PID      │   runs every loop, ~200 Hz
      layer   │  -> left and right wheel speeds     │   knows nothing about mazes
              └─────────────────────────────────────┘

Die untere Schicht lernt nie, was ein Labyrinth ist. Die obere fasst nie einen Motor an. Wenn etwas schiefgeht, sagt dir diese Grenze, in welcher Hälfte du suchst – und wenn du nicht sagen kannst, in welcher Hälfte ein Bug lebt, sind die Schichten nicht sauber getrennt.

Wie gut aussieht

Messung Typisch
Erkundungsgeschwindigkeit 0,15–0,25 m/s – langsam genug, um Kreuzungen verlässlich zu klassifizieren
Rücklaufgeschwindigkeit 0,3–0,5 m/s – keine Entscheidungen nötig, also kann er drücken
Kreuzungsklassifizierungs-Genauigkeit 100 %. Alles darunter, und der aufgezeichnete Pfad ist falsch
Drehwiederholbarkeit ±3°
Pfadvereinfachung Ein 30-Zeichen-Erkundungspfad schrumpft typisch auf 8–12

Kreuzungsgenauigkeit ist wirklich alles oder nichts, und das überrascht. Eine falsch gelesene Kreuzung verdirbt den aufgezeichneten String, der Vereinfacher produziert dann einen gültig aussehenden, aber falschen Pfad, und der Rücklauf fährt selbstbewusst in eine Wand. Es gibt keine Teilpunkte – weshalb Erkundungsläufe langsam fahren und der Rücklauf die Zeit zurückgewinnt.

Fehlersuche

Symptom Wahrscheinliche Ursache Lösung
Sieht Kreuzungen, wo keine sind Enge Kurve liest sich als Zweig Array verbreitern; verlangen, dass äußere Sensoren Mindeststrecke dunkel bleiben
Übersieht Kreuzungen Zu schnell gefahren oder Array zu schmal Erkundungslauf verlangsamen; Array ≥3× Bandbreite prüfen
Drehungen inkonsistent Spiel oder keine Encoder Drehung immer gleich anfahren; Spiel messen
Aufgezeichneter Pfad hat Extrazeichen Kreuzung doppelt erkannt Totzeit nach Kreuzung, bevor nächste gesucht wird
Vereinfachung liefert falschen Pfad Regel in falscher Reihenfolge angewandt LBL→S, LBR→B, SBL→R u. a. erst isoliert testen
Rücklauf scheitert an erster Abbiegung Pfad relativ zur falschen Fahrtrichtung aufgezeichnet String ist Folge relativer Abbiegungen – Konvention prüfen
Geht auf einem Labyrinth, nicht auf anderem Kreuzungsabstand zu eng für die Totzeit Totzeit reduzieren oder noch langsamer fahren
Verliert Linie nach Drehung Drehung schießt über die neue Linie hinaus Drehen, bis Mittensensoren wieder fassen, statt festen Winkel
Driftet mit Laufdauer immer mehr Akku bricht ein, ändert effektive Verstärkungen Drehzahlregelkreis mit Encodern schließen

Wie es weitergeht

Encoder hinzufügen und per Distanz statt per Zeit drehen. Zeitgesteuerte Drehungen sind die größte Unzuverlässigkeitsquelle eines ersten Labyrinthlösers, weil die nötige Zeit mit Akkuspannung und Untergrund wechselt. Encoderbasierte Drehungen nicht.

Zum Wandlabyrinth wechseln – die Micromouse – die Band durch Wände und LSRB-Regel durch Flood-Fill ersetzt. Das ist der wirklich größere Schritt: LSRB ist eine Wandfolge-Heuristik, die einen Pfad findet, während Flood-Fill den kürzesten berechnet und bei neu entdeckten Wänden neu plant.

Den Rücklauf optimieren. Ist der Pfad bekannt, bleibt keine Entscheidung übrig – der Roboter kann auf Geraden beschleunigen und nur für Abbiegungen bremsen. Ein Bewegungsprofil über die bekannte Route bringt die dramatischen Zeitgewinne – oft halbiert es den Rücklauf.

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

100%
Bau

Roboter verdrahten

45 Min.

Bau

Auf eigener Strecke kalibrieren

20 Min.

Bau

Reines Linienfolgen stabil bekommen

60 Min.

Bau

Erkundungsfahrt fahren

45 Min.

Bau

Vereinfachte Route wiederholen

30 Min.

Ziel

Linien-Labyrinthlöser fertig

Du hast es gebaut

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

Wie baut man einen Labyrinth-Roboter mit Arduino?

Beginne mit einem funktionierenden Linienfolger: Reflexionsarray, PID-Regelkreis und Motortreiber. Setze dann eine Entscheidungsschicht darauf, die Kreuzungen bemerkt, per Linke-Hand-Regel einen Zweig wählt und jede Abbiegung als eines von vier Zeichen aufzeichnet – L, S, R oder B. Am Ziel klappen Ersetzungsregeln jede Sackgassen-Umwegschleife aus diesem String, und der zweite Lauf folgt der vereinfachten Route. Dieser Lernpfad geht die ganze Kette durch, und du stimmst die Folgeschicht zuerst in einem Browser-Simulator ab.

Was ist der LSRB-Algorithmus in einem Linienfolger?

LSRB steht für Links, Geradeaus, Rechts, Zurück – die vier Dinge, die ein Roboter an einer Kreuzung tun kann. Der Roboter zeichnet pro Kreuzung während der Erkundung ein Zeichen auf, und jedes B markiert eine Sackgasse, aus der er zurücksetzen musste. Sechs Ersetzungsregeln ersetzen jedes Drei-Zeichen-Fenster um ein B durch die einzelne Abbiegung mit derselben Wirkung, was den Umweg vollständig entfernt. Wiederholen, bis kein B bleibt – und du hast die kürzeste Route.

Was unterscheidet ein Linienlabyrinth von einem Wandlabyrinth?

Ein Linienlabyrinth ist schwarzes Band auf hellem Board, getastet mit einem nach unten schauenden Reflexionsarray; ein Wandlabyrinth – das Micromouse-Format – hat physische Wände, getastet mit Distanzsensoren. Die Sensorik ist völlig verschieden, doch die Schicht darüber ist dieselbe: erkunden für Wissen, dann die beste Route fahren. Ein Linienlabyrinth ist weit billiger zu bauen – weshalb Schul- und Hochschulwettbewerbe meist eines nutzen.

Muss ich Bauteile kaufen, bevor ich mit diesem Projekt beginne?

Nein. Linienfolgeschicht, ihre PID-Verstärkungen und das Erkunden-dann-Optimieren-Verhalten laufen alle in den Browser-Simulatoren, sodass du den ganzen Roboter verstehen kannst, bevor du etwas ausgibst. Nur die letzten vier Schritte – Verdrahtung, Kalibrierung, Erkundungsfahrt und Wiederholung – brauchen den echten Arduino, Sensorarray, Treiber, Motoren, Chassis und Akku.

Warum biegt mein Labyrinthroboter an falschen Kreuzungen ab?

Fast immer, weil er zu früh entscheidet. Das momentane Sensormuster kann ein T nicht von einer Kreuzung unterscheiden – beide lesen sich als Schwarz über das ganze Array. Der Roboter muss aufzeichnen, welche Zweige auftauchten, etwa eine Roboterlänge vorfahren und erneut lesen, um herauszufinden, ob die Linie auch geradeaus weiterging. Auf den ersten Messwert zu entscheiden, ist die häufigste Ursache selbstbewusster Fehlabbiegungen.

Funktioniert LSRB in jedem Labyrinth?

Nur in einem perfekten Labyrinth – einem ohne Schleifen, in dem genau ein Weg zwei Punkte verbindet. Klebeband-Linienlabyrinthe sind das fast immer. Enthält das Labyrinth einen Kreis, kann die Linke-Hand-Regel ewig kreisen, und es gibt keine Sackgasse, die die Regeln einklappen könnten; dann brauchst du eine echte Karte und eine Graphensuche wie Flood-Fill.