1. 课程导入
在移动机器人、机械臂、无人机与智能仓储系统中,真正决定系统能否稳定完成任务的,往往不是单个算法模块的性能,而是模块之间如何通信、如何协调、如何在长时任务中保持状态一致。ROS2 提供了话题、服务、动作、参数与执行器等多种通信机制,而“任务通信与行为编排”正是把这些机制组织成可交付工程能力的核心。本课程围绕这一主线展开,帮助学习者从“会调用接口”进阶到“能设计任务系统”。
一、学习目标:从通信原语到任务编排
本课程的学习目标分为四个层次。第一层是通信机制辨析:能够根据数据频率、实时性、是否需要反馈、是否可取消等条件,在话题、服务、动作之间做出合理选择。第二层是行为建模:理解行为树、状态机与任务脚本在 ROS2 中的落地方式,能够把“导航到A点—抓取—返回”这类任务拆解为可执行节点。第三层是工程实现:掌握动作服务器与客户端、执行器回调组、QoS 配置、生命周期节点等关键工程手段。第四层是系统集成:能够将感知、规划、控制与任务调度组合成完整系统,并具备调试、观测与复盘能力。
二、核心概念:任务、行为与通信的三角关系
在 ROS2 中,任务是系统要达成的目标,例如“巡检三个点位”;行为是任务的可执行单元,例如“移动到点位”“旋转扫描”“回充”;通信则是行为之间传递目标、反馈与结果的通道。三者关系可以用下面的结构图表示:任务层负责分解与调度,行为层负责执行与状态维护,通信层负责数据与事件传递。理解这张图,就能理解本课程的整体框架。
三、方法流程:从需求到可运行任务系统
工程实践中,建议遵循“需求拆解—通信选型—行为建模—节点实现—集成调试”的五步流程。第一步,明确任务的成功条件、失败条件与恢复策略;第二步,根据数据特征选择通信机制,并确定 QoS 与频率;第三步,用行为树或状态机描述任务逻辑,避免把调度逻辑硬编码在单个节点中;第四步,实现动作服务器、客户端与执行器回调组;第五步,通过 ros2 topic、ros2 action、rqt 与日志进行观测和调优。
# 典型动作接口定义示例(NavigateToPose.action)
geometry_msgs/PoseStamped target_pose
---
nav2_msgs/action/NavigateToPose_Feedback feedback
---
nav2_msgs/action/NavigateToPose_Result result
# 运行与观测命令
ros2 action list
ros2 action info /navigate_to_pose
ros2 topic echo /cmd_vel
ros2 param get /controller_server follow_path
四、案例场景:移动机器人自主巡检
假设一台差速移动机器人需要完成“从充电桩出发,依次巡检A、B、C三个点位,每个点位停留5秒采集图像,若某点位失败则重试一次,全部完成后返回充电桩”。这个场景几乎覆盖了本课程的全部关键点:任务层需要维护点位队列与重试计数;行为层需要组合导航、旋转、采集与回充行为;通信层需要动作客户端发送目标、接收反馈,并通过话题发布图像与状态。若把重试逻辑写在导航节点内部,系统会迅速变得难以维护;而用行为树把“重试”作为装饰节点,则清晰且可复用。
| 任务阶段 | 推荐通信机制 | 关键参数/接口 | 常见风险 |
|---|---|---|---|
| 导航到点位 | 动作 | NavigateToPose、反馈频率 | 目标不可达、超时未取消 |
| 图像采集 | 话题 + 服务 | /camera/image、触发服务 | QoS 不匹配导致丢帧 |
| 状态上报 | 话题 | /task_status、频率 1Hz | 消息积压、延迟增大 |
| 参数调整 | 参数服务 | set_parameters、回调 | 运行时参数未生效 |
| 异常恢复 | 动作 + 行为树 | 重试节点、回退节点 | 死循环、状态未复位 |
五、误区与复盘:初学者最容易踩的坑
- 用话题做任务控制:话题适合流数据,不适合“下发目标并等待结果”,否则需要自行维护请求ID与超时,容易出错。
- 忽略 QoS 兼容性:发布者与订阅者的可靠性、持久性不匹配时,会出现“能连上但收不到数据”的现象。
- 把调度逻辑塞进执行节点:导航节点只应负责导航,任务顺序应由行为树或状态机管理,否则复用性极差。
- 不处理取消与超时:动作被取消后,服务器必须及时停止并释放资源,否则会出现“幽灵运动”。
- 缺少可观测性:没有状态话题与日志分级,排障时只能靠猜,建议从第一天就设计 /task_status 与诊断信息。
本课程后续将围绕上述框架逐层展开:先夯实话题、服务、动作与 QoS 的通信基础,再进入行为树与状态机的编排方法,最后通过移动机器人巡检项目完成集成与复盘。掌握这套方法后,你不仅能写出可运行的 ROS2 节点,更能设计出可维护、可观测、可恢复的任务系统。