Softwarepraktikum - Lego-Mindstorms

Navigation

Startseite
Ablauf
Projekt 1
Projekt 2
Bilder
weitere Infos

Neuigkeiten

SoPra abgeschlossen

Hauptprojekt

Aufgabenstellung

Ein Roboter mit Greifarm soll sich in einem Labyrinth bewegen und dort verteilte Objekte einsammeln und einzeln zu einem bestimmten Ort im
Labyrinth transportieren.

Labyrinth

Die Wege im Labyrinth haben eine Breite von 50cm und sind durch 15cm hohe Waende begrenzt.
Das Labyrinth ist abgeschlossen, so dass der Roboter dieses nicht verlassen kann.

Objekte

Die Objekte sind schwarze oder weisse Filmdosen, die mit dem Photosensor erkannt werden sollen.
Sie sind jeweils 12,5cm von der Wand entfernt.

Lager

Innerhalb des Labyrinths fuehrt eine 1m lange Strecke zu einer Sackgasse.
Hier sollen die Objekte einzeln hintransportiert und abgelegt werden.

Verständigung

Der Roboter soll aus einem Greifarm bestehen, der ueber die Infrarotschnittstelle an einem zweiten RCX gesteuert wird.
Alternativ koennen auch 2 Roboter verwendet werden, wobei einer dem anderen folgt.

Start

Ausgangsposition ist beliebig an einer rechten oder einer linken Wand.

Ziel

Ziel ist es die meisten Objekte in der kuerzesten Zeit ins Lager zu bringen.
Nach einer Zeit von 15 Minuten gibt es ein timeout.
Sollte ein Roboter "Amok laufen", wird dieser vom Wettbewerb disqualifiziert.

Ergebnisse

Lösung: Hardware

Der Greifer ist vorn, leicht nach links versetzt angebracht um den Abstand von 12,5cm zur Wand zu realisieren
Der Lichtsensor ist ebenfalls vorn angebracht und zeigt in Fahrtrichtung
Es gibt nur zwei Räder, die von kleinen Zahnrädern angetrieben werden um eine möglichst hohe Karaft zu erreichen
Um das Gleichgewicht zu halten wurde hinten eine Kuve angebracht
Links, rechts und vorn sind Tastsensoren angebracht um Wände, Kurven und ähnliche Situationen im Labyrinth zu erkennen
Die zwei RCX zeigen mit ihren Infrarotschnittstellen aufeinander

Der erste RCX ist mit 3 Tastsensoren, sowie mit 2 Motoren für die Räder verbunden
Der zweite RCX ist nur mit dem Lichtsensor, sowie mit dem Motor fuer den Greifarm verbunden

Lösung: Hardware

Die Verarbeitung der verschiedenen Situationen erfolgt durch Action-Listener

Fuer den ersten RCX gibt es einen Sensor-Listener für die Tastsensoren, einen Serial-Listener für die Infrarot-Kommunikation, einen
Button-Listener fuer die Nachkonfiguration direkt am RCX und einen Timer-Listener

Fuer den zweiten RCX gibt es einen Sensor-Listener für den Lichtsensor und wie auch beim ersten RCX einen Serial-Listener für die
Infrarot-Kommunikation, einen Button-Listener für die Nachkonfiguration und einen Timer-Listener

Statische Variablen
Alle 10ms wird die Zeit inkrementiert und als "Zeit" gespeichert
Jeweils die letzte Stellung wird auf der Variablen "LastStatement" gespeichert
Die Variable "Status" enthaelt Informationen darüber, welche Aufgabe der Roboter gerade erfuellen soll
Mit der Variable "Edges" wir die Anzahl der Ecken gezaehlt
Infrarotkommunikation
Beide RCX besitzen eine Methode zum senden von Paketen und jeweils einen Serial-Listener zum empfangen
Es wird jeweils eine Zahl zwischen -128 und 127 (byte) gesendet Ein empfangenes Paket wird entsprechend seiner Information weiterverarbeitet Alle Werte zwischen 123 und 127 sind Befehlscode, also jeder Wert steht für eine Aktion
An der Wand entlangfahren
Immer wenn sich der Wert des linken oder rechten Tastsensors ändert, wird gegengelenkt, indem der entsprechende Motor auf Power 1
verringert wird
Bei jedem Aufruf des Sensor-Listeners wird die Zeit auf 0 gesetzt
Der Timer-Listener fragt alle 10ms die Zeit ab. Überschreitet die Zeit einen bestimmten Wert, d.h. wurde in dieser Zeit kein Tastsensor
verändert, wird eine Aktion ausgeführt, abhängig vom lastStatement und vom Wert des Sensors
Außenkurve
Wenn der Timer-Listener anschlägt und eine Kurve festgestellt wird, wird entsprechend ein Rad angehalten und das andere fährt die Kurve, bis
der Sensor wieder an die Wand anschlägt Die Zeit wird dann wieder auf 0 gesetzt und es geht wieder an der Wand entlang
Innenkurve
Schlägt der vordere Sensor an, setzt der Roboter zurück, dreht sich ein Stück von der Wand weg und fährt vorwärts, bis er wieder an die Wand stößt Nun steht er schräg und geht in den Modus "rumschieben" über. Die Variable "Edges" wird inkrementiert
Rumschieben
Wird ein Zeitlimit überschritten, d.h. der Timer-Listener schlägt an, und ist der Sensorwert 1, fährt der Roboter ein Stück rückwärts zur Wand
hin und dann wieder vorwärts. Dieser Vorgang wird unter Umständen mehrmals wiederholt
Dose gefunden
Auf dem zweiten RCX schlägt der Sensor-Listener an -> Der Motor für den Greifer wird aktiviert
Über Infrarot wird das erste RCX verständigt und der Status wird geändert
Umdrehen
Der Roboter fährt rückwärts ein Stück von der Wand weg, dreht um und fährt gerade auf die Wand zu, bis er sie wieder berührt und danach
normal weiter an der Wand lang
Dose abstellen
Wird der vordere Sensor aktiviert und ist "Edges" 0, wird ein Befehl an den zweiten RCX gesendet
Der zweite RCX stoppt den Motor für den Greifarm
Es wird umgedreht und wieder in den Status Explore gewechselt

Quelltext

Klassen downloaden zip-Datei

Video

Video zu Projekt 2 : avi Datei downloaden 40MB