|
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
|
|