Fondamentaux et configuration de ROS2

Chapitre IX ROS2-Humble

NomPropriétaireModifiéCréé
01 Introduction à ROS2Yujiang2026-01-09 14:032026-01-09 14:03
02 Installer HumbleYujiang2026-01-26 12:122026-01-09 14:03
03 Environnement de développement intégréYujiang2026-01-26 14:552026-01-09 14:24
04 Espace de travailYujiang2026-01-12 12:222026-01-09 14:25
05 PaquetYujiang2026-01-12 12:222026-01-09 14:26
06 NœudYujiang2026-02-13 13:282026-01-09 14:26
07 Communication de topicYujiang2026-02-13 13:292026-01-09 14:27
08 Communications de serviceYujiang2026-02-06 13:572026-01-09 14:27
09 Communications d'actionYujiang2026-01-27 14:482026-01-09 14:27
10 Transformation de coordonnées TF2Yujiang2026-01-27 14:552026-01-09 14:28

Maintenance du contenu...

01 Introduction à ROS2

1.1 Qu'est-ce que ROS 2

ROS 2 (Robot Operation System 2) est un cadre intermédiaire open-source pour le développement de logiciels robotiques. Bien que le nom contienne « systèmes d'exploitation », ROS 2 n'est en fait pas un système d'exploitation traditionnel, mais un référentiel de logiciels et d'outils qui aident les développeurs à créer des applications robotiques.

1.1.1 Définition de ROS 2

ROS 2 fournit le service du système d'exploitation, qui transmet généralement les messages entre les processus et exécute la gestion de paquets. C'est un cadre distribué qui permet aux applications de contrôler le matériel robotique, de traiter les données des capteurs, d'exécuter des algorithmes et de communiquer avec d'autres applications ou systèmes.

1.1.2 Objectifs de conception pour ROS 2

ObjectifPourquoi cela compte
Compatibilité temps réelMeilleure prise en charge des charges de travail robotiques à faible latence
Déploiement distribuéPlusieurs nœuds peuvent s'exécuter à travers de nombreux processus ou machines
Fiabilité et maintenabilitéPlus adapté à la robotique de production que les hypothèses de l'ère ROS 1
SécuritéPrend en charge la communication sécurisée et le contrôle d'accès
Prise en charge multiplateformeFonctionne sur Linux, cibles embarquées et autres environnements modernes

1.1.3 Valeurs fondamentales de ROS 2

  1. Conception modulaire : code organisé en paquets séparés faciles à maintenir, réutiliser et distribuer

  2. Communication distribuée : architecture informatique distribuée multiprocesseur, multimachine

  3. Riches écosystèmes : contenant un grand nombre de paquets fonctionnels open source et d'outils de développement

  4. Communautés actives : une contribution soutenue des développeurs mondiaux et un soutien actif des entreprises commerciales

1.2 Concept fondamental de ROS 2

1.2.1 Nœuds (Nodes)

Le nœud est l'unité de calcul la plus basique dans ROS 2. Un nœud est un processus utilisant l'API ROS 2 pour communiquer avec d'autres nœuds.

1.2.2 Topics

Le topic est le mécanisme pour la communication insulaire entre les nœuds, en utilisant la publication/abonnement (Pub/Sub).

CaractéristiqueDescription
AsynchroneLes éditeurs et les abonnés ne se bloquent pas mutuellement
Un à plusieursPlusieurs abonnés peuvent consommer le même topic
Faiblement coupléLes nœuds ne s'accordent que sur le nom du topic et le type de message
Convivial pour le streamingBien adapté aux données de capteurs, à la télémétrie et au contrôle continu

Exemple de topic typique :

Nom du sujetType de messageObjectif
/cmd_velgeometry_msgs/msg/TwistCommande de contrôle de vitesse
/odomnav_msgs/msg/Odometrydonnées kilométriques
/scansensor_msgs/msg/LaserScanDonnées radar laser
/camera/image_rawsensor_msgs/msg/ImageDonnées d'image originales

1.2.3 Services

Les services sont le mécanisme pour la communication synchronisée entre les nœuds, en utilisant le modèle client/serveur.

1.2.4 Actions

Les actions sont des mécanismes de communication utilisés pour gérer les affectations à long terme afin de prendre en charge la rétroaction et l'annulation des affectations.

StreamObjectif
GoalDécrit la tâche à exécuter
FeedbackRapporte la progression pendant l'exécution de la tâche
ResultRenvoie le résultat final lorsque la tâche se termine

1.2.5 Paramètres (Parameters)

Les paramètres sont des valeurs de configuration pour les nœuds, qui peuvent être définies au démarrage des nœuds ou modifiées dynamiquement pendant l'exécution.

