1. 课程导论与基础概念:任务规划与轨迹规划的定义、区别与联系

1.1 为什么要把「规划」拆成两件事?

大家好,我是这门课的主讲。先聊个我早年踩过的坑。

刚入行那会儿,我接手过一个移动抓取项目。机器人需要从A点取零件,放到B点的托盘上。我当时想得很简单:写个路径,让机械臂动起来不就完了?结果一跑,机械臂倒是动了——但它先绕过了桌子,又差点撞到墙上的电箱,最后在目标点上方悬停了五秒钟,因为不知道该先放下夹爪还是先旋转手腕。

你看,问题出在哪?

我其实只给了它一条「轨迹」,却没告诉它「任务」是什么。它不知道要先移动到安全高度,再调整姿态,最后执行放置。说白了,我混淆了任务规划和轨迹规划这两个层次。

从那天起,我养成了一个习惯:先拆任务,再算轨迹。这也是这门课的核心思路。

一句话总结:任务规划决定「做什么、按什么顺序做」;轨迹规划决定「具体怎么动、动多快、走哪条路」。

1.2 任务规划 vs 轨迹规划:一张表说清楚

很多同学问我:「这两个东西到底有啥区别?不都是规划吗?」

嗯,我习惯用一个例子来解释:你让一个机器人帮你倒杯水。

  • 任务规划:先走到饮水机 → 拿起杯子 → 按下出水键 → 等水满 → 把杯子端回来。这是逻辑顺序。
  • 轨迹规划:从当前位置到饮水机,手臂以多快的速度伸出,手指以多大的力捏住杯子,手腕转多少度才能让杯口对准出水口。这是运动细节。

下面这张表是我在项目里经常拿来给团队对齐认知的,你直接拿去用:

对比维度 任务规划 轨迹规划
核心问题 做什么?下一步是什么? 怎么动?动多快?
输入 目标状态、环境约束、资源列表 起始位姿、目标位姿、运动学模型
输出 动作序列(如:抓取→移动→放置) 时间-位置-速度-加速度曲线
典型算法 状态机、行为树、PDDL、HTN 多项式插值、S形曲线、RRT、A*
时间尺度 秒级到分钟级 毫秒级到秒级
我常犯的错误 把任务写死,不考虑异常 轨迹算得完美,但任务顺序错了

我的小技巧:在项目初期,我会先用一张白纸画出任务流程图,确定好所有「如果…就…」的分支,再开始写轨迹代码。这样能避免后期大量返工。

1.3 它们是怎么「整合」到一起的?

你可能会问:「既然分开了,那怎么让它们配合工作?」

好问题。我见过不少团队,任务规划用一套系统,轨迹规划用另一套,中间靠一个简陋的接口传数据。结果呢?任务规划说「去抓杯子」,轨迹规划发现杯子位置变了,但任务层不知道,直接报错。

真正的整合,需要做到三点:

  1. 信息闭环:轨迹执行的结果要反馈给任务层,比如「抓取失败,因为目标偏移了2厘米」。
  2. 状态同步:任务规划要知道机器人当前在哪个关节角度、末端在哪,才能决定下一步。
  3. 异常处理:轨迹规划遇到障碍物时,不能只停在原地,要告诉任务层「这条路走不通,换个方案」。

说白了,任务规划是大脑,轨迹规划是手脚。大脑做决策,手脚执行,但手脚如果被烫到了,得喊一声让大脑换个策略。

1.4 课程整体框架:我们怎么学?

这门课一共30章,我把它分成了四个阶段。下面这张图是我自己画的,你可以先存下来当路线图:

课程知识体系与学习路径 阶段一:基础 第1-5章 阶段二:任务规划 第6-13章 阶段三:轨迹规划 第14-23章 阶段四:整合与实战 第24-30章 阶段一:基础 • 任务规划与轨迹规划定义 • 机器人运动学基础 • 坐标系与空间描述 • 环境感知与建模 • 开发环境搭建 阶段二:任务规划 • 状态机与行为树 • PDDL与HTN规划 • 任务分解与调度 • 异常处理与重规划 • 多任务协调 阶段三:轨迹规划 • 关节空间轨迹规划 • 笛卡尔空间轨迹规划 • 速度与加速度约束 • 避障与平滑优化 • 实时轨迹生成 阶段四:整合与实战 任务规划与轨迹规划接口设计 | 系统集成与调试 | 综合项目:自主抓取与装配

四个阶段的设计思路是这样的:

  • 阶段一(第1-5章):打地基。把概念、坐标系、运动学这些基本功练扎实。我见过太多人一上来就调RRT,结果连正逆解都写不对——嗯,别做那种人。
  • 阶段二(第6-13章):深入任务规划。从状态机讲到行为树,再到PDDL和HTN。你会学会怎么让机器人「思考」下一步。
  • 阶段三(第14-23章):死磕轨迹规划。关节空间、笛卡尔空间、避障、平滑优化……这些都是我实际项目中反复调优过的内容。
  • 阶段四(第24-30章):整合实战。把前三个阶段的东西拼起来,做一个完整的抓取-移动-装配系统。这也是最有意思的部分。

1.5 学习目标:学完你能做什么?

我不喜欢讲虚的。学完这门课,你应该能:

  1. 独立设计一个任务规划器:用状态机或行为树描述一个完整的作业流程,包括异常处理。
  2. 编写平滑的轨迹规划算法:从简单的点到点运动,到带避障的连续轨迹。
  3. 打通任务层和轨迹层:让两者通过标准接口通信,实现「任务下发→轨迹执行→结果反馈」的闭环。
  4. 调试真实机器人系统:遇到规划失败时,能快速定位是任务逻辑问题还是轨迹参数问题。

⚠️ 一个重要的提醒:这门课不是纯理论课。每章都有代码示例和练习。我建议你边学边写,哪怕只是把示例代码跑通、改几个参数看看效果,也比只看不练强十倍。我曾经带过一个实习生,他把所有示例都自己重写了一遍,两周后就能独立调通一个简单的抓取任务了。

1.6 我的一点经验之谈

最后,分享一个我个人的工作习惯。

每次开始一个新项目,我不会急着写代码。我会先拿一张纸,画出任务流程图和轨迹规划的关键约束。然后问自己三个问题:

  • 这个任务有哪些步骤?哪些步骤可以并行?
  • 每个步骤对轨迹有什么特殊要求?(比如:末端必须保持水平、速度不能超过0.5m/s)
  • 如果某一步失败了,系统该怎么反应?

把这三个问题想清楚,代码写起来就顺了。你想想看,是不是这个道理?