Le problème : intégrer du matériel sur mesure dans ROS 2
L'un des plus gros points de friction en robotique, c'est connecter du matériel sur mesure à ROS 2. Pince, capteur d'effecteur, contrôleur à microcontrôleur ou périphérique d'entrée maison : le parcours actuel est pénible.
- Écrire un driver d'interface matérielle en C++ (qui demande une bonne maîtrise de ROS 2 et du contrôle)
- Le compiler avec les bibliothèques ROS 2 du système
- Déboguer l'intégration
- Recommencer pour chaque nouvel appareil
Il doit y avoir plus simple.
L'idée : l'USB-HID comme standard universel
L'USB-HID (Human Interface Device) est partout : souris, claviers, manettes, joysticks maison. C'est un protocole standard intégré à tous les systèmes d'exploitation. Pourtant, les roboticiens y pensent rarement comme à un outil robotique.
Et si l'on inversait la démarche ? Au lieu d'écrire du C++ pour chaque appareil, on pourrait :
- Décrire la structure de données de l'appareil dans un simple fichier de configuration YAML
- Brancher son microcontrôleur (Teensy, ESP32, STM32…) qui parle HID
- Obtenir immédiatement une interface matérielle ros2_control, sans compilation
C'est hid_ros2.
L'architecture
hid_ros2 est un plugin d'interface matérielle unique et réutilisable pour ros2_control qui assure :
La découverte et la gestion du matériel
- Détection automatique des périphériques HID par identifiant fabricant/produit
- Gestion propre du branchement à chaud (déconnexion/reconnexion)
- Connexions persistantes et résilientes
Une intégration pilotée par la configuration
- Le fichier YAML décrit :
- les identifiants fabricant/produit ;
- la structure des rapports (quels octets correspondent à quels capteurs/actionneurs) ;
- les types de données, facteurs d'échelle, décalages ;
- la fréquence de mise à jour (100 Hz, 500 Hz, 1000 Hz selon le système).
- Aucun changement de code pour prendre en charge un nouvel appareil
Des E/S performantes
- Accès USB-HID au niveau du noyau via
libhidapi(multiplateforme : Linux, macOS, Windows) - File de données sans verrou pour la sûreté temps réel
- Fréquences d'interrogation garanties jusqu'à 1000 Hz sur du matériel compatible
- Communication déterministe à faible latence (< 5 ms en général, souvent < 2 ms)
Une intégration native ROS 2
- Interface matérielle
ros2_controlstandard, compatible avec tous les contrôleursros2_control - Communication sûre en temps réel (mémoire préallouée)
- Intégration transparente avec MoveIt2, les contrôleurs de trajectoire et les publieurs d'état
Exemple : un effecteur sur mesure
Imaginez une pince sur mesure à 4 degrés de liberté avec 4 moteurs asservis en position et 6 capteurs tactiles. Votre microcontrôleur (disons une Teensy 4.1) est déjà programmé pour :
- lire 4 consignes moteur dans un rapport HID (8 octets, 2 par moteur) ;
- mesurer 4 positions de codeur et les renvoyer dans un rapport HID (8 octets, 2 par codeur) ;
- mesurer 6 capteurs tactiles analogiques et les envoyer dans le même rapport (12 octets, 2 par capteur).
Avec hid_ros2, votre configuration ressemble à ceci :
device:
vendor_id: 0x16C0 # Teensy's default VID
product_id: 0x0486 # Your custom PID
report_rate_hz: 500
joints:
motor_0:
out_report: [0, 1] # bytes 0-1 of outgoing HID report
in_report: [0, 1] # bytes 0-1 of incoming (encoder feedback)
scale: 0.01 # encoder counts to radians
motor_1:
out_report: [2, 3]
in_report: [2, 3]
scale: 0.01
# ... (motor_2, motor_3)
sensors:
tactile_0:
in_report: [8, 9] # byte 8-9 of incoming report
scale: 0.001 # analog to normalized pressure
# ... (tactile_1 through tactile_5)
Ensuite, dans votre fichier de lancement, vous chargez le contrôleur de pince ros2_control standard, et c'est terminé. Aucun driver C++ à écrire.
Pourquoi c'est important
Pour les roboticiens qui ne développent pas de drivers
On peut intégrer du matériel sur mesure sans être programmeur système C++. L'intégration matérielle devient accessible à tous.
Pour les fabricants de matériel
Décrire une fois, fonctionner partout. Un fabricant de pinces peut livrer un seul fichier YAML avec son produit, et ses utilisateurs peuvent brancher et utiliser sur n'importe quelle plateforme ROS 2.
Pour l'accessibilité
Une barrière d'entrée plus basse, c'est plus de monde qui construit des robots. Un matériel plus varié, c'est plus d'innovation.
Pour la performance
L'USB-HID est natif dans le noyau de tous les systèmes modernes. On obtient une communication déterministe à faible latence sans privilèges particuliers.
Pour la reproductibilité
Les équipes peuvent partager leurs configurations matérielles et reproduire des résultats. Les laboratoires collaborent plus facilement.
L'exposé à la ROSConFr 2025

Les chiffres (présentés à la ROSConFr 2025)
Mesures de performance sur un poste Linux classique :
- Latence de communication : 1,2 ms en général, < 2 ms au 99e centile
- Utilisation CPU : < 5 % sur un système 4 cœurs
- Fréquence d'interrogation : jusqu'à 1000 Hz (selon l'appareil et le système ; 500 Hz couramment)
- Temps de configuration : moins d'une minute pour un nouvel appareil (écrire le YAML, tester, c'est fait)
- Code à écrire par nouvel appareil : zéro ligne de C++
Exemple concret : nous avons intégré 3 plateformes matérielles sur mesure (une pince à microcontrôleur, une matrice de capteurs, un périphérique d'entrée maison) en une seule session de la ROSCon France, littéralement pendant l'exposé.
Open source et communauté
hid_ros2 est publié sous licence Apache 2.0, entièrement open source :
GitHub : adnan-saood/hid_ros2 Documentation : guides d'installation, exemples de configuration, dépannage Communauté : déjà utilisé dans plusieurs laboratoires et start-up ; les contributions sont les bienvenues
Et ensuite ?
Fonctionnalités prévues :
- un outil graphique pour générer les configurations YAML (détection de l'appareil, correspondance automatique) ;
- la prise en charge des périphériques HID composites (plusieurs points de terminaison) ;
- un signal de vie pour la sûreté temps réel (chiens de garde) ;
- journalisation et télémétrie intégrées pour le débogage.
Vision à long terme : Un écosystème standardisé et indépendant des fabricants, où matériel et logiciel s'intègrent aussi facilement que dans l'électronique grand public.
Merci à la ROSConFr 2025
Ce travail a mûri grâce aux retours de la formidable communauté robotique de la ROSCon France. Merci en particulier :
- aux équipes d'ICube Strasbourg et de l'U2IS pour les tests en conditions réelles ;
- aux mainteneurs de ROS 2 / ros2_control pour la qualité du framework ;
- aux communautés Teensy, STM32 et ESP32 qui prennent en charge le HID nativement.
Si vous avez un projet matériel et voulez essayer hid_ros2, commencez ici : README sur GitHub, ou installez le binaire ROS 2 depuis apt.ros.org.
À voir aussi :
- GitHub : hid_ros2
- Le projet paxini_ros2 (qui s'appuie sur hid_ros2)