Code
Plain Text
Node: camera_node
├── Parameter: frame_id = "camera_link"
├── Parameter: width = 640
├── Parameter: height = 480
├── Parameter: fps = 30
└── Parameter: exposure_mode = "auto"

Dynamic update example:
$ ros2 param set camera_node exposure_mode "manual"

1.3 Structure de ROS 2

1.3.2 Bibliothèques client (Client Libraries)

BibliothèqueLangageUtilisation typique
rclcppC++Nœuds de production haute performance
rclpyPythonPrototypage rapide et scripting
rclcCMicro-ROS et systèmes à ressources limitées
rcljavaJavaIntégrations ROS 2 basées sur JVM
rclnodejsJavaScript / Node.jsIntégrations Web et d'outils
cpp
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

class Publisher : public rclcpp::Node {
public:
  Publisher() : Node("publisher") {
  publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
  timer_ = this->create_wall_timer(
  std::chrono::milliseconds(500),
  [this]() { this->timer_callback(); });
  }
private:
  void timer_callback() {
  auto msg = std_msgs::msg::String();
  msg.data = "Hello ROS 2";
  publisher_->publish(msg);
  }
  rclcpp::TimerBase::SharedPtr timer_;
  rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
};
python
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class Publisher(Node):
  def __init__(self):
  super().__init__('publisher')
  self.publisher_ = self.create_publisher(String, 'topic', 10)
  self.timer = self.create_timer(0.5, self.timer_callback)

  def timer_callback(self):
  msg = String()
  msg.data = 'Hello ROS 2'
  self.publisher_.publish(msg)

1.3.3 RMW et DDS

Implémentation RMWBackend DDSOpen source/commercialCaractéristiques
rmw_cyclonedds_cppCycloneDDSOpen SourceSélection par défaut, efficacité légère
rmw_fastrtps_cppFastDDSOpen SourceTrès fonctionnel et hautement performant.
rmw_connext_cppRTI ConnextCommercialSupport de niveau industriel, le plus complet

1.4 Différences principales entre ROS 1 et ROS 2

1.4.2 Tableaux comparatifs détaillés

Dimensions relativesROS 1ROS 2
Communications intermédiairesProtocole personnalisé TCP/UDPProtocole standard DDS
Mécanismes de découverteROS Master (centralisé)Découverte de DDS (décentralisation)
Système de constructionCatkinColcon / Ament
Version PythonPython 2/3Python 3 uniquement
Systèmes d'exploitation pris en chargePrincipalement LinuxLinux / Windows / macOS / RTOS
Support en temps réelAucune assurance en temps réelPrise en charge du temps réel dur
Communications multiples robotiquesConfiguration supplémentaire requisePrise en charge native (ROS_DOMAIN_ID)
SécuritéPas de chiffrement ou d'authentificationPrend en charge le chiffrement, l'authentification, le contrôle d'accès
VersionNoetic (version finale)Humble, Iron, Jazzy...

1.5 Version de ROS 2

1.5.1 Historique des versions

Désignation de versionDate de sortieSystème pris en chargeStatut de supportDate limite
Ardent2017.12Ubuntu 16.04Terminé2019.04
Bouncy2018.06Ubuntu 16.04/18.04Terminé2019.09
Crystal2018.12Ubuntu 16.04/18.04Terminé2020.12
Dashing2019.05Ubuntu 16.04/18.04Terminé2021.05
Eloquent2019.11Ubuntu 18.04Terminé2021.11
Foxy2020.06Ubuntu 18.04/20.04Terminé2023.05
Galactic2021.05Ubuntu 20.04Terminé2022.11
Humble2022.05Ubuntu 22.04LTS2027.05
Iron2023.05Ubuntu 22.04Terminé2024.11
Jazzy2024.05Ubuntu 24.04LTS2029.05

1.5.3 Proposition pour la sélection d'une version

Utiliser la scèneVersion recommandéeRaison
Environnement de productionHumbleStable, support à long terme
Développement de nouveaux projetsJazzyDernière LTS, support à long terme
Étude/expérienceRecent ScrollFonctions récentes
Maintenance des anciens systèmesHumbleLa compatibilité est bonne.

03 Environnement de développement intégré

03 Environnement de développement intégré (IDE Setup)

3.1 Général

Une bonne configuration de l'environnement de développement peut améliorer considérablement l'efficacité du développement ROS 2. Ce chapitre fournira des informations détaillées sur la configuration de Visual Studio Code (VS Code) en tant qu'environnement de développement principal pour ROS 2, y compris l'installation de plugins, l'achèvement intelligent du code, la configuration de débogage, etc.

3.2 Installation de Visual Studio Code

bash
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install -y code
bash
sudo snap install --classic code
bash
code --version

