Guten Tag, liebe Leser. In
meinem letzten Artikel habe ich über zwei SLAM-Algorithmen für Tiefenkameras gesprochen: rtabmap und RGBD-SLAM. Dann haben wir versucht, nur eine Karte des Gebiets zu erstellen. In diesem Artikel werde ich über die Möglichkeiten der Lokalisierung und Navigation des Roboters unter Verwendung des rtabmap-Algorithmus sprechen. Wer interessiert sich bitte unter der Katze.
Lokalisierung in rtabmap mit Visualisierung in rviz
Wenn der ROS-Master nicht ausgeführt wird, führen Sie ihn zunächst aus:
roscore
Führen Sie den Treiber für die Kamera aus:
roslaunch freenect_launch freenect.launch depth_registration:=true
Führen Sie rtabmap aus, um eine Karte mit Visualisierung in rviz zu erstellen und die alte Karte zu löschen:
roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rtabmapviz:=false rviz:=true
Wenn der Kartenerstellungsvorgang abgeschlossen ist, beenden wir das Programm mit Strg + C, um die Karte zu speichern und rtabmap im Lokalisierungsmodus neu zu starten:
roslaunch rtabmap_ros rtabmap.launch localization:=true rtabmapviz:=false rviz:=true

Um die Karte in rviz anzuzeigen, müssen Sie auf das Häkchen im Element Karte herunterladen in der MapCloud-Anzeige klicken:


Bewegen Sie die Kamera an den Ort, an dem sich der Roboter auf der Karte in rviz befindet. Danach wird die Transformation zwischen den Koordinatensystemen / map → / odom veröffentlicht.

Kartenerstellung und Navigation am Beispiel von rtabmap am Beispiel von Turtlebot
Kartenerstellung und Roboterlokalisierung mit der rtabmap-Methode können mit dem Turtlebot-Robotersimulator versucht werden. Rtabmap hat dafür spezielle Pakete. Für zusätzliche Informationen gebe ich einen Link zur
Quelle des Materials. Installieren Sie zunächst die erforderlichen Pakete:
sudo apt-get install ros-<ros_version>-turtlebot-bringup ros-<ros_version>-turtlebot-navigation ros-<ros_version>-rtabmap-ros
Standardmäßig wird der OpenNI2-Treiber verwendet, der in der Datei 3dsensor.launch angegeben ist (TURTLEBOT_3D_SENSOR = asus_xtion_pro). In meinen Experimenten habe ich die Microsoft Kinect-Kamera verwendet. Installieren wir den Treiber dafür in der Variablen TURTLEBOT_3D_SENSOR:
echo 'export TURTLEBOT_3D_SENSOR=kinect' >> ~/.bashrc source ~/.bashrc
Wir werden nun mit der Erstellung der Karte mit speziellen Paketen für den Turtlebot-Simulator in rtabmap_ros beginnen:
roslaunch turtlebot_bringup minimal.launch roslaunch rtabmap_ros demo_turtlebot_mapping.launch args:="--delete_db_on_start" rgbd_odometry:=true roslaunch rtabmap_ros demo_turtlebot_rviz.launch
Wir werden im rviz-Fenster sehen:

Und jetzt mit einer Punktwolke von der Kinect-Kamera:

Sie sollten eine zweidimensionale Karte, eine dreidimensionale Karte und weitere Themenausgaben sehen, die für die Navigation erforderlich sind. Darüber hinaus werden im Anzeigefeld links die Standard-Rviz-Anzeigen und weitere spezifische Rtabmap-Anzeigen (Local Map, Global Map, Rtabmap Cloud) angezeigt.

Lassen Sie uns die Kamera im Weltraum bewegen und nach einer Weile werden wir sehen:

Standardmäßig verwendet rtabmap bei jeder Ausführung von demo_turtlebot_rviz.launch dieselbe Datenbank. Um die alte Karte zu löschen und die Karte erneut zu erstellen (von einem sauberen Start an), können Sie entweder die in der Datei ~ / .ros / rtabmap.db gespeicherte Datenbank manuell löschen oder demo_turtlebot_rviz.launch mit dem Argument args: = "- delete_db_on_start" ausführen.
Führen Sie die Kartenerstellung aus, ohne die Datenbank zu löschen:
roslaunch rtabmap_ros demo_turtlebot_mapping.launch
Nach dem Erstellen der Karte sieht das Ergebnis ungefähr so aus:

Lokalisierung mit Turtlebot
Jetzt haben wir eine Karte, die in der Datenbank in der Datei ~ / .ros / rtabmap.db gespeichert ist. Starten Sie demo_turtlebot_mapping.launch im Lokalisierungsmodus mit Lokalisierung neu: = true:
roslaunch rtabmap_ros demo_turtlebot_mapping.launch rgbd_odometry:=true localization:=true
Wir werden das folgende Bild sehen:

Bewegen Sie Kinect zur Seite. Der Roboter bestimmt seinen neuen Standort, sobald er eine Schleife erkennt (Schleifenschluss):

Eine erfolgreiche Schleifenerkennung braucht Zeit. Seien Sie also geduldig.
Es funktioniert ziemlich schnell:
Standalone-Navigation mit Turtlebot
Nachdem die Karte erstellt wurde, können Sie die Offline-Navigation auf einer bekannten Karte mithilfe des Navigationsstapels versuchen. Geben Sie dazu für den Roboter einfach das aktuelle Ziel auf der Karte in rviz an, in welche Richtung sich der Roboter im Offline-Modus bewegen soll. Alles andere erledigt der Navigationsstapel. Klicken Sie zum Starten einfach auf die Schaltfläche 2D-Navigationsziel in rviz

und geben Sie das Ziel an, indem Sie auf eine beliebige Stelle auf der Karte klicken

Fügen Sie die Pose-Anzeige hinzu, indem Sie das Thema "/ move_base / current_goal" auswählen, und die Pfadanzeige, indem Sie das Thema "/ move_base / NavfnROS / plan" auswählen. Sie sollten den geplanten Pfad (grüne Linie auf der Karte) und das festgelegte Ziel sehen, angezeigt durch einen roten Pfeil:

Das move_base-Paket ist für die Steuerung des Roboters in Richtung des Ziels verantwortlich. Es werden Bewegungsbefehle wie Geometrie_msgs / Twist zum Thema / mobile_base / Befehle / Geschwindigkeit veröffentlicht:
rostopic echo /mobile_base/commands/velocity
Weitere Informationen zum Arbeiten mit dem Navigationsstapel finden Sie im
Tutorial auf der offiziellen Seite turtlebot_navigation. Es gibt auch ein
Tutorial zur Verwendung von rtabmap auf Ihrem eigenen Roboter.
So konnten wir diesmal den Roboter auf einer im Voraus erstellten Karte lokalisieren und lernten, wie man ein Ziel für den Roboter festlegt, damit er sich offline darauf zubewegen kann. Ich wünsche Ihnen viel Glück bei den Experimenten und bis bald!