跳到主要内容

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/ (默认)
使用 TLSfalse = ws / true = wss — 可选 tlsfalse (默认)
不支持写入

ROS 2 驱动是只读的。不支持主题发布(例如:/cmd_vel 移动命令),因为需要 rosbridge advertise。机器人命令发送请使用其他路径。


标签的 PLC 地址表示法​

地址格式为 <topic>:<field.dot.path> — 以第一个 : 分隔主题和字段路径(ROS 主题包含 /,但不包含 :)。

表示法含义
/temperature:datastd_msgs/Float64 的 data 字段
/imu:orientation.zsensor_msgs/Imu 的嵌套字段(点路径)
/scan:ranges.0数组元素 — 数字段为索引
/odom如果没有 :,则获取整个 msg(JSON 字符串)
  • 叶子字段以文本值返回,object / array 以 JSON 字符串返回。
  • lazy subscribe — 主题在首次读取时订阅一次,之后 rosbridge 推送新样本。因此第一个值从下一个采集周期开始才会到达。

数据类型匹配​

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 — 首次读取仅执行订阅等待下一个采集周期(timecycle 1次)
连接失败 (connect failed)rosbridge_server 未运行 / 端口不匹配在 ROS 2 侧启动 rosbridge_server 并确认端口 (9090)
wss 连接失败TLS 设置 / 证书如果使用 tls=true,rosbridge 也必须以 TLS 方式运行(wss 默认端口 9443)
值更新后停止WebSocket 断开 — 驱动会立即切换到未连接状态(不会持续返回旧缓存值)确认网络 / 重启 rosbridge
主题名称正确但值为空字段点路径拼写错误(msg 中不存在的路径)使用 ros2 topic echo <topic> 检查 msg 结构并修正路径

其他集成路径(参考)​

在无法使用 rosbridge 的环境中,也可以使用以下路径。

情况替代方案
多机器人 + 需要云端采集MQTT 桥接 → Sparkplug B / MQTT 客户端
工业机器人控制器 (ABB / KUKA / UR)OPC UA Robotics Companion → OPC-UA