3.3 Plugins requis

Nom du pluginÉditeurObjectif
ROSMicrosoftSupport ROS
C/C++MicrosoftSupport du langage C++
PythonMicrosoftSupport du langage Python
CMake ToolsMicrosoftSupport CMake
bash
code --install-extension ms-iot.vscode-ros
code --install-extension ms-vscode.cpptools
code --install-extension ms-python.python
code --install-extension ms-vscode.cmake-tools

3.4 Configuration de l'espace de travail ROS 2

bash
code ~/ros2_ws
json
{
  "configurations": [
  {
  "name": "Linux",
  "includePath": [
  "${workspaceFolder}/**",
  "/opt/ros/humble/include/**",
  "/usr/include/**"
  ],
  "defines": [],
  "compilerPath": "/usr/bin/gcc",
  "cStandard": "c17",
  "cppStandard": "c++17",
  "intelliSenseMode": "linux-gcc-x64",
  "compileCommands": "${workspaceFolder}/build/compile_commands.json"
  }
  ],
  "version": 4
}
bash
cd ~/ros2_ws
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -s build/compile_commands.json
json
{
  "python.autoComplete.extraPaths": [
  "${workspaceFolder}/install/*/lib/python3.10/site-packages",
  "/opt/ros/humble/lib/python3.10/site-packages"
  ],
  "python.analysis.extraPaths": [
  "${workspaceFolder}/install/*/lib/python3.10/site-packages",
  "/opt/ros/humble/lib/python3.10/site-packages"
  ],
  "python.formatting.provider": "black",
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": true
}

3.5 Configuration des tâches VS Code

json
{
  "version": "2.0.0",
  "tasks": [
  {
  "label": "colcon build",
  "type": "shell",
  "command": "colcon build --symlink-install",
  "group": {
  "kind": "build",
  "isDefault": true
  },
  "problemMatcher": []
  }
  ]
}

3.6 Configuration de débogage

json
{
  "version": "0.2.0",
  "configurations": [
  {
  "name": "ROS2: C++ Node",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/install/${input:packageName}/lib/${input:packageName}/${input:executableName}",
  "args": [],
  "cwd": "${workspaceFolder}",
  "MIMode": "gdb"
  }
  ]
}
RaccourcisFonctions
F5Démarrer le débogage
Ctrl+Shift+F5Redémarrer le débogage
Shift+F5Arrêter le débogage
F9Définir/fermer un point d'arrêt
F10Step Over
F11Step Into
Shift+F11Step Out

3.11 Installation de Terminator

bash
sudo apt install terminator

3.11.1 Lancement

Raccourci Ctrl+Alt+T

3.12 Utilisation de Git

bash
sudo apt install git
bash
git init
git add .
git commit
CommandeObjectif
git initCréer un nouveau dépôt local
git statusVérifier l'état actuel du dépôt
git add <file>Mettre en stage un fichier pour le prochain commit
git commit -m "message"Créer un nouveau snapshot avec un message
git diffAfficher les modifications non mises en stage
git logAfficher l'historique des commits
git remote -vLister les remotes configurés
git push -u origin mainPousser et définir la branche en amont
git pullRécupérer et fusionner les mises à jour distantes

3.13 Étapes suivantes

04 Espace de travail - Apprendre la gestion de l'espace de travail

05 Paquet fonctionnel - Créer un paquet fonctionnel

06 Nœud - Écrire le code du nœud

04 Espace de travail

04 Espace de travail (Workspace)

4.1 Vue d'ensemble de l'espace de travail

4.1.1 Qu'est-ce qu'un espace de travail ?

L'espace de travail est la structure de répertoire pour organiser et gérer les paquets fonctionnels dans ROS 2. C'est un répertoire racine contenant le code source, les produits de compilation et les documents d'installation et c'est l'environnement de base pour le développement ROS 2.

4.1.2 Structure du répertoire de l'espace de travail

ContenusObjectifSi Contrôle de version
Src/Stocker la source du paquet fonctionnelOui
build/Compiler les produits intermédiairesNon
Install/Fichier d'installation finalNon
log/Compiler et tester les journauxNon

4.1.3 Type de zone de travail

TypeExemple de cheminObjectif
Espace de travail système/opt/ros/humble/Logiciel ROS 2 installé
Espace de travail utilisateur~/ros2_ws/Espace de travail de développement personnel
Espace de travail de couverture~/overlay_ws/Étendre ou écraser les paquets existants

4.2 Création d'espaces de travail

bash
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
tree -L 2

4.3 Système compilateur Colcon

bash
sudo apt install -y python3-colcon-common-extensions
colcon --help
bash
cd ~/ros2_ws
colcon build
colcon build --packages-select <package_name>
colcon build --packages-skip <package_name>
bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Debug
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

