Praktikum LEGO Mindstorms
von Ronny Harbich, Manuel Schmidt und Frank Eichler

Inhalt

Programmierung von LEGO Mindstorms Robotern mit dem Java-Betriebssystem leJOS

Vorwort

LEGO ermöglicht mit dem Baukastensystem LEGO Mindstorms die einfache Konstruktion von Robotern. Es handelt sich hierbei um Roboter, die über einen eigenen Computer (RCX-Einheit) verfügen. Dieser kann frei programmiert werden, sodass die Roboter autonom in der Umwelt agieren und reagieren können. Anstelle des von LEGO original vorgefertigten Frameworks wurde ein auf Java basierendes Framework namens leJOS eingesetzt. Die nachstehende Arbeit beschreibt verschiedene Versuche mit diesen Robotern.

Für etwaige Kritik wäre ich dem Leser sehr dankbar.

Diese Webseite gehört zu www.uni-magdeburg.de/harbich

Folgen einer Linie mit einem Lichtsensor

Roboter mit einem Lichtsensor
Abbildung 1: Roboter mit einem Lichtsensor
Eine Kette des Raupenantriebs
Abbildung 2: Eine Kette des Raupenantriebs

Der Roboter in Abbildung 1 soll einer schwarzen Linie mit nur einem Lichtsensor folgen. Hierzu wurde der Roboter so konstruiert, dass sich der Lichtsensor am vorderen Bereich befindet. Weiterhin ermöglicht der Raupenantrieb vollständige Rotationen dadurch, dass jede Kette (Abbildung 2) von einem separaten Motor gesteuert wird. Im Nachstehenden zeigen wir nun, wie ein Folgen der Linie prinzipiell realisierbar ist.

Wir gehen zu Beginn davon aus, dass sich der Lichtsensor am Roboter direkt über einer schwarzen Linie befindet (Abbildung 3a). Solange sich dies nicht ändert, fährt der Roboter einfach gerade aus. Trifft er nun auf eine Kurve, so befindet sich der Lichtsensor nicht mehr länger über der schwarzen Linie und der Roboter hält (Abbildung 3b). Anschließend dreht er sich solange um die eigene Achse, bis er die Linie wieder gefunden hat oder eine vorgegeben Zeitspanne T abgelaufen ist (Abbildung 3c). Diese Zeitspanne soll verhindern, dass der Roboter sich um 180° dreht und damit die fahrt in falscher Richtung fortsetzt. Hat er nun die Linie wieder gefunden, so fährt er weiter gerade aus. Ist dies nicht der Fall, so rotiert er in entgegengesetzter Richtung, bis er die Linie wieder entdeckt (Abbildung 3d). An dieser Stelle kann es durchaus vorkommen, dass der Roboter sich um 180° dreht. Und dies ist genau dann der Fall, wenn das Ende der schwarzen Linie erreicht worden ist und der Roboter die Strecke zurück fahren soll (Abbildung 3e). Nachdem nun die Linie wieder ausfindig gemacht worden ist, fährt der Roboter weiter gerade aus und verhält sich beim Abweichen von der Linie nach oben beschriebener Methode. Damit der Roboter möglichst wenig Kurskorrekturen vornehmen muss, merkt er sich die Drehrichtung bei der die Linie wieder entdeckt wurde und beginnt bei nächsten Kurskorrekturen eine Rotation mit derselben Richtung.

Java-Implementierung: Download MyRobot Download

Video: Download Roboter mit einem Lichtsensor (XviD 1.1.0) Download

Roboter schwarzer Linie
Abbildung 3a: Roboter auf schwarzer Linie
Roboter weicht von Linie ab
Abbildung 3b: Roboter weicht von Linie ab
Roboter dreht sich
Abbildung 3c: Roboter dreht sich
Roboter dreht sich in entgegengesetze Richtung
Abbildung 3d: Roboter dreht sich in entgegengesetze Richtung
Roboter fährt Strecke zurück
Abbildung 3e: Roboter fährt Strecke zurück

Folgen einer Linie mit zwei Lichtsensoren

Roboter mit zwei Lichtsensoren
Abbildung 4: Roboter mit zwei Lichtsensoren

Der Roboter in Abbildung 4 ist der gleiche wie aus dem letzten Abschnitt, nur dass jetzt anstelle des einen zwei Lichtsensoren montiert wurden (Abbildung 5). Auch verhält er sich ähnlich wie der erste Roboter, nur dass mit den zwei Lichtsensoren sofort klar ist, in welche Richtung rotiert werden muss, um die Strecke wieder zu finden. Weicht nämlich genau ein Lichtsensor von der schwarzen Linie ab, so muss der Roboter in Richtung des anderen Lichtsensors drehen.

Java-Implementierung: Download MyRobotS2 Download

