Der BoE-Bot lässt sich so programmieren, dass er verschiedene Grundbewegungen ausführt:
vorwärts,
rückwärts,
Drehung nach links,
Drehung nach rechts und
Drehung auf der Stelle.
Wenn wir von Bewegungen sprechen, muss zuerst geklärt werden, was wir damit genau meinen. Es wird vereinbart, dass wir von oben auf den Robot herabschauen (im Bild ist ein BoE-Shield Bot mit einem Arduino UNO zu sehen). Das Steckbrett und das Heckrad (die kleine Kugel) beschreiben, wo vorne und wo hinten ist. Alles Weitere ist uns eigentlich bekannt.
Ein Robot kann vorwärts und rückwärts fahren, nach links oder rechts abbiegen und er kann um die linke oder rechte Achse drehen. Letzteres heißt, die Drehachse bleibt am Platz und der Robot dreht um das feststehende Rad.
Aber es muss auch noch etwas anderes geklärt werden. Wie müssen sich die Servos drehen, damit der Robot sich vorwärts bewegt? Dazu klärt das folgende Bild auf.
Je nachdem, von welcher Seite man sich den Robot anschaut, stellt man fest, wenn er sich vorwärts bewegt, dann dreht das eine Rad im Uhrzeigersinn und das andere gleichzeitig gegen den Uhrzeigersinn. Das sollte für uns keine Hürde sein, da wir inzwischen wissen, wie man mit dem PULSOUT Befehl ein Rad links oder rechts herum drehen lässt.
Im folgenden Programmbeispiel Navi_1 bewegt sich der BoE-Bot für 3 Sekunden vorwärts.
Aufgaben |
|
Programmbeispiel Nav_1.bs2
Wie arbeitet das Programm Nav_1.bs2?
Der wichtige Teil ist die FOR ... NEXT Schleife. Wir wissen, dass damit die Laufzeit des Servos gesteuert wird. Insgesamt benötigt das Programm bei den beiden PULSOUT-Befehlen und der Pause 23ms zur Ausführung plus ca. 1,3ms für die Schleifenausführung. Das macht 24,3ms für einen Schleifendurchlauf. Bei 122 Durchläufen ergibt sich damit eine Gesamtausführungszeit von 2964,6ms oder ca. 3s.
Schauen wir auf die PULSOUT Befehle. Das rechte Vorderrad muss sich im Uhrzeigersinn und das linke im entgegengesetzten Uhrzeigersinn drehen - und beide gleich schnell, deshalb muss der Abstand von der Mittelstellung (750) nach oben und unten gleich groß sein. Und das ist er hier.
Jetzt kommst du!
Durch eine Halbierung der Anzahl von Schleifendurchläufen halbiert sich auch die Ausführungszeit für die Servos und der Robot kommt nur noch ein kürzeres Stück weit.
Aufgaben |
|
Mit einem Argumentwert von 650 und 850 im PULSOUT Befehl wurde der Servo mit nahezu maximaler Geschwindigkeit betrieben. Je mehr sich die Werte dem Wert 750 annähern (Stillstand der Servos), desto langsamer wird die Gesamtbewegung des Roboters.
Probier es aus, indem du die folgende PULSOUT Befehle in das Programm schreibst
PULSOUT 13, 780
PULSOUT 12, 720
Um andere Bewegungen zu erreichen, muss die Kombination der Argumente im PULSOUT Befehl verändert werden.
Rückwärtsbewegung
PULSOUT 13, 650
PULSOUT 12, 850
Drehung nach links
PULSOUT 13, 650
PULSOUT 12, 650
Drehung nach rechts
PULSOUT 13, 850
PULSOUT 12, 850
Wenn wir alle diese Bewegungen in ein Programm packen, dann landen wir beim Programm Navi_2.bs2.
Programmbeispiel
Aufgaben |
|
Das Programm Nav_2.bs2
Jetzt kommst du! - Drehen am Platz
Der BoE-Bot kann auch am Platz drehen um eines der beiden Antriebsräder. Dazu bleibt ein Rad in Ruhe, während das andere sich dreht. Wenn zum Beispiel das linke Rad in Ruhe bleibt und das rechte sich im Uhrzeigersinn dreht (nach vorne), dann wird sich der BoE-Bot nach links drehen.
PULSOUT 13, 750
PULSOUT 12, 650
Soll eine Drehung nach rechts erfolgen, dann muss das rechte Rad in Ruhe bleiben und entsprechend das linke sich entgegen dem Uhrzeigersinn drehen.
PULSOUT 13, 850
PULSOUT 12, 750
Für eine Drehung am Platz rückwärts rechtsherum gilt
PULSOUT 13, 650
PULSOUT 12, 750
und für eine Drehung am Platz rückwärts linksherum
PULSOUT 13, 750
PULSOUT 12, 850
Aufgaben |
|
Die ersten Laufversuche mit dem BoE-Bot müssen jetzt zeigen, ob die Einstellungen der Servos korrekt sind. Sollte sich bei einem klassischen Geradeauslauf über mehrere Sekunden herausstellen, dass der Roboter von der geraden Bahn abweicht, dann muss nachjustiert werden. Die Ursache kann ungleiches Laufverhalten oder eine schlechte Zentrierung der Servos sein. Zwei Lösungen zur Behebung bieten sich an:
mechanisch oder
per Softwareeinstellung.
Wir werden eine Nachjustierung per Softwareeinstellung vornehmen und zeigen, wie das abläuft.
Geradeauslauf überprüfen
Zur Verbesserung des Geradeauslaufs wird zunächst überprüft, ob und wenn ja um wieviel der Roboter von einer geraden Strecke und in welcher Richtung - ob nach rechts oder links - abweicht. Zehn Sekunden Fahrzeit sollten hier ausreichend sein. Dazu wird das Programm Navi_1.bs2 in Teilen verändert.
Aufgaben |
|
Programm Nav_4.bs2
Jetzt kommst du! - Durch Anpassung der Geschwindigkeiten den Geradeauslauf verbessern
Es können sich insgesamt drei Optionen ergeben:
der BoE-Bot driftet nach rechts ab. Dann sollte die Geschwindigkeit des linken Servos heruntergeregelt werden.
Kümmern wir uns mal um die Linksabweichung. Die Geschwindigkeit des Servos wird über das Argument dauer im Befehl PULSOUT gesteuert. Je näher dauer am Wert 750 liegt, umso langsamer dreht sich der Servo. Es sollte deshalb der Wert 650 in Programmzeile 10 etwas erhöht werden - näher zur Zahl 750. Jetzt muss man ein bisschen ausprobieren. Bei einer sehr kleinen Linksdrift genügt vielleicht schon ein Wert von 664, bei stärkerer Abweichung vielleicht ein Wert von 686. Probiere es aus - immer und immer wieder, bis der Geradeauslauf nahezu perfekt ist.
Am schnellsten kommt man zum Ziel, wenn man das Problem iterativ angeht. Das heisst, man wählt einen ersten kleinen Annäherungswert x0. Bleibt es bei der Linksdrift, wählt man einen deutlich höheren Wert x1. Kommt es zur Rechtsdrift, dann hat man eine untere und obere Schranke. Als neuen Näherungswert nimmt man den Mittelwert aus oberer und unterer Schranke und nennt ihn x2. Kommt es zur Linksdrift nimmt man den Mittelwert aus neuer unterer und oberer Schranke und so weiter ...
Aufgaben |
|
Meine Einstellwerte für den Geradeauslauf
Wie beim Geradeauslauf lässt sich auch die Drehbewegung eines Roboters sehr genau anpassen. Eine Drehung um 90° gelingt nur dann, wenn die Zeitdauer während der Rotationsbewegung genau gewählt ist. Die FOR...NEXT Schleife steuert die Laufzeit der Servos; Drehwinkel können durch einen veränderten Endwert in der Schleife sehr genau eingestellt werden. Auch hier ist es ratsam sich dem Bestwert iterativ zu nähern. Als zusätzliche Stellgröße kann über das Argument dauer im Befehl PULSOUT die Geschwindigkeit während einer Drehbewegung verändert werden und so die Annäherung zusätzlich verbessert werden.
Jetzt kommst du! - 90° Drehung
Aufgaben |
|
Tipp
Auf Teppichböden sollte man den BoE-Bot nicht fahren lassen. Die Teppichfasern beeinflussen die Bewegung des Roboters sehr stark. Ideal ist eine ebene griffige Oberfläche, wie zum Beispiel Linoleum. Parkett- oder Laminatböden sind m.E. schon zu glatt. Am Besten, einfach ausprobieren.
Bei gleichförmigen Bewegungen lassen sich mit der Kenntnis aus der Geschwindigkeit und der Zeit die zurückgelegten Distanzen berechnen. Die Formel kennen wir aus der Physik; sie lautet
Formel 2 ist die Kurzfassung von Formel 1 in der in der Physik üblichen Schreibweise. Aufgelöst nach der Zeit t ergibt sich dann:
und angepasst an den BoE-Bot erhalten wir
Als erstes bestimmen wir die Geschwindigkeit des Roboters. Dazu nehmen wir uns einen Zollstock, lassen den Roboter eine Sekunde geradeaus parallel zum Messsystem laufen und notieren die zurückgelegten Zentimeter.
Aufgaben |
|
Das Programm Nav_5.bs2
Meine Abstandsmessungen
24,6ms pro Schleifendurchlauf oder Impuls bedeutet 1 Impuls wird alle 24,6ms übertragen oder mathematisch formuliert
Nehmen wir mal an, der Mittelwert für die zurückgelegte Wegstrecke sei 22cm. Dann bedeutet das, dass der Roboter in 1 Sekunde 22cm zurücklegt oder eine Geschwindigkeit von 22 cm/s hat. Damit lässt sich jetzt auch die Zeit bestimmen, die der Roboter laufen muss, damit er eine bestimmte Strecke zurücklegt.
Beispiel
In welcher Zeit legt der Roboter eine Strecke von 51cm zurück?
Lösung mit Dreisatz
22cm legt er in 1s zurück.
1cm legt er in 1/22 s zurück.
51cm legt er in 1*51/22 s zurück.
Ausgerechnet ergibt das einen Wert von 2,32s.
Im Abschnitt Servo zentrieren und testen - Mit FOR...NEXT die Laufzeit eines Servos steuern wurde errechnet, dass die Ausführung von zwei PULSOUT-Befehlen und eines PAUSE-Befehls in einer FOR...NEXT Schleife pro Schleifendurchlauf 24,6ms benötigt.
24,6ms pro Schleifendurchlauf oder Impuls bedeutet 1 Impuls wird alle 24,6ms übertragen oder mathematisch formuliert
Um eine Strecke von 51cm zurückzulegen, benötigt der Roboter 2,32s und die Anzahl der Impulse, die die BASIC Stamp an den Servo jede Sekunde überträgt liegt bei 40,65. In den 2,32s werden damit
übertragen. Die Berechnungen in dieser Übung liefen in zwei Schritten ab.
Die Anzahl der Impulse errechnet sich dann in einem Rechenschritt aus der Formel
Beispiel
Die Geschwindigkeit des BoE-Bot sei 19 cm/s und der Roboter soll 18 cm vorwärts gehen. Die Werte werden in Formel 7 eingesetzt; es ergibt sich
Aufgaben |
|
Die eben vorgestellte Berechnungstechnik für das Zurücklegen fester Strecken trägt eine Reihe von Fehlern in sich. Zum Beispiel braucht es eine gewisse Anzahl von Impulsen, bis der Servo full-speed fährt und wenn die Batterien schwächer werden, werden auch die Servos langsamer.
Die Genauigkeit lässt sich dadurch erhöhen, dass man sogenannte Encoder einsetzt. Was das ist und wie das geht, wird beim Activity-Bot erklärt.