Localisation et navigation dans ROS à l'aide de rtabmap

Bonjour, chers lecteurs. Dans mon dernier article, j'ai parlé de deux algorithmes SLAM conçus pour les caméras de profondeur: rtabmap et RGBD-SLAM. Ensuite, nous avons essayé de construire uniquement une carte de la région. Dans cet article je parlerai des possibilités de localisation et de navigation du robot en utilisant l'algorithme rtabmap. Qui sont intéressés, s'il vous plaît, sous le chat.

Localisation dans rtabmap avec visualisation dans rviz


Pour commencer, si le maître ROS n'est pas en cours d'exécution, exécutez-le:

roscore 

Exécutez le pilote de la caméra:

 roslaunch freenect_launch freenect.launch depth_registration:=true 

Exécutez rtabmap pour créer une carte avec visualisation dans rviz et supprimer l'ancienne carte:

 roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rtabmapviz:=false rviz:=true 

Une fois la procédure de création de carte terminée, nous quittons le programme à l'aide de Ctrl + C pour enregistrer la carte et redémarrer rtabmap en mode de localisation:

 roslaunch rtabmap_ros rtabmap.launch localization:=true rtabmapviz:=false rviz:=true 

image

Pour afficher la carte dans rviz, vous devez cliquer sur la coche dans l'élément Télécharger la carte sur l'écran MapCloud:

image

image

Déplacez la caméra à l'endroit où se trouve le robot sur la carte dans rviz. Après cela, la transformation entre les systèmes de coordonnées / carte → / odom sera publiée.

image

Création de cartes et navigation à l'aide de rtabmap en utilisant Turtlebot comme exemple


La construction de cartes et la localisation de robots à l'aide de la méthode rtabmap peuvent être essayées sur le simulateur de robot Turtlebot. Rtabmap a des packages spéciaux pour cela. Pour plus d'informations, je donne un lien vers la source du matériel. Tout d'abord, installez les packages nécessaires:

 sudo apt-get install ros-<ros_version>-turtlebot-bringup ros-<ros_version>-turtlebot-navigation ros-<ros_version>-rtabmap-ros 

Par défaut, le pilote OpenNI2 est utilisé, ce qui est spécifié dans le fichier 3dsensor.launch (TURTLEBOT_3D_SENSOR = asus_xtion_pro). Dans mes expériences, j'ai utilisé la caméra Microsoft Kinect. Installons le pilote correspondant dans la variable TURTLEBOT_3D_SENSOR:

 echo 'export TURTLEBOT_3D_SENSOR=kinect' >> ~/.bashrc source ~/.bashrc 

Nous allons maintenant commencer à construire la carte en utilisant des packages spéciaux pour le simulateur Turtlebot dans rtabmap_ros:

 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 

Nous verrons dans la fenêtre rviz:



Et maintenant, avec un nuage de points de la caméra Kinect:

image

Vous devriez voir une carte en deux dimensions, une carte en trois dimensions et une sortie de rubrique supplémentaire nécessaire à la navigation. De plus, les affichages rviz standard et d'autres spécifiques pour rtabmap (carte locale, carte globale, nuage Rtabmap) sont affichés dans le panneau d'affichage à gauche.

image

Déplaçons la caméra dans l'espace et après un certain temps, nous verrons:

image

Par défaut, rtabmap utilise la même base de données à chaque exécution de demo_turtlebot_rviz.launch. Pour supprimer l'ancienne carte et recommencer la construction de la carte (à partir d'un nouveau départ), vous pouvez soit supprimer manuellement la base de données enregistrée dans le fichier ~ / .ros / rtabmap.db, soit exécuter demo_turtlebot_rviz.launch avec l'argument args: = "- delete_db_on_start".

Exécutez la création de cartes sans supprimer la base de données:

 roslaunch rtabmap_ros demo_turtlebot_mapping.launch 

Après avoir construit la carte, le résultat ressemblera à ceci:

image

Localisation avec Turtlebot


Nous avons maintenant une carte qui est enregistrée dans la base de données dans le fichier ~ / .ros / rtabmap.db. Redémarrez demo_turtlebot_mapping.launch en mode localisation avec localisation: = true:

 roslaunch rtabmap_ros demo_turtlebot_mapping.launch rgbd_odometry:=true localization:=true 

Nous verrons l'image suivante:

image

Déplacez Kinect sur le côté. Le robot déterminera son nouvel emplacement dès qu'il détectera une boucle (fermeture de boucle):

image

Une détection de boucle réussie prendra du temps, alors soyez patient.
Cela fonctionne assez rapidement:



Navigation autonome avec Turtlebot


Maintenant que la carte est créée, vous pouvez essayer la navigation hors ligne sur une carte connue à l'aide de la pile de navigation. Pour ce faire, indiquez simplement au robot la cible actuelle sur la carte dans rviz, dans quelle direction le robot doit se déplacer en mode hors ligne. Tout le reste sera pris en charge par la pile de navigation. Pour commencer, cliquez simplement sur le bouton 2D Nav Goal dans rviz

image

et indiquez l'objectif en cliquant à un endroit arbitraire sur la carte

image

Ajoutez l'affichage Pose en sélectionnant la rubrique «/ move_base / current_goal» et l'affichage Path en sélectionnant la rubrique «/ move_base / NavfnROS / plan». Vous devriez voir le chemin prévu (ligne verte sur la carte) et la cible définie, indiquée par une flèche rouge:

image

Le package move_base est responsable du contrôle du robot vers la cible. Il publiera des commandes de mouvement comme geometry_msgs / Twist dans le sujet / mobile_base / commandes / velocity:

 rostopic echo /mobile_base/commands/velocity 

Des informations supplémentaires sur l'utilisation de la pile de navigation sont disponibles dans le didacticiel sur la page officielle turtlebot_navigation. Il y a aussi un tutoriel pour utiliser rtabmap sur votre propre robot.

Ainsi, cette fois, nous avons pu localiser le robot sur une carte construite à l'avance et avons appris à fixer un objectif pour le robot afin qu'il puisse se déplacer vers lui hors ligne. Je vous souhaite bonne chance dans les expériences et à bientôt!

Source: https://habr.com/ru/post/fr406615/


All Articles