Video: Download Roboter mit zwei Lichtsensoren (XviD 1.1.0) Download

Roboter mit zwei Lichtsensoren auf schwarzer Linie
Abbildung 5: Roboter mit zwei Lichtsensoren auf schwarzer Linie

Kopieren einer Linie mit Hilfe zweier Roboter

Zeichnender Roboter (Empfänger)
Abbildung 6: Zeichnender Roboter (Empfänger)

Der Roboter in Abbildung 4 soll einer schwarzen Linie folgen und der Roboter in Abbildung 6 soll diese Linie an einem anderen Ort auf Papier aufzeichnen. Der die Linie folgende Roboter kann so wie der Roboter im vorherigen Abschnitt realisiert werden. Dieser teilt beim Fahren dem aufzeichnenden Roboter seine aktuellen Bewegungen (gerade aus fahren oder drehen) über die Infrarotschnittstelle der RCX-Einheiten mit (Abbildung 7a). Somit ahmt der malende Roboter einfach den anderen nach und zeichnet dabei mittels einem integrierten Stift die schwarze Linie auf das Papier (Abbildung 7b).

Java-Implementierung: Download CopyRobots Download

Video: Download Zwei kommunizierende Roboter (XviD 1.1.0) Download

Roboter (Sender) fährt Linie ab
Abbildung 7a: Roboter (Sender) fährt Linie ab
Roboter (Empfänger) zeichnet Linie auf Papier
Abbildung 7b: Roboter (Empfänger) zeichnet Linie auf Papier

Folgen einer unterbrochenen Linie mit Steigung

Roboter mit Räder
Abbildung 8: Roboter mit Räder

Der Roboter in Abbildung 8 wurde diesmal mit Rädern konstruiert. Allerdings verhalten sie sich prinzipiell so, wie die Kette der vorherigen Roboter. Das heißt, jeweils zwei Räder auf einer Seite werden durch einen gemeinsamen Motor gesteuert (Abbildung 9). Die beiden Lichtsensoren des Roboters sind im Gegensatz zu den anderen Robotern nicht dicht zusammen sondern mit einem größeren Abstand angeordnet (Abbildung 11a). Dies ist nötig, da die Lichtsensoren nicht mehr direkt über sondern neben der Linie bleiben sollen. Und dies wiederum ist erforderlich, um unterbrochene Linien wieder zu finden. Der Roboter verhält sich in etwa so, wie der Roboter aus dem zweiten Abschnitt, nur das jetzt Kurskorrekturen vorgenommen werden, wenn sich einer der beiden Lichtsensoren direkt über der schwarzen Linie befindet (Abbildung 11b und Abbildung 11c). Der Roboter soll beim Abfahren der Strecke auch eine Steigung überwinden können. Hierzu wurde eine Art Waage angefertigt, die Anzeigt wann der Roboter eine geneigte Ebene hochfährt. Die Waage besteht wie in Abbildung 10 und Abbildung 11d erkennbar aus einer Wippe, welche bei Neigung auf einen der Tastsensoren drückt. Im Wesentlichen verlangsamt der Roboter bei einer Steigung nur die fahrt, um bei kurvigen Linien nicht weg zu rutschen. Das Erkennen der Enden einer Stecke ist mit dieser Methodik leider nicht Möglich.

Java-Implementierung: Download CircuitRobot Download

Video: Download Roboter mit zwei auseinander stehenden Lichtsensoren (XviD 1.1.0) Download

Antrieb des Roboters
Abbildung 9: Antrieb des Roboters
Waage für Steigung
Abbildung 10: Waage für Steigung
Roboter mit zwei Lichtsensoren
Abbildung 11a: Roboter mit zwei Lichtsensoren
Roboter weicht von Linie ab
Abbildung 11b: Roboter weicht von Linie ab
Roboter dreht sich zur Linie hin
Abbildung 11c: Roboter dreht sich zur Linie hin
Waage des Roboters
Abbildung 11d: Waage des Roboters

Produzenten-Konsumenten-Problem

Arena
Abbildung 12: Arena

Ein Roboter (Produzent) soll Waren von seinem Lager zu einem Umschlagplatz transportieren. Ein weiterer Roboter (Konsument) soll diese Waren am Umschlagplatz abholen und zu seinem eigenen Lager bringen. Dabei dürfen sich Produzent und Konsument nicht gleichzeitig am Umschlagplatz befinden. Wie muss der beschriebene Prozess realisiert werden, damit der Umschlag der Waren möglichst schnell stattfindet? Die folgende Präsentation verdeutlicht ein prinzipielles Vorgehen zur Lösung des Problems.

Präsentation: Download Produzenten-Konsumenten-Problem Download

Java-Implementierung: Download ProducerConsumer Download