Test 3
Creation d'un algorithme de pathfinding
SOMMAIRE

1. Contexte

La robotique mobile occupe aujourd’hui une place centrale dans l’industrie, la recherche et l’innovation. Les robots capables de se déplacer de façon autonome dans des environnements complexes sont au cœur de nombreux défis technologiques, qu’il s’agisse de logistique, d’exploration, d’assistance ou de recherche scientifique. Le Test 3 s’inscrit dans cette dynamique : il propose de confronter les étudiants à une problématique concrète de navigation autonome, telle qu’on la retrouve dans le monde professionnel.

Dans ce test, le robot TekBot évolue dans un environnement inconnu, simulé sous Gazebo, qui reproduit les contraintes d’un labyrinthe réel. L’étudiant doit aborder la question de la mobilité robotique comme le ferait un ingénieur ou un chercheur : comment permettre à une machine de percevoir, comprendre et traverser un espace sans intervention humaine directe ?

L’intérêt pédagogique de ce test est double :

  • Plonger l’étudiant dans une situation réaliste, proche des problématiques rencontrées dans la recherche en robotique.
  • Favoriser l’autonomie, la rigueur et la capacité à mobiliser des outils modernes pour résoudre un problème complexe, de la compréhension du besoin jusqu’à la validation expérimentale.

Enfin, ce test met en avant l’importance du travail reproductible et documenté : chaque étape, chaque choix technique doit pouvoir être expliqué, justifié et partagé, à l’image des pratiques professionnelles en robotique.

2. Objectif

L’objectif du Test 3 est de démontrer la capacité à concevoir et mettre en œuvre une navigation autonome pour un robot mobile (ici le robot TekBot) dans un environnement inconnu et contraignant, tel qu’un labyrinthe simulé. L’étudiant doit permettre au robot d’atteindre une position cible en évitant les obstacles, sans intervention humaine directe, en s’appuyant sur les principes fondamentaux de la robotique mobile : perception, localisation, planification de trajectoire et prise de décision autonome.

  • Le robot TekBot doit explorer un environnement inconnu et en générer une carte utilisable pour la navigation.
  • Le robot doit être capable de se localiser de façon autonome sur cette carte, même après des déplacements complexes.
  • L’étudiant doit permettre au robot d’atteindre une position cible définie sur la carte, en évitant tous les obstacles présents.
  • La solution doit fonctionner sans intervention humaine directe pendant la phase de navigation autonome.
  • La démarche doit être reproductible et documentée, chaque choix technique devant être justifié.

La réussite du test se mesure à la capacité du robot à explorer, se localiser et se déplacer de façon fiable et autonome jusqu’à l’objectif fixé, dans le respect des contraintes de l’environnement. Une attention particulière sera portée à la robustesse de la navigation, à la qualité de la cartographie produite, et à la clarté de la documentation technique fournie.

3. Configuration du workspace

3.1 Prérequis

  • Système d’exploitation : Ubuntu 22.04 LTS (recommandé pour la compatibilité ROS 2 Humble)
  • ROS 2 Humble installé (guide officiel)
  • Droits administrateur (sudo) pour l’installation des paquets nécessaires
Conseil : Ubuntu 22.04 LTS est la plateforme de référence pour ROS 2 Humble. Elle garantit une compatibilité optimale avec les outils, une documentation à jour et un support communautaire étendu.

3.2 Installation du projet TekBot

  1. Cloner le dépôt du projet
    git clone https://github.com/charif-tekbot/tekbot_sim.git
    Cette commande télécharge l’ensemble du code source dans un dossier tekbot_sim.
  2. Se placer dans le dossier du projet
    cd tekbot_sim
  3. Rendre le script de configuration exécutable (optionnel si déjà exécutable)
    chmod +x configure.sh
  4. Lancer le script de configuration
    source configure.sh
    Ce script :
    • Crée le workspace ~/tekbot_ws
    • Place le code source dans le workspace
    • Supprime le dossier bin inutile
    • Source l’environnement ROS 2 Humble
    • Compile tous les paquets avec colcon build
    • Source l’environnement du workspace compilé

3.3 Arborescence du dossier tekbot_ws

