#explorebycreative Episode 5 : Le Robot Operating System (ROS)
Dans cet article, nous vous présentons le Robot Operating System (ROS, prononcé "Ross"), un ensemble de librairies et outils open-source dédiés à la robotique. Sans être un OS au sens classique du terme, ROS est un middleware qui permet la communication entre la couche matérielle d'un robot (capteurs, actionneurs, micro-contrôleurs) et la couche logicielle haut niveau exposée à l'opérateur. En plus de cette fonction initiale, ROS propose une architecture flexible qui permet d'intégrer de nombreux outils de simulation, monitoring, etc. Depuis le début de son développement, ROS a fédéré une vaste communauté d'acteurs de la robotique open-source pour s'imposer comme un outil incontournable du domaine.
Communauté
Une des forces majeures de ROS est la communauté que le projet a su constituer au cours de son développement : ROS adopte pleinement une philosophie open-source, encourageant la publication par la communauté des outils développés pour des projets spécifiques. La possibilité de développer des paquets ROS en C++ ou en Python en fait un outil polyvalent, aussi bien pour des projets de prototypage que pour l'optimisation de performance sur des systèmes existants, et sans cesse enrichi par les apports des chercheurs, ingénieurs, amateurs et industriels qui s'en servent pour leurs travaux. Cette adoption massive de ROS fait aussi subir à son architecture actuelle de nouvelles contraintes, particulièrement en termes de sécurité et de fiabilité pour les applications industrielles de pointe où il commence à être déployé : conduite autonome, robotique chirurgicale, robotique humanoïde, robotique spatiale, robotique sous-marine, drones... Ce sont ces nouvelles applications qui guident le développement de ROS Industrial et plus récemment de ROS2, qui reprennent les idées fondatrices de ROS1 en améliorant l'implémentation du middleware pour le rendre conforme aux derniers standards de l'industrie. Toutes ces informations et la documentation détaillée de ROS se retrouvent sur https://www.ros.org/ .
Concepts fondamentaux
Pour aller plus loin, l'architecture de communication de ROS est basée sur les concepts fondamentaux suivants :
- un nœud est un processus isolé, dédié à une tâche spécifique, qui peut communiquer avec les autres nœuds du système
- la communication est assurée par une architecture publish/subscribe où chaque nœud peut publier des messages sur un topic (c'est à dire un canal de communication dédié) : tous les nœuds qui écoutent ce topic sont alors notifiéset peuvent intégrer les nouvelles données
- un nœud peut aussi proposer un service, auquel cas il répond directement aux requêtes de nœuds clients.
Prenons un exemple de système robotique très simple, constitué par exemple de :
- un robot à roues capables de suivre des consignes de vitesse (une voiture RC, un aspirateur robot...)
- une manette de console pour le contrôler manuellement
- une caméra fixée sur le robot
On pourrait contrôler ce système avec ROS en définissant les nœuds suivant :
- un nœud connecté à la manette qui traduit l'état de la manette en un message publié régulièrement sur un topic "/manette"
- un nœud connecté aux moteurs du robot qui écoute le topic "/manette" et envoie une consigne de vitesse aux moteurs selon l'état des joysticks
- un nœud connecté à la caméra proposant un service "/capture" qui renvoie au nœud client une image de la caméra
- enfin, un nœud de mémorisation, qui écoute le topic "/manette" pour détecter si un bouton est pressé par exemple, et envoie une requête au service "/capture" avant de stocker l'image renvoyée dans la mémoire
ROS pour Explore
Pour le projet Explore, nous utilisons une combinaison de paquets ROS existants et de paquets développés en interne pour les besoins spécifiques du projet. Ces paquets seront à terme publiés en open-source.
Les paquets existants que nous utilisons sont essentiellement ceux qui nous servent à interfacer les différents périphériques que nous utilisons au contrôle haut niveau. Nous utilisons aussi une implémentation open-source pour la cartographie de l'environnement et la localisation, pour nous concentrer sur la stratégie d'exploration à adopter à partir de ces données. Parmi les paquets les plus utiles, on peut citer :
- rplidar : permet de lire les données du capteur LiDAR
- hector_slam : cartographie et localisation à partir de données LiDAR
- rosserial : communication entre ROS et les micro-contrôleurs type Arduino
- joy : lecture des données d'une manette de console
- ros_tcp_endpoint : communication avec le moteur Unity pour la simulation
Nos paquets se concentrent sur les problématiques de planification et de réaction aux nouvelles données, nous les discuterons plus en détails dans un prochain post !
N'oubliez pas, abonnez-vous ! #explorebycreative sur la page LinkedIn du groupe