ROS auf dem Raspberry Pi – Teil 1

Nun ist es also soweit: Nach viel Zeit mit dem Lesen von Büchern – ja, echten Büchern aus Papier – und dem Stöbern in sehr vielen Online-Tutorials und sonstigen Webseiten, habe ich endlich das Robot Operating System (ROS) auf einem Raspberry Pi 3 zum Laufen bekommen. Hier werde ich nun erklären, bzw. eine Art Anleitung schreiben, wie das funktioniert. Außerdem zeige ich meine ROS-Programme , die meinen selbstgebauten Roboter minibot steuern oder einfach nur eine LED ansteuern („ROS LED Blinky“).

Bin ich hier richtig bzw. wo fange ich an?

Erste Anlaufstelle für ROS ist die Website ROS.org. Hier gibt es zig hervorragende Tutorials um ROS zu erlernen. Wer ROS noch gar nicht kennt, sollte sich die Tutorials ansehen und der Reihe nach(!) durcharbeiten. Ich spreche hier aus eigener Erfahrung.

Literatur – Warum nicht mal ein Buch lesen?

Nachdem ich mich ziemlich lange durch das Buch Programming Robots with ROS „gequält“ hatte, fand ich ein für mich viel besser geeignetes; nämlich Learning ROS for Robotics Programming. Letzteres war für mich viel einfacher geschrieben, vom Aufbau besser, sehr praxisnah und das Englisch fand ich auch noch einfacher zu verstehen. Und das Repository mit den Beispielen ist auch wesentlich strukturierter als das des O’Reilly-Autors.

Die derzeitige Version von ROS ist Kinectic Kame, kurz Kinetic. ROS sieht standardmäßig vor, dass man es einfach über Packages unter Debian oder Ubuntu installiert. Hierzu gibt es exzellente Anleitungen im ROS-Wiki.

Aber sicherlich möchte man auf einem Raspberry Pi nicht umbedingt ein „full blown“ Ubuntu mit GUI laufen lassen – insbesondere nicht in meinem Fall, wo es das ROS auf dem Raspberry Pi nur einen Roboter steuern soll.

Manuelle Installation?

Ich entschied mich daher zuerst für diese Anleitung im ROS-Wiki für die manuelle Installation auf meinem Raspberry Pi 3, da ich dort bereits ein RASPIAN Lite (also ohne GUI) installiert und konfiguriert hatte – und eben kein Ubuntu.

ROS manuelle Installation auf dem Raspberry Pi
ROS manuelle Installation auf dem Raspberry Pi

Diese ROS-Installation lief aber auf diverse Fehler. Und selbst als am Ende alles installiert war, was übrigens Stunden dauert, funktionierten einige ROS-Beispiele aus meinen Büchern später nicht (z.B. die, die Open CV benötigten):

ROS - CMake Error Could not find package nach manueller Installation auf dem Raspberry Pi
ROS – CMake Error Could not find package nach manueller Installation auf dem Raspberry Pi

Einfache Installation

Also suchte ich nach einem besseren Weg, Ubuntu auf dem Raspberry Pi zu installieren, damit ROS per Paketverwaltung (apt) hinzugefügt werden kann. Hierbei stieß ich auf Ubuntu Mate. Hier gibt es ein fertiges Image für den Pi. Aber ich will nicht alle Umwege beschreiben, denn wer sich die Anleitung ROS auf dem Raspberry Pi eingangs genau durchliest, findet sogar ein fertiges Image mit Ubuntu Mate 16.04 mit ROS Kinetic installiert direkt zum Download.

Also fix das Image runtergeladen, entpackt, und auf eine 16 GB-SD-Karte Class 10 kopiert und den Raspberry Pi mit Ubuntu Mate gestartet – derzeit noch mit GUI, dieses schalten wir später ab:

Ubuntu Mate mit ROS - hier noch mit laufender GUI
Ubuntu Mate mit ROS – hier noch mit laufender GUI

Übrigens: mit dem dd Parameter bs=1m dauert das Beschreiben der Karte nur ca. 10-15 Minuten. Achtung: Die Pfade für das Ziellaufwerk (rdisk2) ist unbedingt anzupassen, damit nicht ein anderes Laufwerk überschrieben wird!

sudo dd if=German-Robot.Com-Image-Pi3-ROS-Kinetic-Ubuntu-Mate.img of=/dev/rdisk2 bs=1m

Dieses Image läuft übrigens nicht auf einem Raspberry Pi B+ oder noch älter, da diese 32-Bit-Systems sind. Hier gibt es gleich beim Laden eine kernel panic.

ROS - von wegen Speicherkarte, es lag am Pi
ROS – von wegen Speicherkarte, es lag am Pi

Fertig. ROS auf dem Raspberry Pi 2/3.

Test

Wer ROS bereits auf einem anderen Computer installiert hat (z.B. in einer virtuellen Maschine unter Virtual Box), kann die ROS-Tutorials der Reihe nach(!) durchgehen und jetzt die in ROS bekannten Talker und Listener über beide Rechner miteinander über ROS kommunizieren lassen:

ROS - vorne der listener in der VM, hinten der talker auf dem RasPi
ROS – vorne der listener in der VM, hinten der talker auf dem RasPi

In dem Ubuntu Mate-ROS-Image gibt es bereits einen fertigen catkin-Workspace und der ROS master (roscore) läuft hier auch bereits! Man kann also den (Python) talker mittels

rosrun beginner_tutorials talker.py

auf dem Raspberry Pi in der Konsole starten und auf dem anderen Computer (z.B. in der VM wie oben im Bild) den listener. Damit der listener den master im gleichen Netzwerk findet, muss in der Konsole/Shell per Export-Befehl der master bekannt gegeben werden. Ein Start vom listener sieht dann z.B. so aus:

export ROS_MASTER_URI=http://pi-desktop:11311/
rosrun beginner_tutorials listener.py

„pi-desktop“ ist hierbei der Hostname des Raspberry Pi, auf dem das ROS läuft.

Nächste Schritte

Im folgenden Artikel beschreibe ich dann die Anpassungen, die ich am Ubuntu Mate ROS Image von German Robot vorgenommen habe (z.B. Abschalten der GUI, feste IP-Adresse, Beseitigen von „Fehlern“ im Image).

Danach geht es weiter mit der Ansteuerung von GPIOs/einer LED und Motoren am Raspberry Pi. Auch eine Steuerung meines Raspberry Pi Roboter mittels Joystick/Gamepad via ROS wird erläutert werden.

 

[137 Aufrufe]

Schreibe einen Kommentar

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