ROS2 et ROS : comparaison

ROS2 : qu’est-ce qui change par rapport à ROS ?

Cette entrée a été publiée dans Tutoriels en robotique, et marquée avec , , , , , , , le par .

Il n’existe, aujourd’hui, que deux versions du middleware ROS : ROS et ROS2. La première version de ROS est parfois appelée ROS1. Dans cet article nous appellerons cette première version « ROS », et la deuxième version « ROS2 ».

Il nous semble important de rappeler que ROS2 est actuellement en cours de développement. Certains packages ont déjà été publiés mais la plupart d’entre eux ne sont pas encore compatibles. De plus, certaines fonctionnalités de ROS2 ne sont pas encore disponibles.

Nous vous recommandons de vous tenir informés sur les nouvelles fonctionnalités de ROS2, et de le tester, en vue de la disponibilité prochaine d’une version stable et complète.

Retour en arrière : qu’est-ce que ROS ?

Robot Operating System (ROS) est un ensemble de bibliothèques logicielles et d’outils open source qui vous aident à créer des applications robotiques. Des pilotes aux algorithmes de pointe, en passant par les puissants outils de développement, ROS a ce qu’il vous faut pour votre prochain projet robotique.

Pour plus d’informations, vous pouvez lire notre précédent article à propos de ROS, il vous donnera un aperçu de ce qu’est ROS, de ses protocoles de communication et des outils disponibles pour optimiser vos développements.

Pour tester ROS2, il vous faudra d’abord installer Ubuntu (si ce n’est pas déjà fait). Attention à la version de Ubuntu que vous installez, en fonction de cette version, la distribution ROS/ROS2 changera :

Version Ubuntu Distribution ROS Distribution ROS2
Ubuntu 16.04 – Xenial Kinetic Bouncy & Crystal
Ubuntu 18.04 – Bionic Melodic Crystal & Dashing
Ubuntu 19.04 – Disco X X

Dans les différents liens ci-dessus, vous trouverez d’autres tutoriels pour installer ROS.
Si vous souhaitez essayer des versions précédentes ou plus récentes, vous pouvez utiliser Docker images .

Docker facilite la création, le déploiement et l’exécution des applications en utilisant des conteneurs. Les conteneurs permettent d’empaqueter une application avec des bibliothèques et d’autres dépendances.

Docker fonctionne un peu comme une machine virtuelle. Mais plutôt que de créer un système d’exploitation virtuel complet, Docker permet aux applications d’utiliser le même noyau Linux que le système sur lequel elles fonctionnent. Un conteneur Docker exécute une image Docker, qui est un fichier, composé de plusieurs couches de bibliothèques et dépendances.

Nous vous conseillons de travailler sur les images ROS2 Docker lors de vos tests, afin de ne pas risquer de déstabiliser votre environnement ROS. Une fois que votre ordinateur fonctionne sous Ubuntu et que ROS est prêt à être utilisé, rendez-vous sur ROS tutorials pour débuter.

L’histoire de ROS pour expliquer ROS2

L’environnement ROS a été développé par Willow Garage pour son robot PR2, un robot humanoïde capable de naviguer de façon autonome dans un environnement connu.

A cette époque, ses créateurs savaient que PR2 ne serait pas le seul robot sur le marché. Plutôt que de développer un programme spécifique pour le PR2, ils ont dévidé d’implémenter un logiciel généraliste et adaptable pour pouvoir l’améliorer ou le modifier ultérieurement. Ils ont donc travaillé sur un middleware, ROS, en définissant des niveaux d’abstraction utilisables sur d’autres robots.

Ils se sont basés pour cela sur certaines des caractéristiques du robot PR2 :

  • Un seul robot
  • Pas d’exigences en temps réel
  • Excellente connectivité réseau
  • Flexibilité maximale (fonctionne aussi bien sur des bases mobiles que sur des humanoïdes par exemple)

Aujourd’hui, ROS est utilisé non seulement sur des robots PR2 et des robots similaires, mais aussi sur des robots mobiles de toutes tailles, des humanoïdes, des bras industriels, des véhicules terrestres extérieurs et des véhicules aériens.

Depuis, ROS a été adopté dans de multiples domaines, au-delà de la communauté de recherche universitaire à laquelle il s’adressait initialement.

De plus en plus de robots basés sur ROS sont proposés sur le marché par des fabricants spécialisés et les agences gouvernementales investissent sur ROS pour une utilisation dans leurs systèmes.