tekbot_ws/
├── build/                      ← Fichiers temporaires de compilation colcon
│   └── [maze_solving, tekbot, tekbot_description...]
├── install/                    ← Résultat de l’installation des packages ROS 2
│   ├── local_setup.bash
│   ├── setup.bash              ← ⚠ à sourcer pour activer l’environnement
│   └── lib, share, ...         ← exécutables, ressources de chaque package
├── log/                        ← Logs de compilation
│   └── latest_build/
├── src/
│   └── tekbot_sim/
│       ├── configure.sh
│       ├── README.md
│       ├── maze_solving/
│       │   ├── launch/
│       │   │   └── maze.launch.py
│       │   ├── maps/
│       │   │   ├── maze.yaml
│       │   │   └── maze.pgm
│       │   ├── scripts/
│       │   │   └── generate_maze.py
│       │   ├── maze_solving/
│       │   │   └── _init_.py
│       │   ├── package.xml
│       │   └── setup.py
│       ├── tekbot/
│       │   ├── src/
│       │   │   ├── control_node.cpp
│       │   │   └── main.cpp
│       │   ├── CMakeLists.txt
│       │   └── package.xml
│       └── tekbot_description/
│           ├── urdf/
│           │   └── tekbot.urdf.xacro
│           ├── meshes/
│           │   ├── base_link.dae
│           │   └── wheel.dae
│           ├── launch/
│           │   └── display.launch.py
│           ├── gazebo/
│           │   ├── tekbot.world
│           │   └── model.sdf
│           └── package.xml
              

4. Outils et logiciels

4.1 Gazebo Classic

Gazebo Classic est le simulateur 3D de référence pour la robotique mobile sous ROS 2. Il permet de tester, valider et optimiser le comportement du robot TekBot dans des environnements virtuels réalistes, sans risque matériel. Grâce à son intégration native avec ROS 2, il facilite le prototypage, la validation logicielle et l’expérimentation de scénarios complexes (navigation, SLAM, interactions capteurs/environnement) avant tout déploiement réel.

Pourquoi choisir Gazebo Classic ?
Gazebo Classic reste le simulateur 3D de référence pour la robotique mobile sous ROS 2, notamment pour la version Humble. Il est reconnu pour sa stabilité, sa compatibilité éprouvée avec ROS 2, la richesse de sa documentation et la taille de sa communauté. Classic est idéal pour l'enseignement, la recherche et les projets nécessitant un environnement robuste et bien documenté.
Remarque : Les versions plus récentes (Ignition/Fortress) existent, mais Classic est le choix recommandé pour la majorité des projets ROS 2 Humble.
Fonctionnalités principales
  • Simulation physique (collisions, gravité, dynamique…)
  • Capteurs variés (LiDAR, IMU, GPS…)
  • Création/import de mondes personnalisés
  • Tests automatisés et reproductibles
Outils disponibles
  • Interface graphique interactive (ajout/suppression d’objets, manipulation de la scène)
  • Bibliothèque de modèles (robots, capteurs, obstacles…)
  • Plugins et ressources communautaires
Installation de Gazebo
  • Exécute : sudo apt update && sudo apt install gazebo11 libgazebo11-dev
  • Pour l’intégration ROS2 : sudo apt install ros-humble-gazebo-ros-pkgs ros-humble-gazebo-ros-control

Méthodes de lancement dans Gazebo

Plusieurs méthodes sont possibles pour lancer la simulation TekBot sous Gazebo, selon le scénario que vous souhaitez tester (robot seul, labyrinthe seul, ou robot dans le labyrinthe). Chaque méthode permet de valider une étape clé du développement : installation, configuration de l’environnement, ou navigation autonome complète. Choisissez la méthode adaptée à votre besoin : test d’installation, exploration de l’environnement, ou validation de la navigation et du SLAM.

