Startseite>RasPi in Mindstorms-Roboter einbauen
Aus Raspberry Pi Geek 01/2014

RasPi in Mindstorms-Roboter einbauen (Seite 2)

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.

Unter C programmieren Sie den BrickPi nach dem gleichen Schema. Am Programmanfang importieren Sie die benötigten Header-Dateien (Listing 2). Die Namen von Konstanten und Methoden der BrickPi-Bibliothek entsprechen exakt den Bezeichnungen der Python-Variante, nur dass man diese entsprechend der Notation der C-Syntax aufruft. Für Scratch-Fans existiert ebenfalls eine Umsetzung, die für die Steuerungsfunktionen grafische Blöcke zur Verfügung stellt.

Listing 2

 

#include <wiringPi.h>
#include "BrickPi.h"

Fazit

Wenn man sein Mindstorms-Set vor September 2013 erworben hat, bekommt man die vielen Vorteile des BrickPis gegenüber einem NXT deutlich zu spüren: Ein Vielfaches an Rechenkraft, mehr RAM und mehr Massenspeicher – und das, ohne von einem externen PC abhängig zu sein. Jede Art von Soft- und Hardware, die es für den RasPi gibt, lässt sich problemlos in den Roboter integrieren. Darüber hinaus eröffnet der BrickPi die Möglichkeit, neben Mindstorms-Sensoren auch preisgünstigere, für Arduino erhältliche einzusetzen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland