Zum Hauptinhalt springen

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​

EingabefeldWas eintragenBeispiel
IP-Adresserosbridge_server-Host192.168.0.30
Portrosbridge-WebSocket-Port9090 (ws Standard) / 9443 (wss Standard)
Pfad (rosbridge)WebSocket-Endpunkt-Pfad — optional path/ (Standard)
TLS verwendenfalse = ws / true = wss — optional tlsfalse (Standard)
Schreiben nicht unterstützt

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

NotationBedeutung
/temperature:datastd_msgs/Float64-Feld von data
/imu:orientation.zverschachteltes Feld von sensor_msgs/Imu (dot-path)
/scan:ranges.0Array-Element — numerisches Segment ist Index
/odomohne : 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-FeldDatentyp
float-Felder (data, orientation.z …)Float / Double
int / enum-FelderInteger
bool-FelderBoolean
String / gesamte msg (JSON)String

Häufige Topic-Zuordnungen (Referenz)​

AdresseBedeutungEmpfohlener Typ
/battery_state:percentageBatteriestand (sensor_msgs/BatteryState)Float
/odom:pose.pose.position.xRoboterposition x (nav_msgs/Odometry)Float
/odom:twist.twist.linear.xVorwärtsgeschwindigkeit (nav_msgs/Odometry)Float
/diagnosticsDiagnosemeldungen gesamtString (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​

SymptomMögliche UrsacheLösung
Wert unmittelbar nach Registrierung leerlazy subscribe — erster Read führt nur Abonnement ausbis zum nächsten Sammelzyklus (1 Timecycle) warten
Verbindungsfehler (connect failed)rosbridge_server nicht gestartet / Port falschROS-2-Seite rosbridge_server starten + Port (9090) prüfen
wss-VerbindungsfehlerTLS-Einstellung / ZertifikatBei tls=true muss auch rosbridge mit TLS laufen (wss-Standardport 9443)
Wert aktualisiert sich und bleibt dann stehenWebSocket unterbrochen — Treiber wechselt sofort auf nicht verbunden (gibt keine alten Cache-Werte weiter)Netzwerk / rosbridge neu starten
Topic-Name stimmt, aber Wert leerTippfehler 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.

SituationAlternative
Mehrere Roboter + Cloud-Erfassung nötigMQTT-Bridge → Sparkplug B / MQTT-Client
Industrieroboter-Steuerungen (ABB / KUKA / UR)OPC UA Robotics Companion → OPC-UA