Rappel important : Avant de lancer Gazebo ou tout fichier launch ROS 2, assurez-vous d’avoir bien sourcé l’environnement ROS 2 source /opt/ros/humble/setup.bash et sourcé le workspace source ~/tekbot_ws/install/setup.bash dans chaque terminal utilisé. Sans cela, les commandes ros2 et les packages du projet ne seront pas reconnus. Pour de meilleures performances, fermez les applications lourdes (navigateur, IDE, etc.) avant de lancer Gazebo Classic, surtout sur un PC portable.
Simulation de base (robot seul) : Lance le robot TekBot dans un environnement Gazebo vide.
ros2 launch tekbot_description gazebo.launch.py
Visualisation du labyrinthe (sans robot) : Affiche uniquement l’environnement maze dans Gazebo.
ros2 launch maze_solving maze.launch.py
Simulation complète (robot + labyrinthe) : Lance TekBot directement dans le labyrinthe
ros2 launch maze_solving tekbot_maze.launch.py
Robot TekBot dans Gazebo
Robot TekBot dans le labyrinthe Gazebo
Robot TekBot dans le labyrinthe Gazebo
Documentation officielle : https://gazebosim.org/docs

4.2 RQt

RQt est une application graphique modulaire basée sur Qt, conçue pour ROS/ROS2. Elle permet d’agréger de nombreux outils de monitoring, de visualisation et de configuration sous forme de plugins : graphe des nœuds, topics, logs, paramètres dynamiques, etc. RQt facilite le diagnostic, le debug et l’analyse du système robotique TekBot.

Pourquoi utiliser RQt ?
RQt centralise tous les outils de supervision et de debug ROS2 dans une seule interface graphique : vous gagnez du temps, visualisez l’état du système en temps réel et pouvez diagnostiquer rapidement les problèmes de communication ou de configuration.
Installation rapide : sudo apt install ros-humble-rqt
Cette commande installe RQt ainsi que la majorité des plugins indispensables pour superviser, visualiser et diagnostiquer un système ROS2.
Lancement : rqt (à lancer dans un terminal après avoir démarré le robot et le labyrinthe) ou ros2 launch maze_solving tekbot_maze.launch.py (cette commande lance le robot, le labyrinthe et ouvre automatiquement RQt pour le monitoring graphique).
Astuce : Superpose ou organise les fenêtres de plugins selon tes besoins : RQt permet une interface totalement personnalisable.
FAQ / Problèmes fréquents RQt ne détecte pas les topics ou nœuds : vérifiez que vous avez bien sourcé l’environnement ROS2 et le workspace dans ce terminal. | Interface vide au lancement : ajoutez les plugins nécessaires via le menu Plugins. | Problèmes d’affichage ou de lenteur : fermez les applications lourdes, réduisez la taille de la fenêtre ou relancez RQt. | RQt ne démarre pas : vérifiez l’installation de Qt et des dépendances graphiques (sudo apt install qtbase5-dev).
Plugins recommandés pour le debug ROS2
Plugin Utilité Menu d’accès
Node Graph Visualise la structure des nœuds et leurs connexions Plugins → Introspection → Node Graph
Topic Monitor Affiche la liste des topics actifs, leur fréquence et la structure des messages Plugins → Topics → Topic Monitor
TF Tree Visualise en temps réel l’arbre des transformations (TF) Plugins → Visualization → TF Tree
Documentation officielle : wiki.ros.org/rqt

4.3 RViz2

RViz2 est l’outil de visualisation 3D incontournable de ROS2. Il permet d’afficher en temps réel l’état du robot, les données capteurs (LiDAR, caméras…), la carte générée, les trajectoires, les frames de coordonnées, etc. RViz2 est indispensable pour le debug, la validation et l’interaction avec le système TekBot.

Tableau des displays principaux
Display Utilité Ajout
MapAffiche la carte générée (SLAM, navigation)Displays → Map
LaserScanVisualise les données LiDARDisplays → LaserScan
TFAffiche l’arbre des frames (repères)Displays → TF
PathAffiche la trajectoire planifiéeDisplays → Path
ImageAffiche le flux caméraDisplays → Image
RobotModelAffiche le modèle 3D du robotDisplays → RobotModel
Procédure pas à pas
  1. Lance RViz2 dans un terminal : rviz2
  2. Ajoute un display via le bouton Add (en bas à gauche), puis choisis le type (ex : Map, LaserScan…)
  3. Personnalise les paramètres du display dans le panneau latéral
  4. Sauvegarde ta configuration : File → Save Config As…
  5. Pour recharger une configuration : File → Open Config
