ROS2-fundamenten en setup
Hoofdstuk IX ROS2-Humble
| Naam | Eigenaar | Gewijzigd | Aangemaakt |
|---|---|---|---|
| 01 ROS2-introductie | Yujiang | 2026-01-09 14:03 | 2026-01-09 14:03 |
| 02 Humble installeren | Yujiang | 2026-01-26 12:12 | 2026-01-09 14:03 |
| 03 Geïntegreerde ontwikkelomgeving | Yujiang | 2026-01-26 14:55 | 2026-01-09 14:24 |
| 04 Werkruimte | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:25 |
| 05 Pakket | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:26 |
| 06 Knooppunt | Yujiang | 2026-02-13 13:28 | 2026-01-09 14:26 |
| 07 Topiccommunicatie | Yujiang | 2026-02-13 13:29 | 2026-01-09 14:27 |
| 08 Servicecommunicatie | Yujiang | 2026-02-06 13:57 | 2026-01-09 14:27 |
| 09 Action-communicatie | Yujiang | 2026-01-27 14:48 | 2026-01-09 14:27 |
| 10 TF2-coördinatentransformatie | Yujiang | 2026-01-27 14:55 | 2026-01-09 14:28 |
Inhoudsonderhoud...
01 ROS2-introductie
1.1 Wat is ROS 2
ROS 2 (Robot Operation System 2) is een open-source intermediair framework voor de ontwikkeling van robotsoftware. Hoewel de naam „besturingssystemen" bevat, is ROS 2 eigenlijk geen traditioneel besturingssysteem, maar een softwarerepository en gereedschappen die ontwikkelaars helpen om robottoepassingen te maken.
1.1.1 Definitie van ROS 2
ROS 2 biedt de service van het besturingssysteem, dat normaal gesproken berichten tussen processen verzendt en pakketbeheer uitvoert. Het is een gedistribueerd framework dat applicaties in staat stelt robothardware te besturen, sensorgegevens te verwerken, algoritmen uit te voeren en met andere applicaties of systemen te communiceren.
1.1.2 Ontwerpdoelen voor ROS 2
| Doel | Waarom het belangrijk is |
|---|---|
| Real-time vriendelijkheid | Betere ondersteuning voor robotica-werklasten met lage latentie |
| Gedistribueerde implementatie | Meerdere knooppunten kunnen over veel processen of machines worden uitgevoerd |
| Betrouwbaarheid en onderhoudbaarheid | Beter geschikt voor productierobotica dan ROS 1-tijdperk-aannames |
| Beveiliging | Ondersteunt veilige communicatie en toegangscontrole |
| Multiplatform-ondersteuning | Werkt op Linux, ingebouwde doelen en andere moderne omgevingen |
1.1.3 ROS 2-kernwaarden
-
Modulair ontwerp: code georganiseerd in afzonderlijke pakketten die gemakkelijk te onderhouden, hergebruiken en verspreiden zijn
-
Gedistribueerde communicatie: multiprocessor-, multi-machine gedistribueerde computerarchitectuur
-
Rijke ecosystemen: bevatten een groot aantal open-source functionele pakketten en ontwikkeltools
-
Actieve gemeenschappen: een aanhoudende bijdrage van wereldwijde ontwikkelaars en actieve ondersteuning van zakelijke bedrijven
1.2 ROS 2-kernconcept
1.2.1 Knooppunten (Nodes)
Knooppunt is de meest basale rekeneenheid in ROS 2. Een knooppunt is een proces dat de ROS 2 API gebruikt om met andere knooppunten te communiceren.
1.2.2 Topics
Het topic is het mechanisme voor eilandachtige communicatie tussen knooppunten, waarbij gebruik wordt gemaakt van de publicatie/abonnement (Pub/Sub).
| Kenmerk | Beschrijving |
|---|---|
| Asynchroon | Uitgevers en abonnees blokkeren elkaar niet |
| Een-op-veel | Meerdere abonnees kunnen hetzelfde topic consumeren |
| Losjes gekoppeld | Knooppunten zijn alleen overeengekomen over de topicnaam en het berichttype |
| Streamingvriendelijk | Goed geschikt voor sensorgegevens, telemetrie en continue besturing |
Voorbeeld van een typisch topic:
| Onderwerpnaam | Berichttype | Doel |
|---|---|---|
| /cmd_vel | geometry_msgs/msg/Twist | Snelheidsbesturingscommando |
| /odom | nav_msgs/msg/Odometry | kilometergegevens |
| /scan | sensor_msgs/msg/LaserScan | Laserradargegevens |
| /camera/image_raw | sensor_msgs/msg/Image | Originele beeldgegevens |
1.2.3 Services
Services zijn het mechanisme voor gesynchroniseerde communicatie tussen knooppunten, met behulp van het client/server-model.
1.2.4 Actions
Actions zijn communicatiemechanismen die worden gebruikt om langetermijnopdrachten af te handelen om feedback en annulering van opdrachten te ondersteunen.
| Stream | Doel |
|---|---|
| Goal | Beschrijft de uit te voeren taak |
| Feedback | Rapporteert voortgang terwijl de taak wordt uitgevoerd |
| Result | Retourneert het uiteindelijke resultaat wanneer de taak eindigt |
1.2.5 Parameters
Parameters zijn configuratiewaarden voor knooppunten, die kunnen worden ingesteld bij het opstarten van knooppunten of dynamisch tijdens het uitvoeren worden gewijzigd.
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 ROS 2-structuur
1.3.2 Clientbibliotheek (Client Libraries)
| Bibliotheek | Taal | Typisch gebruik |
|---|---|---|
rclcpp | C++ | Hoogwaardige productieknooppunten |
rclpy | Python | Snelle prototyping en scripting |
rclc | C | Micro-ROS en systemen met beperkte middelen |
rcljava | Java | JVM-gebaseerde ROS 2-integraties |
rclnodejs | JavaScript / Node.js | Web- en tooling-integraties |
#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 en DDS
| RMW-implementatie | DDS-backend | Open source/commercieel | Kenmerken |
|---|---|---|---|
| rmw_cyclonedds_cpp | CycloneDDS | Open Source | Standaardselectie, lichte efficiëntie |
| rmw_fastrtps_cpp | FastDDS | Open Source | Het is zeer functioneel en presteert goed. |
| rmw_connext_cpp | RTI Connext | Commercieel | Industriële ondersteuning, het meest uitgebreid |
1.4 Belangrijke verschillen tussen ROS 1 en ROS 2
1.4.2 Gedetailleerde vergelijkingstabellen
| Relatieve dimensies | ROS 1 | ROS 2 |
|---|---|---|
| Communicatiemiddenstuk | TCP/UDP aangepast protocol | DDS-standaardprotocol |
| Detectiemechanismen | ROS Master (gecentraliseerd) | Detectie van DDS (decentralisatie) |
| Build-systeem | Catkin | Colcon / Ament |
| Python-versie | Python 2/3 | Alleen Python 3 |
| Ondersteunde besturingssystemen | Hoofdzakelijk Linux | Linux / Windows / macOS / RTOS |
| Realtime ondersteuning | Geen realtime garantie | Ondersteunt hardwarematige realtime |
| Multi-robotcommunicatie | Aanvullende configuratie vereist | Native ondersteuning (ROS_DOMAIN_ID) |
| Beveiliging | Geen versleuteling of authenticatie | Ondersteunt versleuteling, authenticatie, toegangscontrole |
| Release | Noetic (laatste versie) | Humble, Iron, Jazzy... |
1.5 ROS 2 release
1.5.1 Versiegeschiedenis
| Versie-aanduiding | Releasetijd | Ondersteund systeem | Ondersteuningsstatus | Deadline |
|---|---|---|---|---|
| Ardent | 2017.12 | Ubuntu 16.04 | Beëindigd | 2019.04 |
| Bouncy | 2018.06 | Ubuntu 16.04/18.04 | Beëindigd | 2019.09 |
| Crystal | 2018.12 | Ubuntu 16.04/18.04 | Beëindigd | 2020.12 |
| Dashing | 2019.05 | Ubuntu 16.04/18.04 | Beëindigd | 2021.05 |
| Eloquent | 2019.11 | Ubuntu 18.04 | Beëindigd | 2021.11 |
| Foxy | 2020.06 | Ubuntu 18.04/20.04 | Beëindigd | 2023.05 |
| Galactic | 2021.05 | Ubuntu 20.04 | Beëindigd | 2022.11 |
| Humble | 2022.05 | Ubuntu 22.04 | LTS | 2027.05 |
| Iron | 2023.05 | Ubuntu 22.04 | Beëindigd | 2024.11 |
| Jazzy | 2024.05 | Ubuntu 24.04 | LTS | 2029.05 |
1.5.3 Voorstel voor de selectie van een versie
| Gebruiksscène | Aanbevolen versie | Reden |
|---|---|---|
| Productieomgeving | Humble | Stabiel, langetermijnondersteuning |
| Nieuwe projectontwikkeling | Jazzy | Nieuwste LTS, langetermijnondersteuning |
| Studie/experiment | Recent Scroll | Nieuwste functies |
| Onderhoud van oude systemen | Humble | De compatibiliteit is goed. |
03 Geïntegreerde ontwikkelomgeving
03 Geïntegreerde ontwikkelomgeving (IDE Setup)
3.1 Algemeen
Een goede configuratie van de ontwikkelomgeving kan de efficiëntie van ROS 2-ontwikkeling aanzienlijk verbeteren. Dit hoofdstuk biedt gedetailleerde informatie over hoe Visual Studio Code (VS Code) te configureren als de belangrijkste ontwikkelomgeving voor ROS 2, inclusief plugin-installatie, slimme codecompletering, debugconfiguratie, enz.
3.2 Installatie van Visa 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 Vereiste plugins
| Plugin-naam | Uitgever | Doel |
|---|---|---|
| ROS | Microsoft | ROS-ondersteuning |
| C/C++ | Microsoft | Ondersteuning voor C++-taal |
| Python | Microsoft | Ondersteuning voor Python-taal |
| CMake Tools | Microsoft | CMake-ondersteuning |
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 ROS 2-werkruimteconfiguratie
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 VS Code-taakconfiguratie
{
"version": "2.0.0",
"tasks": [
{
"label": "colcon build",
"type": "shell",
"command": "colcon build --symlink-install",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}3.6 Debugconfiguratie
{
"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"
}
]
}| Sneltoetsen | Functies |
|---|---|
| F5 | Debugging starten |
| Ctrl+Shift+F5 | Debugging opnieuw starten |
| Shift+F5 | Debugging stoppen |
| F9 | Onderbrekingspunt instellen/sluiten |
| F10 | Step Over |
| F11 | Step Into |
| Shift+F11 | Step Out |
3.11 Installatie van Terminator
sudo apt install terminator3.11.1 Begin
Sneltoets Ctrl+Alt+T
3.12 Gebruik van Git
sudo apt install gitgit init
git add .
git commit| Commando | Doel |
|---|---|
git init | Maak een nieuwe lokale repository |
git status | Controleer de huidige repository-status |
git add <file> | Stage een bestand voor de volgende commit |
git commit -m "message" | Maak een nieuwe snapshot met een bericht |
git diff | Toon niet-gestagde wijzigingen |
git log | Toon commit-geschiedenis |
git remote -v | Toon geconfigureerde remotes |
git push -u origin main | Push en stel upstream branch in |
git pull | Haal en voeg externe updates samen |
3.13 Volgende stappen
04 Werkruimte - Werkruimtebeheer leren
05 Functioneel pakket - Functioneel pakket maken
06 Knooppunt - Knooppuntcode schrijven
04 Werkruimte
04 Werkruimte (Workspace)
4.1 Overzicht van de werkruimte
4.1.1 Wat is een werkruimte?
Werkruimte is de directorystructuur voor het organiseren en beheren van functionele pakketten in ROS 2. Het is een hoofddirectory met broncode, compilatieproducten en installatiedocumenten en is de basisomgeving voor de ROS 2-ontwikkeling.
4.1.2 Werkruimte-cataloguestructuur
| Inhoud | Doel | Of versiebeheer |
|---|---|---|
| Src/ | Functioneel pakket-bron opslaan | Ja |
| build/ | Tussenproducten compileren | Nee |
| Install/ | Definitief installatiebestand | Nee |
| log/ | Compileren en testen van logs | Nee |
4.1.3 Werkgebiedstype
| Type | Voorbeeldpad | Doel |
|---|---|---|
| Systeemwerkruimte | /opt/ros/humble/ | Geïnstalleerde ROS 2-software |
| Gebruikerswerkruimte | ~/ros2_ws/ | Persoonlijke ontwikkeling van werkruimte |
| Coverwerkruimte | ~/overlay_ws/ | Bestaande pakketten uitbreiden of overschrijven |
4.2 Aanmaken van werkruimtes
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
tree -L 24.3 Colcon Compileersysteem
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 Werkruimtedekking (Overlaying)
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
source ~/overlay_ws/install/setup.bash4.5 Gedetailleerde omgevingsinstellingen
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 Pakketbeheer
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 Incrementele vertaling
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 en certificering
colcon test
colcon test --packages-select <package_name>
colcon test-result --all
colcon test-result --verbose4.12 Volgende stappen
1.05 Pakket - Leren om functionele pakketten te maken en te beheren
2.06 Knooppunt - Voorbereiding van het eerste knooppunt
05 Pakket
05 Functionele pakketten (Packages)
5.1 Samenvatting van functionele pakketten
5.1.1 Wat is een functioneel pakket?
Het pakket is de basiseenheid van de organisatiecode in ROS 2. Het bevat broncodes, configuratiebestanden, gegevensbestanden, bouwscripts en documenten voor specifieke functies.
5.1.3 Type van functioneel pakket
| Type | Build-systeem | Hoofdtalen | Doel |
|---|---|---|---|
| ament_cmake | CMake | C++ | C++-knooppunten, gemengde items |
| ament_python | Setuptools | Python | Pure Python-project |
| ament_cmake_python | CMake + Python | Gemengd | C++- en Python-gemengde items |
5.2 Functionele pakketten maken
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 package.xml-configuratie
<?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 setup.py-configuratie (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 Compilatie en installatie van pakketten
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 Vertrouwen op management
ros2 pkg dependencies my_package
ros2 pkg dependencies my_package --all
ros2 pkg dependents my_package
ros2 pkg xml my_package