ROS 2 (ロボットミドルウェア) ドライバ
概要
ROS 2 (Robot Operating System 2) は、モバイルロボット / AGV / 協働ロボット / ドローン分野の標準ミドルウェアであり、
DDS (Data Distribution Service, RTPS over UDP/TCP) 上で publish / subscribe / service / action
を提供します。トピック (例: /odom, /scan, /battery_state) を購読してロボットの状態を監視します。
| 項目 | 値 |
|---|---|
opc_type | ROS2 |
| 実装クラス | plantpulse.driver.protocol.ros2.ROS2Driver |
| ライブラリ | rosbridge_suite (JSON over WebSocket, 独自クライアント) |
| read | ✅ トピック購読 — <topic>:<field.dot.path> |
| write | ⛔ 未対応 (読み取り専用) |
| セキュリティ | DDS-Security / SROS2 (ベンダー依存) |
ROS2 は rosbridge_server に WebSocket で接続してトピックを購読する実装です。
登録方法・アドレス仕様は 接続タイプ — ROS 2 が正本であり、以下の
代替運用方法 の bridge パターンのいずれかを使用してください。
なぜ native 実装が難しいのか
ROS 2 の Java クライアントである rcljava は
純粋な Java ライブラリではなく、C++ コア (rcl, rmw) + JNI バインディング 構造です。
| 依存要素 | 説明 | 配布への影響 |
|---|---|---|
rcl (C) | ROS 2 client library コア | プラットフォーム別の .so / .dll が必要 |
rmw middleware | 実際の DDS 実装の抽象化 | どの DDS を使うかをビルド時に決定 |
rmw_cyclonedds_cpp | Eclipse CycloneDDS バックエンド | native lib + license (EPL/EDL) |
rmw_fastrtps_cpp | eProsima Fast DDS バックエンド | native lib + license (Apache 2.0) |
| ROS 2 distro 依存 | Humble / Iron / Jazzy / Rolling の LTS ごとに ABI が異なる | ゲートウェイの OS バージョンとの整合が必要 |
| JNI bridge | rcljava 自体 | Java メモリモデルと DDS thread pool の競合リスク |
したがって、PlantPulse Edge のように多様な OS / アーキテクチャ (x86-64 Linux, ARM64 Linux, Windows Server) で動作する必要のある Java アプリケーションが native ROS 2 クライアントを直接組み込むことは、 配布 / ライブラリ競合 / バージョン整合 の面で非常にコストが大きくなります。
代替運用方法
ROS 2 陣営では、外部システム統合用に bridge ノードが標準化されています。 PlantPulse は bridge の出力インターフェースを受け取るだけで済みます。
オプション 1. rosbridge_server (WebSocket / REST)
ROS 2 側に rosbridge_suite を起動すると、
JSON over WebSocket / HTTP でトピックの購読が可能になります。
| 使用する PlantPulse ドライバ | ページ |
|---|---|
HTTP (REST polling または WebSocket bridge) | HTTP |
オプション 2. MQTT bridge
ros2-mqtt-bridge などの bridge で ROS 2 トピックを
MQTT トピックに変換します。
| 使用する PlantPulse の入口 | ページ |
|---|---|
| Sparkplug B 入力 | Sparkplug B |
オプション 3. OPC UA Robotics Companion Specification
OPC Foundation + VDMA が標準化した OPC UA Robotics Companion Spec に対応するロボットコントローラ (例: ABB OmniCore, KUKA KR C5, Universal Robots PolyScope X) が増えています。 この場合、ROS 2 自体ではなくコントローラの OPC UA サーバーに直接接続できます。
| 使用する PlantPulse ドライバ | ページ |
|---|---|
OPCUA | OPC-UA |
どのオプションを選ぶべきか
| 状況 | 推奨 |
|---|---|
| 自社開発の ROS 2 システム (モバイル AGV など) | rosbridge_server + HTTP ドライバ |
| 多数のロボット + クラウド収集まで必要 | MQTT bridge → Sparkplug B |
| 産業用ロボットコントローラ (ABB / KUKA / UR) | OPC UA Robotics Companion → OPCUA ドライバ |
| 単純な状態テレメトリ 1〜2 トピック | rosbridge_server REST polling |
今後 native 実装を行う場合の考慮事項
| オプション | 依存関係 | 難易度 |
|---|---|---|
| rcljava の組み込み | rcl + rmw + DDS の native .so / .dll | 非常に高 |
| ROS 2 Java クライアント (jros2client などの fork) | 非公式、メンテナンスが弱い | 高 |
| 独自 RTPS パーサ (UDP マルチキャスト) | RTPS 仕様を直接実装 | 非常に高 |
PlantPulse Edge の単一 jar 配布モデル内で native ROS 2 クライアントを組み込む計画はありません。 公式に推奨する統合経路は rosbridge_server (HTTP) または OPC UA Robotics Companion (OPCUA) です。
stub 登録 (テスト専用)
curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_ROS2_STUB",
"opc_type": "ROS2",
"opc_name": "ROS 2 stub",
"opc_agent_ip": "192.168.0.0",
"opc_agent_port": "0",
"site_id": "SITE_00001",
"auto_collect": false,
"timecycle": 5000,
"tag_list": []
}'