Tous ces usages ont fini par se heurter aux limites de ROS, conçu en fonction des caractéristiques de PR2 (voir ci-dessus). Ainsi, la communauté a estimé pouvoir développer une meilleure plate-forme en adéquation avec les nouvelles exigences des robots :

  • Flottes de robots en collaboration
  • Logiciel embarqué sur de petites cartes électroniques
  • Systèmes en temps réel
  • Réseaux instables
  • Environnements de production

Une autre raison d’implémenter ROS2 est de profiter de l’opportunité d’améliorer les API orientées utilisateur. Ainsi, il sera possible de créer de nouvelles API incorporant le meilleur de l’expérience communautaire avec les API de première génération.

Pourquoi ne pas juste améliorer ROS ?

Les changements décrits ci-dessus pourraient effectivement être intégrés dans le noyau de code existant. Cette option a d’ailleurs été envisagée, mais compte tenu de la nature intrusive des changements, la modification du système actuel de ROS risquerait de causer de graves dysfonctionnements dans les applications développées par les nombreux membres de la communauté.

ROS devrait donc rester le même, tandis que ROS2 sera construit sous la forme d’un ensemble de packages qui pourront être installés en parallèle et sans interférer avec ROS.

Qui devrait passer sous ROS2 dès à présent ?

Chercheurs A moins que votre publication ne porte sur les performances ou les fonctionnalités de ROS2, vous devriez vous en tenir à ROS pour l’instant.

 Etudiants Vous devriez continuer à travailler avec ROS pour l’instant en raison du manque de packages compatibles et de la stabilité globale.
ROS2 sera prêt à être adopté en masse dans un avenir proche.ROS et ROS2 partageant de nombreux concepts, vous pourrez mettre à profit vos acquis lors du passage à ROS2.
 Enseignants Vous devriez continuer à enseigner ROS pour l’instant, tout en restant au fait des nouveautés de ROS2.
Nous vous recommandons toutefois de vous familiariser avec ROS2 au moyen des différents tutoriels disponibles, afin d’être prêts lorsque la version définitive de ROS2 sera publiée.En terme d’équipement, la plate-forme TurtleBot 3 peut constituer une option intéressante, du fait de sa compatibilité avec ROS et ROS2.
Chercheurs A moins que votre publication ne porte sur les performances ou les fonctionnalités de ROS2, vous devriez vous en tenir à ROS pour l’instant.
 Entreprises  Vous devriez vraiment envisager de passer à ROS2 pour réduire la quantité de transfert de code à l’avenir. Confiez le projet à des utilisateurs expérimentés de ROS.
 Fabricants  C’est le bon moment pour changer. ROS2 Dashing est la première version de LTS, il est donc maintenant possible de commencer à porter les pilotes sans craintes.

Quelques différences importantes entre ROS et ROS2

Applications ROS ROS2
Plates-formes Testé sur Ubuntu
Maintenu sur d’autres versions de Linux ainsi que sur OS X
Actuellement testé et supporté sur Ubuntu Xenial, OS X El Capitan ainsi que Windows 10
C++ C++03 // n’utilise pas pas les capacités de C++11 dans ses API Utilise principalement C+++11Commencez et prévoyez d’utiliser C++14 & C+++17
Python Cible Python 2  >= Python 3.5
Middleware Format de sérialisation personnalisé (protocole de transport + mécanisme de découverte central) Actuellement, toutes les implémentations de cette interface sont basées sur le standard DDS
Synchroniser la durée et les mesures de temps La durée et les types de temps sont définis dans les bibliothèques clientes, ils sont codés en C++ et Python Ces types sont définis comme des messages et sont donc cohérents d’un langage de programmation à l’autre
Composants avec cycle de vie Chaque nœud a généralement sa propre fonction principale. Le cycle de vie peut être utilisé par des outils comme roslaunch pour démarrer un système composé de nombreux composants de manière déterministe
Modèle multi-threads Le développeur ne peut choisir qu’entre une exécution mono-thread ou multi-thread. Des modèles d’exécution plus fins sont disponibles et des exécuteurs personnalisés peuvent être facilement implémentés.
Noeuds multiples Il n’est pas possible de créer plus d’un nœud dans un processus. Il est possible de créer plusieurs nœuds dans un processus.
roslaunch Les fichiers de roslaunch sont définis en XML avec des capacités très limitées. Les fichiers de lancement sont écrits en Python ce qui permet d’utiliser des logiques plus complexes comme les conditionnels, etc.

Quel DDS pour ROS2

