4. 运动规划:速度规划、加速度约束、时间最优轨迹生成
运动规划这个话题,说白了就是让无人机知道「怎么飞过去」。路径规划告诉你走哪条路,运动规划告诉你这条路该怎么走——什么时候加速、什么时候减速、拐弯时该多快。
我在项目里见过不少这样的情况:路径规划做得漂漂亮亮,结果一飞起来,无人机要么急刹车把自己晃晕,要么拐弯时直接侧滑出去。嗯,问题就出在运动规划上。
4.1 速度规划:不是越快越好
很多人觉得无人机飞得越快越好。其实不是。速度规划的核心是:在安全的前提下,尽可能高效。
我个人习惯把速度规划分成三步:
- 确定最大速度——受限于无人机本身的性能
- 确定拐弯速度——受限于转弯半径和向心加速度
- 确定起止速度——起飞和降落阶段必须慢
关键公式:向心加速度约束
v_max = sqrt(a_max × R)
其中 a_max 是最大允许向心加速度,R 是转弯半径。
说白了,弯越急,速度就得越低。
我曾经在一个巡检项目里吃过亏。当时规划的路径有个急弯,我忘了限制拐弯速度,结果无人机在转弯时直接飞出了预定航线,差点撞上旁边的铁塔。从那以后,我每次都会在拐弯点前加一段减速区。
4.2 加速度约束:别让电机「懵」了
加速度约束,说白了就是告诉无人机:你不能一下子把油门推到底,也不能一下子把油门收到底。
为什么?因为电机和螺旋桨有惯性。你想想看,如果指令要求从 0 瞬间加速到 20m/s,电机根本反应不过来。实际表现就是:无人机先抖一下,然后才慢慢加速。
| 约束类型 | 说明 | 典型值(消费级) |
|---|---|---|
| 最大加速度 | 水平方向最大加速能力 | 5-8 m/s² |
| 最大减速度 | 刹车时的减速能力 | 4-6 m/s² |
| 最大向心加速度 | 转弯时的侧向加速度 | 3-5 m/s² |
| 加加速度(Jerk) | 加速度的变化率 | 10-20 m/s³ |
我的经验:加加速度(Jerk)这个参数很多人会忽略。但实际飞行中,Jerk 太大飞控会频繁调整,导致画面抖动。航拍任务里,我一般会把 Jerk 限制在 8 m/s³ 以下。
4.3 时间最优轨迹生成
时间最优,就是让无人机在满足所有约束的前提下,用最短的时间飞完一段路径。
这个问题其实挺有意思的。你可能会想:那还不简单?全程最大速度飞不就行了?
但实际没这么简单。因为路径上有拐弯、有障碍物、有起止点速度要求。你需要找到一个速度曲线,让无人机在每一段都能「刚好」不违反约束。
我常用的方法是梯形速度曲线和S形速度曲线:
- 梯形速度曲线:加速段→匀速段→减速段。简单粗暴,适合大多数场景。
- S形速度曲线:加加速→匀加速→减加速→匀速→加减速→匀减速→减减速。更平滑,适合航拍、测绘等对稳定性要求高的任务。
注意:梯形速度曲线虽然计算快,但在加速段和减速段的切换点会有 Jerk 突变。如果飞控的响应速度不够快,会出现明显的「顿挫感」。我建议在精度要求高的任务里用 S 形曲线。
4.4 核心算法:时间最优的数学表达
时间最优轨迹生成,本质上是一个优化问题。我简单说一下它的数学形式:
目标:最小化 T(总时间)
约束:
1. 位置边界:s(0) = 0, s(T) = L
2. 速度边界:v(0) = v_start, v(T) = v_end
3. 速度约束:0 ≤ v(t) ≤ v_max
4. 加速度约束:|a(t)| ≤ a_max
5. 加加速度约束:|j(t)| ≤ j_max
这个问题的解法有很多。我个人习惯用数值积分法,因为它直观、好调试。具体做法是:
- 把路径离散成 N 段
- 从起点开始,按最大加速度向前积分,得到「前向速度曲线」
- 从终点开始,按最大减速度向后积分,得到「后向速度曲线」
- 取两条曲线的「最小值」,就是时间最优的速度曲线
这个方法叫「双向积分法」,也叫「路径-速度分解法」。我在 PX4 的代码里看到过类似的实现,实际效果很不错。
4.5 知识体系总览
下面这张图是我自己整理的,把运动规划的核心内容串在了一起:
4.6 实际项目中的避坑指南
做了这么多年无人机,我在运动规划上踩过的坑不少。挑几个典型的说说:
- 别忽略电机响应延迟——我曾经在代码里把加速度设得很大,觉得飞控能跟上。结果实际飞行时,电机响应有几十毫秒的延迟,导致速度曲线严重滞后。后来我加了一个「前馈补偿」,才把这个问题解决。
- 拐弯速度要留余量——理论计算出来的最大拐弯速度,实际飞行时最好打 8 折。因为风、载荷变化都会影响实际向心加速度。
- S形曲线不是万能的——虽然 S 形曲线平滑,但计算量大。在计算资源有限的飞控上,我建议只在关键航段用 S 形曲线,普通航段用梯形曲线就够了。
一个小技巧:调试运动规划时,先把速度降到理论值的 50%,确认轨迹没问题后再逐步提速。这样即使有 bug,也不会炸机。
4.7 小结
运动规划这件事,说难不难,说简单也不简单。核心就是三件事:定速度上限、加加速度约束、算时间最优曲线。
我个人觉得,做运动规划最重要的不是算法多高级,而是对物理约束的理解。你想想看,无人机在天上飞,它受的力、电机的响应、空气的阻力,这些都是实实在在的物理限制。算法再漂亮,如果忽略了这些,飞起来一定出问题。