ROS2-Grundlagen und Einrichtung

Kapitel IX ROS2-Humble

NameEigentümerGeändertErstellt
01 ROS2-EinführungYujiang2026-01-09 14:032026-01-09 14:03
02 Humble installierenYujiang2026-01-26 12:122026-01-09 14:03
03 Integrierte EntwicklungsumgebungYujiang2026-01-26 14:552026-01-09 14:24
04 WorkspaceYujiang2026-01-12 12:222026-01-09 14:25
05 PaketYujiang2026-01-12 12:222026-01-09 14:26
06 KnotenYujiang2026-02-13 13:282026-01-09 14:26
07 Topic-KommunikationYujiang2026-02-13 13:292026-01-09 14:27
08 Service-KommunikationYujiang2026-02-06 13:572026-01-09 14:27
09 Action-KommunikationYujiang2026-01-27 14:482026-01-09 14:27
10 TF2-KoordinatentransformationYujiang2026-01-27 14:552026-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

ZielWarum es wichtig ist
Echtzeit-FreundlichkeitBessere Unterstützung für Robotik-Workloads mit niedriger Latenz
Verteilte BereitstellungMehrere Knoten können über viele Prozesse oder Maschinen ausgeführt werden
Zuverlässigkeit und WartbarkeitGeeigneter für Produktionsrobotik als die Annahmen der ROS 1-Ära
SicherheitUnterstützt sichere Kommunikation und Zugriffskontrolle
Plattformübergreifende UnterstützungLäuft auf Linux, eingebetteten Zielen und anderen modernen Umgebungen

1.1.3 ROS 2-Kernwerte

  1. Modulares Design: Code in separate Pakete organisiert, die leicht zu warten, wiederzuverwenden und zu verteilen sind

  2. Verteilte Kommunikation: Multiprozessor-, Multi-Maschinen-Computing-Architektur

  3. Reiche Ökosysteme: enthält eine große Anzahl von Open-Source-Funktionspaketen und Entwicklungswerkzeugen

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

FunktionBeschreibung
AsynchronVerleger und Abonnenten blockieren sich nicht gegenseitig
Eins zu vielenMehrere Abonnenten können dasselbe Topic konsumieren
Lose gekoppeltKnoten einigen sich nur auf den Topic-Namen und den Nachrichtentyp
Streaming-freundlichGut geeignet für Sensordaten, Telemetrie und kontinuierliche Steuerung

Beispiel typischer Topics:

Topic-NameNachrichtentypZweck
/cmd_velgeometry_msgs/msg/TwistGeschwindigkeitssteuerungsbefehl
/odomnav_msgs/msg/OdometryKilometerdaten
/scansensor_msgs/msg/LaserScanLaserradar-Daten
/camera/image_rawsensor_msgs/msg/ImageOriginalbilddaten

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.

StreamZweck
GoalBeschreibt die auszuführende Aufgabe
FeedbackBerichtet Fortschritt während der Ausführung der Aufgabe
ResultGibt 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.

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 ROS 2-Struktur

1.3.2 Client-Bibliothek (Client Libraries)

BibliothekSpracheTypische Verwendung
rclcppC++Hochleistungs-Produktionsknoten
rclpyPythonSchnelles Prototyping und Skripting
rclcCMicro-ROS und ressourcenbeschränkte Systeme
rcljavaJavaJVM-basierte ROS 2-Integrationen
rclnodejsJavaScript / Node.jsWeb- und Werkzeugintegrationen
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 und DDS

RMW-ImplementierungDDS-BackendOpen Source/kommerziellEigenschaften
rmw_cyclonedds_cppCycloneDDSOpen SourceStandardauswahl, leichte Effizienz
rmw_fastrtps_cppFastDDSOpen SourceSehr funktionsreich und hochleistungsfähig.
rmw_connext_cppRTI ConnextKommerziellIndustrielle Unterstützung, am umfassendsten

1.4 Hauptunterschiede zwischen ROS 1 und ROS 2

1.4.2 Detaillierte Vergleichstabellen

