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 ドライバは読み取り専用です。トピック publish(例: /cmd_vel 移動コマンド)は rosbridge の advertise が必要なためサポートしていません。ロボットへのコマンド送信は別経路を使用してください。
タグの PLC アドレス表記
アドレスは <topic>:<field.dot.path> — 最初の : でトピックとフィールドパスを分離します(ROS トピックは / を含み、: はありません)。
| 表記 | 意味 |
|---|---|
/temperature:data | std_msgs/Float64 の data フィールド |
/imu:orientation.z | sensor_msgs/Imu のネストしたフィールド(ドットパス) |
/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 ブリッジ → Sparkplug B / MQTT クライアント |
| 産業用ロボットコントローラ (ABB / KUKA / UR) | OPC UA Robotics Companion → OPC-UA |