ROS2 utilise un DDS (Data Distribution Service) pour la publication et la souscription au lieu d’un gestionnaire de messages personnalisé. Cela permet une amélioration des performances de transmission avec les mises à jour du DDS. Le DDS pouvant affecter le comportement de ROS2, il vous faudra choisir la version correspondant aux spécifications de votre projet parmi les différents DDS existants.

Voici quelques entités DDS :

  • FastRTPS / eProsima
  • Vortex OpenSplice / ADLINK Technology
  • Connext / RTI
  • CoreDX / Twin Oaks
  • Cyclone DDS / Eclipse

Des informations complémentaires sur les DDS sont disponibles dans l’article Rover Robotics et sur ROS2 on DDS (voir ci-dessous).

Gestion des noeuds dans ROS2

L’une des principales caractéristiques de ROS2, la gestion des cycles de vie des noeuds, permet un meilleur contrôle de l’état du système ROS. En effet, il permettra à roslaunch de s’assurer que tous les composants ont été instanciés correctement avant de permettre à un composant de commencer à exécuter son comportement. Il permettra également de redémarrer ou de remplacer les nœuds durant l’exécution.
C’est une caractéristique essentielle pour la sécurité du robot.

Mise en œuvre de ROS2 – Plateforme/Tutoriels

Chaque robot et composant compatible avec ROS sera compatible avec ROS2 dès que les pilotes, les packages et le SDK seront disponibles pour les implémentations ROS2.

Robotis est l’une des premières entreprises à s’être lancée dans ROS2. Dans le passé. Ses roboticiens ont d’ailleurs développé des tutoriels de qualité pour apprendre ROS sur le premier TurtleBot.

Avec les TurtleBot 3 Burger et Turtlebot 3 Waffle Pi , Robotis a travaillé sur un tutoriel pour découvrir ROS 2 et mettre en oeuvre la navigation des robots :

Robotis a développé son propre package pour le TurtleBot 3. Sur leur GitHub, ils ont lié les pages wiki et les codes open source. TurtleBot 3 constitue ainsi une très bonne plateforme pour appréhender ROS2, aussi bien en tant qu’utilisateur débutant que développeur aguerri.

Si vous avez encore un TurtleBot 2 à votre disposition, vous pouvez aussi utiliser ROS2. En effet, Robotis a publié une demo ROS2 pour TurtleBot2.

Comment migrer depuis ROS vers ROS2

Il existe deux types différents de migrations de package ROS :

  • Migrer le code source d’un package existant de ROS à ROS2 avec l’intention qu’une partie significative du code source reste identique ou au moins similaire.
  • Implémenter la même fonctionnalité ou une fonctionnalité similaire d’un package ROS pour ROS2 mais en supposant que le code source sera significativement différent.

Au moment de la rédaction de cet article, le premier type de migration du code source est encore très peu documenté.

Veuillez consulter cet article article qui se concentre sur le second cas et décrit les étapes à suivre pour migrer un paquet ROS vers ROS2. Cependant, il ne s’agit pas d’une instruction de migration pas à pas, mais plutôt d’indications destinées à des utilisateurs expérimentés.

Ressources pour le middleware ROS2

Vous souhaitez aller plus loin ?
Voici quelques ressources utiles pour passer à l’étape suivante !

Ressources Officielles

Tutoriels pour ROS2

L’entreprise Rover Robotics a travaillé sur ROS2, ils ont posté sur leur blog un tutoriel sur leurs dernières réalisations pour implémenter la navigation sur ROS2.
Dans cet article, vous trouverez de nombreuses informations utiles sur les derniers dysfonctionnements de ROS2, les avantages et inconvénients des différents DDS, comment lancer leur démo et d’autres conseils d’implémentation.

Vous pouvez également consulter le site « The Construct », où sont publiés quelques articles sur la configuration de ROS2.

Gazebo , l’environnement de simulation bien connu, est disponible sur ROS2. Vous trouverez des informations sur cet article .

Enfin, vous pouvez consulter le GitHub de Gazebo.

With their latest robots,TurtleBot 3 Burger and Turtlebot Waffle Pi , they have worked on a tutoriel to discover ROS2 and implement the navigation.
TurtleBot 3 – Installation / TurtleBot 3 – GitHub

Robotis developed their own package for the TurtleBot 3. On their GitHub, they have linked the wiki pages and the open source codes.
This tutorial will guide you through your discovery of ROS2. Turtlebot3 is a very interesting robot to start with ROS2 (or ROS).

If you still have a TurtleBot2 at your disposal, you can use ROS2 as well. Indeed, Robotis released a ROS2 TurtleBot2 Demo.
Investing in a turtlebot3 is a good choice due to its compatibility with ROS and ROS2.