4.4 Couverture d'espace de travail (Overlaying)

bash
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
source ~/overlay_ws/install/setup.bash

4.5 Paramètres environnementaux détaillés

bash
source install/setup.bash
echo $ROS_DOMAIN_ID
echo $AMENT_PREFIX_PATH
echo $LD_LIBRARY_PATH
bash
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

4.6 Gestion des paquets

bash
ros2 pkg list
ros2 pkg prefix <package_name>
find src -maxdepth 2 -name package.xml -exec dirname {} \;
bash
ros2 pkg xml <package_name>
ros2 pkg dependencies <package_name>
ros2 pkg list > packages_list.txt

4.7 Traduction incrémentielle

bash
colcon build
colcon build --packages-select <modified_package>
bash
colcon build --packages-select <package_name> --cmake-force-configure
rm -rf build install log
colcon build

4.8 Test et certification

bash
colcon test
colcon test --packages-select <package_name>
colcon test-result --all
colcon test-result --verbose

4.12 Étapes suivantes

1.05 Paquet - Apprendre à créer et gérer des paquets fonctionnels

2.06 Nœud - Préparation du premier nœud

05 Paquet

05 Paquets fonctionnels (Packages)

5.1 Résumé des paquets fonctionnels

5.1.1 Qu'est-ce qu'un paquet fonctionnel ?

Le paquet est l'unité de base du code organisationnel dans ROS 2. Il contient des codes sources, des fichiers de configuration, des fichiers de données, des scripts de construction et des documents pour des fonctions spécifiques.

5.1.3 Type de paquet fonctionnel

TypeSystème de constructionLangues principalesObjectif
ament_cmakeCMakeC++Nœuds C++, éléments mixtes
ament_pythonSetuptoolsPythonProjet Python pur
ament_cmake_pythonCMake + PythonMixteÉléments mixtes C++ et Python

5.2 Créer des paquets fonctionnels

bash
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake my_cpp_pkg
ros2 pkg create --build-type ament_cmake \
  --dependencies rclcpp std_msgs \
  my_robot_controller
ros2 pkg create --build-type ament_cmake \
  --dependencies rclcpp std_msgs geometry_msgs \
  --node-name my_node \
  --library-name my_library \
  my_cpp_pkg
bash
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python my_py_pkg
ros2 pkg create --build-type ament_python \
  --dependencies rclpy std_msgs \
  my_python_package
ros2 pkg create --build-type ament_python \
  --dependencies rclpy \
  --node-name my_node \
  my_py_pkg

5.3 Configuration package.xml

xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>my_package</name>
  <version>1.0.0</version>
  <description>My ROS 2 package description</description>
  <maintainer email="user@example.com">Your Name</maintainer>
  <license>Apache-2.0</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>std_msgs</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
  <build_type>ament_cmake</build_type>
  </export>
</package>
xml
<depend>rclcpp</depend>
<depend>rclpy</depend>
<depend>std_msgs</depend>
<depend>geometry_msgs</depend>
<depend>sensor_msgs</depend>
<depend>nav_msgs</depend>
<depend>tf2</depend>
<depend>tf2_ros</depend>
<depend>tf2_geometry_msgs</depend>

5.5 Configuration setup.py (Python)

python
from setuptools import setup

package_name = 'my_py_pkg'

setup(
  name=package_name,
  version='1.0.0',
  packages=[package_name],
  data_files=[
  ('share/ament_index/resource_index/packages',
  ['resource/' + package_name]),
  ('share/' + package_name, ['package.xml']),
  ],
  install_requires=['setuptools'],
  zip_safe=True,
  maintainer='Your Name',
  maintainer_email='user@example.com',
  description='My ROS 2 Python package',
  license='Apache-2.0',
  tests_require=['pytest'],
  entry_points={
  'console_scripts': [
  'my_node = my_py_pkg.my_node:main',
  ],
  },
)
python
entry_points={
  'console_scripts': [
  'talker = my_py_pkg.talker:main',
  'listener = my_py_pkg.listener:main',
  'camera_node = my_py_pkg.camera:main',
  ],
}

5.6 Compilation et installation des paquets

bash
cd ~/ros2_ws
colcon build --packages-select my_cpp_pkg
colcon build --packages-select my_cpp_pkg --event-handlers console_direct+
bash
colcon build --packages-select pkg1 pkg2 pkg3
colcon build --packages-skip pkg_to_skip
bash
colcon build --symlink-install
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

5.7 Confiance dans la gestion

bash
ros2 pkg dependencies my_package
ros2 pkg dependencies my_package --all
ros2 pkg dependents my_package
ros2 pkg xml my_package