Bonnes pratiques & astuces avancées
  • Sauvegarde une configuration différente pour chaque scénario (SLAM, navigation, debug…)
  • Utilise les raccourcis clavier pour naviguer dans la vue 3D (Maj + clic, molette…)
  • Ferme les displays inutiles pour améliorer les performances
  • Personnalise les couleurs et styles d’affichage selon tes besoins
  • Utilise les outils d’interaction (2D Pose Estimate, 2D Nav Goal…)
Installation : sudo apt install ros-humble-rviz2
Installe RViz2 sur Ubuntu/ROS2 Humble.
Lancement rapide : rviz2
Lance RViz2 après avoir démarré la simulation ou les nœuds ROS2.
Problèmes fréquents
  • RViz2 plante au lancement : mets à jour tes pilotes graphiques, essaie rviz2 --opengl.
  • Le robot n’apparaît pas : vérifie le display RobotModel et les topics associés.
  • Les axes ou repères sont décalés : vérifie la configuration des TF (transforms) et la synchronisation des horloges ROS2.
  • Impossible d’ajouter un affichage : assure-toi que le bon type de message est publié sur le topic (ex : « LaserScan », « Image », « PointCloud2 »).
Aperçu RViz2
Documentation officielle : index.ros.org/p/rviz2/

5. Télé-opération

La télé-opération est une étape clé du cycle de développement robotique : elle permet de prendre le contrôle manuel du robot TekBot pour valider chaque sous-système (moteurs, capteurs, communication ROS2, sécurité) avant toute expérimentation autonome.

Pourquoi télé-opérer ?

  • Vérification initiale : S’assurer que le robot réagit bien aux commandes, que les moteurs tournent dans le bon sens, que les capteurs publient des données cohérentes.
  • Diagnostic et debug : Identifier rapidement les problèmes de configuration (topics, permissions, drivers, etc.) en observant la réponse du robot en temps réel.
  • Calibration : Ajuster les paramètres (vitesses, sensibilité, limites) en situation réelle ou simulée.
  • Prise de main d’urgence : Intervenir manuellement en cas de bug, de danger ou de test critique.
  • Formation et démonstration : Permettre à un utilisateur novice de piloter le robot pour comprendre son fonctionnement.
Principe technique : La télé-opération consiste à publier des messages geometry_msgs/Twist sur le topic /cmd_vel du robot. Ces messages sont interprétés par le contrôleur de mouvement (diff_drive, ackermann, etc.) pour générer les déplacements.

Comparatif des modes de télé-opération

