ROS2 基于 DDS 数据分发服务设计了四种适配不同业务场景的通信模型分别是话题Topic、服务Service、动作Action、参数Parameter覆盖单向数据流、同步请求、异步长任务、全局配置四大场景。一、话题 Topic发布-订阅 Publish-Subscribe1. 核心模型异步单向数据流一对多、多对多发布者持续发数据订阅者被动接收无应答、无返回值。2. 通信流程Publisher 注册话题持续周期性/事件性发布消息Subscriber 订阅同名话题自动接收所有发布数据DDS 底层负责数据分发发布者不感知订阅者存在。3. 数据载体自定义消息.msg文件纯数据无请求/响应区分如std_msgs/String、sensor_msgs/Image。4. 适用场景高频、连续流式数据传输相机图像、激光雷达、里程计、IMU、电机状态等实时传感器数据流。5. 优缺点优点解耦强、支持多节点收发、实时性高、适合持续数据流缺点无法获取执行结果、不能同步阻塞等待、无确认机制。二、服务 Service请求-应答 Request-Response1. 核心模型同步点对点通信一问一答严格一对一客户端发请求服务端处理后立即返回响应调用过程阻塞。2. 通信流程Server 启动并注册服务名称Client 发起同步请求线程阻塞等待返回Server 收到请求计算处理返回响应数据Client 收到结果后解除阻塞继续执行。3. 数据载体服务文件.srv分为上下两段请求数据 --- 响应数据。4. 适用场景短耗时、一次性查询/控制指令获取机器人坐标、开关设备、读取传感器单次数值、简单启停指令。5. 优缺点优点有返回结果、同步调用逻辑直观、适合瞬时交互缺点阻塞线程不适合长时间任务执行超时会报错。三、动作 Action目标-反馈-结果 Goal-Feedback-Result1. 核心模型异步长任务通信融合服务话题三层交互目标、实时反馈、最终结果可中途取消任务。2. 通信底层内部封装三套通信服务通道发送目标、取消任务、查询状态同步话题通道持续推送过程反馈异步流式服务返回任务完成后返回最终执行结果。3. 通信流程ActionClient 发送运动目标给 ActionServerServer 开始执行任务持续通过话题推送实时进度反馈Client 可随时发送取消指令中断任务任务结束/中断后Server 返回最终执行结果。4. 数据载体动作文件.action三段结构目标 --- 反馈 --- 结果。5. 适用场景耗时较长、需要进度监控、支持中断的任务机器人导航、机械臂运动、路径规划、自主巡逻。6. 优缺点优点异步不阻塞、实时进度反馈、支持任务取消专门适配长时任务缺点内部封装复杂资源开销高于普通服务。四、参数 Parameter节点全局动态配置1. 核心模型节点本地存储全局共享键值对通信用于读写配置参数属于配置管理通信。2. 通信逻辑ROS2 每个节点自带参数服务其他节点可通过内置服务读写、修改、监听参数节点启动时声明参数int/float/string/bool/数组外部节点通过rclcpp参数客户端读取/修改参数支持参数变更回调参数更新自动通知节点。3. 数据载体基础基础数据类型无需自定义消息支持 yaml 文件批量加载参数。4. 适用场景机器人动态参数配置PID 系数、相机曝光、运动速度阈值、地图路径、开关功能模块。5. 优缺点优点无需自定义消息、热更新无需重启节点、集中管理配置缺点仅适合少量配置数据不适合大规模数据流传输。四大通信机制对比速查表通信机制交互模式阻塞性核心特点典型文件典型场景Topic 话题发布订阅、多对多异步非阻塞持续流式数据、无返回.msg传感器、实时状态Service 服务请求应答、一对一同步阻塞单次调用、即时返回结果.srv短时查询、简单控制Action 动作目标反馈结果异步可取消长任务、实时进度、可中断.action导航、机械臂运动Parameter 参数键值读写、全局共享同步读写动态配置、热更新yaml 配置文件PID、硬件参数调节选型核心口诀持续数据流 → 话题 Topic短时查询、要返回 → 服务 Service长时间运动、要进度、可取消 → 动作 Action调节配置、参数热更新 → 参数 Parameter