Skip to content →

EXPLOR3R lernt seine Umwelt kennen

Bisher hat der EXPLOR3R genau die Schritte ausgeführt, welche das Programm vorgeben hat. Er konnte aber keine Entscheidungen treffen und wusste nichts über seine Umgebung. Manchmal verhielt sich der EXPLOR3R auch richtig dumm, fuhr gegen das Sofa und kam nicht mehr weiter.

Frage an Mrtz:

Wieso läufst Du nicht gegen die Wand?

Mrtz:

Weil ich sie sehen kann.

Hnz:

Oder spüren.

Damit ein Roboter seine Umwelt war nehmen kann, braucht er Sensoren. Diese ersetzen Augen, Ohren oder die Finger. Mit Sensoren ausgestattete Roboter können Informationen sammeln und verarbeiten. Damit ist es ihnen möglich, auf die Umgebung zu reagieren. Zum Beispiel kann der Roboter «blau» sagen, wenn er ein blaues Papier erkennt.

In Mindstorms 31313 sind drei Arten von Sensoren enthalten:

  • Berührungssensor
  • Farb- und Lichtsensor
  • Infrarotsensor

Wie funktioniert der Berührungssensor?

Mit dem Berührungssensor kann der Roboter fühlen. Er erkennt, ob die rote Taste gedrückt ist oder nicht. Unser EXPLOR3R bekommt nun eine Stossstange, welche auf den Berührungssensor drückt. Damit kann er nun erkennen, ob er an ein Objekt stösst. Mit wenigen Handgriffen ist alle montiert und EXPLOR3R bereit zu lernen.

Mindstorms Berührungssensor
Mindstorms Berührungssensor

Sensorwerte anzeigen

Wir können uns die gemessen Werte an verschiedenen Orten anzeigen lassen. Dies ist direkt auf dem EV3 unter «Port view» möglich. Ebenso ist dies in der EV3-Software möglich, wenn der Roboter am Computer angeschlossen ist.

Anschlussansicht aus EV3 Mindstorm Programm
Anschlussansicht in EV3 Mindstorm Programm
  • Wir sehen die oberen Anschlüsse A, B, C, D und die unteren Anschlüsse 1, 2, 3, 4. Daran können wir erkennen, was wo angeschlossen ist und welche Informationen der Roboter dort liest.
  • Unser EXPLOR3R erkennt am Anschluss B und C die beiden Motoren. Diese stehen auf den Positionen 4 (B) und -8 (C).
  • Am Anschluss 1 ist der Berührungssensor angeschlossen und liest dort 0.
  • Der Infrarotsensor hängt am Anschluss 4 und liest 71. Mrtz spielt damit herum, hält die Hand vor den Infrarotsensor und beobachtet, wie sich der angezeigt Wert verändert. Bei 0 klebt seine Hand am Sensor. Bei 100 hat der Infrarotsensor freie Sicht.

Auf dem EV3 sieht die Anzeige sehr ähnlich aus.

Frage an Mrtz:

Was erwartest Du, was der Berührungssensor kann?

Mrtz:

Der Berührungssensor merkt, ob seine rote Fläche gedrückt ist.

Das ist genau richtig. Der Sensor kann sogar noch ein wenig mehr:

  • Der Sensor ist nicht gedrückt: Anzeige 0
  • Der Sensor ist gedrückt: Anzeige 1
  • Der Sensor ist gedrückt und wieder losgelassen: Anzeige 2

Oha: Firmware update

Der EV3 meldet uns, dass wir ein Firmware update durchführen sollen. Firmware ist eine Art Betriebssystem für den EV3. Damit weiss der EV3, wie er Motoren steuern und Sensoren lesen kann und wie er unsere Programme ausführen soll. Das Update läuft fehlerlos durch, aber alle Programm sind weg. Zum Glück sind alle Projekte auf dem Computer von Hnz gespeichert und können wieder auf den EV3 kopiert werden.

Mit Sensoren programmieren

Mit einem ersten Programm «WartenAufBeruehrung» lernen wir Sensoren zu programmieren.  Mit einem Warteblock wird der Berührungssensor abgefragt. Das Programm bleibt solange stehen, bis der Berührungssensor gedrückt wird. Dann begrüsst uns EXPLOR3R mit einem freundlichen «Hello».

Programm WartenAufBeruehrung
Programm WartenAufBeruehrung

Aber wie haben wir das gemacht?

