ROS2 四大核心通信机制完整总结

ROS2 基于 DDS 数据分发服务,设计了四种适配不同业务场景的通信模型,分别是:话题(Topic)、服务(Service)、动作(Action)、参数(Parameter),覆盖单向数据流、同步请求、异步长任务、全局配置四大场景。

一、话题 Topic(发布-订阅 Publish-Subscribe)

1. 核心模型

异步单向数据流,一对多、多对多,发布者持续发数据,订阅者被动接收,无应答、无返回值。

2. 通信流程

  1. Publisher 注册话题,持续周期性/事件性发布消息;
  2. Subscriber 订阅同名话题,自动接收所有发布数据;
  3. DDS 底层负责数据分发,发布者不感知订阅者存在。

3. 数据载体

自定义消息 .msg 文件(纯数据,无请求/响应区分),如 std_msgs/Stringsensor_msgs/Image

4. 适用场景

高频、连续流式数据传输:相机图像、激光雷达、里程计、IMU、电机状态等实时传感器数据流。

5. 优缺点

  • 优点:解耦强、支持多节点收发、实时性高、适合持续数据流;
  • 缺点:无法获取执行结果、不能同步阻塞等待、无确认机制。

二、服务 Service(请求-应答 Request-Response)

1. 核心模型

同步点对点通信,一问一答,严格一对一,客户端发请求,服务端处理后立即返回响应,调用过程阻塞。

2. 通信流程

  1. Server 启动并注册服务名称;
  2. Client 发起同步请求,线程阻塞等待返回;
  3. Server 收到请求计算处理,返回响应数据;
  4. Client 收到结果后解除阻塞,继续执行。

3. 数据载体

服务文件 .srv,分为上下两段:请求数据 --- 响应数据

4. 适用场景

短耗时、一次性查询/控制指令:获取机器人坐标、开关设备、读取传感器单次数值、简单启停指令。

5. 优缺点

  • 优点:有返回结果、同步调用逻辑直观、适合瞬时交互;
  • 缺点:阻塞线程,不适合长时间任务,执行超时会报错。

三、动作 Action(目标-反馈-结果 Goal-Feedback-Result)

1. 核心模型

异步长任务通信,融合服务+话题,三层交互:目标、实时反馈、最终结果,可中途取消任务。

2. 通信底层(内部封装三套通信)

  1. 服务通道:发送目标、取消任务、查询状态(同步);
  2. 话题通道:持续推送过程反馈(异步流式);
  3. 服务返回:任务完成后返回最终执行结果。

3. 通信流程

  1. ActionClient 发送运动目标给 ActionServer;
  2. Server 开始执行任务,持续通过话题推送实时进度反馈;
  3. Client 可随时发送取消指令中断任务;
  4. 任务结束/中断后,Server 返回最终执行结果。

4. 数据载体

动作文件 .action,三段结构:目标 --- 反馈 --- 结果

5. 适用场景

耗时较长、需要进度监控、支持中断的任务:机器人导航、机械臂运动、路径规划、自主巡逻。

6. 优缺点

  • 优点:异步不阻塞、实时进度反馈、支持任务取消,专门适配长时任务;
  • 缺点:内部封装复杂,资源开销高于普通服务。

四、参数 Parameter(节点全局动态配置)

1. 核心模型

节点本地存储+全局共享键值对通信,用于读写配置参数,属于配置管理通信

2. 通信逻辑

ROS2 每个节点自带参数服务,其他节点可通过内置服务读写、修改、监听参数:

  1. 节点启动时声明参数(int/float/string/bool/数组);
  2. 外部节点通过 rclcpp 参数客户端读取/修改参数;
  3. 支持参数变更回调,参数更新自动通知节点。

3. 数据载体

基础基础数据类型,无需自定义消息,支持 yaml 文件批量加载参数。

4. 适用场景

机器人动态参数配置:PID 系数、相机曝光、运动速度阈值、地图路径、开关功能模块。

5. 优缺点

  • 优点:无需自定义消息、热更新无需重启节点、集中管理配置;
  • 缺点:仅适合少量配置数据,不适合大规模数据流传输。

四大通信机制对比速查表

通信机制 交互模式 阻塞性 核心特点 典型文件 典型场景
Topic 话题 发布订阅、多对多 异步非阻塞 持续流式数据、无返回 .msg 传感器、实时状态
Service 服务 请求应答、一对一 同步阻塞 单次调用、即时返回结果 .srv 短时查询、简单控制
Action 动作 目标+反馈+结果 异步可取消 长任务、实时进度、可中断 .action 导航、机械臂运动
Parameter 参数 键值读写、全局共享 同步读写 动态配置、热更新 yaml 配置文件 PID、硬件参数调节

选型核心口诀

  1. 持续数据流 → 话题 Topic
  2. 短时查询、要返回 → 服务 Service
  3. 长时间运动、要进度、可取消 → 动作 Action
  4. 调节配置、参数热更新 → 参数 Parameter