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

  1. 2007

    Né à Stanford, ROS est développé chez Willow Garage. Le but : arrêter de réinventer la roue dans chaque laboratoire.

  2. 2010

    Première distribution, Box Turtle, et le robot PR2 confié à des universités. La communauté décolle.

  3. 2012

    Création de l'Open Source Robotics Foundation, qui reprend ROS et le simulateur Gazebo.

  4. 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.

  5. 2024

    ROS 2 Jazzy, version à support long (jusqu'en 2029), avec Gazebo Harmonic. C'est celle que vous utilisez ici.

  6. 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 :

Le graphe du robot de livraison : le lidar publie /scan, lu par arret_urgence et navigation ; l'odométrie publie /odom ; arret_urgence et navigation publient vers le nœud base, qui commande les roues
Remplacer une pièce

Un nouveau lidar ? Seul son nœud change. Les autres lisent toujours /scan.

Ajouter une fonction

Un nœud de cartographie s'abonne à /scan sans rien changer au reste.

Tester un morceau

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.

Le robot vu de dessus : linear.x est la vitesse d'avance en m/s, angular.z la vitesse de rotation en rad/s ; à côté, le contenu d'un message Twist avec x à 0.3 et z à 0.5

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.

Pythonavance.py
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 des Twist sur /cmd_vel, en gardant au plus 10 messages en attente ;
  • create_timer(0.1, self.publier) : ROS 2 appelle publier() 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 :

CommandeCe qu'elle montre
ros2 node listles nœuds en marche
ros2 topic listles topics existants
ros2 topic echo /cmd_velles messages qui passent sur un topic, un par un
ros2 topic hz /scanla fréquence de publication : un capteur qui ralentit se voit tout de suite
ros2 node info /avancece qu'un nœud publie, ce qu'il écoute, ses services
ros2 interface show geometry_msgs/msg/Twistla 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.

Du code au robot : src/ contient les packages, colcon build compile et installe, on charge install/setup.bash, puis ros2 run ou ros2 launch démarre les nœuds en simulation ou sur le robot réel

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.

Logistique

Robots mobiles en entrepôt, qui naviguent avec Nav2.

Industrie

Bras manipulateurs pilotés avec MoveIt et ros2_control.

Véhicules autonomes

Autoware, la pile de conduite autonome open source, est bâtie sur ROS 2.

Agriculture, espace, recherche

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.

Pratiquer dans le lab

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.

Commencer : Apprendre ROS 2 avec un robot mobile