Den Warteblock haben wir auf «Berührungssensor > Vergleichen > Zustand» eingestellt und dort den Wert «1» eingegeben. Das bedeutet: Der Warteblock fragt immer wieder den Berührungssensor ab und vergleicht die Antwort des Sensors mit dem Wert im Programm. Solange der Sensor nicht gedrückt ist, antwortet er mit «ich bin nicht gedrückt» und schickt die Zahl «0» zurück an das Programm. Das Programm vergleicht und stellt fest: Die Zahl 0 ist nicht gleich wie die Zahl 1 und wartet weiter. Wenn nun der Berührungssensor gedrückt ist, antwortet dieser mit «ich bin gedrückt» und schickt die Zahl «1» an das Programm. Das Programm prüft und stellt fest: Die Zahl 1 ist gleich wie die Zahl 1 und fährt mit dem Klangblock fort.

Wir spielen herum und stellen den Warteblock auf «Berührungssensor > Ändern» um. Wenn wir das Programm starten, reagiert es gleich, wie «WartenAufBeruehrung». Nun drücken wir auf die Stossstange und starten das Programm erneut. Jetzt wartet unser Roboter, bis wir die Stossstange loslassen und begrüsst uns dann mit seinem «Hello». Das Programm wartet also nicht mehr, bis die Stossstange gedrückt wird. Es wartet, bis sich der Zustand des Berührungssensors ändert.

Im orangen Streifen des Warteblockes kann die Nummer des Anschlusses angegeben werden. In unserem Fall ist der Berührungssensor am Anschluss «1» angeschlossen.

Selbst entdecken: Hello und Goodbye

Mrtz bitte vorlesen:

Kannst Du ein Programm erstellen, das den Roboter «Hello» sagen lässt, wenn Du die Stossstange drückst, und «Goodbye», wenn du sie wieder loslässt?

Das Programm «HelloUndGoodbye» ist schnell erstellt und nicht weiter kompliziert.

Programm «BeruehrungVermeiden»

Das Programm soll:

  • Motor einschalten und vorwärts fahren
  • Warten, bis der Berührungssensor ausgelöst wird
  • Eine Umdrehung rückwärts fahren
  • Nach rechts drehen
  • und wieder an den Anfang springen

Mit der Motorensteuerung kennen wir uns schon gut aus. Wie der Warteblock aussehen muss ist uns auch klar und wo dieser eingefügt werden soll, finden wir schnell heraus. Alles noch in eine Endlosschleife packen und fertig.

Selbst Entdecken: Hindernisse und schlechte Laune vermeiden

Mrtz liest vor:

Erweitere das Programm «BeruehrungVermeiden» so, dass es ein Lächeln auf dem EV3-Display anzeigt, während sicher der Roboter vorwärts bewegt, und ein trauriges Gesicht, wenn er rückwärts fährt und umdreht.

Die Anzeigeblöcke fügen wir in die Schlaufe ein. Fertig.

Selbst entdecken: Einfach drücken

Kannst Du den EXPLOR3R so lange rückwärts fahren lassen, wie du die Stossstange drückst, und ihn zum Anhalten bringen, wenn du sie wieder loslässt? Dieses Verhalten soll solange dauern, bis du das Programm manuell beendest. Teste dein Programm, indem du die Stossstange per Hand gedrückt hältst. Das wirkt so, als wenn du den Roboter rückwärts drückst, aber in Wirklichkeit leistet er die ganze Arbeit.

Hinweis: Du benötigst eine Schleife, zwei Warteblöcke und zwei Bewegungslenkungsblöcke. Einen im Modus «An» und einen im Modus «Aus».

Das Programm «EinfachDruecken» ist einfach. Es sieht wirklich so aus, wie wenn wir den EXPLOR3R schieben. Nur das laute Motorengeräusch verrät uns.

Warten auf Änderung

Wir erstellen das Programm «WartenAufAenderung» und lernen den Warteblock im Modus «Änderung» kennen.

Programm WartenAufAenderung
Programm WartenAufAenderung

Warten auf Berührung

In diesem Programm sehen wir, dass wir Sensoren auch in Schleifen abfragen können. Die Schleife wird solange ausgeführt, bis der Sensor gedrückt wird. Dabei ist es besser, den Zustand «Anstossen (2)» abzufragen, da sonst der Berührungssensor genau dann gedrückt werden muss, wenn das Programm bei der Schlaufe angelangt ist und den Sensor abfragt.

Programm WartenBeruehrung
Programm WartenBeruehrung

Sensoren und der Schalterblock

Mit dem Schalterblock kann dein Roboter eine Entscheidung treffen. Je nach dem, was er vom Sensor liest, führt er die eine oder die andere Anweisung aus.

Flussdiagramm Schalterblock
Flussdiagramm Schalterblock

Wir studieren das Flussdiagramm. Es stellt den Ablauf eines Programmes dar und beschreibt, was das Programm zu erledigen hat. In der Mitte sehen wir den Schalterblock, der den Sensor fragen soll, ob er gedrückt ist oder nicht. Je nach Antwort vom Sensor, lässt er den Roboter rückwärts fahren oder sprechen.