VergleichsdimensionenROS 1ROS 2
KommunikationsmittelTCP/UDP-benutzerdefiniertes ProtokollDDS-Standardprotokoll
ErkennungsmechanismenROS Master (zentralisiert)Erkennung von DDS (Dezentralisierung)
Build-SystemCatkinColcon / Ament
Python-VersionPython 2/3Nur Python 3
Unterstützte BetriebssystemeHauptsächlich LinuxLinux / Windows / macOS / RTOS
Echtzeit-UnterstützungKeine EchtzeitsicherungUnterstützung von Hard-Echtzeit
Mehrere Roboter-KommunikationZusätzliche Konfiguration erforderlichNative Unterstützung (ROS_DOMAIN_ID)
SicherheitKeine Verschlüsselung oder AuthentifizierungUnterstützung von Verschlüsselung, Authentifizierung, Zugriffskontrolle
VeröffentlichungNoetic (endgültige Version)Humble, Iron, Jazzy...

1.5 ROS 2-Veröffentlichung

1.5.1 Versionsverlauf

VersionsbezeichnerVeröffentlichungszeitUnterstütztes SystemUnterstützungsstatusFrist
Ardent2017.12Ubuntu 16.04Beendet2019.04
Bouncy2018.06Ubuntu 16.04/18.04Beendet2019.09
Crystal2018.12Ubuntu 16.04/18.04Beendet2020.12
Dashing2019.05Ubuntu 16.04/18.04Beendet2021.05
Eloquent2019.11Ubuntu 18.04Beendet2021.11
Foxy2020.06Ubuntu 18.04/20.04Beendet2023.05
Galactic2021.05Ubuntu 20.04Beendet2022.11
Humble2022.05Ubuntu 22.04LTS2027.05
Iron2023.05Ubuntu 22.04Beendet2024.11
Jazzy2024.05Ubuntu 24.04LTS2029.05

1.5.3 Vorschlag zur Auswahl einer Version

AnwendungsfallEmpfohlene VersionGrund
ProduktionsumgebungHumbleStabil, langfristige Unterstützung
Neue ProjektentwicklungJazzyNeueste LTS, langfristige Unterstützung
Studie/ExperimentRecent ScrollNeueste Funktionen
Wartung alter SystemeHumbleKompatibilitä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

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 Erforderliche Plugins

Plugin-NameHerausgeberZweck
ROSMicrosoftROS-Unterstützung
C/C++MicrosoftC++-Sprachunterstützung
PythonMicrosoftPython-Sprachunterstützung
CMake ToolsMicrosoftCMake-Unterstützung
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 ROS 2-Workspace-Konfiguration

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 VS Code-Job-Konfiguration

json
{
  "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

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"
  }
  ]
}
TastenkombinationenFunktionen
F5Debugging starten
Ctrl+Shift+F5Debugging neu starten
Shift+F5Debugging stoppen
F9Haltepunkt setzen/schließen
F10Step Over
F11Step Into
Shift+F11Step Out

3.11 Installation von Terminator

bash
sudo apt install terminator

3.11.1 Beginn

Tastenkombination Ctrl+Alt+T

3.12 Verwendung von Git

bash
sudo apt install git
bash
git init
git add .
git commit
BefehlZweck
git initEin neues lokales Repository erstellen
git statusDen 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 diffNicht-gestagte Änderungen anzeigen
git logCommit-Historie anzeigen
git remote -vKonfigurierte Remotes auflisten
git push -u origin mainPush und Upstream-Branch festlegen
git pullRemote-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

InhalteZweckOb Versionskontrolle
Src/Funktionspaketquelle speichernJa
build/Zwischenprodukte kompilierenNein
Install/Endgültige InstallationsdateiNein
log/Kompilieren und Testen von LogsNein

4.1.3 Arbeitsbereichstyp

TypBeispielpfadZweck
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

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

4.3 Colcon Compiler System

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 Workspace-Abdeckung (Overlaying)

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

4.5 Detaillierte Umgebungseinstellungen

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 Paketverwaltung

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 Inkrementelle Übersetzung

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 und Zertifizierung

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

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

TypBuild-SystemHauptsprachenZweck
ament_cmakeCMakeC++C++-Knoten, gemischte Elemente
ament_pythonSetuptoolsPythonReines Python-Projekt
ament_cmake_pythonCMake + PythonGemischtC++- und Python-gemischte Elemente

5.2 Funktionspakete erstellen

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 package.xml-Konfiguration

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 setup.py-Konfiguration (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 Kompilierung und Installation von Paketen

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 Vertrauen in das Management

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