f2.3 Höhlenlabyrinth Hin- und Rückweg
★ ★ ★
Der Roboter soll das Höhlenlabyrinth vermessen, am Ende umkehren und auf gleichem Weg wieder zurückfahren. Dazu muss er sich alle gefahrenen Längen und Winkel des Hinwegs in einer Liste merken und sie in umgekehrter Reihenfolge wiedergeben.
Listen
Listen sind besondere Variablen, die mehrere Elemente in einer Reihenfolge speichern können, beispielsweise ein Busfahrplan: 14:03 Moltkestraße 14:06 Krähenstraße 14:08 Kohlmarktoder ein Einkaufszettel: Brot Milch Salat Limonade
Jedes Element hat eine Position innerhalb der Liste und jede Liste besitzt eine Länge, nämlich die Anzahl der Elemente in dieser Liste.
Listen können mit entsprechenden Befehlsblöcken geändert werden:
- Eine Liste kann erweitert werden, indem ein neues Element am Ende hinzugefügt wird.
Brot
Milch
Salat
Limonade
Müsli
- Eine Liste kann verkürzt werden, indem ein Element gelöscht wird.
Brot
Salat
Limonade
Müsli
- Der Wert eines Elements kann geändert werden.
Brot
Salat
Wasser
Müsli
Erstelle in Deinem Programm eine neue Liste Segmente, die alle Längen und Winkel des Hinwegs speichert.
Erweitere das Hauptprogramm:
- Fahre bis Hindernis: Fahre nach vorne, bis der Ultraschallsensor ein Hindernis erkennt und speichere dann die zurückgelegte Strecke in der Liste.
- Scanne die Umgebung mit dem Ultraschallsensor und bestimme, in welchem Winkel der größte Abstand gemessen wird. Speichere den Winkel für den Rückweg in der Liste.
- Drehe den mBot in diese Richtung (wie bisher)
- Fahre zurück: Arbeite die Liste von hinten nach vorne ab und bewege den mBot wieder zum Startpunkt zurück.
Fahre bis Hindernis
Ändere den Block, so dass die gefahrene Strecke der Liste hinzugefügt wird.
Scanne
Ändere den Block, so dass der Drehwinkel für den Rückweg der Liste hinzugefügt wird. Der Roboter muss auf dem Rückweg in die entgegengesetzte Richtung drehen. Eine Linkskurve auf dem Hinweg wird zu einer Rechtskurve auf dem Rückweg.
Fahre zurück
Dieser Block fährt den Roboter wieder zurück zum Startpunkt. Dazu benutzt er die Liste Segmente, die während des Hinwegs angelegt wurde.
Die Liste enthält jetzt Paare von Längen und Winkel und sieht folgendermaßen aus:
1. Längensegment (in cm)
1. Drehwinkel für Rückweg (in °)
2. Länge
2. Winkel
3. Länge
3. Winkel
...
...
Letztes Längensegment
Letzter Drehwinkel
Um wieder zurück zum Startpunkt zu finden, muss der mBot die Liste von hinten nach vorne, also rückwärts abarbeiten. Dabei helfen Dir die beiden folgenden Blöcke:

Wert des letzten Elements

Wert des vorletzten Elements
Das Element am Listen-Ende Letzter Drehwinkel muss beim Rückweg ignoriert werden, da der Roboter den letzten Drehe-Block im Hauptprogramm nicht ausgeführt hat (da Entfernung < 30 cm). Statt dessen soll der mBot mit einer halben Drehung (180°) wenden, damit er für den Rückweg in der richtigen Richtung steht. Das letzte Element der Liste kann gelöscht werden:
In einer Wiederhole-Bis-Schleife wird dann jedes Datenpaar aus Länge und Winkel zuerst eine Fahrt nach vorne mit entsprechender Länge und dann eine Drehung um den richtigen Winkel ausgeführt. Die Drehung übernimmt der Drehe-Block. Anschließend werden die beiden Elemente am Ende der Liste entfernt.
So verkürzt sich die Liste bei jedem Schritt um zwei Elemente. Am Schluss bleibt das 1. Längensegment übrig, das mit einem eigenen Bewegungsblock abgefahren wird. Dann werden die LEDs ausgeschaltet und der Roboter steht hoffentlich wieder auf dem Startpunkt. Fertig!