Roboter bewegen für Anfänger

Im „Roboter bewegen für Anfänger“ Kurs geht es um die Basissoftware des Roboters. In einem Python Skript legen wir den Grundstein für alle folgenden Funktionen und Einsatzbereiche des Roboters. Ich zeige euch Schritt für Schritt was man alles machen muss. Als Ergebnis erhaltet ihr ein Programm über das man den Roboter über die Tastatur wie ein ferngesteuertes Auto steuern kann.

Roboter bewegen für Anfänger

Roboter bewegen für Anfänger

Zugegeben, einen Roboter zu bewegen gehört zu den Paradedisziplinen des Programmierens. Man denke an das Google Driverless Car. Die Entwicklung solcher autonomer Systeme dauert Jahre und wird auf universitärer Ebene oder von großen Konzernen gemacht. Andere tolle Beispiele sind die Marsrover der Nasa. All diese Beispiele zeigen wie es geht.

Bewegungstheorie

Mein Roboter hat 4 Räder, zwei auf jeder Seite. Diese sind fix montiert und können sich nur in zwei Richtungen bewegen. Den Roboter können wir deshalb nicht wie ein Auto steuern, es fehlt die Lenkstange – dafür wäre ein fünfter Motor notwendig. Wir bewegen den Roboter deshalb wie folgt:

  • vorwärts fahren
    alle 4 Räder bewegen sich vorwärts. Das heißt alle 4 Motoren drehen sich in die selbe Richtung. Achtung: So trivial die Bewegung nach vorwärts auch erscheint, solange diese nicht funktioniert bracht man keine andere Bewegung implementieren. Warum? Die 4 Motoren müssen sich in die selbe Richtung bewegen aus der Sicht vom Chassis. Tatsächlich drehen sich die 2 Motoren links genau in die Gegengesetze Richtung als die beiden Motoren rechts, diese sind ja gespiegelt angebracht.
  • rückwärts fahren
    die inverse Bewegung zum Vorwärts fahren. Man muss alle 4 Motoren einfach in die gegenteilige Richtung drehen.
  • Drehung nach links
    Gedreht wird indem sich die Räder rechts und links in unterschiedliche Richtungen bewegen. Die linken bewegen sich rückwärts, die auf der rechten Seite vorwärts. Das Chassis wird gedreht.
  • Drehung nach rechts
    die inverse Bewegung zur Drehung nach links. Die rechten Reifen bewegen sich rückwärts, die Reifen auf der linken Seite vorwärts.
  • Stopp
    alle Motoren stehen still. Das Reset des Programms. Das muss immer als letztes Kommando im Programm ausgeführt werden, sonst kann es passieren, dass der Roboter trotz Programmabbruch weiter fährt.

Software

Meine erste Version der Software basiert auf dem Arduino Skript, dass vom Roboter Chassis Hersteller auf dessen Wiki Seite angeboten wird. Das der Raspberry Pi keine analogen Pins hat funktioniert das Skript nicht exakt gleich, man kann damit den Roboter aber schon sehr gut steuern. Das fertige Skript gibts auch als Download. Der Source Code schaut wie folgt aus:

Wir benötigen lediglich Zugriff auf die GPIO Pins, deshalb wird nur diese Bibliothek eingebunden.

Wir legen uns Variablen an die wie am Board beschriftet heißen (damit man den Code auch Monate später noch versteht). Ich verwende die 4 letzten Pins des Raspberry Pi Modell B+, ihr könnt natürlich auch beliebig andere GPIO Pins verwenden. Die Verkabelung habe ich im ersten Teil bereits gezeigt. Alle 4 Pins werden als Ausgabepins initialisiert.

Nun wird es spannend. Wir legen 4 Funktionen an für die möglichen Bewegungsarten vorwärts, rückwärts, links und rechts und zusätzlich noch eine Stopp Funktion.

Bei den Funktionen erkennt man schnell ein Muster. Alle PWM Pins sind immer True. Diese geben die Geschwindigkeit an. Da wir nur digitale Pins haben müssen diese klarerweise Spannung angelegt haben, sonst dreht sich der Motor nicht. Einzig bei der Stopp Funktion wird auf allen 4 Pins die Spannung abgeschaltet. Diese 4 Funktionen bilden die Basis der Bewegung. Wir benötigen jetzt nur noch Code der auf Tastenklick die korrekte Bewegungsfunktion aufruft.

