Fondamentaux et configuration de ROS2
Chapitre IX ROS2-Humble
| Nom | Propriétaire | Modifié | Créé |
|---|---|---|---|
| 01 Introduction à ROS2 | Yujiang | 2026-01-09 14:03 | 2026-01-09 14:03 |
| 02 Installer Humble | Yujiang | 2026-01-26 12:12 | 2026-01-09 14:03 |
| 03 Environnement de développement intégré | Yujiang | 2026-01-26 14:55 | 2026-01-09 14:24 |
| 04 Espace de travail | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:25 |
| 05 Paquet | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:26 |
| 06 Nœud | Yujiang | 2026-02-13 13:28 | 2026-01-09 14:26 |
| 07 Communication de topic | Yujiang | 2026-02-13 13:29 | 2026-01-09 14:27 |
| 08 Communications de service | Yujiang | 2026-02-06 13:57 | 2026-01-09 14:27 |
| 09 Communications d'action | Yujiang | 2026-01-27 14:48 | 2026-01-09 14:27 |
| 10 Transformation de coordonnées TF2 | Yujiang | 2026-01-27 14:55 | 2026-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
| Objectif | Pourquoi cela compte |
|---|---|
| Compatibilité temps réel | Meilleure 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 multiplateforme | Fonctionne sur Linux, cibles embarquées et autres environnements modernes |
1.1.3 Valeurs fondamentales de ROS 2
-
Conception modulaire : code organisé en paquets séparés faciles à maintenir, réutiliser et distribuer
-
Communication distribuée : architecture informatique distribuée multiprocesseur, multimachine
-
Riches écosystèmes : contenant un grand nombre de paquets fonctionnels open source et d'outils de développement
-
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éristique | Description |
|---|---|
| Asynchrone | Les éditeurs et les abonnés ne se bloquent pas mutuellement |
| Un à plusieurs | Plusieurs 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 streaming | Bien adapté aux données de capteurs, à la télémétrie et au contrôle continu |
Exemple de topic typique :
| Nom du sujet | Type de message | Objectif |
|---|---|---|
| /cmd_vel | geometry_msgs/msg/Twist | Commande de contrôle de vitesse |
| /odom | nav_msgs/msg/Odometry | données kilométriques |
| /scan | sensor_msgs/msg/LaserScan | Données radar laser |
| /camera/image_raw | sensor_msgs/msg/Image | Donné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.
| Stream | Objectif |
|---|---|
| Goal | Décrit la tâche à exécuter |
| Feedback | Rapporte la progression pendant l'exécution de la tâche |
| Result | Renvoie 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.
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èque | Langage | Utilisation typique |
|---|---|---|
rclcpp | C++ | Nœuds de production haute performance |
rclpy | Python | Prototypage rapide et scripting |
rclc | C | Micro-ROS et systèmes à ressources limitées |
rcljava | Java | Intégrations ROS 2 basées sur JVM |
rclnodejs | JavaScript / Node.js | Intégrations Web et d'outils |
#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_;
};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 RMW | Backend DDS | Open source/commercial | Caractéristiques |
|---|---|---|---|
| rmw_cyclonedds_cpp | CycloneDDS | Open Source | Sélection par défaut, efficacité légère |
| rmw_fastrtps_cpp | FastDDS | Open Source | Très fonctionnel et hautement performant. |
| rmw_connext_cpp | RTI Connext | Commercial | Support 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 relatives | ROS 1 | ROS 2 |
|---|---|---|
| Communications intermédiaires | Protocole personnalisé TCP/UDP | Protocole standard DDS |
| Mécanismes de découverte | ROS Master (centralisé) | Découverte de DDS (décentralisation) |
| Système de construction | Catkin | Colcon / Ament |
| Version Python | Python 2/3 | Python 3 uniquement |
| Systèmes d'exploitation pris en charge | Principalement Linux | Linux / Windows / macOS / RTOS |
| Support en temps réel | Aucune assurance en temps réel | Prise en charge du temps réel dur |
| Communications multiples robotiques | Configuration supplémentaire requise | Prise en charge native (ROS_DOMAIN_ID) |
| Sécurité | Pas de chiffrement ou d'authentification | Prend en charge le chiffrement, l'authentification, le contrôle d'accès |
| Version | Noetic (version finale) | Humble, Iron, Jazzy... |
1.5 Version de ROS 2
1.5.1 Historique des versions
| Désignation de version | Date de sortie | Système pris en charge | Statut de support | Date limite |
|---|---|---|---|---|
| Ardent | 2017.12 | Ubuntu 16.04 | Terminé | 2019.04 |
| Bouncy | 2018.06 | Ubuntu 16.04/18.04 | Terminé | 2019.09 |
| Crystal | 2018.12 | Ubuntu 16.04/18.04 | Terminé | 2020.12 |
| Dashing | 2019.05 | Ubuntu 16.04/18.04 | Terminé | 2021.05 |
| Eloquent | 2019.11 | Ubuntu 18.04 | Terminé | 2021.11 |
| Foxy | 2020.06 | Ubuntu 18.04/20.04 | Terminé | 2023.05 |
| Galactic | 2021.05 | Ubuntu 20.04 | Terminé | 2022.11 |
| Humble | 2022.05 | Ubuntu 22.04 | LTS | 2027.05 |
| Iron | 2023.05 | Ubuntu 22.04 | Terminé | 2024.11 |
| Jazzy | 2024.05 | Ubuntu 24.04 | LTS | 2029.05 |
1.5.3 Proposition pour la sélection d'une version
| Utiliser la scène | Version recommandée | Raison |
|---|---|---|
| Environnement de production | Humble | Stable, support à long terme |
| Développement de nouveaux projets | Jazzy | Dernière LTS, support à long terme |
| Étude/expérience | Recent Scroll | Fonctions récentes |
| Maintenance des anciens systèmes | Humble | La 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
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 codesudo snap install --classic codecode --version3.3 Plugins requis
| Nom du plugin | Éditeur | Objectif |
|---|---|---|
| ROS | Microsoft | Support ROS |
| C/C++ | Microsoft | Support du langage C++ |
| Python | Microsoft | Support du langage Python |
| CMake Tools | Microsoft | Support CMake |
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-tools3.4 Configuration de l'espace de travail ROS 2
code ~/ros2_ws{
"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
}cd ~/ros2_ws
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -s build/compile_commands.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
{
"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
{
"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"
}
]
}| Raccourcis | Fonctions |
|---|---|
| F5 | Démarrer le débogage |
| Ctrl+Shift+F5 | Redémarrer le débogage |
| Shift+F5 | Arrêter le débogage |
| F9 | Définir/fermer un point d'arrêt |
| F10 | Step Over |
| F11 | Step Into |
| Shift+F11 | Step Out |
3.11 Installation de Terminator
sudo apt install terminator3.11.1 Lancement
Raccourci Ctrl+Alt+T
3.12 Utilisation de Git
sudo apt install gitgit init
git add .
git commit| Commande | Objectif |
|---|---|
git init | Créer un nouveau dépôt local |
git status | Vé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 diff | Afficher les modifications non mises en stage |
git log | Afficher l'historique des commits |
git remote -v | Lister les remotes configurés |
git push -u origin main | Pousser et définir la branche en amont |
git pull | Ré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
| Contenus | Objectif | Si Contrôle de version |
|---|---|---|
| Src/ | Stocker la source du paquet fonctionnel | Oui |
| build/ | Compiler les produits intermédiaires | Non |
| Install/ | Fichier d'installation final | Non |
| log/ | Compiler et tester les journaux | Non |
4.1.3 Type de zone de travail
| Type | Exemple de chemin | Objectif |
|---|---|---|
| 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
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
tree -L 24.3 Système compilateur Colcon
sudo apt install -y python3-colcon-common-extensions
colcon --helpcd ~/ros2_ws
colcon build
colcon build --packages-select <package_name>
colcon build --packages-skip <package_name>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=ON4.4 Couverture d'espace de travail (Overlaying)
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
source ~/overlay_ws/install/setup.bash4.5 Paramètres environnementaux détaillés
source install/setup.bash
echo $ROS_DOMAIN_ID
echo $AMENT_PREFIX_PATH
echo $LD_LIBRARY_PATHecho "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc4.6 Gestion des paquets
ros2 pkg list
ros2 pkg prefix <package_name>
find src -maxdepth 2 -name package.xml -exec dirname {} \;ros2 pkg xml <package_name>
ros2 pkg dependencies <package_name>
ros2 pkg list > packages_list.txt4.7 Traduction incrémentielle
colcon build
colcon build --packages-select <modified_package>colcon build --packages-select <package_name> --cmake-force-configure
rm -rf build install log
colcon build4.8 Test et certification
colcon test
colcon test --packages-select <package_name>
colcon test-result --all
colcon test-result --verbose4.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
| Type | Système de construction | Langues principales | Objectif |
|---|---|---|---|
| ament_cmake | CMake | C++ | Nœuds C++, éléments mixtes |
| ament_python | Setuptools | Python | Projet Python pur |
| ament_cmake_python | CMake + Python | Mixte | Éléments mixtes C++ et Python |
5.2 Créer des paquets fonctionnels
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_pkgcd ~/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_pkg5.3 Configuration package.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><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)
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',
],
},
)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
cd ~/ros2_ws
colcon build --packages-select my_cpp_pkg
colcon build --packages-select my_cpp_pkg --event-handlers console_direct+colcon build --packages-select pkg1 pkg2 pkg3
colcon build --packages-skip pkg_to_skipcolcon 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=ON5.7 Confiance dans la gestion
ros2 pkg dependencies my_package
ros2 pkg dependencies my_package --all
ros2 pkg dependents my_package
ros2 pkg xml my_package