Migration ROS Noetic
Die Migration der Robotermodelle A/B nach ROS Noetic ist etwas aufwendiger als in den vergangenen ROS Distributionen. Der größte Sprung ist hier eindeutig bei Python 2.7 nach Python 3 zu verzeichnen. Deshalb dauert es auch bei Drittanbietern von ROS-Software etwas länger, ihre Programme umzustellen. Wer den Sprung aber erst Mal gemacht hat, ist auch für ROS 2 gut vorbereitet, da dort die Python-Version 3 Standard ist. Wer es nicht abwarten will, mit ROS Noetic auf den Robotermodellen A/B durchzustarten, habe ich ein Repository für ROS Noetic auf bitbucket unter https://bitbucket.org/piraterobotics/abot-noetic bereitgestellt. Mittlerweile habe ich ein Raspberry Pi 4 mit 8 GB RAM für die nachfolgende Installation auf dem Tisch liegen. In diesem Beitrag werde ich Ubuntu 20 Server und ROS Noetic auf einem Raspberry Pi 4 installieren. Es haben sich Installationsschritte in ROS Noetic geändert, sodass mein ROS-Buch in dieser Sache nur bis zu einem gewissen Punkt hilfreich ist. ROS Noetic ist die letzte ROS1-Version. Das heißt, danach geht es nur noch mit den ROS Distributionen aus ROS2 weiter. Ich kann mir aber gut vorstellen, dass viele Roboter die Migration nach ROS2 nicht erleben werden, da es weitreichende Änderungen am Quellcode bedarf. Eine Zwischenlösung wäre, man verwendet für seine ROS1-Programme eine Brückensoftware (ros1_bridge), um mit ROS2-Programmen funktionieren zu können. Wer mit ROS1, Ubuntu20, Python3, OpenCV4 und vielen weiteren Robotikbibliotheken zufrieden ist, hat für die nächsten Jahre ausreichend Werkzeuge zum Experimentieren. Der Support für ROS Noetic Ninjemys endet im Mai 2025.
Systemvoraussetzung
Für die Installation und Verwendung eines Raspberry Pi mit ROS benötigen wir folgendes:
1. | 1x Raspberry Pi 4 |
2. | 1x Micro-SD-Karte mit mindestens 8 GB Speicher |
3. | Ubuntu 20.04 Server |
4. | Installationsanleitung für Ubuntu auf Raspberry Pi 4 |
Auf der Downloadseite von Ubuntu findet man die Installationsanleitung für die entsprechenden Betriebssysteme. Zur Auswahl stehen Ubuntu Server und Ubuntu Desktop. Leider steht nur die Desktop-Variante mit der Version 20.10 zum Download bereit. Der Codename der Ubuntu Version 20.10 ist „Groovy“ jedoch wird von ROS Noetic nur Ubuntu mit dem Codenamen „Focal“ unterstützt. Eine Source Installation wollte ich nicht durchführen, nur um zu sehen wie die Performance von RViz und Gazebo auf einem Raspberry Pi 4 ist. Allerdings erstellt der weiter unten aufgeführte Installationsbefehl rosdep install auf dem Zielsystem bereits eine Umgebung, um Gazebo und RViz in einer grafischen Oberfläche zu nutzen. Ich hatte einen Einblick auf 0,17 Bilder/Sekunde in Gazebo und 2-3 Bilder/Sekunde in RViz. Es vergehen wohl noch einige Raspberry Pi-Generation bis man eine Robotik-Desktop-Umgebung sinnvoll auf einem Kleinstrechner nutzen kann. Für die täglichen Aufgaben eines Roboters mit ROS ist der Raspi dennoch eine Rennmaschine. Ich habe den Kleinstrechner mit folgenden gleichzeitig ausgeführten Disziplinen getestet: Objekt- und Gesichtserkennung, Kartografierung, Spracherkennung, Sprachausgabe, Kinematik, Navigation und State-Machines.
Ubuntu Installation
Im Buch werden die Programme Win32 Disk Imager und Rufus für die Installation einer img– bzw. iso-Datei verwendet. Betrachtet man die Installationsanleitung für Ubuntu auf Raspberry Pi 4 so wie es in der Tabelle oben unter dem Hyperlink von Punkt vier beschrieben ist, dann findet man dort eine ausführliche Schritt-für-Schritt-Anleitung für die Systeme Linux, Windows und Mac. In Schritt 2 der benannten Anleitung sind beispielsweise auch Imager für die jeweiligen Systeme verlinkt (https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview). Wenn der Download abgeschlossen und die Installation erfolgreich war, dann folgt die Konfiguration der Zeit, Tastatur, Netzwerk usw. Anschließend geht es zum nächsten Schritt – ROS Noetic Installation.
ROS Noetic Installation
Die Installationsschritte für ROS Noetic auf einem Raspberry Pi 4 entnehmen wir den Wiki-Seiten von ROS unter:
http://wiki.ros.org/noetic/Installation/Ubuntu
Hinweis:
- Es sollte vorerst kein Mirror (z. Bsp. Freiburg) ausgewählt werden, da viele Mirror-Betreiber dem Repository in den USA hinterherhinken und dadurch einige Softwarepakete während der Installation möglicherweise nicht verfügbar sind.
ROS Basisinstallation
Bei Punkt 1.4 der Installationsanleitung angekommen, muss man sich entscheiden wieviel ROS man installieren möchte. Da wir einen Ubuntu-Server bestücken, wählen wir den folgenden Befehl:
sudo apt install ros-noetic-ros-base
Diese Basisinstallation enthält keine grafischen Programme. Nach einigen Minuten … ist der Download und die Installation abgeschlossen, womit wir bei Punkt 1.5 der ROS-Wiki Installationsanleitung angekommen sind. Die dort vorgegebenen Schritte können mit copy & paste auf der Server-Konsole ausgeführt werden.
Zusätzliche Pakete installieren
Nach Punkt 1.5 ist seltsamerweise Schluss mit der Installation und es geht mit den ROS-Tutorials weiter. Wir installieren folgende Pakete bevor es weitergeht:
apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
rosdep installieren und aktivieren
Es fehlt auch die Installation von rosdep, was bei Kinetic noch unter Punkt 1.6.1 aufgezeigt wurde. Wir benötigen rosdep zwingend für die Installation der abhängigen Pakete aus den package.xml-Dateien, darum installieren wir die für ROS Noetic passende Variante mit folgendem Befehl:
sudo apt install python3-rosdep
Hier sieht man, dass es sich um eine Python3-Variante von rosdep handelt. Gleich im Anschluss initialisieren und aktualisieren wir die rosdep-Datenbank mit den beiden nächsten Befehlen:
sudo rosdep init
rosdep update
Ersterer muss mit Administratorrechten ausgeführt werden. Der zweite Befehl muss immer dann erneut ausgeführt werden, wenn ein neuer Linux-Benutzer angelegt wurde, und dieser Benutzer ROS verwenden soll.
Der Rest ist Geschichte! Das heißt wir erstellen einen Arbeitsbereich wie es im Buch steht, oder auf den ROS-Wiki-Seiten beschrieben ist, führen catkin_make darin aus und beginnen mit der eigentlichen Programmierarbeit im src-Verzeichnis.
Leider ist es nicht so einfach, und wir müssen noch mehr Hand an die Konsole anlegen, wie wir im nächsten Kapitel sehen werden, bevor es mit dem Roboter losgeht.
Roboter Installation
Checkin
Bevor wir die Programme für die Robotermodelle A/B herunterladen, vergewissern wir uns, dass ein gesundes ROS-Ökosystem vorliegt. Ein grundlegender Test ist immer der Befehl:
roscd
Wenn roscd in unser Arbeitsverzeichnis führt, und nicht nach irgendwo in /opt/ros, dann haben wir alle Installationsschritte korrekt abgearbeitet. Wenn wir wider Erwarten in /opt/ros/noetic landen, dann muss wohl die setup.bash aus dem devel-Verzeichnis unserer Arbeitsumgebung in die .bashrc eingetragen werden. Die Reihenfolge in .bashrc spielt eine Rolle. Wenn die setup.bash aus /opt/ros/noetic zuletzt aufgerufen wird, dann wird unsere Konfiguration überschrieben – nicht gut!
echo "source /home/<benutzer>/catkin_ws/devel/setup.bash" >> ~/.bashrc
Download abot-noetic
Für den nächsten Schritt befinden wir uns im src-Verzeichnis unseres Catkin-Verzeichnisses (catkin_ws/src).
git clone https://bitbucket.org/piraterobotics/abot-noetic.git
Installation abot-noetic
Im src-Verzeichnis befinden sich nach dem Download des git-Repository unsere Robotermodelle. Die Abhängigkeiten installieren wir mit rosdep im übergeordneten Verzeichnis von src. Die Syntax des rosdep-Befehls hat sich in ROS Noetic geändert.
rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic -y
Kurz nach der Ausführung erscheint eine Fehlermeldung mit folgenden fehlenden Abhängigkeiten:
abot_navigation: Cannot locate rosdep definition for [rplidar_ros]
abot_control: Cannot locate rosdep definition for [arbotix]
Die in der Fehlermeldung aufgeführen Pakete sind noch nicht nach ROS Noetic migriert worden, die Binärpakete sind noch nicht verfügbar oder eine package.xml verweist auf eine ungültige Version. Solange es möglich ist, die Pakete manuell herunterzuladen, zu kompilieren und so zu verwenden, dass keine Fehler entstehen, ist alles gut. Dies gilt beispielsweise für das Paket rplidar_ros.
RPLIDAR
Damit betreiben wir den Laserscanner. Es lässt sich ohne Weiteres manuell herunterladen, kompilieren und bis auf zwei Warnmeldungen starten bzw. verwenden. Zunächst laden wir es herunter:
git clone https://github.com/Slamtec/rplidar_ros.git
Arbotix
Das Paket arbotix betreibt Dynamixel-Motoren. Im Buch ist es bei Modell B für die Kamerasteuerung zuständig. Leider läuft dieses Paket nicht mit Noetic. Ich habe kurzerhand entschlossen, es für Noetic umzuprogrammieren und dem Maintainer per Pull-Request zu übertragen. Es könnte also demnächst die Fehlermeldung für arbotix verschwinden. Bis dahin müssen wir auch dieses Paket manuell installieren.
git clone https://github.com/calismurat/arbotix_ros.git
Sobald der Download abgeschlossen ist, wiederholen wir den obigen rosdep-Befehl und machen eine Pause …Sind alle Pakete heruntergeladen und installiert, erscheint folgende Erfolgsmeldung, wenn man den obigen rosdep-Befehl erneut ausführt.
#All required rosdeps installed successfully
Zum Abschluss bauen wir mit dem bekannten Befehl im korrekten Verzeichnis alles auf:
catkin_make
Testlauf
Es wird Zeit für einen ersten Testlauf mit unserem Roboter. Mein Versuchsaufbau besteht aus einem Raspberry Pi4 mit 8GB RAM. Installation und Software ist wie oben beschrieben und ich bin mit meinem Benutzerkonto über ssh angemeldet. Nicht vergessen, dass der Benutzer im Raspberry Pi die entsprechenden Rechte benötigt, um auf serielle Schnittstellen oder Video zuzugreifen. Der Befehl groups gibt auf dem Kleinstrechner folgende Gruppen bei mir aus:
user adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd ubuntu
Sollte eine Gruppenzugehörigkeit fehlen, dann kann man den nächsten Befehl für die eigenen Bedürfnisse anpassen:
sudo usermod -aG adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,lxd,ubuntu <benutzer>
Checkout
Der Befehl, um unser Robotermodell A oder B im Laserscan-Modus zu starten lautet wie folgt:
roslaunch abot_bringup abot_base.launch
Das war’s mit der ROS Noetic Migration, Danke! Zum Abschluss habe ich noch einen Erfahrungsbericht. Manchmal erscheinen nach dem Start von roslaunch Fehlermeldungen und die Programme starten einfach nicht durch. Seltsame Fehlermeldungen, die man nicht auf einen konkreten Fehler zurückführen kann. Wenn man sicher ist, dass man alles richtig gemacht hat, die Verzeichnisse devel und build löschen und den Befehl catkin_make erneut ausführen.