Mode Avantages Limites Cas d'usage Commande d'installation
Clavier Simple, rapide, pas de matériel supplémentaire Contrôle peu précis, pas d’analogique Debug, tests unitaires, prise en main rapide sudo apt install ros-humble-teleop-twist-keyboard
Manette Contrôle analogique précis, ergonomique Configuration parfois nécessaire, dépend du matériel Conduite fine, formation, démonstration sudo apt install ros-humble-teleop-twist-joy
Interface graphique (RQt) Accessible à tous, visuel, sliders intuitifs Moins réactif, nécessite un environnement graphique Démonstration, pédagogie, prise en main par débutant sudo apt install ros-humble-rqt-robot-steering
Web / Mobile Contrôle à distance, multiplateforme Installation de ROSBridge, sécurité réseau à gérer Contrôle à distance, démo publique, accès mobile sudo apt install ros-humble-rosbridge-server
Schéma télé-opération ROS2
Chaîne logicielle : PC/Manette/Web → ROS2 → /cmd_vel → Robot
Téléopération Web avancée (WebSocket & navigateur)
  1. Installer rosbridge_server :
    cd ~/tekbot_ws/src && git clone https://github.com/RobotWebTools/rosbridge_suite.git
  2. Résoudre les dépendances :
    sudo apt install ros-humble-ament-cmake-mypy (ou cloner ament_cmake si besoin)
  3. Recompiler le workspace :
    cd ~/tekbot_ws && colcon build && source install/setup.bash
  4. Lancer le serveur WebSocket :
    ros2 launch rosbridge_server rosbridge_websocket_launch.xml
    (Le serveur écoute sur ws://localhost:9090)
  5. Créer une interface web de téléopération :
    git clone https://github.com/RobotWebTools/roslibjs.git
  6. Accès direct à la téléopération web moderne :
    👉 interface de téléopération TekBot
  7. Lancer un serveur web local :
    python3 -m http.server 8000 puis ouvrir http://localhost:8000/teleop.html
Résultat : tu peux piloter ton robot en direct depuis le navigateur, via WebSocket, dans Gazebo ou sur le robot réel.
Contrôles clavier pour la télé-opération
Touche Action Description
iAvancerDéplace le robot vers l'avant
kArrêterArrêt immédiat du robot
,ReculerDéplace le robot vers l'arrière
jTourner à gaucheRotation sur place vers la gauche
lTourner à droiteRotation sur place vers la droite
uAvancer + gaucheMouvement combiné
oAvancer + droiteMouvement combiné
q / zVitesse globale ±Augmente/diminue toutes les vitesses
w / xVitesse linéaire ±Contrôle précis vitesse avant/arrière
e / cVitesse angulaire ±Contrôle précis vitesse rotation
Ces raccourcis sont valables pour l’outil teleop_twist_keyboard sous ROS2.
Bonnes pratiques et astuces
  • Avant de télé-opérer, vérifie que le robot (ou la simulation) est bien lancé et que le topic /cmd_vel est disponible (ros2 topic list).
  • Utilise ros2 topic echo /cmd_vel pour observer les messages envoyés.
  • Pour la manette, adapte le mapping YAML selon ton modèle (axes, boutons, deadzones).
  • En simulation, vérifie la réactivité dans Gazebo : si le robot ne bouge pas, contrôle la configuration du contrôleur de vitesse.
  • En cas de latence, privilégie la connexion filaire ou réduis la fréquence d’envoi des messages.
  • Pour la sécurité, garde toujours un terminal prêt à envoyer Ctrl+C pour stopper la télé-opération.
FAQ avancée / Problèmes fréquents
  • Problèmes de latence : Privilégie le filaire, réduis la fréquence d’envoi, surveille la charge CPU.
  • Problèmes de sécurité réseau : Utilise un VPN, désactive l’auto-discovery sur WAN, privilégie le LAN.
  • Impossible de piloter via Web : Vérifie l’installation de ROSBridge, la configuration des ports et la sécurité du navigateur.
  • Le robot ne réagit pas : Vérifie que /cmd_vel est bien publié, que le contrôleur est lancé, et que le robot est alimenté.
Documentation officielle : navigation.ros.org/tutorials/docs/teleop.html

6. SLAM (cartographie)

Qu'est-ce que SLAM ?
Le SLAM (Simultaneous Localization And Mapping) est une brique essentielle de la robotique mobile. Il permet à un robot comme TekBot de construire une carte de son environnement tout en se localisant dessus, sans GPS ni repères externes.

Concrètement, le SLAM permet au robot :
  • de découvrir et mémoriser la structure d’un lieu inconnu (murs, obstacles, chemins…) ;
  • de savoir à tout moment où il se trouve sur la carte qu’il construit ;
  • de s’adapter à un environnement qui change (portes, objets déplacés…) ;
  • de fournir une base fiable pour toutes les tâches avancées (exploration, navigation, planification de trajets).
⚠️ À retenir : le SLAM ne fait pas « naviguer » le robot ! Il lui donne la carte et sa position ; c’est ensuite un autre module (comme Nav2 sous ROS2) qui utilise ces informations pour planifier et exécuter les déplacements.
En résumé, sans SLAM, le robot serait « aveugle » : il ne pourrait ni se repérer, ni explorer, ni interagir intelligemment avec son environnement.
Outil SLAM Type Capteurs requis Points forts Limites Documentation
SLAM Toolbox Graph-based, 2D LiDAR, odométrie Précis, rapide, compatible ROS2, mode online/offline 2D uniquement, nécessite une bonne odométrie GitHub
Cartographer Graph-based, 2D/3D LiDAR, IMU, odométrie 2D & 3D, robuste, multi-capteurs, cartographie en temps réel Configuration avancée, plus lourd en ressources Docs
GMapping Particle filter, 2D LiDAR, odométrie Simple, efficace, historique sous ROS1/2 Sensible aux erreurs d’odométrie, pas de 3D Wiki
Hector SLAM Scan matching, 2D LiDAR (pas besoin d’odométrie) Pas besoin d’odométrie, rapide, idéal drones/UGV Moins précis sur grandes surfaces, pas de 3D Wiki
Robot TekBot Capteurs (LiDAR, IMU...) Carte générée Localisation
Flux : SLAM → carte → map_server + AMCL → localisation
Pourquoi avons-nous choisi SLAM Toolbox ?
Pour ce projet, nous avons retenu SLAM Toolbox parmi les différents outils SLAM présentés ci-dessus. Ce choix s’explique par plusieurs raisons :
  • SLAM Toolbox est parfaitement intégré à ROS2, ce qui correspond à l’architecture de notre projet TekBot.
  • Il offre un excellent compromis entre précision, rapidité et facilité de configuration pour la cartographie 2D.
  • Il dispose de modes online et offline, adaptés à l’exploration en temps réel comme à la génération de cartes précises.
  • La documentation et la communauté sont très actives, facilitant le support et la résolution de problèmes.
Ce choix garantit une mise en œuvre efficace et reproductible du SLAM dans notre contexte pédagogique.

Installation de SLAM Toolbox
Pour installer SLAM Toolbox sous ROS2 Humble, il suffit d’exécuter la commande suivante dans un terminal :
sudo apt install ros-humble-slam-toolbox
Cette commande télécharge et installe automatiquement tous les composants nécessaires.

Étapes pratiques pour utiliser le SLAM Toolbox :
  1. Lance la simulation TekBot (ex : ros2 launch maze_solving tekbot_maze.launch.py).
  2. Lance le SLAM Toolbox dans un autre terminal :
    ros2 launch slam_toolbox online_async_launch.py
    Démarre le SLAM en mode asynchrone pour la cartographie en temps réel.
  3. Visualise la carte et la position du robot dans rviz2 (display "Map" et "Pose").
  4. Sauvegarde la carte une fois l’exploration terminée :
    ros2 run nav2_map_server map_saver_cli -f ~/map
Bonnes pratiques pour le SLAM :
  • Déplace le robot lentement et régulièrement pour obtenir une carte précise.
  • Évite les mouvements brusques ou les rotations rapides.
  • Explore tout l’environnement pour éviter les “trous” dans la carte.
  • Sauvegarde la carte une fois l’exploration terminée, avant de relancer la localisation.
  • Ne jamais lancer le SLAM et AMCL en même temps sur le même robot.
Astuce avancée : dans RViz2, utilise l’outil “2D Pose Estimate” pour réinitialiser la position du robot et aider AMCL à converger plus vite.
Carte générée par SLAM
Localisation sur carte sauvegardée (AMCL + map_server)
Une fois la carte générée et sauvegardée, il est possible de localiser le robot sur cette carte sans refaire le SLAM. Pour cela, on utilise :
  • map_server : diffuse la carte sauvegardée aux autres nœuds ROS2.
  • amcl (Adaptive Monte Carlo Localization) : estime la position du robot sur la carte à partir des capteurs (LiDAR) et des mouvements.
Étapes typiques :
  1. Lance la simulation TekBot sur la carte sauvegardée.
  2. Lance le serveur de carte :
    ros2 run map_server map_server --ros-args -p yaml_filename:=/chemin/vers/ta_carte.yaml
  3. Lance le nœud de localisation AMCL :
    ros2 run amcl amcl
  4. Visualise la localisation dans rviz2 (display "Map", "Pose", "ParticleCloud").
Astuce : la localisation AMCL est plus rapide et plus légère que le SLAM pour la navigation sur une carte déjà connue.
FAQ / Problèmes fréquents
  • La carte générée est incomplète : explore plus lentement, vérifie la portée du LiDAR, évite les obstacles non détectés.
  • Le robot n’est pas localisé correctement : utilise l’outil “2D Pose Estimate” dans RViz2 pour réinitialiser la position estimée.
  • AMCL ne converge pas : vérifie la correspondance entre la carte et l’environnement, ajuste les paramètres de particules.
  • map_server ne trouve pas la carte : vérifie le chemin du fichier YAML et l’accessibilité des fichiers .pgm/.yaml.
  • Le SLAM et AMCL tournent en même temps : arrête le SLAM avant de lancer AMCL pour éviter les conflits.
Documentation officielle : github.com/SteveMacenski/slam_toolbox
Qu’est-ce que Nav2 ?
Nav2 (Navigation2) est la suite logicielle officielle de navigation autonome pour ROS2. Elle fournit au robot TekBot toutes les briques nécessaires pour se déplacer de façon intelligente et sûre dans un environnement connu : planification de trajectoire, suivi de chemin, évitement dynamique d’obstacles, gestion des arrêts d’urgence, et adaptation en temps réel aux imprévus. Nav2 s’appuie sur la localisation (AMCL), la cartographie, des algorithmes de planification avancés (Dijkstra, A*, RRT*…), et un système de contrôle en boucle fermée pour garantir que le robot atteint sa destination même dans des environnements complexes ou changeants. Grâce à son architecture modulaire, Nav2 permet d’intégrer facilement de nouveaux capteurs, de personnaliser les comportements de navigation, et de surveiller en temps réel l’état du robot via RViz2. C’est l’outil de référence pour la navigation autonome sous ROS2, utilisé aussi bien en recherche qu’en industrie.

Étapes pour utiliser Nav2 :

  1. Assure-toi d’avoir une carte générée et sauvegardée (voir section SLAM).
  2. Lance la simulation TekBot sur la carte.
  3. Lance le serveur de carte (map_server) et la localisation (amcl).
  4. Lance Nav2 avec le launch file adapté :
    ros2 launch nav2_bringup navigation_launch.py map:=/chemin/vers/ta_carte.yaml
  5. Utilise RViz2 pour envoyer un objectif de navigation (outil “2D Nav Goal”).
Bonnes pratiques et conseils :
  • Vérifie que la carte utilisée correspond bien à l’environnement simulé.
  • Adapte les paramètres de Nav2 (planners, contrôleurs) selon la taille du robot et la complexité du labyrinthe.
  • Utilise RViz2 pour surveiller la trajectoire, les obstacles détectés et la position du robot.
  • En cas de problème de navigation, vérifie les logs de Nav2 et la configuration des topics.
FAQ / Problèmes fréquents
  • Le robot ne bouge pas : vérifie que la localisation AMCL fonctionne, que la carte est bien chargée et que les topics de commande sont connectés.
  • La planification échoue : vérifie que l’objectif est atteignable (pas dans un mur ou hors carte), ajuste les paramètres du planner.
  • RViz2 n’affiche pas la trajectoire : ajoute les displays “Path” et “Goal”, vérifie la configuration des topics.
  • Le robot s’arrête en chemin : surveille les costmaps, vérifie la détection d’obstacles et les logs de Nav2.
Astuce avancée & Pour aller plus loin :
Utilise les outils de debug de Nav2 pour diagnostiquer les problèmes : visualise les costmaps (local/global), ajuste dynamiquement les paramètres dans RViz2, et consulte les logs détaillés pour comprendre les blocages ou erreurs de planification.

Explore les fonctionnalités avancées de Nav2 : navigation multi-robots, plugins personnalisés, navigation dynamique, gestion des obstacles mobiles.
Vidéo : Navigation autonome – le robot s’échappe du labyrinthe Démonstration : le robot TekBot planifie et suit un chemin pour sortir du labyrinthe grâce à Nav2
Documentation officielle : navigation.ros.org

8. Algorithme A*

Résumé pédagogique :
L’algorithme A* (A-Star) est une méthode de recherche de chemin optimale très utilisée en robotique mobile et dans ROS2, notamment pour la navigation autonome de robots comme TekBot. Il permet de trouver le chemin le plus court entre un point de départ et une destination sur une carte, en tenant compte des obstacles et du coût du déplacement.

Principe : A* combine les avantages de Dijkstra (exploration du coût réel) et de la recherche heuristique (anticipation du coût restant). À chaque étape, il choisit le nœud avec le coût total estimé le plus faible :
  • f(n) = g(n) + h(n) où :
  • g(n) = coût réel du départ à n
  • h(n) = estimation du coût restant (heuristique, ex : distance Euclidienne)
Le code source de l’algorithme A* est disponible dans le dossier GitHub du projet.
Exemple de chemin A*
Astuce TekBot : Dans ROS2, A* est utilisé par le planificateur global de Nav2 pour générer des trajectoires sûres et efficaces, en tenant compte de la carte d’occupation générée par SLAM ou fournie par l’utilisateur.

Fonctionnement étape par étape

  1. Initialiser la liste ouverte (open list) avec le point de départ.
  2. Répéter jusqu’à atteindre la cible ou épuisement :
    • Sélectionner le nœud avec le plus petit f(n).
    • Si c’est la cible, reconstruire le chemin.
    • Sinon, déplacer ce nœud dans la liste fermée (closed list).
    • Pour chaque voisin accessible :
      • Calculer g(n), h(n), f(n).
      • Si meilleur chemin trouvé, mettre à jour et ajouter à la liste ouverte.
Limites et améliorations :
Limites Améliorations possibles
Lent sur de grandes cartes ou en présence de nombreux obstacles Utiliser des variantes (Theta*, Jump Point Search), optimiser l’heuristique
Ne gère pas les environnements dynamiques (obstacles mobiles) Combiner avec D* Lite, ou des algorithmes réactifs
Chemins parfois non naturels (angles droits) Post-traitement (lissage, courbes de Bézier)

9. Défis & solutions

Note : Les défis et solutions présentés ici sont ceux que nous avons réellement rencontrés lors de l’élaboration du projet TekBot. Pour chaque défi, une solution concrète a été apportée et explicitée dans les sections précédentes (SLAM, Nav2, A*, FAQ, etc.). Vous pouvez vous y référer pour retrouver nos retours d’expérience et les méthodes qui ont permis de résoudre chaque difficulté.
  • Cartographie incomplète : Vérifier la couverture du robot, ajuster la vitesse et la stratégie d’exploration.
  • Localisation instable : Bien initialiser AMCL, éviter de lancer SLAM et AMCL en même temps.
  • Navigation bloquée : Surveiller les costmaps, ajuster les paramètres du planner et du contrôleur.
  • Problèmes de performance : Limiter les displays RViz2, fermer les applications lourdes, optimiser la configuration du PC.
  • Sauvegarde de la carte : Des difficultés pour enregistrer la carte générée par SLAM, nécessitant de vérifier les permissions et le format du fichier.
  • Planification du chemin (A*) : L’algorithme planifiait parfois le chemin à partir de l’origine du repère au lieu de la position réelle du robot ; il a fallu corriger la prise en compte de la localisation dans le code.
  • Cas pratiques divers : Problèmes de synchronisation entre les nœuds ROS2, erreurs de configuration des topics, et ajustements des paramètres pour obtenir un comportement optimal.
Bonnes pratiques
  • Documenter chaque étape et chaque choix technique.
  • Tester régulièrement chaque brique (SLAM, Nav2, A*…)
  • Collaborer et demander de l’aide sur les forums ROS2.
FAQ
  • Le robot tourne en rond ? Vérifie la calibration des capteurs et la configuration du contrôleur.
  • La carte ne se sauvegarde pas ? Vérifie les permissions d’écriture et le chemin du dossier.

10. Annexes & références

Pour toute question ou suggestion, consultez la documentation officielle ou contactez l’équipe pédagogique.

11. Conclusion

Ce projet TekBot a permis d’explorer concrètement les principaux outils et méthodes de la robotique mobile sous ROS2 : simulation dans Gazebo, SLAM, navigation autonome, planification de trajectoire (A*), et téléopération. Les défis rencontrés ont été surmontés grâce à une démarche expérimentale et collaborative, chaque solution étant explicitée dans la documentation. Ce travail constitue une base solide pour aller plus loin : optimisation des algorithmes, intégration de nouveaux capteurs, ou déploiement sur robot réel. N’hésitez pas à vous inspirer de cette expérience pour vos propres projets !
ROS2 Humble GitHub Contact