ROS 2 (Roboter- / AGV-Middleware)
ROS 2 (Robot Operating System 2) ist die Standard-Middleware für mobile Roboter / AGVs / kollaborative Roboter / Drohnen und bietet auf DDS (Data Distribution Service, RTPS over UDP/TCP) publish / subscribe / service / action an. Üblich ist das Abonnieren von Topics (z. B. /odom, /imu, /battery_state), um den Roboterstatus zu überwachen.
Der ROS2-Treiber des Gateways ist ein echter Implementierungstreiber, der sich mit dem JSON over WebSocket-Endpunkt der Standard-Ros2-Brücke rosbridge_suite (rosbridge_server) verbindet und Topics abonniert. Da er nicht direkt an DDS anbindet, muss auf der ROS-2-Seite nur rosbridge_server laufen. Er ist schreibgeschützt.
Vorbereitung — rosbridge_server
Auf der ROS-2-Seite (Roboter selbst oder PC im selben Netzwerk) das Standardpaket rosbridge_suite installieren und starten.
# 예: ROS 2 Humble
sudo apt install ros-humble-rosbridge-suite
ros2 launch rosbridge_server rosbridge_websocket_launch.xml # 기본 ws 포트 9090
Eingabewerte im Registrierungsformular
| Eingabefeld | Was eintragen | Beispiel |
|---|---|---|
| IP-Adresse | rosbridge_server-Host | 192.168.0.30 |
| Port | rosbridge-WebSocket-Port | 9090 (ws Standard) / 9443 (wss Standard) |
| Pfad (rosbridge) | WebSocket-Endpunkt-Pfad — optional path | / (Standard) |
| TLS verwenden | false = ws / true = wss — optional tls | false (Standard) |
Der ROS-2-Treiber ist read-only. Das Publizieren von Topics (z. B. /cmd_vel Bewegungsbefehl) erfordert rosbridge advertise und wird daher nicht unterstützt. Zum Senden von Roboterbefehlen bitte einen separaten Weg nutzen.
Adressnotation für Tags
Die Adresse ist <topic>:<field.dot.path> — erste : trennt Topic und Feldpfad (ROS-Topics enthalten /, : gibt es nicht).
| Notation | Bedeutung |
|---|---|
/temperature:data | std_msgs/Float64-Feld von data |
/imu:orientation.z | verschachteltes Feld von sensor_msgs/Imu (dot-path) |
/scan:ranges.0 | Array-Element — numerisches Segment ist Index |
/odom | ohne : die gesamte msg (als JSON-String) |
- Blattfelder werden als Textwert zurückgegeben, Objekt / Array als JSON-String.
- lazy subscribe — Topic wird beim ersten Read einmalig abonniert, danach pusht rosbridge neue Samples. Daher kommt der erste Wert erst ab dem nächsten Sammelzyklus.
Datentyp-Zuordnung
| msg-Feld | Datentyp |
|---|---|
float-Felder (data, orientation.z …) | Float / Double |
| int / enum-Felder | Integer |
| bool-Felder | Boolean |
| String / gesamte msg (JSON) | String |
Häufige Topic-Zuordnungen (Referenz)
| Adresse | Bedeutung | Empfohlener Typ |
|---|---|---|
/battery_state:percentage | Batteriestand (sensor_msgs/BatteryState) | Float |
/odom:pose.pose.position.x | Roboterposition x (nav_msgs/Odometry) | Float |
/odom:twist.twist.linear.x | Vorwärtsgeschwindigkeit (nav_msgs/Odometry) | Float |
/diagnostics | Diagnosemeldungen gesamt | String (JSON) |
Bei großen Nachrichten wie /scan (LiDAR-Rohdaten) nicht die gesamte msg erfassen, sondern nur die benötigten Elemente (z. B. /scan:ranges.0) registrieren.
Häufige Probleme
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Wert unmittelbar nach Registrierung leer | lazy subscribe — erster Read führt nur Abonnement aus | bis zum nächsten Sammelzyklus (1 Timecycle) warten |
| Verbindungsfehler (connect failed) | rosbridge_server nicht gestartet / Port falsch | ROS-2-Seite rosbridge_server starten + Port (9090) prüfen |
wss-Verbindungsfehler | TLS-Einstellung / Zertifikat | Bei tls=true muss auch rosbridge mit TLS laufen (wss-Standardport 9443) |
| Wert aktualisiert sich und bleibt dann stehen | WebSocket unterbrochen — Treiber wechselt sofort auf nicht verbunden (gibt keine alten Cache-Werte weiter) | Netzwerk / rosbridge neu starten |
| Topic-Name stimmt, aber Wert leer | Tippfehler im Feld-dot-path (Pfad existiert nicht in msg) | ros2 topic echo <topic> zur Prüfung der msg-Struktur nutzen, dann Pfad korrigieren |
Alternative Integrationswege (Referenz)
In Umgebungen, wo rosbridge nicht möglich ist, stehen folgende Wege zur Verfügung.
| Situation | Alternative |
|---|---|
| Mehrere Roboter + Cloud-Erfassung nötig | MQTT-Bridge → Sparkplug B / MQTT-Client |
| Industrieroboter-Steuerungen (ABB / KUKA / UR) | OPC UA Robotics Companion → OPC-UA |