4. 运动规划:速度规划、加速度约束、时间最优轨迹生成

运动规划这个话题,说白了就是让无人机知道「怎么飞过去」。路径规划告诉你走哪条路,运动规划告诉你这条路该怎么走——什么时候加速、什么时候减速、拐弯时该多快。

我在项目里见过不少这样的情况:路径规划做得漂漂亮亮,结果一飞起来,无人机要么急刹车把自己晃晕,要么拐弯时直接侧滑出去。嗯,问题就出在运动规划上。

4.1 速度规划:不是越快越好

很多人觉得无人机飞得越快越好。其实不是。速度规划的核心是:在安全的前提下,尽可能高效。

我个人习惯把速度规划分成三步:

  1. 确定最大速度——受限于无人机本身的性能
  2. 确定拐弯速度——受限于转弯半径和向心加速度
  3. 确定起止速度——起飞和降落阶段必须慢

关键公式:向心加速度约束

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

这个问题的解法有很多。我个人习惯用数值积分法,因为它直观、好调试。具体做法是:

  1. 把路径离散成 N 段
  2. 从起点开始,按最大加速度向前积分,得到「前向速度曲线」
  3. 从终点开始,按最大减速度向后积分,得到「后向速度曲线」
  4. 取两条曲线的「最小值」,就是时间最优的速度曲线

这个方法叫「双向积分法」,也叫「路径-速度分解法」。我在 PX4 的代码里看到过类似的实现,实际效果很不错。

4.5 知识体系总览

下面这张图是我自己整理的,把运动规划的核心内容串在了一起:

运动规划知识体系 运动规划知识体系 运动规划 速度规划 最大速度约束 拐弯速度限制 起止速度控制 加速度约束 最大加速度 最大减速度 加加速度(Jerk) 时间最优轨迹 梯形速度曲线 S形速度曲线 双向积分法 平滑、安全、高效的速度指令 💡 核心思路: 速度规划定上限 → 加速度约束定变化率 → 时间最优算法定具体曲线 → 输出给飞控执行

4.6 实际项目中的避坑指南

做了这么多年无人机,我在运动规划上踩过的坑不少。挑几个典型的说说:

  • 别忽略电机响应延迟——我曾经在代码里把加速度设得很大,觉得飞控能跟上。结果实际飞行时,电机响应有几十毫秒的延迟,导致速度曲线严重滞后。后来我加了一个「前馈补偿」,才把这个问题解决。
  • 拐弯速度要留余量——理论计算出来的最大拐弯速度,实际飞行时最好打 8 折。因为风、载荷变化都会影响实际向心加速度。
  • S形曲线不是万能的——虽然 S 形曲线平滑,但计算量大。在计算资源有限的飞控上,我建议只在关键航段用 S 形曲线,普通航段用梯形曲线就够了。

一个小技巧:调试运动规划时,先把速度降到理论值的 50%,确认轨迹没问题后再逐步提速。这样即使有 bug,也不会炸机。

4.7 小结

运动规划这件事,说难不难,说简单也不简单。核心就是三件事:定速度上限、加加速度约束、算时间最优曲线。

我个人觉得,做运动规划最重要的不是算法多高级,而是对物理约束的理解。你想想看,无人机在天上飞,它受的力、电机的响应、空气的阻力,这些都是实实在在的物理限制。算法再漂亮,如果忽略了这些,飞起来一定出问题。