ROS 2 — ロボット / AGV ミドルウェア
ROS 2 (Robot Operating System 2) は、モバイルロボット / AGV / 協働ロボット / ドローン分野の標準ミドルウェアで、DDS (Data Distribution Service, RTPS over UDP/TCP) 上で publish / subscribe / service / action を提供します。トピック (例: /odom, /imu, /battery_state) を購読してロボットの状態を監視するのが一般的です。
ゲートウェイの ROS2 ドライバは、ROS 2 標準ブリッジ rosbridge_suite (rosbridge_server) の JSON over WebSocket エンドポイントに接続してトピックを購読する 実装済みドライバ です。DDS へ直接接続しないため、ROS 2 側では rosbridge_server を起動するだけで済みます。読み取り専用 です。
事前準備 — rosbridge_server
ROS 2 側 (ロボット本体または同一ネットワーク上の PC) に標準パッケージ rosbridge_suite をインストールし、起動します。
# 예: ROS 2 Humble
sudo apt install ros-humble-rosbridge-suite
ros2 launch rosbridge_server rosbridge_websocket_launch.xml # 기본 ws 포트 9090
登録フォームの入力値
| 入力欄 | 何を入力するか | 例 |
|---|---|---|
| IP アドレス | rosbridge_server ホスト | 192.168.0.30 |
| ポート | rosbridge WebSocket ポート | 9090 (ws 既定) / 9443 (wss 既定) |
| パス (rosbridge) | WebSocket エンドポイントのパス — オプション path | / (既定) |
| TLS 使用 | false = ws / true = wss — オプション tls | false (既定) |
ROS 2 ドライバは read 専用 です。トピックの publish (例: /cmd_vel による移動指令) は rosbridge の advertise が必要となるためサポートしません。ロボットへの指令送信は別経路を使用してください。
タグの PLC アドレス表記
アドレスは <topic>:<field.dot.path> — 最初の : でトピックとフィールドパスを分離します (ROS トピックは / を含み、: は含まないため)。
| 表記 | 意味 |
|---|---|
/temperature:data | std_msgs/Float64 の data フィールド |
/imu:orientation.z | sensor_msgs/Imu の入れ子フィールド (dot-path) |
/scan:ranges.0 | 配列要素 — 数値セグメントがインデックス |
/odom | : がなければ msg 全体 (JSON 文字列) |
- リーフフィールドはテキスト値として、object / array は JSON 文字列として返されます。
- lazy subscribe — トピックは最初の read 時に 1 回購読され、以降は rosbridge が新しいサンプルを push します。したがって 最初の値は次の収集周期から 取得されます。
データ形式のマッチング
| msg フィールド | データ形式 |
|---|---|
float フィールド (data, orientation.z …) | Float / Double |
| int / enum フィールド | Integer |
| bool フィールド | Boolean |
| 文字列 / msg 全体 (JSON) | String |
よく使うトピックのマッピング (参考)
| アドレス | 意味 | 推奨形式 |
|---|---|---|
/battery_state:percentage | バッテリー残量 (sensor_msgs/BatteryState) | Float |
/odom:pose.pose.position.x | ロボット位置 x (nav_msgs/Odometry) | Float |
/odom:twist.twist.linear.x | 前進速度 (nav_msgs/Odometry) | Float |
/diagnostics | 診断メッセージ全体 | String (JSON) |
/scan (LiDAR raw) のような大きなメッセージは msg 全体の収集を避け、必要な要素のみ (例: /scan:ranges.0) を登録してください。
よくある問題
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| 登録直後に値が空 | lazy subscribe — 最初の read は購読のみ実行 | 次の収集周期 (timecycle 1 回) まで待機 |
| 接続失敗 (connect failed) | rosbridge_server 未起動 / ポート不一致 | ROS 2 側で rosbridge_server を起動し、ポート (9090) を確認 |
wss 接続失敗 | TLS 設定 / 証明書 | tls=true の場合は rosbridge も TLS で起動する必要あり (wss 既定ポート 9443) |
| 値の更新が途中で止まる | WebSocket 切断 — ドライバは即座に未接続へ遷移 (古いキャッシュ値を返し続けません) | ネットワーク / rosbridge の再起動を確認 |
| トピック名は正しいのに値が空 | フィールド dot-path の誤り (msg に存在しないパス) | ros2 topic echo <topic> で msg 構造を確認し、パスを修正 |
他の統合経路 (参考)
rosbridge を利用できない環境では、次の経路も可能です。
| 状況 | 代替手段 |
|---|---|
| 多数のロボット + クラウド収集まで必要 | MQTT bridge → Sparkplug B / MQTT クライアント |
| 産業用ロボットコントローラ (ABB / KUKA / UR) | OPC UA Robotics Companion → OPC-UA |