ROS 2 — Roboter-/AGV-Middleware
ROS 2 (Robot Operating System 2) ist die Standard-Middleware für mobile Roboter, AGVs, kollaborierende Roboter und Drohnen. Auf Basis von DDS (Data Distribution Service, RTPS over UDP/TCP) stellt sie publish/subscribe, service und action bereit. Üblich ist es, Topics (z. B. /odom, /imu, /battery_state) zu abonnieren und so den Roboterzustand zu überwachen.
Der ROS2-Treiber des Gateways ist ein real implementierter Treiber, der sich mit dem JSON-over-WebSocket-Endpunkt der ROS-2-Standardbrücke rosbridge_suite (rosbridge_server) verbindet und Topics abonniert. Da keine direkte DDS-Anbindung erfolgt, muss auf ROS-2-Seite lediglich rosbridge_server laufen. Der Treiber ist schreibgeschützt (read-only).
Vorbereitung — rosbridge_server
Auf 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 wird eingetragen | Beispiel |
|---|---|---|
| IP-Adresse | Host des rosbridge_server | 192.168.0.30 |
| Port | rosbridge-WebSocket-Port | 9090 (Standard ws) / 9443 (Standard wss) |
| Pfad (rosbridge) | Pfad des WebSocket-Endpunkts — Option path | / (Standard) |
| TLS verwenden | false = ws / true = wss — Option tls | false (Standard) |
Der ROS-2-Treiber ist read-only. Das Publizieren von Topics (z. B. Fahrbefehle über /cmd_vel) erfordert rosbridge advertise und wird nicht unterstützt. Nutzen Sie für das Senden von Roboterbefehlen einen separaten Weg.
PLC-Adressnotation der Tags
Die Adresse lautet <topic>:<field.dot.path> — der erste : trennt Topic und Feldpfad (ROS-Topics enthalten /, aber kein :).
| Notation | Bedeutung |
|---|---|
/temperature:data | Feld data von std_msgs/Float64 |
/imu:orientation.z | verschachteltes Feld von sensor_msgs/Imu (dot-path) |
/scan:ranges.0 | Array-Element — das numerische Segment ist der Index |
/odom | ohne : die gesamte msg (JSON-String) |
- Blattfelder werden als Textwert, object/array als JSON-String zurückgegeben.
- lazy subscribe — ein Topic wird beim ersten read einmalig abonniert; danach pusht rosbridge neue Samples. Der erste Wert trifft daher erst ab dem nächsten Erfassungszyklus ein.
Zuordnung der Datenformate
| msg-Feld | Datenformat |
|---|---|
float-Feld (data, orientation.z …) | Float / Double |
| int-/enum-Feld | Integer |
| bool-Feld | Boolean |
| String / gesamte msg (JSON) | String |
Häufig verwendete Topic-Zuordnungen (Referenz)
| Adresse | Bedeutung | Empfohlenes Format |
|---|---|---|
/battery_state:percentage | Batterieladestand (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 | gesamte Diagnosemeldung | String (JSON) |
Bei großen Nachrichten wie /scan (LiDAR raw) sollten Sie nicht die gesamte msg erfassen, sondern nur die benötigten Elemente registrieren (z. B. /scan:ranges.0).
Häufige Probleme
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Wert unmittelbar nach der Registrierung leer | lazy subscribe — der erste read führt nur das Abonnement aus | bis zum nächsten Erfassungszyklus (1× timecycle) warten |
| Verbindung fehlgeschlagen (connect failed) | rosbridge_server läuft nicht / Port stimmt nicht | auf ROS-2-Seite rosbridge_server starten und Port (9090) prüfen |
wss-Verbindung fehlgeschlagen | TLS-Konfiguration / Zertifikat | bei tls=true muss auch rosbridge mit TLS laufen (Standardport für wss: 9443) |
| Werte werden aktualisiert und bleiben dann stehen | WebSocket-Abbruch — der Treiber wechselt sofort in den Zustand „nicht verbunden“ (es werden keine veralteten Cache-Werte weitergeliefert) | Netzwerk prüfen / rosbridge neu starten |
| Topic-Name korrekt, aber leerer Wert | Tippfehler im dot-path des Feldes (Pfad existiert in der msg nicht) | msg-Struktur mit ros2 topic echo <topic> prüfen und Pfad korrigieren |
Alternative Integrationswege (Referenz)
In Umgebungen, in denen rosbridge nicht einsetzbar ist, sind folgende Wege möglich.
| Situation | Alternative |
|---|---|
| viele Roboter + Erfassung bis in die Cloud erforderlich | MQTT bridge → Sparkplug B / MQTT-Client |
| Industrieroboter-Controller (ABB / KUKA / UR) | OPC UA Robotics Companion → OPC-UA |