Real-Time and Embedded Systems

Rover

Rover

Beschreibung

Der Rover ist dafür konstruiert, besonders präzise steuern zu können. Er kann fahren, mit wenig Widerstand und fast ohne seitlicher Verschiebungen auf der Stelle drehen. Ein Lichtsensor tastet den Untergrund ab, und ein Rotationssensor mißt die Differenz der Drehungen beider Räder. Dadurch kann der Roboter jederzeit ausrechnen, in welche Richtung er zeigt.

Programmcode

Der Rover wurde hauptsächlich zur Lösung verschiedener Übungsserien der Vorlesung Verteilte Echtzeitsysteme gebaut. Dabei sollte ein Roboter geradeaus fahren und den Boden abtasten, bis er einen Strichcode unter sich findet. Der Roboter richtet sich so aus, daß er mittig und gerade über den Code fahren kann. Dann fährt er drüber, liest den Code ein und decodiert ihn. Als Ergebnis kommt ein Drehwinkel heraus, um den der Roboter sich drehen muß, damit er in Richtung des nächsten Codes fährt. Der Vorgang wiederholt sich, bis der Roboter einmal um den ganzen Parcours gefahren ist.

Höhere Präzision

Um die Genauigkeit des Rotationssensors etwas zu verbessern, ist noch ein kleiner Umbau nötig. Das Zahnrad auf der Achse durch den Rotationssensor wird durch ein kleines ersetzt und ein weiteres kleines zwischen das erste und das Differential mit einem Achsenpin gesetzt. Dadurch erhöht sich die Auflösung des Rotationssensors um den Faktor 3. Es ist auch möglich, die großen Antriebsräder durch welche der Größe 49.6x28 VR zu ersetzen. Das hat minimale Vorteile, erfordert aber das Ändern einiger Konstanten im Programm.

Manöver

Der Roboter kann mehrere Tricks beim Fahren ausnutzen. Bemerkt er beispielsweise beim geradeausfahren, daß sich der Wert vom Rotationssensor ändert, bedeutet dies, daß ein Rad langsamer läuft. Der Roboter fährt also eigentlich eine Kurve. In so einem Fall steuert das Programm die Motoren mit unterschiedlicher Geschwindigkeit an, bis der Roboter wirklich gerade fährt.

Außerdem kann das Programm aus der kumulierten Umdrehungsanzahl des Rotationssensors genau ablesen, in welche Richtung der Roboter gerade fährt. Beide Funktionen zusammen ermöglichen es, einen Kurs präzise zu fahren.

Ein weiterer Trick ist es, die Motoren nicht gleichzeitig sondern nacheinander anzusteuern. Dann fährt beispielsweise erst der linke Motor eine Sekunde vor, danach der rechte Motor. Der Roboter zeigt immer noch in die selbe Richtung wie vorher, ist aber parallelverschoben.

Strichcode einlesen

Stößt der Roboter auf einen Strichcode, beginnt er mit der Ausrichtung. Er verschiebt sich in kleinen Stücken parallel nach rechts, bis er beim Geradeausfahren keinen Strichcode mehr findet, dann tastet er sich nach der selben Methode nach links vor. bis er den Code wieder findet. Jetzt kennt er den rechten Rand des Codes und plaziert sich genau darüber.

Mit einer Drehung im Uhrzeigersinn macht sich der Roboter auf die Suche nach der ersten Linie des Strichcodes. Sobald er sie findet, fährt er etwa auf die Mitte der Linie, dreht nochmals um 90 Grad und setzt ein kleines Stück zurück. Damit steht er genau in Position, um den Code einzulesen. Beide Motoren drehen vorwärts, und nach der Beschleunigung beginnt er mit dem Einlesen des Codes. Konnte dieser korrekt decodiert werden, dreht der Roboter um den gelesenen Winkel und sucht nach dem nächsten Strichcode.

 

Die Programme werden normal compiliert und auf dem RCX gestartet. Der Rover fährt los, bis er auf den ersten Strichcode stößt.