Skip to content

[FR] Mapping et Navigation

CaptainHarlockSSX edited this page Jun 17, 2023 · 2 revisions

Cartographie et navigation en utilisant le SLAM, RViz et Nav2

Générer une carte avec le SLAM

Pour générer une carte, il faut exécuter le SLAM et faire déplacer le robot à travers les endroits à cartographier.

Nous avons suivi ce tutoriel officiel en lançant le SLAM et Rviz2 sur nos machines personnelles, pour observer en temps réel la génération de la carte et diriger le robot avec la téléopération par clavier. Nous avions effectué cela sans changer les paramètres par défaut sur le robot pro_1.

⚠️ Nous avons eu des soucis avec Rviz qui n'affichait rien. Cela a peut-être été corrigé, mais dans le doute il faut s'assurer que les topics contiennent bien le namespace du robot (ex /robot_namespace/map et pas juste /map).

Mise à jour (Juin 2023): Même en lançant RViz avec un namespace en argument de commande, il faut manuellement changer TOUS LES NOMS DE TOPIC puisque le namespace n'est pas appliqué du tout.

Nous avons pu définir une pose initiale du robot, ainsi que le faire naviguer à travers la carte générée. Nous avons également pu voir le modèle du Robot ainsi que son retour caméra.

Nous avons eu l'impression que dans la globalité, le lite_1 était le plus coopératif des robots.

Naviguer avec une carte

Introduction

Après avoir généré une carte, il est possible de la charger dans RViz2 pour définir une trajectoire, puis lancer une navigation autonome.

Il faudra au moins 4 fenêtres de terminal :

  • Une pour lancer la localisation à l'aide de la carte précédemment générée

  • Une pour lancer la navigation avec l'outil Nav2

  • Une pour lancer le noeud ROS définissant la trajectoire

  • Une pour lancer RViz2 et avoir un retour visuel

Puisque ROS2 fonctionne en réseau, il devrait être possible de lancer tout cela sur n'importe quel client (machine personnelle ou robot). Cependant, à cause de latences trop souvant rencontrées, nous lancions la localisation, la navigation et RViz2 sur une machine personnelle, et le noeud ROS sur le robot en session SSH.

Lancer la navigation par le code

Tout d'abord, il faut localiser le chemin vers la carte.yaml et la charger en utilisant la commande suivante (ne pas oublier d'ajouter le namespace du robot à la fin de la commande) :

ros2 launch turtlebot4_navigation localization.launch.py map:=path_to_map.yaml namespace:=/robot_namespace

Ensuite, lancez la navigation :

ros2 launch turtlebot4_navigation nav2.launch.py namespace:=/robot_namespace

Maintenant, lancez le noeud ROS de navigation personnalisé pour vos besoins. (Les exemples de noeuds ROS pour la navigation sont disponibles sur la page officielle TurtleBot 4 Navigator · User Manual).

Astuce : pour trouver les coordonnées d'un point de la carte, lisez la partie Navigation avec RViz ci-dessous.

Attention, l'argument de commande pour le namespace n'a pas la même syntaxe entre les commandes ros2 run et ros2 launch 🙃

ros2 run my_navigation_pkg my_navigation_node --ros-args --remap __ns:=/robot_namespace

Vous pouvez désormais lancer un autre terminal et exécuter RViz2 pour voir la carte :

rviz2

ou cette commande pour voir toutes les vues relatives au robot (attention, le namespace semble ne pas fonctionner et il faut modifier les topics d'entrée à la main) :

ros2 launch turtlebot4_viz view_robot.launch.py namespace:=/robot_namespace

⚠️Nous avons subit d'énormes latences durant lesquelles RViz2 prennait un temps important à charger les données des cpateurs du robot, ainsi que son modèle 3D. Le terminal rapporte également des erreurs de type missing frame [map].

Malgré cela, si vous exécutez les commandes comme indiqué dans ce document, la navigation devrait fonctionner même si les terminaux affichent des erreurs.

Mise à jour : Nous avons découvert que les diagnostiques du TurtleBot4 consommait énormément de ressources CPU, ralentissant drastiquement la RaspberryPi. Nous avons donc désactivé cette fonctionnalité, depuis l'interface turtlebot4-setup du robot ou en mettant la variable TURTLEBOT4_DIAGNOSTICS=0 dans le fichier /etc/turtlebot4/setup.bash.

Nous avons également remarqué qu'en raison de fréquentes surcharges CPU de la create3, les horloges internes de la raspberry et de la create3 se désynchronisées, causant des problèmes de timestampdans les terminaux pendant la navigation.

Pour remédier à cela, exécuter la commande turtlebot4-ntpd-sync en SSH dans la raspberry pi du robot (Plus d'infos ici)

Note: Nous n'avons pu exécuter la navigation que sur le turtlebot lite_1 et pro_1.

Lancer la navigation par RViz2

Suivre les mêmes étapes qu'au-dessus sauf le lancement du noeud ROS. La navigation peut s'effectuer avec les outils Nav2 intégrés à RViz2.

  • Définir la pose initiale en fonction de l'emplacement réel du robot reporté sur la carte générée

  • Utiliser l'outil nav2 goal pour choisir une destination

Vous pouvez utiliser Publish Point et voir ses coordonnées relatives à la pose initiale du robot en écoutant le topic clicked_point. Cet outil peut s'avérer pratique pour écrire un suivi de points dans un noeud ROS python / C++.

ros2 topic echo /clicked_point