一、轨迹规划概述
各位同学好,我是这门课的主讲。在机器人领域摸爬滚打了十几年,我越来越觉得——轨迹规划才是机器人真正「智能」的分水岭。
你想想看,一个机器人能感知、能决策,但如果连个杯子都端不稳、连条路都走不顺,那前面做的所有工作都白费了。说白了,轨迹规划就是让机器人动得优雅、动得安全、动得高效的那门手艺。
1.1 什么是轨迹规划
先给个定义。轨迹规划,就是在满足运动学和动力学约束的前提下,生成一条从起点到终点的、连续且平滑的运动路径。
注意,这里有两个关键词:
- 路径(Path):只关心空间几何形状,不关心时间。比如「从A点直线走到B点」。
- 轨迹(Trajectory):路径 + 时间信息。比如「从A点直线走到B点,用时2秒,速度先加速后减速」。
一句话总结:路径是「怎么走」,轨迹是「什么时候走到哪里、速度是多少」。
我刚开始做项目时,经常把这两个概念混着用。直到有一次给机械臂做焊接任务,路径明明是对的,但焊出来的焊缝全是疙瘩——后来才发现,是速度规划没做好,焊枪在拐角处停了一下。嗯,从那以后我再也不敢把「路径」和「轨迹」混为一谈了。
1.2 轨迹规划在机器人系统中的地位
一个完整的机器人系统,通常包含这几个模块:
- 感知:看世界、理解世界(摄像头、激光雷达)
- 定位:知道自己在哪里(SLAM、里程计)
- 决策:决定下一步做什么(任务规划、行为树)
- 轨迹规划:决定怎么动(路径 + 时间)
- 控制:执行轨迹(PID、MPC)
轨迹规划处在决策层和控制层之间,是承上启下的关键一环。决策层说「去抓那个杯子」,轨迹规划就要算出一系列关节角度和速度,让控制器去跟踪。
我的经验:很多团队花大把时间优化感知和决策,结果机器人一动就抖、一跑就偏。问题往往出在轨迹规划上——要么约束没加够,要么平滑度不够。我建议,轨迹规划的调试时间,至少占总调试时间的30%。
为什么会这样?因为轨迹规划直接决定了:
- 安全性:会不会撞墙、会不会自碰撞
- 舒适性:加速度突变会不会让负载晃动
- 效率:能不能在最短时间内完成任务
- 能耗:电机能不能吃得消
1.3 常见应用场景
轨迹规划不是实验室里的玩具,它在三个领域用得最多、也最成熟。
1.3.1 机械臂
机械臂的轨迹规划,核心是关节空间和笛卡尔空间两条路线。
| 对比项 | 关节空间规划 | 笛卡尔空间规划 |
|---|---|---|
| 规划对象 | 每个关节的角度、角速度 | 末端执行器的位置、姿态 |
| 优点 | 计算快、无奇异点问题 | 路径直观、适合直线/圆弧 |
| 缺点 | 末端路径不可控 | 可能有奇异点、计算量大 |
| 典型应用 | 点对点搬运、码垛 | 焊接、涂胶、铣削 |
我记得有一次做汽车白车身焊接项目,客户要求焊枪必须沿直线运动。我一开始偷懒用了关节空间规划,结果焊出来的轨迹是弧线——直接被客户怼回来了。后来老老实实换成笛卡尔空间规划,加了个S型速度曲线,才搞定。
避坑指南:笛卡尔空间规划一定要做奇异点检测。我曾经在调试时没加这个,机械臂在某个姿态下突然关节速度爆表,差点把末端执行器甩出去。从那以后,我的代码里永远有一行 if (isSingularity) { switchToJointSpace(); }。
1.3.2 自动驾驶
自动驾驶的轨迹规划,通常分三层:
- 路由规划:从A到B走哪条路(全局路径)
- 行为规划:什么时候变道、什么时候让行
- 运动规划:具体的方向盘转角、油门开度
我们这门课主要关注运动规划这一层。自动驾驶里最经典的轨迹规划方法,就是Frenet坐标系下的横向-纵向解耦规划。
简单说,就是把「车怎么走」拆成两个问题:
- 横向:车在车道里的左右偏移
- 纵向:车沿着车道的前后速度
这样做的好处是,你可以分别优化。比如前面有车,纵向就减速;车道变窄,横向就往中间靠。两个方向合起来,就是一条完整的轨迹。
1.3.3 无人机
无人机轨迹规划和地面机器人最大的区别在于——三维空间 + 动力学约束更复杂。
无人机不能像车一样急转弯,它有最小转弯半径、最大俯仰角、最大爬升率。而且无人机通常没有「路」的概念,需要在三维空间里自由规划。
我做过一个无人机编队表演的项目,核心就是轨迹规划。每架无人机要飞出一条平滑的3D曲线,同时还要保证:
- 不撞到其他无人机
- 灯光变化和轨迹同步
- 电池续航够用
那段时间我天天和B样条曲线、时间最优规划打交道。说实话,看到几百架无人机在夜空里画出图案的那一刻,还是挺有成就感的。
1.4 本章知识体系
下面这张图,是我自己梳理的轨迹规划知识体系。你可以把它当成这门课的「地图」。
这张图把轨迹规划分成了三个应用方向,以及它们底层的核心方法。你会发现,不管哪个方向,最后都会落到多项式插值、最优控制、搜索采样这三类方法上。这也是我们这门课要重点讲的内容。
1.5 学习路径建议
最后,给刚入门的同学一点建议。我见过太多人一上来就啃、调MPC,结果连最基本的梯形速度曲线都写不对。
我的建议是:
- 先动手:用Python写一个简单的点到点轨迹规划,用matplotlib画出来看看
- 再理解:搞清楚为什么要有加加速度约束、为什么S型曲线比梯形曲线好
- 最后深入:再去学MPC、RRT*、B样条这些进阶内容
这门课也是按这个思路设计的。前几章我们会从最基础的轨迹表示和插值方法讲起,慢慢深入到最优控制和避障规划。你跟着走,不会掉队。