Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Den BoE-Bot navigieren

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.
    

 

2 - Vorwärts bewegen

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.

Abbildung 1 - Die möglichen Bewegungen eines BoE-Roboters (im Bild wird der Aufsatz mit einem Arduino-Board gezeigt).

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.

Abbildung 2 - Drehrichtung der Räder bei Vorwärtsbewegung eines Robots

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
  • Übertrage das Programm Nav_1.bs2 in den Editor und speichere es ab.
  • Schalte die Versorgungsspannung am Robot ein.
  • Starte das Programm.
  • Überprüfe, ob sich der Robot 3s vorwärts bewegt.

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
  • Speicher das Programm Nav_1.bs2 mit File - Save As ... unter dem Namen Nav_1a.bs2 ab.
  • Verändere in der FOR...NEXT Schleife den Endwert von 122 auf 61.
  • Starte das Programm und überzeuge dich, dass das Programm nur halb so lange läuft und der Robot die Hälfte der bisherigen Strecke zurücklegt.
  • Unternimm einen weiteren Versuch, indem du den Endwert in der Schleife auf 244 setzt und überprüfe das Verhalten des Robot.

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
    

3 - Rückwärts bewegen, Drehung, Drehen am Platz

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
  • Übertrage das Programm Nav_2.bs2 in den Editor und speichere es ab.
  • Schalte die Versorgungsspannung am Robot ein.
  • Starte das Programm und überprüfe die Bewegungen des Roboters.

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
  • Speichere das Programm Nav_2.bs2 mit File - Save As ... unter dem neuen Namen Nav_3.bs2.
  • Ersetze in dem Programm die Befehlsgruppen für vorwärts, rückwärts, rechts und links durch die eben besprochenen Befehlsgruppen für Drehungen am Platz.
  • Ändere den Endwert in allen FOR...NEXT Schleifen auf den Wert 30.
  • Speichere das neue Programm und starte es anschließend.
  • Überprüfe, ob es die besprochenen Bewegungen tatsächlich ausführt.

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.

4 - Grundbewegungen mit Software nachjustieren

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
  • Öffne über File - Open die Datei Nav_1.bs2.
  • Speichere die Datei über File - Save As ... unter dem neuen Namen Nav_4.bs2 ab.
  • Ändere in Zeile 8 der FOR...NEXT Schleife den Endwert von 122 auf 407 und speichere das Programm ab.
  • Starte das Programm und beobachte, ob der BoE-Bot von der geradenlinigen Bewegung nach rechts oder links abweicht.

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 läuft perfekt geradeaus. Dann freu dich, es gibt nichts zu tun.
  • der Boe-Bot driftet nach links ab. Dann könnte man die Geschwindigkeit des linken Servos etwas anheben. Da wir aber schon mit full-speed gefahren sind, ist diese Lösung keine echte. Bleibt nur, die Geschwindigkeit des rechten Servos etwas herunterzuregeln.
  • 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.

5 - Iteration

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
  • Ändere das Programm Navi_4.bs2 so lange ab, bis der BoE-Bot geradeaus fährt.
  • Als Orientierung für eine Geradeausfahrt ist es hilfreich, auf dem Boden mit einem Tapeband eine gerade Strecke abzukleben, an der der Roboter parallel vorbeifährt.
  • Wiederhole den Test noch einmal, indem du den BoE-Bot rückwärts fahren lässt.
  • Justiere ggf. auch hier die Bewegung nach den gleichen Kriterien wie für die Vorwärtsfahrt.

Meine Einstellwerte für den Geradeauslauf

6 - Drehbewegungen justieren

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
  • Lade das Programm Nav_2.bs2 in den Editor.
  • Ändere das Programm so ab, dass der Roboter 90° Drehungen ausführt.
  • Ergänze die Argumente in den PULSOUT Befehlen für die Vorwärts- und Rückwärtsbewegung, die du in der vorherigen Übung ermittelt hast.

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.

7 - Entfernungen bestimmen

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
  • Übertrage das Programm Nav_5.bs2 in den Editor und speichere es ab.
  • Stelle den Roboter so auf, dass er sich bei Geradeauslauf parallel zum Zollstock bewegt und die Drehachse bzw. der Auflagepunkt des Rades auf Höhe des Nullpunkts des Zollstocks liegt.
  • Starte das Programm durch Drücken des Reset-Buttons.
  • Miss aus, wieviele Zentimeter sich der BoE-Bot vorwärts bewegt hat. Führe den gleichen Versuch 5 mal durch und mittle das Ergebnis.
(Courtesy of Parallax Inc.)

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.

  1. Bestimme, wie lange die Servos laufen sollen um ein bestimmtes Ziel zu erreichen.
  2. Berechne, wieviele Impulse in dieser Zeit benötigt werden.

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
  • Entscheide, wie weit dein Roboter laufen soll.
  • Berechne mit Formel 7 die Anzahl der benötigten Impulse für die vorgegebene Strecke.
  • Trage die berechnete Impulszahl in das Programm Nav_5.bs2 ein und starte es.
  • Überprüfe, ob die berechneten Impulse den Roboter die vorgegebene Streckenlänge abfahren lässt.

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.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf