Einführung – Turtlebot Tutorial Schritt für Schritt
In diesem Tutorial nutzen wir die Inertialeinheit (IMU) eines gewöhnlichen Android-Telefons zur Steuerung eines ROS-kompatiblen Roboters. Als Testplattform haben wir ein klassisches ROS gewählt, Turtlebot 3 Burger .
Vorraussetzungen:
- Android-Mobiltelefon
- ROS-kompatibler Roboter – in unserem Tutorial verwenden wir den Turtlebot 3 – Burger
- Grundkenntnisse zu Linux und ROS
- WLAN-Verbindung
Vorbereitung der Android App
Anstatt das Rad neu zu erfinden, verwenden wir eine spezifische App, die auf Androit Market zur Verfügung steht. Da die App im Rahmen dieses Tutorials eine wichtige Rolle spielt, sollte sie als erstes installiert werden.
Verbindungsaufbau zu Ihrem Roboter
Öffnen Sie ein paar Terminalfenster auf Ihrem Roboter. Schließen Sie einen Display und eine Tastatur an Ihren Roboter an oder bauen Sie über SSH eine direkte Verbindung zum Roboter auf. Alle aufeinander folgenden Befehle werden am Roboter selbst ausgeführt (Raspberry Pi).
Wenn Sie schnurlos arbeiten, empfehle ich Ihnen, einen SSH-Key zu den für den Roboter zugelassenen Hosts hinzuzufügen, um den Zugang zum Roboter mithilfe Ihrer Steuerung zu vereinfachen. Damit fällt die lästige Eingabe von Passwörtern weg. Sollten Sie noch keine SSH-Keys eingerichtet haben, geben Sie einfach ssh-keygen in einen Terminal ein, um den gewünschten Key in Ihrem Verzeichnis directory/.ssh zu erstellen. Ersetzen Sie den Pfad für YOUR_KEY, USER und HOST durch Ihre tatsächliche Konfiguration.
cat ~/.ssh/YOUR_KEY.pub | (ssh USER@HOST “cat >> ~/.ssh/authorized_keys”)
Vorbereitung der Umgebung (optional)
Wir empfehlen einige Zusatzkonfigurationen, die Ihnen das Leben erleichtern. Wir haben ein paar nützliche Alias für ROS-Umgebungen erstellt. Es handelt sich um ein kleines Script, das sich als äußerst nützlich erweist. Clonen Sie das Tool und fügen Sie es zu Ihrem lokalen .bashrc hinzu.
cd
git clone https://github.com/generationrobots-lab/rosbash
nano ~/.bashrc
Add following lines to the end of your file:
source $HOME/rosbash/rosbash.bash
source /opt/ros/kinetic/setup.bash
source $HOME/ros_ws/devel/setup.bash
export ROS_MASTER_URI=http://$HOSTNAME:11311
export ROS_HOSTNAME=$HOSTNAME.local
export TURTLEBOT3_MODEL=burger
Dann speichern und schließen Sie die Datei mithilfe von Ctrl+O , Ctrl+X.
Hinweis: Je nach Ihrem Turtlebot-Modell müssen Sie die Bezeichnung „Burger“ eventuell durch “Waffle” ersetzen.
Hinweis: Um das Verzeichnis ros_ws brauchen Sie sich vorerst nicht zu kümmern. Wir legen es im nächsten Schritt an.
Vorbereitung des Roboters
Sollte Ihr Roboter noch nicht konfiguriert sein, empfehle ich Ihnen, zunächst einen Blick auf dieses Tutorial zu werfen, das die Basiskonfiguration von Ubuntu 16.04 und ROS Kinetic für Turtlebot 3 beschreibt.
Nehmen wir an, Ubuntu und ROS sind bereits installiert. Wir fahren fort mit der Konfiguration eines ROS-Arbeitsbereichs. Dazu erstellen wir zunächst eine Arbeitsumgebung mit der Bezeichnung „ros_ws“.
source /opt/ros/kinetic/setup.bash
mkdir – p ~/ros_ws/src
cd ~/ros_ws/src
catkin_init_workspace
cd ..
catkin_make
Sollten Sie im Laufe des vorigen Schritts rosbash installiert haben, müssen Sie dies bei allen vorhandenen Peripheriegeräten wie folgt angeben:
source ~/.bashrc
Um Ihr Bash anzuweisen, dass Sie „ros_ws“ verwenden möchten, genügt es, im Hauptverzeichnis der Arbeitsumgebung „devel“ einzutippen, dadurch sollte sich Ihre Eingabeaufforderung ändern.
Nun clonen wir den Turtlebot 3 sowie unser IMU-Gateway-Verzeichnis:
cd ~/ros_ws/src
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone https://github.com/generationrobots-lab/teleop_imu.git
Jetzt können Sie einfach durch Eingabe der Abkürzung cm ein catkin_make angeben, oder aber Sie geben den catkin_make in ~/ros_ws ein. Falls fehlende Abhängigkeiten vorhanden sind, können diese ganz einfach über install_deps installiert werden.
Testen sämtlicher Komponenten und Montage aller Teile
Jetzt ist es an der Zeit zu sehen, ob alle Komponenten funktionieren.
Starten Sie rosmaster :
roscore
Standardmäßig sollten Sie auch einen Controller teleop_twist_keyboard haben, der mit den ROS-Packages installiert wurde. Andernfalls ist dieser über folgende Befehle zu installieren:
sudo apt-get update && sudo apt-get install ros-kinetic-teleop-twist-keyboard
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
Starten Sie in einem anderen Terminal:
rostopic echo /cmd_vel
Wenn Sie jetzt auf eine der Tasten I, J, K, L oder die Leerstelle drücken (während der Terminal mit ferngesteuerter Tastatur aktiv ist), erhalten Sie eine Ausgangsnachricht am entsprechenden Terminal.
Starten wir nun den Basistreiber des Roboters in einem anderen Terminal:
roslaunch turtlebot3_bringup turtlebot3_core.launch
Wenn Sie jetzt das teleop-Keyboard ausprobieren, sollte der Roboter sich bewegen. Sobald dies funktioniert, stoppen Sie teleop_keyboard (Ctrl+C).
Überprüfen Sie danach die IP Ihres Roboters mithilfe von ifconfig. Sie erhalten eine Ausgangsnachricht, die der unten stehenden Meldung ähneln sollte. In meinem Fall ist der Roboter über WiFi (wlan0) angeschlossen, seine Adresse lautet 192.168.0.115. Es handelt sich um die Adresse des rosmaster.
Starten Sie jetzt die App auf Ihrem Telefon. Sie werden aufgefordert, in der ersten Zeile die Master-Adresse einzugeben.
Geben Sie folgende Adresse ein: http://192.168.0.115:11311 und ersetzen Sie 192.168.0.115 durch die IP, die Ihrem Roboter entspricht. Bestätigen Sie mit OK.
Hinweis: Roscore und der Turtlebot3 Node sollten nach wie vor auf Ihrem Roboter ausgeführt werden.
Jetzt sollte das Android-Telefon eine Verbindung zu Ihrem Roboter aufbauen und eine Nachricht mit folgendem Betreff senden:
/android/imu
Um zu sehen, ob Sie Nachrichten erhalten, gehen Sie zu:
rostopic echo /android/imu
Sie sollten hier eine Vielzahl von veröffentlichten Werten sehen.
Wenn dies korrekt funktioniert, können Sie nun das Gateway über die Inertialeinheit bis zur Kommandozeile Geschwindigkeit starten. Das Gateway nutzt die erste Sensornachricht als Nullreferenz, der Roboter bewegt sich nicht. Legen Sie Ihr Telefon flach auf den Tisch. Jedes mal wenn Sie das Telefon so ausrichten, bleibt der Roboter stehen. Auch wenn die App komplett geschlossen wird, bleibt der Roboter stehen.
rosrun teleop_imu teleop_imu_bridge.py
Herzlichen Glückwunsch, jetzt können Sie Ihren Roboter durch Drehen Ihres Telefons steuern. Öffnen Sie
~/ros_ws/src/teleop_imu/scripts/teleop_imu_bridge.py
und variieren Sie das Script ganz nach Bedarf. Wahrscheinlich möchten Sie die x- und y-Achse oder den Maßstab ändern, um schnellere oder präzisere Bewegungen zu erzielen.
Um den Start zu beschleunigen, habe ich außerdem eine Startup-Datei im Verzeichnis teleop_imu/launch deponiert, mit der der Turtlebot-Node und das IMU-Gateway gestartet werden. Das Starten erfolgt über:
roslaunch teleop_imu tb3_core_imu.launch
Viel Spaß!