Im Programm sieht der Schalterblock dann so aus:

Programm BeruehrungJaNein
Programm BeruehrungJaNein

Oben mit dem Haken sind die Blöcke untergebracht, wenn die Antwort «Ja» ist. Im unteren Teil mit dem X sind die Blöcke, wenn die Antwort «Nein» ist. Nebenbei: Die Ansicht lässt sich verkleinern, wenn «Zur Ansicht im Registerformat wechseln» gewählt wird.

Selbst entdecken: Bleiben oder gehen?

Mrtz liest vor:

Lasse den Roboter drei Sekunden lang stillstehen. Wenn dann der Berührungssensor losgelassen wird, sollte sich der Roboter herumdrehen und fünf Radumdrehungen lang vorwärts fahren. Wenn der Sensor aber gedrückt wird, sollte der Roboter nichts tun und das Programm sofort beendet werden.

Wir erstellen das Programm «BleibenOderGehen» ohne grosse Schwierigkeiten.

Selbst entdecken: Schwere Entscheidungen.

Lass uns mit dem Schalterblock herumspielen. Erstelle ein Programm, um den Entscheidungsbaum in unten stehender Abbildung umzusetzen. Wie konfigurierst Du den Schalterblock und warum musst Du am Ende des Programms einen Warteblock einfügen?

Flussdiagramm Schwere Entscheidung
Flussdiagramm Schwere Entscheidung

Wir erstellen das Programm «SchwereEntscheidung». Damit wir das Lächeln auf dem Display überhaupt sehen können, braucht es den Warteblock von fünf Sekunden.

Programm SchwereEntscheidung
Programm SchwereEntscheidung

Schalter wiederholen

Immer wenn das Programm an einem Schalterblock ankommt, prüft es den Berührungssensor. Damit der Roboter dies immer wieder tun kann, fügen wir den Schalterblock in eine Schleife ein und erstellen das Programm «DrueckenWiederholen».

Programm DrueckenWiederholen
Programm DrueckenWiederholen

So sagt der EXPLOR3R nun «Yes» und leuchtet grün, wenn der Sensor gedrückt ist. Wenn der Sensor nicht gedrückt ist sagt er «No» und leuchtet rot.

Die Modi Vergleichen, Ändern und Messen

In Warte-, Schleifen- oder Schalterblöcken können Sensoren abgefragt und verglichen werden. Diese Vergleiche können unterschiedlich programmiert werden. Ich fasse die unterschiedlichen Methoden kurz zusammen

  • Vergleichen: Der Block vergleicht den Sensorwert mit dem Programmwert. Zum Beispiel: Der Berührungssensor ist gedrückt
  • Ändern: Der Block misst gleich zu Beginn und vergleicht, ob der Sensorwert sich verändert hat. Zum Beispiel kann das Programm warten, bis ein zu Beginn gedrückter Berührungssensor losgelassen wird und dann weiter fahren. Dieser Modus ist nur in Warteblöcken verfügbar.
  • Messen: Der Block misst einen Wert. Zum Beispiel die Distanz zu einem Objekt. Das lernen wir aber erst später kennen. Dieser Modus ist nur in Schalterblöcken verfügbar.

Selbst Entdecken: Die Richtung wählen

Erweitere das Programm «BeruehrungVermeiden» so, dass der Roboter nach dem ersten Objektkontakt nach rechts dreht und nach links, wenn der Sensor erneut betätigt wird. Das nächste Hindernis sollte wieder eine Rechtsdrehung auslösen usw.

Hinweis: Dupliziere die vier Blöcke in der Schleife, sodass es acht werden und ändere die Lenkungseinstellungen im zweiten Satz Blöcke.

Das Resultat konnte uns nicht überzeugen. Der EXPLOR3R blieb in einer Ecke hängen und drehte immer nur nach links und rechts und fand keinen Weg mehr aus der Ecke heraus.

An diesem Nachmittag haben wir viele Möglichkeiten kennen gelernt, wie Roboter selbstständiger werden können und wie die Programme dazu aussehen. Mit den Schleifen, Schaltern und dem ersten Sensor haben wir wichtige Elemente aus der Welt der Programmierung eingesetzt. EXPLOR3R reagiert nun und weicht Hindernissen aus. Wir haben damit den EXPLOR3R intelligenter gemacht.

Published in Mindstorms Allgemein

One Comment

  1. MRTN

    Eine tolle Sache, was ihr da eurem Robotter beigebracht habt. Jetzt funktioniert er fast wie einer dieser selbständigen Staubsauger. Nur saugen tut er nicht.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.