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
3.2 Installation du projet TekBot
- 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. - Se placer dans le dossier du projet
cd tekbot_sim - Rendre le script de configuration exécutable (optionnel si déjà exécutable)
chmod +x configure.sh - 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.
- Simulation physique (collisions, gravité, dynamique…)
- Capteurs variés (LiDAR, IMU, GPS…)
- Création/import de mondes personnalisés
- Tests automatisés et reproductibles
- Interface graphique interactive (ajout/suppression d’objets, manipulation de la scène)
- Bibliothèque de modèles (robots, capteurs, obstacles…)
- Plugins et ressources communautaires
- 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.
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.
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.
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 |
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 principauxDisplay | Utilité | Ajout |
---|---|---|
Map | Affiche la carte générée (SLAM, navigation) | Displays → Map |
LaserScan | Visualise les données LiDAR | Displays → LaserScan |
TF | Affiche l’arbre des frames (repères) | Displays → TF |
Path | Affiche la trajectoire planifiée | Displays → Path |
Image | Affiche le flux caméra | Displays → Image |
RobotModel | Affiche le modèle 3D du robot | Displays → RobotModel |
- Lance RViz2 dans un terminal : rviz2
- Ajoute un display via le bouton Add (en bas à gauche), puis choisis le type (ex : Map, LaserScan…)
- Personnalise les paramètres du display dans le panneau latéral
- Sauvegarde ta configuration : File → Save Config As…
- Pour recharger une configuration : File → Open Config
- 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…)
Installe RViz2 sur Ubuntu/ROS2 Humble.
Lancement rapide : rviz2
Lance RViz2 après avoir démarré la simulation ou les nœuds ROS2.
- 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 »).

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.
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 |

- Installer rosbridge_server :
cd ~/tekbot_ws/src && git clone https://github.com/RobotWebTools/rosbridge_suite.git
- Résoudre les dépendances :
sudo apt install ros-humble-ament-cmake-mypy
(ou cloner ament_cmake si besoin) - Recompiler le workspace :
cd ~/tekbot_ws && colcon build && source install/setup.bash
- Lancer le serveur WebSocket :
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
(Le serveur écoute sur ws://localhost:9090) - Créer une interface web de téléopération :
git clone https://github.com/RobotWebTools/roslibjs.git
- Accès direct à la téléopération web moderne :
👉 interface de téléopération TekBot - Lancer un serveur web local :
python3 -m http.server 8000
puis ouvrir http://localhost:8000/teleop.html
Touche | Action | Description |
---|---|---|
i | Avancer | Déplace le robot vers l'avant |
k | Arrêter | Arrêt immédiat du robot |
, | Reculer | Déplace le robot vers l'arrière |
j | Tourner à gauche | Rotation sur place vers la gauche |
l | Tourner à droite | Rotation sur place vers la droite |
u | Avancer + gauche | Mouvement combiné |
o | Avancer + droite | Mouvement combiné |
q / z | Vitesse globale ± | Augmente/diminue toutes les vitesses |
w / x | Vitesse linéaire ± | Contrôle précis vitesse avant/arrière |
e / c | Vitesse angulaire ± | Contrôle précis vitesse rotation |
- 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.
- 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é.
6. SLAM (cartographie)
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).
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 |
Flux : SLAM → carte → map_server + AMCL → localisation
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.
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.
- Lance la simulation TekBot (ex :
ros2 launch maze_solving tekbot_maze.launch.py
). - 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. - Visualise la carte et la position du robot dans
rviz2
(display "Map" et "Pose"). - Sauvegarde la carte une fois l’exploration terminée :
ros2 run nav2_map_server map_saver_cli -f ~/map
- 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.

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.
- Lance la simulation TekBot sur la carte sauvegardée.
- Lance le serveur de carte :
ros2 run map_server map_server --ros-args -p yaml_filename:=/chemin/vers/ta_carte.yaml
- Lance le nœud de localisation AMCL :
ros2 run amcl amcl
- Visualise la localisation dans
rviz2
(display "Map", "Pose", "ParticleCloud").
- 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.
7. Nav2 (Navigation autonome)
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 :
- Assure-toi d’avoir une carte générée et sauvegardée (voir section SLAM).
- Lance la simulation TekBot sur la carte.
- Lance le serveur de carte (map_server) et la localisation (amcl).
- Lance Nav2 avec le launch file adapté :
ros2 launch nav2_bringup navigation_launch.py map:=/chemin/vers/ta_carte.yaml - Utilise RViz2 pour envoyer un objectif de navigation (outil “2D Nav Goal”).
- 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.
- 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.
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.