跳到主要内容

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 是通过 WebSocket 接入 rosbridge_server 并订阅话题的实际实现。 注册方法与地址约定以 连接类型 — ROS 2 为准,以下请使用 替代运行方案 中的某一种 bridge 模式。


为什么 native 实现困难

ROS 2 的 Java 客户端 rcljava 并非纯 Java 库, 而是 C++ 内核 (rclrmw) + 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 distroHumble / 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 轮询或 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 轮询

今后进行 native 实现时的考量事项

方案依赖难度
内嵌 rcljavarcl + 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": []
}'