Der TurtleBot 2
Inhalt
Beschreibung und Eigenschaften
TurtleBot 2 ist ein mobiles Roboterkit mit Open-Source-Software, der mit einer Blackboard Architektur namens ROS (Robot Operating System) gesteuert wird. Durch diese Architektur können verschiedene Programmiersprachen im selben Projekt genutzt werden. Diese sind vorwiegend Python und C++. Durch seinen flexiblen Baustil können ebenso diverse Komponenten ergänzt werden, damit auch mehr Funktionalitäten hinzugefügt werden können.
Im Rahmen eines Projektes wurde er von Studenten liebevoll zu Botty McTurtleFace getauft oder kurz Botty.
Videos
Botty fährt vorwärts und umgeht ein Objekt.
Botty fährt ein Viereck.
Ausstattung
Im Auslieferungszustand besaß der Turtlebot 2 mehrere Hardware Komponenten, um seine Umgebung wahrzunehmen und mit ihr interagieren zu können. Alle sind mit einem NUC PC mit Ubuntu 16.04 verbunden, der sich direkt als Onboard PC auf dem TurtleBot 2 befindet. Folgende Komponenten besitzt er:
- Greifarm PhantomX Reactor
Der PhantomX Reactor Arm ist ein ROS-kompatibler Greifarm. Der Greifarm wird über einen Arbotix-M gesteuert, welches ein modifiziertes Arduino-Board zur Ansteuerung von Servo-Motoren ist. Auf dem NUC des TurtleBot kann eine ROS Anwendung gestartet werden, welche Positionierungsbefehle für den Greifarm annimmt und diese Befehle dann an das Arduino-Board weiterleitet. Hierfür befindet sich ein Arduino-Image auf dem Arbotix-M, welches die ROS-Befehle interpretiert und entsprechend die Servo-Motoren ansteuert. - Lidar Hokuyo URG-04LX-UG01
Es handelt sich hierbei um einen Laserscanner zur Berechnung von Distanzen auf einer horizontalen Ebene. Der Wahrnehmungswinkel beträgt 240° und die Wahrnehmungsreichweite ist bis zu ca. 4 Meter. - 3D-Kamera Orbbec Astra
Die Orbbec ist eine 3D-Kamera mit einem Sichtfeld von 60° horizontal und 49,5° vertikal. Dazu hat sie eine Reichweite von bis zu 8 meter. - Kobuki-Base
Die Kobuki-Base macht den TurtleBot 2 mobil und beinhaltet die benötigte Lithium-Ionen Batterie. Daneben stellt die Basis auch Tasten, LEDs und Bumpers, zur Kollisionserkennung, zur Verfügung.
Allerdings erlaubt seine besondere Baustruktur durch Halterungen und Platten mehrere Etagen über der Kobuki-Base zu stapeln, um auf diese Weise mehr Platz für weitere Komponenten hinzuzufügen. Daher wurden zu den ursprünglichen Komponenten noch ein Mikro für Spracherkennung und Sprachausgabe hinzugefügt. Ebenso wurde die 3D-Kamera ummontiert und an der Unterseite einer der Platten angebracht, damit sie ein besseres Sichtfeld hat.
Arbeiten mit Turtlebot 2
Programmierung
Die Programmierung ist einfacher als man denkt. Wie bereits erwähnt unterstützt ROS sowohl Python, wie auch C++. Im folgenden wird ein Python Beispiel betrachtet, mit dem der TurtleBot 2 ein Viereck fahren soll. Ein Video davon ist weiter oben zu finden.
def drive(meter): # starte den Motor Service, um mit ihm kommunizieren zu können rospy.wait_for_service('motor') job = rospy.ServiceProxy('motor', call) # Die Nachricht ist in diesem Fall ein Objekt "call" # erzeuge die Nachricht param=[] param.append(meter) command=call() command.call="forwardByMeters" # die vom Motor erwünschte Aktion command.param=param # die zurück zu legende Distanz #sende die Nachricht response=job(command.call,command.param) # Übermittelung der Nachricht return response # Ausgabe der zurück erhaltenen Antwort def turn(angle): # starte den Motor Service, um mit ihm kommunizieren zu können rospy.wait_for_service('motor') job = rospy.ServiceProxy('motor', call) # Die Nachricht ist in diesem Fall ein Objekt "call" # erzeuge die Nachricht param=[] param.append(angle) command=call() command.call="turnRigthByAngle" # die vom Motor erwünschte Aktion command.param=param # die zurück zu legende Distanz in Gradzahl #sende die Nachricht response=job(command.call,command.param) # Übermittelung der Nachricht return response # Ausgabe der zurück erhaltenen Antwort if __name__ == "__main__": for x in range (0,4): print("Going Forward to "+str(drive(1.0))) sleep(0.1) print("Turning around to: "+str(turn(90))) sleep(0.1)
Damit der TurtleBot 2 nun ein Viereck fährt muss er lediglich ein Stück geradeaus fahren und sich danach um 90° drehen. Sobald er diesen Vorgang viermal wiederholt hat, ist er damit auch schon erfolgreich ein Viereck gefahren.
ROS Installation – Step by Step
Um selbst mit dem Turtlebot 2 arbeiten zu könne, wird das Betriebssystem Ubuntu 16.04 benötigt als auch ROS-Kinetic. Einen Guide zum Installieren von Ubuntu findet sich hier.
Sobald das erledigt ist, muss noch ROS und die für das Projekt benötigten Packages herunterladen werden. Befolgt einfach hierfür folgende Schritte, die auch unter wiki.ros beschrieben sind:
- Damit der Computer überhaupt die Daten von packages.ros.org. akzeptiert:
sudo sh -c ‚echo „deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main„>
/etc/apt/sources.list.d/ros-latest.list‘
Ggf. müssen die -„- manuell neu getippt werden, da beim Kopieren ein anderes Format für diese Zeichen genutzt wird. Sollte das vergessen werden, wird der Fehler „Keine Berechtigung“ erscheinen. - Erhalten des eines Schlüssels vom Server:
sudo apt-key adv –keyserver ‚hkp://keyserver.ubuntu.com:80‘ –recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 - Vor dem Download muss das eigene System noch aktualisiert werden:
sudo apt-get update - Ausführen der Installation (das kann eine Weile dauern):
sudo apt-get install ros-kinetic-desktop-full
Achten Sie darauf, dass Sie unter „Systemeinstellungen/Anwendungen & Atualisierungen“ auch den univers-Donwload aktiviert haben, da sonst ein Fehler zu unerfüllten Abhängigkeiten auftritt. - Um ROS vollständig nutzen zu könne müssen noch rosdep. rosdep initialisiert werden:
sudo rosdep initrosdep update
- Anschließend muss nur noch die ~/.bashrc angepasst werden, damit die ROS-Umgebung gesetzt wird. Hierzu wird die bash ergänzt mit…:
echo „source /opt/ros/kinetic/setup.bash“ >> ~/.bashrc
source ~/.bashrc
Damit ist nun ROS vollständig installiert. Wenn man das ganze nun direkt ausprobieren möchte empfiehlt es sich aber zuvor den Simulator Gazebo zu installieren. Dafür sind 5 weitere Schritte nötig:
- sudo apt-get install ros-kinetic-turtlebot
- sudo apt-get install ros-kinetic-turtlebot-apps
- sudo apt-get install ros-kinetic-turtlebot-interactions
- sudo apt-get install ros-kinetic-turtlebot-simulator
- sudo apt-get install ros-kinetic-ar-track-alvar-msgs
Die Simulation lässt sich nun mit roslaunch turtlebot_gazebo turtlebot_world.launch starten und damit kann nun auch selbst experimentiert werden.
Wenn z.B. nun der TurtleBot 2 mit der Tastatur innerhalb des Simulators gesteuert werden soll, kann das erreicht werden, indem das zugehörige Programm in einem Terminal gestartet wird. Die darin beschriebenen Aktionen werden dann im Simulator ausgeführt.
- roslaunch turtlebot_teleop keyboard_teleop.launch
Zu beachten ist, dass die Steuerung im Terminal beschrieben wird und die Tasten nur dafür genutzt werden können, solange das jeweilige Terminal das aktive Fenster ist.
Wenn aber mehr als nur ein Simulator gewollt ist und mit dem Turtlebot 2 direkt arbeiten möchte, er steht im Laborraum O 028. Hierfür bitte Kontakt aufnehmen.
Entwicklung und Wartung
Über den NUC werden die entwickelten Programme des ROS-Packages gestartet und die restliche Hardware des TurtleBots angesteuert. Da der TurtleBot 2 als Produktivumgebung für den erstellen Code dient, empfiehlt es sich nicht direkt auf dem NUC zu programmieren. Es ist besser, wenn der Code zuvor auf einem anderen System erstellt wird und vorab auf Fehler kontrolliert wird. Der Code kann dann über GitHub von den Arbeitsrechnern auf den TurtleBot 2 übertragen werden.
Da die ROS Version des TurtleBot 2 auf dem Betriebssystem Ubuntu 16.04 läuft, muss diese auch auf den Arbeitsrechnern installiert werden, damit mit diesen gearbeitet werden kann, insofern keine anderen Rechnern zur Verfügung stehen. Der TurtleBot 2 selbst wird über das Framework ROS gesteuert. Da ROS verschiedene Programmiersprachen unterstützt und von Entwicklungsumgebungen unabhängig ist, können die nach eigenen Präferenzen gewählt werden. Jedoch empfiehlt sich Visual Studio Code als Entwicklungsumgebung, da es durch Erweiterungen sowohl C++ als auch Python unterstützt und diese beiden die hauptsächlich verwendeten Programmiersprachen sind.
Dokumentation und Tutorials
Allgemein
ROS-Software Dokumentation unter: http://wiki.ros.org/Robots/TurtleBot
ROS-Software Tutorials unter: http://wiki.ros.org/ROS/Tutorials
Hardware Dokumentation unter: https://www.turtlebot.com/build/
Das „Botty Projekt“
Das „Botty Projekt“ war ein studentisches Projekt des Wintersemesters 19/20 mit dem Ziel zur Raumerfassung und Sprachsteuerung für einen teilautonomen Roboter in einem Pick-And-Place-Szenario. Aus den Arbeiten einer agilen Projektarbeit folgte ein vertikaler Prototyp als Fundament für spätere Projekte.
Die Dokumentationen zum „Botty Projekt“ finden sich unter: Botty Dokumentation.
Es existieren mehrer Demos von denen nun nur eine kleinere Auswahl präsentiert werden. Ausführliche Informationen sind in der Dokumentation enthalten. Grundlegend muss aber vor jeder Demo sichergestellt werden, dass der sogenannte Roscore bereits gestartet wurde. Das ist Voraussetzung für alle Anwendungen, die unter der ROS Umgebung laufen sollen. Um den Roscore zu starten muss einmalig in einem Terminal folgendes Kommando eingegeben werden.
roslaunch kobuki_node minimal.launch
Danach können unter anderem folgende Demos im Terminal ausgeführt werden:
- Kamera Demo:
- Voraussetzung:
- Starten des ROS-Service für die Kamera mit:
roslaunch astra_launch astra.launch
- Starten des ROS-Service für die Kamera mit:
- Demo:
- Rückmeldung des erkannten Objekts mit:
rosservice call /camera_controller/find_object „{}“
- Rückmeldung des erkannten Objekts mit:
- Voraussetzung:
- Motor Demos:
- Voraussetzung:
- Starten des ROS-Service für den Motor mit:
rosrun motor motorService.py
- Starten des ROS-Service für den Motor mit:
- Demo:
- Vorwärts fahren von 2 Metern ohne Hinderniserkennung mit:
rosservice call /motor „call: ‚forwardByMeters‘ param: [2,0]“ - Vorwärts fahren von 2 Metern mit Hinderniserkennung mit:
rosservice call /motor „call: ‚forwardByMeters‘ param: [2,1]“ - Durchführung einer Drehung um 90° mit:
rosservice call /motor „call: ‚turnRigthByAngle‘ param: [90]“
- Vorwärts fahren von 2 Metern ohne Hinderniserkennung mit:
- Voraussetzung:
- Greifarm Demo:
- Voraussetzung :
- Starten des Treibers vom Arm mit:
roslaunch phantomx_reactor_arm_controller arbotix_phantomx_reactor_arm_wrist.launch - Starten des Programms für den Arm mit:
rosrun arm arm_control.py
- Starten des Treibers vom Arm mit:
- Demo:
- Umstoßen eines Objekts mit:
rosservice call /botty/arm/commands „call: ‚push‘ param: – 0“
- Umstoßen eines Objekts mit:
- Voraussetzung :
Verbesserungsanätze
Selbstverständlich kann bei Interesse der Turtlebot 2 auch eigenständig oder auch im Team weiter optimiert werden. Die Vielseitigkeit des Turtlebot 2 lässt der Kreativität viel Spielraum zur Optimierung. Im folgenden stehen mögliche Ansätze:
- ein dynamischeres und sanfteres Beschleunigen wie auch Bremsen.
- das Erstellen einer 2D-Karte zur automatischen Navigation.
- eine Erweiterte Spracherkennung, um mehr Befehle zu verstehen. (z.B. „Komm zu mir“)
- das Lokalisieren von Objekten mit der 3D-Kamera. Dazu gehören deren Abstand und Ausrichtung.
- neue Posen für den Greifarm, zum Ausführen diverser Tätigkeiten (z.B. einen Knopf drücken)
Benutzungshinweise
Der TurtleBot 2 lässt sich entweder direkt über das Ladegerät aufladen oder man schließt das Ladegerät an die Ladestation an und positioniert den TurtleBot 2 darauf. Die Positionierung des TurtleBots 2 auf dem Ladegerät muss aber genau zentral sein, um verbunden zu sein. Aus diesem Grund ist es empfehlenswert, den TurtleBot 2 direkt über das Ladekabel zu laden.
Der Onboard-Rechner des TurtleBots (NUC) hat nur 4 USB-Ports. Greifarm, Lidar und 3D-Kamera belegen bereits 3 davon. Wenn auf dem NUC direkt mit Maus und Tastatur arbeiten will, muss man entweder eines der anderen Geräte abtrennen oder einen USB-Hub verwenden. Lautsprecher und Kopfhörer benötigen auch jeweils einen USB-Anschluss. Wenn der USB-Hub benutzt wird, sollte darauf geachtet werden, dass die großen Stromverbraucher(Greifarm, Lidar, 3D-Kamera) direkt am NUC und nicht über den USB-Hub angeschlossen sind, da es sonst Probleme mit der Stromversorgung geben kann und der Akku sich sehr schnell entlädt.