Aller au contenu principal

MiniPock - Robot mobile ROS 2

MiniPock : vue d'ensemble annotée de la plateforme, de ses stacks électroniques et de son jumeau numérique

Contexte​

Le CATIE développe 6TRON, une famille de cartes électroniques modulaires (cœurs STM32, cartes de puissance, radio, prototypage) destinées à accélérer le prototypage de systèmes embarqués. MiniPock est la plateforme robotique mobile construite sur ces cartes : un châssis hexagonal de 33,5 cm et 3,85 kg, sur batterie 4S, qui sert à la fois de démonstrateur de l'écosystème 6TRON et de base de développement pour des applications ROS 2 (navigation, cartographie, flottes de robots).

Le besoin était double. Côté robot, il fallait une pile logicielle capable de piloter deux cinématiques, différentielle et holonome, sans dupliquer le code. Côté équipe, il fallait pouvoir développer et tester sans robot physique sous la main, puis passer à plusieurs robots partageant le même espace. J'ai porté la partie ROS 2 du projet de septembre 2023 à décembre 2025 : environ 320 des 420 commits du dépôt principal, plus l'ensemble des dépôts initiaux (description, simulation, navigation, bringup) avant leur fusion.

Aperçu​

MiniPock en version différentielle

Version différentielle : deux moteurs DC, LiDAR sur platine surélevée, stacks 6TRON applicative et de contrôle moteur sur les flancs.

Architecture​

Le robot embarque deux stacks 6TRON. La stack applicative (Zephyr, micro-ROS) lit le LiDAR, publie l'odométrie et reçoit les commandes de vitesse ; elle les transmet par UART, en Protobuf, à la stack de contrôle moteur (Mbed) qui convertit une consigne en x, y, θ en commande de chaque moteur. Tout le reste tourne sur un poste distant, relié au robot en Wi-Fi par l'agent micro-ROS. La simulation remplace le robot par Gazebo derrière les mêmes topics, ce qui laisse la navigation inchangée entre réel et simulé.

Réalisations​

J'ai écrit la description du robot (URDF/xacro paramétrable), le bringup, les ponts Gazebo et le paquet de navigation, d'abord dans des dépôts séparés, puis je les ai fusionnés en un dépôt unique à la version 2.0.0 : les paquets évoluaient toujours ensemble, et la synchronisation de quatre dépôts coûtait plus qu'elle n'apportait.

La décision structurante a été de centraliser toute la configuration dans un fichier YAML unique (minipocks.yaml), validé par un schéma JSON au lancement : namespace, carte, monde de simulation, configuration RViz et, pour chaque robot de la flotte, sa cinématique et sa position initiale. Description, simulation, bringup et navigation lisent tous ce même fichier. Ajouter un robot ou passer un robot de différentiel à holonome revient à modifier une ligne, sans toucher aux fichiers de lancement.

Les deux cinématiques partagent le même modèle et la même pile, et ne diffèrent que par les plugins Gazebo (diff-drive d'un côté, contrôle de vitesse et publication d'odométrie de l'autre) et par les paramètres Nav2 : modèle de mouvement AMCL omnidirectionnel ou différentiel, vitesse latérale autorisée ou non dans le contrôleur DWB.

Équipe​

J'ai été l'auteur principal de la pile ROS 2 et de sa documentation. Le firmware Zephyr est essentiellement l'œuvre d'un collègue, qui a aussi contribué au nœud de mise à jour ; une collègue a porté le namespacing multi-robots et la première intégration Open-RMF ; un autre collègue a ajouté la fusion d'odométrie.

Résultats​

  • Quatre versions publiées (1.0.0 à 2.2.0), avec changelog et documentation versionnée alignés sur la mécanique et le firmware.
  • Une seule pile ROS 2 pour deux cinématiques, différentielle (jusqu'à 2 m/s et 12 rad/s) et holonome, sélectionnées par configuration.
  • Une flotte de N robots en simulation ou en réel à partir d'un seul fichier de configuration, avec navigation Nav2 indépendante par robot et coordination par Open-RMF.
  • Un environnement reproductible : image Docker et devcontainer prêts à l'emploi, sans installation locale de ROS 2 ni de Gazebo.
  • Des robots sans ordinateur embarqué, pilotés et mis à jour à distance par ROS 2 via micro-ROS.

Liens​