メインコンテンツまでスキップ

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 — オプション tlsfalse (既定)
書き込み非対応

ROS 2 ドライバは read 専用 です。トピックの publish (例: /cmd_vel による移動指令) は rosbridge の advertise が必要となるためサポートしません。ロボットへの指令送信は別経路を使用してください。


タグの PLC アドレス表記

アドレスは <topic>:<field.dot.path>最初の : でトピックとフィールドパスを分離します (ROS トピックは / を含み、: は含まないため)。

表記意味
/temperature:datastd_msgs/Float64data フィールド
/imu:orientation.zsensor_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