Real-Time and Embedded Systems

SusiEx

SusiEx

Ressourcen

 

Beschreibung

SusiEx ist ein Roboter, der zur Demonstration des von Stephan Hörmann entwickelten Ultraschallpositionierungssystems (PDF) gedacht ist. Der Roboter bewegt sich nicht schnell vorwärts aber dafür sehr präzise.

Im Roboter ist ein Differential mit einem Rotationssensor so verbaut, dass jener nur exakt die vorwärts gefahrene Strecke mißt und bei einer Drehung auf der Stelle still steht. Die beiden Motoren werden an die Ausgänge A und C angeschlossen. Der Rotationssensor ist mit dem Sensoreingang 2 verbunden. Der erste Sensoreingang ist für den Beacon (od. Empfänger) des Positionierungssystems vorgesehen.

Programmcode

Das Programm zu SusiEx funktioniert nur in einer Umgebung von 183cmX192cm (Präsentationsholzrahmen, s.u.). Die Leuchtfeuer müssen der Grafik entsprechend aneinander geschlossen sein, damit weder die X- noch die Y-Achse vertauscht ist oder ein falsches Vorzeichen hat.
Mit Hilfe der Kalibrierungsfunktion sollte man nun zunächst den Roboter für eine Drehung auf dem Untergrund (mit jeweiligem Batteriestand) vorbereiten. Anschließend werden drei (beliebige) Punkte innerhalb des Feldes eingelesen. Der erste Punkt ist der Startpunkt die beiden anderen zwei Kreismittelpunkte. Der Roboter kann nun an einer beliebigen Stelle "ausgesetzt" werden und findet mit Hilfe des Positionierungssystems zur Startposition zurück. Dort richtet er sich aus und beginnt daraufhin eine "Acht" um die beiden Kreise zu fahren. Schließlich kehrt er zur Startposition zurück und beginnt daraufhin von vorn.

 

Achtung: BrickOS muss zuvor modifiziert (verkleinert) werden, damit das Programm auf dem RCX ausreichend Platz hat. Genaue Hinweise dazu befinden sich im Kopf des Programmcodes.

SusiEx 2          SusiEx 3

Hinweise zum Betrieb

Kalibrierung

Eine Kalibrierung des Roboters ist deshalb notwendig, da sowohl der Untergrund als auch der Batterieladezustand Einfluß auf das Drehverhalten haben. Drehungen werden über die Zeit und einen Kalibrierungswert approximiert. Je glatter der Untergrund oder/und voller die Batterien, desto schneller erfolgt die Drehung und kleiner sollte der Wert gewählt werden. Sind die Batterien nicht voll geladen oder der Untergrund rau, so wird mehr Zeit für eine Drehung benötigt und der Wert sollte oberhalb von 70 gewählt werden.

Die Kalibrierung erfolgt durch die Auswahl von CAL im Menü. Der Kalibrierungswert wird durch <View> erhöht und kann Werte zwischen 55 und 150 annehmen. Wird die Kalibrierung mit <Prgm> abgeschlossen, so dreht sich der Roboter zur Kontrolle um (vermeindliche) 180 Grad. Sollte die Drehung über 180 Grad hinausgehen muß der Wert verringert werden. Ist die Drehung hingegen kleiner als 180 Grad, so muß der Wert vergrößert werden.

Menüsteuerung

Wird das Programm über <Run> gestartet, so erscheint das Hauptmenü, dessen Menüpunkte (DEST, C1, C2, CAL, MOVE, END) sich mit <View> nacheinander anzeigen lassen. Der Menüpunkt MOVE ist erst sichtbar, nachdem die Positionen DEST, C1 und C2 eingelesen wurden. Die Menüpunkte lassen sich durch <Prgm> auswählen.

Positionen einlesen

Zum Einlesen der Positionen DEST, C1 und C2 muß der Beacon auf Eingang 1 (mit dem Kabelausgang nach links) angeschlossen sein. Nach der Auswahl über das Hauptmenü (s.o.) wird automatisch die Position mit Hilfe des Ultraschallsystems ermittelt und zunächst die X- und daraufhin die Y-Koordinate in cm auf dem Display ausgegeben.

Betrieb

Der Roboter sollte zunächst für den Untergrund kalibriert werden (s.o.). Anschließend werden die drei Positionen DEST, C1 und C2 eingelesen (s.o). Daraufhin erscheint im Menü der Eintrag MOVE mit dem der Roboter von einer beliebigen Position aus in Bewegung gesetzt wird. Er fährt nun zunächst zur Position DEST und richtet sich dort aus und gibt er die Zeichenfolge „hello“ aus. Dann beginnt er eine „Acht“ um die Punkte C1 und C2 herum zu fahren.  Schließlich kehrt er erneut zu DEST zurück um daraufhin erneut eine „Acht“ zu fahren.

Approximation der "Acht"

SusiEx 4Die "Acht" wird mit Hilfe trigonometrischer Funktionen berechnet. Da diese relativ groß sind, wurde bei der Programmentwicklung auf Tabellenfunktionen zurückgegriffen, die nur näherungsweise korrekte Ergebnisse liefern.

Die "Acht" wird um die beiden Kreispunkte (rot und gelb) gefahren. Da der Roboter später einzelne Punkte nacheinander anfahren wird, müssen diese approximiert werden. Zunächst wird der Mittelpunkt zwischen beiden Kreispunkten errechnet. Dieser ist gleich dem Mittelpunkt der "Acht". Der Roboter wird diesen, von der Startposition kommend, zuerst anfahren. Daraufhin werden die Senkrechten durch die jeweiligen Kreismittelpunkte (rot und gelb) berechnet. Mit einem fixen Radius von 15cm werden nun auf diesen Senkrechten die vier Eckpunkte abgetragen. Der Roboter wird nach dem Kreismittelpukt jenen dieser vier Eckpunkte als erstes anfahren, der am weitesten von der Startposition entfernt ist! Mit Hilfe eines Approximationswinkels (hier 45 Grad) können dann die weiteren Punkte zwischen den Eckpunkten ermittelt und schließlich abgefahren werden.