In einem ersten Testlauf wird der Roboter mit 32 Encoder Ticks pro Sekunde vier Sekunden lang geradeaus fahren. Er legt in dieser Zeit eine Strecke von ca. 80 cm zurück und beide Räder legen die gleiche Strecke in der gleichen Geschwindigkeit zurück.
Testlauf des Roboters | |
Aufgaben |
|
Der Roboter sollte ca. 80cm geradeaus laufen. Durch das ständige Feedback über die Encoder, über die der Roboter seinen Kurs laufend anpasst und korrigiert, ist die Bewegung nicht absolut geradlinig.
Das Programm Test for Trim.c
Wie arbeitet das Programm?
Außer dem Befehl pause(8000) entstammen alle anderen Befehle der Bibliothek abdrive.
drive_trimSet(0, 0, 0) löscht alle Trimmungseinstellungen, die vielleicht vorher schon eingegeben worden waren.
drive_speed(32, 32) versetzt beide Räder in eine Geschwindigkeit mit 32 Ticks (1/2 Umdrehung) pro Sekunde über eine Zeit von 8s. Der Befehl
drive_speed(0, 0) stoppt beide Servos.
Was du wissen solltest!
Updates - Der ActivityBot aktualisiert über die Rückmeldung der Encoderdaten die Motorgeschwindigkeit 50x pro Sekunde. Dabei wird verglichen, wie weit sich das Rad gedreht haben sollte und wie weit es sich tatsächlich gedreht hat.
Encoder Ticks und Entfernungen - Bei jedem Encoder Tick hat sich das Rad um 3,25mm vorwärts bewegt. Ein Tick ist immer der Abstand von einer Speiche zu einem Loch oder von einem Loch zu einer Speiche. Es gibt 32 Speichen und 32 Löcher in jedem Rad, insgesamt also 64 Encoder Ticks pro Radumdrehung.
Ramping - Ramping meint die allmähliche Geschwindigkeitserhöhung oder Absenkung, so dass der Roboter Fahrmanöver sanft beginnt und beendet und nicht abrupt startet oder stoppt.
Versuch mal dies!
Wenn die eben durchfahrene Strecke doppelt so schnell abgefahren werden soll, dann probiere mal das folgende Programm aus.
Schneller sein | |
Aufgaben |
|
Programm Schneller sein.c
Jetzt kommst du!
Im folgenden Programm wird das Prinzip des Rampings klar und an der Bewegung des Roboters kann man es dann auch noch einmal gut sehen. In einer LOOP-Schleife und mit Hilfe einer Variablen speed wird die Umdrehungsrate der Räder zunächst erhöht und später erniedrigt.
Schneller sein | |
Aufgaben |
|
Das Programm ramping.c
Natürlich ist es möglich durch die Wahl einer bestimmten Geschwindigkeit und Vorgabe der Zeit eine bestimmte Strecke zurückzulegen. Kompliziert wird es, sobald man rampings beim Start und Stopp einbaut. In der Bibliothek abdrive gibt es eine Funktion drive_goto, die dies alles berücksichtigt. Zusätzlich steuert sie den Vortrieb jedes Rades in Einheiten von 3,25mm.
Ein Rad des Propeller ActivityBot hat 32 Speichen und 32 Zwischenräume; das macht für den Encoder 64 Ticks. Dreht sich das Rad um 1/64 (das entspricht einem Tick), bewegt es sich 3,25mm.
Soll der ActivityBot eine bestimmte Streckenlänge s abfahren, dann muss s in der Einheit mm durch 3,25mm geteilt werden, um herauszufinden, wie viele Ticks im Programm gezählt werden müssen.
Der Drehradius eines ActivityBots liegt bei typisch 105,8mm.
Stoppt das rechte Rad und dreht sich nur das linke, dann entspricht die Laufstrecke des Rades dem Kreisumfang: 2 x Pi x r. In diesem Fall ist r der Kreisradius; er entspricht dem Abstand der beiden Räder: 105,8mm. Der Kreisumfang errechnet sich zu: 664,76 mm. Eine Vierteldrehung entspräche dann eine Umfangstrecke von 166,2 mm oder 166,2 / 3,25 Ticks = ca. 51 Ticks.
Testprogramm
Mit diesem Programm bewegt sich der ActivityBot 256 Ticks vorwärts und dreht dann nach rechts um 90 Grad.
Testprogramm | |
Aufgaben |
|
Wie arbeitet das Programm?
Zeile 12
Der ActivityBot fährt 256 Ticks vorwärts (vier Radumdrehungen).
Zeile 14
Der Roboter führt eine 90° Drehung nach rechts aus.
Mit der Funktion drive_speed aus der Bibliothek abdrive kann jeder Antriebsservo auf eine bestimmte Geschwindigkeit (in Encoder-Ticks pro Sekunde) eingestellt werden. Positive Vorzeichen stehen für Vorwärts- und negative für Rückwärtsbewegungen. Wird eine Radgeschwindigkeit auf 64 Ticks eingestellt, entspricht das einer vollen Umdrehung pro Sekunde. Und wir werden die drive_ramp Funktion einsetzen und den Roboter langsam abbremsen und langsam anfahren lassen.
Programmbeispiel zur Geschwindigkeitssteuerung
In diesem Beispiel fährt der Roboter mit einer Geschwindigkeit von 64 Ticks/Sekunde für 200 Ticks vorwärts, führt dann eine 45° Rechtsdrehung aus, indem das linke Rad mit 32 Ticks/Sekunde dreht und bewegt sich dann für weitere 200+ Ticks mit einer Geschwindigkeit von 128 Ticks/Sekunde.
Geschwindigkeit einstellen | |
Aufgaben |
|
Das Programm Speeds for Navigation.c
Wie arbeitet das Programm?
Das Programm startet mit beiden Servos, die sich über 2 Sekunden lang mit 64 Ticks/Sekunde drehen. Macht insgesamt 128 Ticks.
Drive_speed(26, 0) dreht das linke Rad mit ca. 26 Ticks/Sekunde, während das rechte Rad still steht. Dieser Vorgang dauert 1 Sekunde; das linke Rad dreht mit 26 Ticks, das entspricht einem Winkel von ca. 45°.
Drive_speed(0, 0) lässt beide Räder für eine Sekunde still stehen. Das sich anschließende letzte Manöver geht über die gleiche Strecke wie das erste, nur diesmal doppelt so schnell (128 Ticks/Sekunde statt 64) aber dafür auch nur eine Sekunde, statt 2.