Cet article explore le système d'exploitation robotique (ROS), en particulier son évolution vers ROS2, qui utilise le protocole DDS pour la communication. Il couvre l'histoire de ROS, ses différences par rapport à ROS2, les concepts clés de DDS et RMW, ainsi que les étapes d'installation et de test de ROS2.
Histoire de ROS
ROS a vu le jour en 2007 à l'Université de Stanford, initialement pour le robot PR2. Willow Garage a investi dans le projet, menant au lancement du robot PR2 et de son logiciel associé, nommé Robot Operating System (ROS), en 2010. L'introduction de versions LTS (Long Term Support) tous les deux ans à partir de 2014 a marqué la maturité et l'adoption croissante de ROS. ROS2 Humble, la première version LTS de ROS2, sortie en mai 2022, inaugure une nouvelel ère pour le système.
L'objectif principal de ROS est d'améliorer la réutilisabilité du logiciel robotique, en évitant de "réinventer la roue". Il est structuré autour de quatre piliers : mécanisme de communication, outils de développement, fonctionnalités d'application et écosystème.
Communautés ROS
Les principales plateformes communautaires pour ROS incluent:
answers.ros.org: Forum de questions-réponses.wiki.ros.org: Documentation et tutoriels.discourse.ros.org: Forum pour les discussions et annonces.index.ros.org: Index des ressources ROS.packages.ros.org: Répertoire des paquets ROS.
Comparaison ROS et ROS2
ROS1 a été conçu pour le robot PR2, un système autonome doté de ressources informatiques importantes et d'une connectivité filaire fiable. Cependant, avec l'essor de divers types de robots aux contraintes variées (systèmes embarqués, environnements perturbés, applications commerciales, conduite autonome, robotique spatiale), les limitations de ROS1 sont devenues apparentes.
ROS2 a été développé pour répondre à ces défis, offrant les avantages suivants :
- Systèmes multi-robots : Facilite la communication et la collaboration entre robots.
- Multiplateforme : Supporte Linux, Windows, MacOS, RTOS et microcontrôleurs (MCU).
- Temps réel : Fournit une base pour les exigences de contrôle et de calcul en temps réel.
- Connectivité réseau : Assure l'intégrité et la sécurité des données, même dans des conditions réseau difficiles.
- Industrialisation : Adapté aux applications commerciales, nécessitant une stabilité et une robustesse accrues.
- Gestion de projet : Intègre des outils pour un cycle de développement complet (conception, développement, débogage, test, déploiement).
ROS2 a subi une refonte complète par rapport à ROS1 :
- Architecture système : Abandon du ROS Master centralisé au profit d'une architecture distribuée basée sur DDS, éliminant le point de défaillance unique.
- API logicielle : Nouvelle conception des API, intégrant les standards C++ modernes et les caractéristiques de Python 3, ce qui rend le code ROS1 non directement compatible mais facilite la migration.
- Système de build : Remplacement de
rosbuildetcatkinparamentetcolconpour une compilation plus efficace, notamment pour les grands projets et ceux utilisant Python.
Introduction à DDS
Data Distribution Service (DDS) est un standard de communication middleware pour l'Internet des Objets (IoT). Plusieurs implémentations DDS existent (par exemple, OpenSplice, FastRTPS). Pour surmonter les problèmes d'interfaçage entre les différentes implémentations DDS, ROS2 introduit le ROS Middleware Interface (RMI). RMI définit une interface standard pour les opérations de communication, permettant aux fournisseurs DDS de créer des adaptateurs. Les utilisateurs peuvent ainsi changer d'implémentation DDS sans modifier leur code, garantissant la réutilisabilité logicielle.
L'intégration de DDS rend ROS2 plus stable et flexible, permettant aux développeurs de se concentrer davantage sur les fonctionnalités de leurs applications robotiques.
Installation de ROS2
Les étapes suivantes décrivent l'installation de ROS2 sur Ubuntu 20.04 (les étapes sont similaires pour d'autres versions).
1. Configuration de l'encodage
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
2. Ajout du dépôt ROS2
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
Si une erreur de connexion se produit avec raw.githubusercontent.com, modifiez le fichier /etc/hosts.
3. Installation de ROS2
sudo apt update
sudo apt upgrade
sudo apt install ros-foxy-desktop
4. Configuration de l'environnement
source /opt/ros/foxy/setup.bash
echo " source /opt/ros/foxy/setup.bash" >> ~/.bashrc
Test de ROS2
Pour vérifier le bon fonctionnement de la communication DDS :
- Lancez un nœud publisher dans un premier terminal :
ros2 run demo_nodes_cpp talker
- Lancez un nœud subscriber dans un second terminal :
ros2 run demo_nodes_py listener
L'affichage répété de "hello world" indique que la communication fonctionne.
Commandes ROS
Les commandes principales pour interagir avec ROS2 incluent :
- Lancer un nœud :
ros2 run <package_name> <node_name>(ex:ros2 run turtlesim turtlesim_node) - Lister les nœuds :
ros2 node list - Afficher des informations sur un nœud :
ros2 node info <node_name>(ex:ros2 node info /turtlesim) - Lister les topics :
ros2 topic list - Afficher les messages d'un topic :
ros2 topic echo <topic_name>(ex:ros2 topic echo /turtle1/pose)
Configuration de l'environnement de développement
Pour le développement avec VS Code, les plugins suivants sont recommandés :
- Python
- C/C++
- CMake
- vscode-icons
- ROS
- Msg Language Support
- URDF
- Markdown All in One