跳到主要内容

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

ROS 2 驱动仅支持读取。话题 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 时订阅一次,之后由 rosbridge 推送新样本。因此首个值从下一个采集周期开始才会进来。

数据格式匹配

msg 字段数据格式
float 字段(dataorientation.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 仅执行订阅等待下一个采集周期(1 次 timecycle)
连接失败 (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