Aus Raspberry Pi Geek 01/2014

RasPi in Mindstorms-Roboter einbauen (Seite 2)

Abbildung 2: Der zusammengesetzte Baustein: unten Pi, oben Arduino.

Abbildung 2: Der zusammengesetzte Baustein: unten Pi, oben Arduino.

Software-Setup

Der BrickPi benötigt als Betriebssystem eine angepasste Raspbian-Installation. Die dazu nötigen Änderungen können Sie zwar selbst vornehmen [4], doch findet sich auf der Website von Dexter Industries auch ein Link zu einer entsprechend vorbereiteten Image-Datei.

Hier gilt es aber zu beachten, dass das Image als Netzadresse 192.168.2.0/24 vorgibt und dem RasPi die fixe IP-Adresse 192.168.2.144 zuteilt. Um das zu ändern, sollten Sie kurzzeitig Monitor und Tastatur an den Minirechner anstöpseln. Dann ändern Sie mit einem Texteditor die fraglichen IP-Adressen in den Dateien /etc/network/interfaces und /etc/resolv.conf. Bei der Gelegenheit tragen Sie in Ersterer dann gleich noch SSID und Passwort Ihres WLANs ein.

Nach einem folgenden Herunterfahren können Sie nun alle Kabel entfernen. Zur Stromversorgung schließen Sie an die obere Platine des BrickPi-Bausteins eine Batterie an. Den Zugang zum drahtlosen Netz ermöglichen Sie dem “Klotz” durch Einstöpseln eines Mini-WLAN-Sticks in einen der USB-Ports des RasPis. Nun lässt sich der BrickPi als Zentralgehirn in einen beliebigen Roboter einbauen. Dabei sollten Sie nicht vergessen, gegebenenfalls zusätzliche Mindstorms-Bauteile für ein Fach einzuplanen, das die Batterie trägt.

Die BrickPi-Homepage bietet Instruktionen für mehrere Beispielprojekte an, darunter einen Greifarm mit Gelenk sowie ein kleines Auto. Letzteres haben wir testweise nachgebaut. Zwei Servomotoren steuern die vorderen beiden Räder (Abbildung 3), hinten schwenkt ein kleineres bei Lenkbewegungen nach (Abbildung 4). Zudem trägt der Roboter an der Vorderseite einen Ultraschall-Sensor, um Hindernisse zu erkennen und per Programm Ausweichmanöver einzuleiten.

Abbildung 3: Der BrickPi steuert autonom ein Auto aus Mindstorms-Teilen …

Abbildung 3: Der BrickPi steuert autonom ein Auto aus Mindstorms-Teilen …

Abbildung 4: … wobei der frontseitige Ultraschall-Sensor Hindernisse identifiziert.

Abbildung 4: … wobei der frontseitige Ultraschall-Sensor Hindernisse identifiziert.

Programmatisches

Um auf den Roboter zuzugreifen, etwa um selbst programmierte Skripte zu starten, nutzen Sie die Headless-Fähigkeiten des RasPi und melden sich via SSH oder VNC am BrickPi an.

Wenn Sie nun einen eigenen Roboter gebaut haben, muss dieser anschließend noch softwareseitig erfahren, wie er sich verhalten soll. Dazu benötigt der RasPi zunächst einmal für die von Ihnen favorisierte Programmiersprache die BrickPi-Bibliotheken und Include-Dateien. Listing 1 zeigt am Beispiel von Python, wie Sie diese herunterladen und installieren.

Listing 1

 

$ git clone https://github.com/DexterInd/BrickPi_Python.git
$ cd BrickPi_Python
$ sudo apt-get install python-setuptools
$ sudo python setup.py install

Schreiben Sie nun ein eigenes Python-Skript für den Roboter, so muss dieses zwingend die Bibliothek zum Ansteuern der BrickPi-Funktionen importieren (from BrickPi import *) und den seriellen Port initialisieren (BrickPiSetup()). Falls der Roboter Servo-Motoren verwendet (was eigentlich immer der Fall ist), müssen Sie noch für jeden davon folgenden Befehl aufrufen:

BrickPi.MotorEnable[Port] = 1

Je nachdem, an welchem der vier Motor-Ports des BrickPis das Kabel des jeweiligen Servomotors eingestöpselt wurde, ersetzen Sie hier Port durch den Bezeichner PORT_A bis PORT_D.

Im letzten Initialisierungsschritt muss die BrickPi-Bibliothek noch erfahren, an welchen Ports Sie welche Arten von Sensoren angeschlossen haben – falls der Roboter solche verwendet. Für einen Ultraschall-Sensor an Port 1 lautet die entsprechende Zeile beispielsweise:

BrickPi.SensorType[PORT_1] = TYPE_SENSOR_ULTRASONIC_CONT

Insgesamt gibt es fünf für Sensoren reservierte Ports, die im Gegensatz zu den Motoren keine Buchstaben als Bezeichner erhalten, sondern der Reihe nach durchnummeriert sind. Für jeden Sensor-Typ existiert eine vordefinierte Konstante, für einen Farbsensor lautet sie beispielsweise TYPE_SENSOR_COLOR_FULL. Sie schließen die Sensor-Initialisierung mit einem Aufruf von BrickPiSetupSensors() ab.

Im Programmverlauf gestaltet sich das Ansprechen der einzelnen Roboter-Teile sehr einfach. Einen Servo-Motor steuern Sie mit folgender Methode:

BrickPi.MotorSpeed[Port] = Geschwindigkeit

Als Geschwindigkeit geben Sie dabei eine Zahl zwischen -255 und +255 an, mit  0 bringen Sie den Motor zum Stillstand. Positive und negative Werte bezeichnen die Drehrichtung. Um den Roboter abbiegen zu lassen, bremsen Sie den Motor des einen Rads auf null, während Sie den des anderen Rads weiterhin drehen lassen.

Zur Sensoren-Abfrage lesen Sie den aktuellen Werte mit BrickPiUpdateValues() aus. Ein Aufruf der Methode BrickPi.Sensor[Port] liefert anschließend einen numerischen Wert für den jeweiligen Sensor zurück. Ein Ultraschallsensor gibt beispielsweise die Entfernung des nächstgelegenen Objekts zurück.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben