ROS2-Grundlagen und Einrichtung
Kapitel IX ROS2-Humble
| Name | Eigentümer | Geändert | Erstellt |
|---|---|---|---|
| 01 ROS2-Einführung | Yujiang | 2026-01-09 14:03 | 2026-01-09 14:03 |
| 02 Humble installieren | Yujiang | 2026-01-26 12:12 | 2026-01-09 14:03 |
| 03 Integrierte Entwicklungsumgebung | Yujiang | 2026-01-26 14:55 | 2026-01-09 14:24 |
| 04 Workspace | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:25 |
| 05 Paket | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:26 |
| 06 Knoten | Yujiang | 2026-02-13 13:28 | 2026-01-09 14:26 |
| 07 Topic-Kommunikation | Yujiang | 2026-02-13 13:29 | 2026-01-09 14:27 |
| 08 Service-Kommunikation | Yujiang | 2026-02-06 13:57 | 2026-01-09 14:27 |
| 09 Action-Kommunikation | Yujiang | 2026-01-27 14:48 | 2026-01-09 14:27 |
| 10 TF2-Koordinatentransformation | Yujiang | 2026-01-27 14:55 | 2026-01-09 14:28 |
Inhaltspflege...
01 ROS2-Einführung
1.1 Was ist ROS 2
ROS 2 (Robot Operation System 2) ist ein Open-Source-Mittelframework für die Entwicklung von Robotersoftware. Obwohl der Name „Betriebssysteme" enthält, ist ROS 2 tatsächlich kein traditionelles Betriebssystem, sondern ein Software-Repository und Werkzeuge, die Entwicklern helfen, Roboteranwendungen zu erstellen.
1.1.1 Definition von ROS 2
ROS 2 bietet den Service des Betriebssystems, der normalerweise Nachrichten zwischen Prozessen überträgt und das Paketmanagement ausführt. Es ist ein verteiltes Framework, das es Anwendungen ermöglicht, Roboterhardware zu steuern, Sensordaten zu verarbeiten, Algorithmen auszuführen und mit anderen Anwendungen oder Systemen zu kommunizieren.
1.1.2 Designziele für ROS 2
| Ziel | Warum es wichtig ist |
|---|---|
| Echtzeit-Freundlichkeit | Bessere Unterstützung für Robotik-Workloads mit niedriger Latenz |
| Verteilte Bereitstellung | Mehrere Knoten können über viele Prozesse oder Maschinen ausgeführt werden |
| Zuverlässigkeit und Wartbarkeit | Geeigneter für Produktionsrobotik als die Annahmen der ROS 1-Ära |
| Sicherheit | Unterstützt sichere Kommunikation und Zugriffskontrolle |
| Plattformübergreifende Unterstützung | Läuft auf Linux, eingebetteten Zielen und anderen modernen Umgebungen |
1.1.3 ROS 2-Kernwerte
-
Modulares Design: Code in separate Pakete organisiert, die leicht zu warten, wiederzuverwenden und zu verteilen sind
-
Verteilte Kommunikation: Multiprozessor-, Multi-Maschinen-Computing-Architektur
-
Reiche Ökosysteme: enthält eine große Anzahl von Open-Source-Funktionspaketen und Entwicklungswerkzeugen
-
Aktive Communities: ein nachhaltiger Beitrag globaler Entwickler und aktive Unterstützung von Geschäftsunternehmen
1.2 ROS 2-Kernkonzept
1.2.1 Knoten (Nodes)
Der Knoten ist die grundlegendste Berechnungseinheit in ROS 2. Ein Knoten ist ein Prozess, der die ROS 2 API verwendet, um mit anderen Knoten zu kommunizieren.
1.2.2 Topics
Das Topic ist der Mechanismus für inselartige Kommunikation zwischen Knoten unter Verwendung der Veröffentlichung/Abonnement (Pub/Sub).
| Funktion | Beschreibung |
|---|---|
| Asynchron | Verleger und Abonnenten blockieren sich nicht gegenseitig |
| Eins zu vielen | Mehrere Abonnenten können dasselbe Topic konsumieren |
| Lose gekoppelt | Knoten einigen sich nur auf den Topic-Namen und den Nachrichtentyp |
| Streaming-freundlich | Gut geeignet für Sensordaten, Telemetrie und kontinuierliche Steuerung |
Beispiel typischer Topics:
| Topic-Name | Nachrichtentyp | Zweck |
|---|---|---|
| /cmd_vel | geometry_msgs/msg/Twist | Geschwindigkeitssteuerungsbefehl |
| /odom | nav_msgs/msg/Odometry | Kilometerdaten |
| /scan | sensor_msgs/msg/LaserScan | Laserradar-Daten |
| /camera/image_raw | sensor_msgs/msg/Image | Originalbilddaten |
1.2.3 Services
Services sind der Mechanismus für synchronisierte Kommunikation zwischen Knoten unter Verwendung des Client/Server-Modells.
1.2.4 Actions
Actions sind Kommunikationsmechanismen, die zur Bearbeitung von Langzeitzuweisungen verwendet werden, um Feedback und Stornierung von Zuweisungen zu unterstützen.
| Stream | Zweck |
|---|---|
| Goal | Beschreibt die auszuführende Aufgabe |
| Feedback | Berichtet Fortschritt während der Ausführung der Aufgabe |
| Result | Gibt das Endergebnis zurück, wenn die Aufgabe beendet ist |
1.2.5 Parameter
Parameter sind Konfigurationswerte für Knoten, die beim Start der Knoten festgelegt oder dynamisch zur Laufzeit geändert werden können.
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-Struktur
1.3.2 Client-Bibliothek (Client Libraries)
| Bibliothek | Sprache | Typische Verwendung |
|---|---|---|
rclcpp | C++ | Hochleistungs-Produktionsknoten |
rclpy | Python | Schnelles Prototyping und Skripting |
rclc | C | Micro-ROS und ressourcenbeschränkte Systeme |
rcljava | Java | JVM-basierte ROS 2-Integrationen |
rclnodejs | JavaScript / Node.js | Web- und Werkzeugintegrationen |
#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 und DDS
| RMW-Implementierung | DDS-Backend | Open Source/kommerziell | Eigenschaften |
|---|---|---|---|
| rmw_cyclonedds_cpp | CycloneDDS | Open Source | Standardauswahl, leichte Effizienz |
| rmw_fastrtps_cpp | FastDDS | Open Source | Sehr funktionsreich und hochleistungsfähig. |
| rmw_connext_cpp | RTI Connext | Kommerziell | Industrielle Unterstützung, am umfassendsten |
1.4 Hauptunterschiede zwischen ROS 1 und ROS 2
1.4.2 Detaillierte Vergleichstabellen
| Vergleichsdimensionen | ROS 1 | ROS 2 |
|---|---|---|
| Kommunikationsmittel | TCP/UDP-benutzerdefiniertes Protokoll | DDS-Standardprotokoll |
| Erkennungsmechanismen | ROS Master (zentralisiert) | Erkennung von DDS (Dezentralisierung) |
| Build-System | Catkin | Colcon / Ament |
| Python-Version | Python 2/3 | Nur Python 3 |
| Unterstützte Betriebssysteme | Hauptsächlich Linux | Linux / Windows / macOS / RTOS |
| Echtzeit-Unterstützung | Keine Echtzeitsicherung | Unterstützung von Hard-Echtzeit |
| Mehrere Roboter-Kommunikation | Zusätzliche Konfiguration erforderlich | Native Unterstützung (ROS_DOMAIN_ID) |
| Sicherheit | Keine Verschlüsselung oder Authentifizierung | Unterstützung von Verschlüsselung, Authentifizierung, Zugriffskontrolle |
| Veröffentlichung | Noetic (endgültige Version) | Humble, Iron, Jazzy... |
1.5 ROS 2-Veröffentlichung
1.5.1 Versionsverlauf
| Versionsbezeichner | Veröffentlichungszeit | Unterstütztes System | Unterstützungsstatus | Frist |
|---|---|---|---|---|
| Ardent | 2017.12 | Ubuntu 16.04 | Beendet | 2019.04 |
| Bouncy | 2018.06 | Ubuntu 16.04/18.04 | Beendet | 2019.09 |
| Crystal | 2018.12 | Ubuntu 16.04/18.04 | Beendet | 2020.12 |
| Dashing | 2019.05 | Ubuntu 16.04/18.04 | Beendet | 2021.05 |
| Eloquent | 2019.11 | Ubuntu 18.04 | Beendet | 2021.11 |
| Foxy | 2020.06 | Ubuntu 18.04/20.04 | Beendet | 2023.05 |
| Galactic | 2021.05 | Ubuntu 20.04 | Beendet | 2022.11 |
| Humble | 2022.05 | Ubuntu 22.04 | LTS | 2027.05 |
| Iron | 2023.05 | Ubuntu 22.04 | Beendet | 2024.11 |
| Jazzy | 2024.05 | Ubuntu 24.04 | LTS | 2029.05 |
1.5.3 Vorschlag zur Auswahl einer Version
| Anwendungsfall | Empfohlene Version | Grund |
|---|---|---|
| Produktionsumgebung | Humble | Stabil, langfristige Unterstützung |
| Neue Projektentwicklung | Jazzy | Neueste LTS, langfristige Unterstützung |
| Studie/Experiment | Recent Scroll | Neueste Funktionen |
| Wartung alter Systeme | Humble | Kompatibilität ist gut. |
03 Integrierte Entwicklungsumgebung
03 Integrierte Entwicklungsumgebung (IDE Setup)
3.1 Allgemein
Eine gute Konfiguration der Entwicklungsumgebung kann die Effizienz der ROS 2-Entwicklung erheblich verbessern. Dieses Kapitel bietet detaillierte Informationen darüber, wie Visual Studio Code (VS Code) als die Hauptentwicklungsumgebung für ROS 2 konfiguriert werden kann, einschließlich Plugin-Installation, intelligente Codevervollständigung, Debug-Konfiguration usw.
3.2 Visa Studio Code-Installation
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 Erforderliche Plugins
| Plugin-Name | Herausgeber | Zweck |
|---|---|---|
| ROS | Microsoft | ROS-Unterstützung |
| C/C++ | Microsoft | C++-Sprachunterstützung |
| Python | Microsoft | Python-Sprachunterstützung |
| CMake Tools | Microsoft | CMake-Unterstützung |
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-Workspace-Konfiguration
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-Job-Konfiguration
{
"version": "2.0.0",
"tasks": [
{
"label": "colcon build",
"type": "shell",
"command": "colcon build --symlink-install",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}3.6 Debug-Konfiguration
{
"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"
}
]
}| Tastenkombinationen | Funktionen |
|---|---|
| F5 | Debugging starten |
| Ctrl+Shift+F5 | Debugging neu starten |
| Shift+F5 | Debugging stoppen |
| F9 | Haltepunkt setzen/schließen |
| F10 | Step Over |
| F11 | Step Into |
| Shift+F11 | Step Out |
3.11 Installation von Terminator
sudo apt install terminator3.11.1 Beginn
Tastenkombination Ctrl+Alt+T
3.12 Verwendung von Git
sudo apt install gitgit init
git add .
git commit| Befehl | Zweck |
|---|---|
git init | Ein neues lokales Repository erstellen |
git status | Den aktuellen Repository-Status prüfen |
git add <file> | Eine Datei für den nächsten Commit stagen |
git commit -m "message" | Einen neuen Snapshot mit einer Nachricht erstellen |
git diff | Nicht-gestagte Änderungen anzeigen |
git log | Commit-Historie anzeigen |
git remote -v | Konfigurierte Remotes auflisten |
git push -u origin main | Push und Upstream-Branch festlegen |
git pull | Remote-Updates abrufen und zusammenführen |
3.13 Nächste Schritte
04 Workspace - Workspace-Verwaltung lernen
05 Funktionspaket - Funktionspaket erstellen
06 Knoten - Knoten-Code schreiben
04 Workspace
04 Workspace
4.1 Übersicht über den Workspace
4.1.1 Was ist ein Workspace?
Workspace ist die Verzeichnisstruktur zur Organisation und Verwaltung von Funktionspaketen in ROS 2. Es ist ein Wurzelverzeichnis, das Quellcode, Kompilierungsprodukte und Installationsdokumente enthält und die Grundumgebung für die ROS 2-Entwicklung darstellt.
4.1.2 Workspace-Verzeichnisstruktur
| Inhalte | Zweck | Ob Versionskontrolle |
|---|---|---|
| Src/ | Funktionspaketquelle speichern | Ja |
| build/ | Zwischenprodukte kompilieren | Nein |
| Install/ | Endgültige Installationsdatei | Nein |
| log/ | Kompilieren und Testen von Logs | Nein |
4.1.3 Arbeitsbereichstyp
| Typ | Beispielpfad | Zweck |
|---|---|---|
| System-Workspace | /opt/ros/humble/ | Installierte ROS 2-Software |
| Benutzer-Workspace | ~/ros2_ws/ | Persönlicher Entwicklungs-Workspace |
| Cover-Workspace | ~/overlay_ws/ | Vorhandene Pakete erweitern oder überschreiben |
4.2 Erstellung von Workspaces
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
tree -L 24.3 Colcon Compiler System
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 Workspace-Abdeckung (Overlaying)
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
source ~/overlay_ws/install/setup.bash4.5 Detaillierte Umgebungseinstellungen
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 Paketverwaltung
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 Inkrementelle Übersetzung
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 und Zertifizierung
colcon test
colcon test --packages-select <package_name>
colcon test-result --all
colcon test-result --verbose4.12 Nächste Schritte
1.05 Paket - Lernen Sie, Funktionspakete zu erstellen und zu verwalten
2.06 Knoten - Vorbereitung des ersten Knotens
05 Paket
05 Funktionspakete (Packages)
5.1 Zusammenfassung der Funktionspakete
5.1.1 Was ist ein Funktionspaket?
Das Paket ist die grundlegende Einheit des Organisationscodes in ROS 2. Es enthält Quellcode, Konfigurationsdateien, Datendateien, Konstruktionsskripte und Dokumente für bestimmte Funktionen.
5.1.3 Typ des Funktionspakets
| Typ | Build-System | Hauptsprachen | Zweck |
|---|---|---|---|
| ament_cmake | CMake | C++ | C++-Knoten, gemischte Elemente |
| ament_python | Setuptools | Python | Reines Python-Projekt |
| ament_cmake_python | CMake + Python | Gemischt | C++- und Python-gemischte Elemente |
5.2 Funktionspakete erstellen
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-Konfiguration
<?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-Konfiguration (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 Kompilierung und Installation von Paketen
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 Vertrauen in das Management
ros2 pkg dependencies my_package
ros2 pkg dependencies my_package --all
ros2 pkg dependents my_package
ros2 pkg xml my_package