Das folgende Testprogramm stellt sicher, dass die Encoder die Speichen der Räder erkennen. Wenn sie korrekt arbeiten, dann geht jedesmal, wenn eine Speiche erkannt wird, eine LED auf dem Activity Board kurz an und erlischt wieder, sobald das Rad weiterdreht und der Zwischenraum zwischen zwei Speichen den Encoder passiert.
Kalibrieren der Encoder | |
Aufgaben |
|
Abbildung 1
Durch Hin- und Herdrehen des Rades wird der Encoder überprüft. Bei der Überprüfung des rechten Rades muss die LED P27 an- und ausgehen, wenn eine Speiche des Rades am Encoder vorbeigeführt wird. Im Bild ist diese Situation gut zu sehen. Die gelb leuchtende Diode zeigt an, dass der Encoder korrekt arbeitet.
Testprogramm Encoder.c
Einige Fehler lassen sich sofort erkennen, andere muss man mühsam suchen. Was kann passieren?
P26 LED bleibt aus, obwohl das Rad gedreht wird
P27 LED bleibt aus, obwohl das Rad gedreht wird
P27 LED leuchtet statt P26, wenn das rechte Rad gedreht wird (oder umgekehrt)
Eine der beiden LED leuchtet ständig, wenn das Rad gedreht wird
Die Encoder LEDs leuchten ständig, oder meistens und flackern
Beide LEDs P26 und P27 leuchten die ganze Zeit während des Testlaufs
Wenn beide Encoder arbeiten wie sie sollen
Die Prozedur dazu wird einmal durchgeführt, um Geschwindigkeiten und Entfernungen zu messen und zu korrigieren, die über die Encoder eingelesen werden. Dieser Prozess sammelt Daten über angeforderte und tatsächlich gemessene Geschwindigkeiten und speichert sie im EEPROM auf dem Activity Board. Von dort lassen sie sich jederzeit wieder aufrufen, auch wenn zwischenzeitlich die Spannungsversorgung einmal unterbrochen wurde.
Wenn das Programm eine bestimmte Geschwindigkeit einfordert, werden die Kalibrierungsdaten aus dem EEPROM geladen und mit Hilfe der Bibliothek abdrive die Motoren mit der geforderten Geschwindigkeit angetrieben.
Das Programm zur Kalibrierung benötigt etwa zwei Minuten um alle Daten zu sammeln. Dazu ist ein ebener Boden ohne Hindernisse von ca. 1m x 1m notwendig. Solange das Kalibrierungsprogramm läuft, wird der Activity Bot mit verschiedenen Geschwindigkeiten im Kreis fahren, dabei nur ein Rad antreiben und am Ende signalisieren, dass er fertig ist. Dazu schaltet er die LEDs P26 und P27 ab.
Wichtiger Hinweis! Die Bibliothek ActivityBot muss installiert sein und sollte sich im Verzeichnis ...Documents\SimpleIDE\Learn\SimpleLibraries\Robotics befinden, bevor das Kalibrierungsprogramm oder andere ActivityBot Programme gestartet werden.
Kalibrieren des Roboters | |
Aufgaben |
|
Das Programm ActivityBot Calibrate.c
Wie arbeitet das Programm?
In Zeile 17 und 18 werden die beiden LEDs P26 und P27 auf HIGH gesetzt. Anschließend wird in Zeile 19 die Funktion cal_activityBot() aus der Bibliothek abcalibrate.h aufgerufen. Sie lässt den Roboter verschiedene Fahrbefehle ausführen, die du vorhin beim Kalibrierungslauf gesehen hast. Während die einzelnen Fahrmanöver ausgeführt werden, erstellt die Funktion cal_activityBot eine Liste mit Geschwindigkeitswerten zu den entsprechenden Fahrbefehlen. Diese Werte werden im EEPROM abgelegt, so dass jedes ActivityBot Fahrprogramm auf sie zugreifen kann. Damit ist sichergestellt, dass für jede Geschwindigkeit die entsprechende Einstellung gefunden wird. Nach Abschluss der verschiedenen Kalibrierungsläufe werden die LEDs P26 und P27 auf LOW gesetzt (Zeilen 20 und 21) und das Programm ist beendet.
Encoder Ticks
Jeder ActivityBot Encoder sendet IR-Licht auf die vor ihm befindlichen 32 Speichen des Rades. Wird das ausgesendete Licht an einer Speiche reflektiert und an den Lichtsensor im Encoder zurückgeworfen, erhält der Propeller Controller ein LOW-Signal; wird das ausgesendete Licht nicht reflektiert (im Raum zwischen zwei Speichen), dann wird ein HIGH-Signal gesendet. Bei jedem Wechsel von HIGH nach LOW oder von LOW nach HIGH zählt der Propeller Controller einen Encoder Impuls oder Encoder Tick.
Richtungen erfassen
Der Propeller Chip weiß in welche Richtung die Servos drehen aufgrund der Signale, die den Servo antreiben. Vom Encoder erhält er die Rückmeldung wie schnell die Drehbewegung ausgeführt wird, indem die Encoder Ticks über eine Zeiteinheit gezählt werden. Die Bibliotheken überwachen all dies ohne unser Zutun, so dass die zukünftigen Roboterprogramme dem Activity Bot nur sagen müssen wie weit und wie schnell er sich bewegen soll.
Die Funktion cal_activityBot erstellt eine Datentabelle für die Motoransteuerung und die aktuelle Geschwindigkeit, mit der sich die Räder drehen. Steuerungsprogramme nutzen diese Daten um herauszufinden wie schnell ein Rad drehen muss, um eine bestimmte Geschwindigkeit zu erreichen. Liegt die von einem Programm angeforderte Geschwindigkeit zwischen zwei Datenpunkten, versucht die Steuerungsbibliothek anhand von zwei bestehenden Messwerten den besten Wert zu ermitteln.
Ein Beispiel
Enthält die Tabelle Daten für 60 und 80 Encoder Ticks pro Sekunde und das Programm fordert 70 Ticks an, dann wählt die Steuerungsbibliothek eine Motoreinstellung, die mittig zwischen 60 und 80 Ticks pro Sekunde liegt. Diesen Prozess nennt man Interpolation und das Datenmaterial wird als lineare Interpolationstabelle bezeichnet.
Versuch mal dies!
Willst du mal die Interpolationstabelle deines kalibrierten ActivityBot ansehen? Sie enthält Daten über die Ansteuerung und die gemessenen Rotationsgeschwindigkeiten der Räder in Encoder Ticks pro Sekunde.
Interpolationstabelle | |
Aufgaben |
|
Terminalausgabe der Interpolationstabelle
Die Interpolationstabelle eignet sich hervorragend zur Fehlersuche, wenn der Roboter nach der Kalibrierung einmal nicht so läuft wie beabsichtigt.