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

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_typeROS2
実装クラスplantpulse.driver.protocol.ros2.ROS2Driver
ライブラリrosbridge_suite (JSON over WebSocket, 独自クライアント)
read✅ トピック購読 — <topic>:<field.dot.path>
write⛔ 未対応 (読み取り専用)
セキュリティDDS-Security / SROS2 (ベンダー依存)
現在の状態: rosbridge 実装済み (2026-07)

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_cppEclipse CycloneDDS バックエンドnative lib + license (EPL/EDL)
rmw_fastrtps_cppeProsima Fast DDS バックエンドnative lib + license (Apache 2.0)
ROS 2 distro 依存Humble / Iron / Jazzy / Rolling の LTS ごとに ABI が異なるゲートウェイの OS バージョンとの整合が必要
JNI bridgercljava 自体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 ドライバページ
OPCUAOPC-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": []
}'