In der ersten Version steuern wir den Roboter über die Tastatur. Über eine SSH Session wird der Code ausgeführt und über die Tasten werden Kommandos gegeben. Die gedrückten Tasten werden in der definierten getch() Funktion von der Tastatur geholt, ihr kennt vielleicht diese getch Funktion von C. Python hat so etwas nicht, deshalb müssen wir uns diese selber schreiben:

Damit sind wir mir der Definition der Variablen und der Funktionen fertig. Das restliche Programm ist recht einfach. Nach der Initialisierung wird in einer Endlosschleife mit getch() die Tastaturabfrage gemacht und abhängig der gedrückten Taste die gewünschte Bewegungsfunktion ausgeführt oder das Programm beendet.

Ganz wichtig ist die letzte Zeile. Ohne dem cleanup() würden bei Programmabbruch die Motoren munter weiter laufen und der Roboter ohne Rücksicht auf Hindernisse oder Klippen weiter fahren. Ganz schlecht!

Konfiguration

Ob ihr alles richtig verkabelt habt könnt ihr beim ersten Testlauf feststellen. In diesem lasst ihr den Roboter am besten umgedreht nach vorne fahren. Bewegen sich alle 4 Räder in die korrekte Richtung habt ihr schon gewonnen. Falls sich manche Räder falsch bewegen, dann gehören die beiden Kabel vertauscht. Dies ist am Board recht einfach möglich und erfordert keinen großen Aufwand.

Fazit

Den Roboter bewegen ist gar nicht so schwierig. Mit dieser Basissoftware könnt ihr den Roboter nun bereits über die Tastatur manuell bewegen. Das macht richtig Spaß! Das Skript kann man übrigens als Basis für eine spätere autonome Navigation des Roboters nehmen. Durch Sensoren lernt der Roboter seine Umgebung kennen und kann auf Basis dieser Informationen navigieren, aber dazu in einem der nächsten Artikel mehr!

Das Skript ist alles andere als perfekt. Vor allem die Steuerung über die Tastatur funktioniert mit Python recht schlecht. Habt ihr dafür Optimierungen? Vorschläge wie das besser geht?

Teil 1 | Teil 2

(Visited 1.755 times, 1 visits today)

Das könnte auch interessant sein...

4 Antworten

  1. Werner sagt:

    Hallo,
    ich möchte ein mit dem Handy ferngesteuertes Fahrzeug bauen. Mit Arduino/Bluetooth funktionierts, aber es gibt ständig Störungen und die Reichweite ist gering. Also möchte ich gern RaspPi über wlan benutzen, am liebsten auch über Internet und mit Kamera am Fahrzeug. Bis jetzt schaffe ich es aber nur, über ssh mit einfachsten C-Programmen LEDs ein und aus zu schalten. Kann man über ssh in einem auf dem RasbPi laufenden Programm Variablen verändern? Wenn ja, wie? Bin für jeden Tip dankbar.
    Gruß
    Werner 🙂

  2. hoerbi10000 sagt:

    hallo,
    ich habe nun das gleiche Setup wie auf den Bildern zu sehen ist.
    nur leider wenn ich das programm starte dehen die 4 motoren an.

    rechts bleibt nach 1 sek stehen, und rechts nach 2 sek, dann gehn die LED’s am Board aus, und man hört wie das Board wegen der Spannung pfeifft.
    Der Pi läuft weiter nur das Board fällt aus.

    Hat jemand eine Idee was das sein könnte?

    ich hab sicherheits halter noch Bilder gemacht
    http://postimg.org/image/rqstug9xn/
    http://postimg.org/image/413e5rbkb/
    http://postimg.org/image/6wghcmfkb/
    http://postimg.org/image/4t624yfrf/

    danke schon für Tipp’s

    • Werner Ziegelwanger sagt:

      Hallo Herbert, ich habe mal die Bilder mit meinem Setup verglichen und sehe da im ersten Moment keinen Unterscheid. Mir fällt auf du verwendest einen Raspberry Pi 3, ich einen Pi 1 B+… ich werde das auch mal mit dem 3er probieren – es gab da ja ein Update der GPIO Schnittstelle. Hängt dein Pi an einer Powerbank oder direkt über einen Netzstecker an der Steckdose?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.