Parcours gratuit · étape 2 sur 3 · 30 min · 7 chapitres
ROS 2, le langage commun des robots
Un robot, c'est des capteurs, des moteurs et beaucoup de logiciels qui doivent se parler. ROS 2 leur donne une façon commune de le faire, et des milliers de briques prêtes à l'emploi pour ne pas tout réécrire. Voici comment il voit un robot, et à quoi ressemble votre premier programme.
Chapitre 1
Une brève histoire
- 2007
Né à Stanford, ROS est développé chez Willow Garage. Le but : arrêter de réinventer la roue dans chaque laboratoire.
- 2010
Première distribution, Box Turtle, et le robot PR2 confié à des universités. La communauté décolle.
- 2012
Création de l'Open Source Robotics Foundation, qui reprend ROS et le simulateur Gazebo.
- 2017
ROS 2 Ardent, première version de ROS 2 : bâti sur DDS, pensé pour l'industrie, le temps réel, la sécurité et les flottes de robots.
- 2024
ROS 2 Jazzy, version à support long (jusqu'en 2029), avec Gazebo Harmonic. C'est celle que vous utilisez ici.
- 2025
Fin de vie de ROS 1 (Noetic). Les nouveaux projets se font en ROS 2.
Chapitre 2
Un robot, vu comme un graphe
ROS 2 découpe le logiciel d'un robot en nœuds : de petits programmes qui font chacun une seule chose. Ils échangent des messages sur des topics, des canaux nommés comme /scan ou /cmd_vel. L'ensemble forme un graphe. Voici celui du robot de livraison que vous construirez dans les parcours :
Un nouveau lidar ? Seul son nœud change. Les autres lisent toujours /scan.
Un nœud de cartographie s'abonne à /scan sans rien changer au reste.
On lance un nœud seul, on lui envoie des messages, on regarde ses réponses.
Chapitre 3
Ce qui circule : les messages
Chaque topic transporte un seul type de message, défini une fois pour toutes et partagé par tout l'écosystème. Pour faire bouger un robot mobile, on publie sur /cmd_vel un message geometry_msgs/msg/Twist : une vitesse d'avance et une vitesse de rotation.
D'autres types reviennent sans cesse : sensor_msgs/msg/LaserScan pour un lidar, sensor_msgs/msg/Image pour une caméra, nav_msgs/msg/Odometry pour la position estimée. Parce que tout le monde utilise les mêmes, un pilote de lidar écrit par un fabricant fonctionne avec la navigation écrite par un autre.
Chapitre 4
Un premier nœud, en quelques lignes
Voici un nœud complet, en Python : il publie dix fois par seconde une commande qui fait avancer le robot en tournant doucement à gauche.
import rclpy
from geometry_msgs.msg import Twist
from rclpy.node import Node
class Avance(Node):
def __init__(self):
super().__init__('avance') # le nom du nœud
self.commande = self.create_publisher(Twist, '/cmd_vel', 10)
self.create_timer(0.1, self.publier) # 10 fois par seconde
def publier(self):
msg = Twist()
msg.linear.x = 0.3 # avance à 0,3 m/s
msg.angular.z = 0.5 # tourne à gauche
self.commande.publish(msg)
def main():
rclpy.init()
rclpy.spin(Avance()) # tourne jusqu'à Ctrl+C
create_publisher(Twist, '/cmd_vel', 10): le nœud annonce qu'il publiera desTwistsur/cmd_vel, en gardant au plus 10 messages en attente ;create_timer(0.1, self.publier): ROS 2 appellepublier()toutes les 0,1 seconde ;rclpy.spin(): le nœud attend les événements (minuteries, messages reçus) et y répond, jusqu'à son arrêt.
Le nœud ne sait pas qui l'écoute : un robot simulé, le vrai robot, ou un outil qui affiche les messages. C'est tout l'intérêt. Le même nœud s'écrit aussi en C++, avec la bibliothèque rclcpp.
Chapitre 5
Explorer un robot qui tourne
Quand des nœuds tournent, la commande ros2 permet de les observer depuis un terminal, sans écrire de code. C'est le premier réflexe face à un robot qui ne fait pas ce qu'on attend :
| Commande | Ce qu'elle montre |
|---|---|
ros2 node list | les nœuds en marche |
ros2 topic list | les topics existants |
ros2 topic echo /cmd_vel | les messages qui passent sur un topic, un par un |
ros2 topic hz /scan | la fréquence de publication : un capteur qui ralentit se voit tout de suite |
ros2 node info /avance | ce qu'un nœud publie, ce qu'il écoute, ses services |
ros2 interface show geometry_msgs/msg/Twist | la définition d'un type de message, champ par champ |
Chapitre 6
Du code au robot
Les nœuds se rangent dans des packages, eux-mêmes rangés dans un workspace. Une commande, colcon build, compile et installe le tout ; une autre, ros2 run ou ros2 launch, démarre les nœuds.
Le même code tourne dans Gazebo, le simulateur, et sur le robot réel. On développe et on teste d'abord en simulation, sans risque pour le matériel, puis on passe au robot. Dans les parcours, le lab en ligne vous donne tout cela dans le navigateur : terminal, éditeur, Gazebo et RViz.
Chapitre 7
Où on le trouve aujourd'hui
Les cas pratiques de la plateforme s'inspirent de ces usages.
Robots mobiles en entrepôt, qui naviguent avec Nav2.
Bras manipulateurs pilotés avec MoveIt et ros2_control.
Autoware, la pile de conduite autonome open source, est bâtie sur ROS 2.
Robots agricoles, rovers d'exploration, drones et prototypes de laboratoire.
Les idées clés, en une minute
- nœud
- Un programme qui fait une chose : lire un lidar, piloter les roues.
- topic
- Un canal nommé : le lidar publie, qui veut s'abonne.
- message
- Un type partagé par tous : Twist pour une vitesse, LaserScan pour un lidar.
- service · action
- Une question et sa réponse, ou une tâche longue avec suivi.
- package · workspace
- Les nœuds se rangent en packages, compilés avec colcon build.
- simulation
- Gazebo fait vivre le robot avant qu'il existe pour de vrai.
Testez-vous
Quatre questions pour vérifier ce que vous avez retenu. Réfléchissez, puis ouvrez la réponse.
On remplace le lidar du robot par un autre modèle. Quels nœuds faut-il modifier ?
Seulement le nœud pilote du lidar. Tant qu'il publie toujours des LaserScan sur /scan, l'arrêt d'urgence et la navigation ne voient pas la différence.
Dans un message Twist, quel champ fait tourner le robot sur lui-même ?
angular.z, la vitesse de rotation autour de l'axe vertical, en rad/s. Positive, le robot tourne à gauche. linear.x le fait avancer.
Le robot ne bouge pas. Quelle commande lancer d'abord pour voir si une commande de vitesse arrive ?
ros2 topic echo /cmd_vel : si aucun message ne s'affiche, personne ne publie de commande ; s'ils arrivent, le problème est du côté du nœud qui pilote les roues.
Que fait colcon build ?
Il compile et installe les packages du dossier src/ du workspace dans install/. On charge ensuite install/setup.bash pour que ros2 run les trouve.
Parcours gratuit · étape suivante
Linux pour la robotique
Le terminal dans le lab en ligne : se déplacer, manipuler des fichiers, droits d'exécution, variables d'environnement et processus, puis un vrai script de robot à faire démarrer. Avec un compte gratuit, sans carte bancaire.
Prêt à faire rouler votre premier robot ?
Le premier module fait rouler le robot de livraison simulé dans votre navigateur, avant même d'écrire une ligne de ROS. Puis vous écrivez vos propres nœuds, comme celui de cette page.