一架无人机从 0 米处出发,第 4 秒经过 4 米处的航点,第 10 秒到达 10 米处并停下。通过航点时,速度给定为 1.9 米/秒,加速度为 7/90 米/秒²。
运动开始前和结束后保持静止。为了让加速度的变化也能与静止阶段衔接,起终点的 Jerk 都设为零,两段运动在航点处使用同一个 Jerk。
现在需要选择的是:航点处的 Jerk 应当取多少,才能让整段运动的 Jerk 变化代价最小?
下面用两段七次多项式,逐步计算这个数,并检查得到的运动。
一、从 Jerk 再向前一步:Snap 是什么?
1. 用变化率描述运动
位置、速度、加速度和 Jerk 依次通过求导联系起来:
p(t) ⟶ v(t) ⟶ a(t) ⟶ j(t).
每向右一步,都在问前一个量随时间怎样变化。继续对 Jerk 求导,得到 Snap,本文记为 σ(t):
σ(t)=dtdj(t)=dt4d4p(t).
例如,Jerk 在 1 秒内从 0 均匀增加到 0.6m/s3,这段 Snap 为:
σ=10.6−0=0.6m/s4.
同样的 Jerk 变化,若在 0.2 秒内完成,则:
σ=0.20.6−0=3m/s4.
Snap 描述 Jerk 变化得有多快。 在 Jerk 随时间变化的图上,它对应曲线的斜率。
2. 给整段变化一个分数
将 Snap 平方,再沿时间累积,得到:
J4=∫010σ(t)2dt.
平方让正、负 Snap 都贡献非负代价,积分把各个时刻的贡献加起来。J4 的单位为 m2/s7。
Minimum Snap 使用这个积分作为目标函数,在规定的边界与衔接条件下选择轨迹。
这里有两个需要一起确定的部分:边界条件规定起终 Jerk 为零、航点 Jerk 连续;目标函数比较满足这些条件的运动,衡量整段 Jerk 的变化。
二、把待求数放进运动要求
1. 固定条件与待求量
通道中的直线路径已经通过碰撞检查,用沿通道的坐标 p 表示无人机中心位置。本文计算沿这条直线的参考运动。
航点 W 把运动分为两段:第一段 4 秒,第二段 6 秒。把航点处的 Jerk 记为 κ,读作 kappa:
| 运动量 |
起点 S |
航点 W |
终点 G |
| 位置(米) |
0 |
4 |
10 |
| 速度(米/秒) |
0 |
1.9 |
0 |
| 加速度(米/秒²) |
0 |
7/90≈0.07778 |
0 |
| Jerk(米/秒³) |
0 |
待求:κ |
0 |
第一段结束时与第二段开始时,都使用同一个 κ。位置、速度、加速度和 Jerk 四个量由此在航点处连续。
途中要求保持:
0≤v(t)≤2m/s,∣a(t)∣≤1m/s2.
本例固定航点速度、加速度和分段时间,只优化航点 Jerk。 先求这组条件下的最低 Snap 代价,再检查速度、加速度上限。
2. 为什么使用七次多项式?
每段起点和终点各有四项要求:位置、速度、加速度、Jerk,共八个条件。
选择含八个系数的七次多项式:
P(s)=b0+b1s+b2s2+⋯+b7s7.
这里 s 是本段从 0 到 1 的归一化时间。一段持续 T 秒时:
v=TP′(s),a=T2P′′(s),j=T3P′′′(s),σ=T4P′′′′(s).
撇号表示对 s 求导。每求一次实际时间导数,就多除以一次 T。
给定 κ 后,每段的八个边界条件都已确定,能够求出八个系数。改变 κ,两段曲线也随之变化。
三、把两段曲线写成航点 Jerk 的函数
1. 第一段:从静止进入运动
第一段使用:
s=4t,0≤t≤4.
起点的位置、速度、加速度和 Jerk 都为零,所以:
b0=b1=b2=b3=0.
例如,起点 Jerk 为 6b3/43,令它等于零,就得到 b3=0。剩下:
P1(s)=b4s4+b5s5+b6s6+b7s7.
在本段终点 s=1,分别代入位置、速度、加速度和 Jerk:
b4+b5+b6+b74b4+5b5+6b6+7b712b4+20b5+30b6+42b724b4+60b5+120b6+210b7=4,=4×1.9=538,=42×907=4556,=43κ=64κ.
每一行都对应表中的一项要求。例如最后一行表示:归一化曲线的三阶导数除以 64,必须得到实际 Jerk κ。
可以依次消元。第二行减去第一行的 4 倍,得到:
b5+2b6+3b7=−542.
第三行减去第一行的 12 倍,再用上式消去 b5,得到:
b6+3b7=992.
第四行先消去 b4,再用这两个关系消去 b5 和 b6,剩下:
6b7=64κ−15584.
于是:
b7=332κ−45292.
逐个代回,得到全部系数:
| 系数 |
关于 κ 的表达式 |
| b4 |
9262−332κ |
| b5 |
32κ−452174 |
| b6 |
451336−32κ |
| b7 |
332κ−45292 |
这些数字都来自同一组边界方程。每选一个 κ,就能算出第一段完整运动。
2. 第二段:从航点状态接续
第二段使用自己的时间刻度:
s=6t−4,4≤t≤10.
起点位置为 4,速度为 1.9,加速度为 7/90,Jerk 为 κ。它们直接确定前四项:
P2(s)=4+557s+57s2+36κs3+d4s4+d5s5+d6s6+d7s7.
例如:
6(57/5)=1.9,622(7/5)=907,636(36κ)=κ.
它们分别给出本段起始速度、加速度和 Jerk。
再把终点位置 10、速度 0、加速度 0、Jerk 0 代入,解出剩余系数:
| 系数 |
关于 κ 的表达式 |
| d4 |
−144κ−32 |
| d5 |
216κ+37 |
| d6 |
−144κ−557 |
| d7 |
36κ−52 |
以下数值公式统一采用米、秒为单位,κ 按米/秒³计;多项式中的各项系数带有对应的单位。
现在,整条轨迹只剩一个待求数 κ。它同时改变航点前后的两段运动。
四、把 Snap 积分变成一个二次函数
1. 先求一段曲线的 Snap
对七次多项式求四次导数,低于四次的项都消失:
P′′′′(s)=24b4+120b5s+360b6s2+840b7s3.
例如,b4s4 连续求导四次:
b4s4→4b4s3→12b4s2→24b4s→24b4.
对于第一段,代入上一节的系数,再除以 44=256,得到实际 Snap:
σ1(s;κ)=(48131−κ)+(15κ−481087)s+(4167−45κ)s2+(35κ−24511)s3.
每个 κ 都对应一条具体的 Snap 曲线,后面要累计它的平方。
2. 归一化时间怎样影响代价?
一段持续 T 秒,满足 dt=Tds。因此:
∫σ(t)2dt=T71∫01[P′′′′(s)]2ds.
这里,Snap 平方带来 1/T8,时间换算乘上 T,合起来为 1/T7。
本例的总代价为:
J4(κ)=471∫01[P1′′′′(s)]2ds+671∫01[P2′′′′(s)]2ds.
3. 展开平方,逐项积分
先把一个三次式写成:
σ(s)=A+Bs+Cs2+Ds3.
平方展开后,每项都是 s 的幂,可以使用:
∫01smds=m+11.
例如,平方中的常数项 A2 积分后为 A2;一次项 2ABs 积分后为 AB。把全部项相加:
∫01σ(s)2ds=A2+AB+3B2+2AC+2AD+BC+5C2+2BD+3CD+7D2.
以 κ=0 为例,第一段使用:
A=48131,B=−481087,C=4167,D=−24511.
代入后,归一化区间上的积分为 6023/8640。第一段实际持续 4 秒,因此:
J4,1(0)=4×86406023=21606023≈2.7884.
这里积分的是已经换算成实际单位的 σ,所以只需乘本段时间。
保留 κ,按同样的方法计算两段,得到:
J4,1(κ)=4κ2+1213κ+21606023,
J4,2(κ)=38κ2+2732κ+145806151.
相加:
J4(κ)=320κ2+108245κ+1166437445.
一个航点 Jerk,决定两段轨迹;两段 Snap 的平方积分,给这个选择打出一个分数。
比较几组取值:
| 航点 Jerk κ(米/秒³) |
第一段代价 |
第二段代价 |
总代价 J4 |
| -0.500 |
3.2468 |
0.4960 |
3.7427 |
| -0.350 |
2.8993 |
0.3337 |
3.2330 |
| 0 |
2.7884 |
0.4219 |
3.2103 |
| 0.200 |
3.1651 |
0.7656 |
3.9307 |
表中所有方案使用相同的时间和边界要求,代价单位均为米²/秒⁷。最低点可以继续通过这个二次函数求出。
五、求出最优航点 Jerk
对代价函数求导:
dκdJ4=340κ+108245.
在最低点,变化率为零。令上式等于零,两边乘以 108:
1440κ+245=0.
得到:
κ=−28849≈−0.17014m/s3.
还可以把代价整理成平方形式:
J4(κ)=320(κ+28849)2+186624563105.
平方项大于或等于零,只有 κ=−49/288 时恰好为零。因此,它是本例固定时间、航点速度和加速度条件下,两段七次曲线的唯一最低代价解。
最低代价为:
J4,min=186624563105≈3.0173.

将 κ 从 0 调到这个值,第一段代价从约 2.7884 降到 2.7199,第二段从约 0.4219 降到 0.2974,总代价随之下降。
航点加速度为 7/90>0,Jerk 则为负。这两个量描述不同的变化:此时速度还在增加,加速度正在减小。
六、恢复曲线,看它怎样运动
1. 代回系数,得到两段位置公式
将 κ=−49/288 代入,第一段为:
P1(s)=27835s4−452419s5+15527s6−1351121s7.
第二段为:
P2(s)=4+557s+57s2−849s3−215s4+41s5+10131s6−40261s7.
按总时间写成:
p(t)={P1(t/4),P2((t−4)/6),0≤t≤4,4<t≤10.
例如,第 2 秒位于第一段,s=2/4=0.5。位置为:
p(2)=27835(21)4−452419(21)5+15527(21)6−1351121(21)7=1728012737≈0.7371 米.
在同一个 s=0.5 处,计算 P1′/4、P1′′/16 和 P1′′′/64,就得到速度、加速度和 Jerk。
| 总时刻(秒) |
位置(米) |
速度(米/秒) |
加速度(米/秒²) |
Jerk(米/秒³) |
| 0 |
0 |
0 |
0 |
0 |
| 2 |
0.7371 |
1.0859 |
0.8353 |
-0.2689 |
| 4 |
4.0000 |
1.9000 |
0.0778 |
-0.1701 |
| 7 |
8.9771 |
1.0462 |
-0.5959 |
-0.0562 |
| 10 |
10.0000 |
0 |
0 |
0 |
第 4 秒的四个量同时构成第一段末端与第二段起点的状态。
2. Jerk 怎样接到静止阶段?
下图使用一条五次轨迹作为对照。它采用相同的时间、位置、速度和加速度条件,以 Jerk 平方积分为目标求得;起终 Jerk 分别为 23/24 和 13/36m/s3。
本篇七次曲线进一步指定起终 Jerk 为零。

运动前后的静止段中,速度、加速度和 Jerk 都为零。本篇曲线的这三个量在两端也都为零,位置则分别接到 0 米和 10 米处。
航点两侧同样满足:
p(4−)v(4−)a(4−)j(4−)=p(4+)=4,=v(4+)=1.9,=a(4+)=907,=j(4+)=−28849.
4− 和 4+ 分别表示从第 4 秒之前、之后接近这个时刻。两侧位置及前三阶导数都接得上,称为 C3 连续。
图中两种方案的边界条件有所不同,因此这里观察的是它们的衔接与运动形态;Snap 代价的高低,则在前面那组具有相同条件的七次曲线之间比较。
3. Snap 曲线显示了什么?

Snap 为正时,Jerk 上升;Snap 为负时,Jerk 下降。曲线的正负变化共同塑造了上一张图中的 Jerk。
本例最优解在航点两侧还满足:
σ(4−)=σ(4+)=−365≈−0.1389m/s4.
这个关系可以直接由两段位置公式求四次导数核对,它是本次优化产生的结果。
在运动区间两端,Snap 与静止段的零值之间仍有有限跳变。本文规定的整体连续性到 Jerk 为止。
七、检查速度与加速度上限
1. 查询整段曲线的极值
要核验上限,需要检查每一段内部可能出现的极值,再与段端点比较。
| 要检查的量 |
变化率 |
需要计算的候选时刻 |
| 速度 v |
加速度 a |
每段满足 a=0 的时刻,以及段端点 |
| 加速度 a |
Jerk j |
每段满足 j=0 的时刻,以及段端点 |
计算时,只保留归一化区间 0≤s≤1 内的实根。求出根后,再用本段开始时刻和持续时间换回总时间。
例如,第二段速度峰值对应 s≈0.065813。换回总时间:
t=4+6s≈4.3949 秒.
把各段候选点一起比较,得到:
| 检查项目 |
总时刻(秒,约) |
数值 |
| 最高速度 |
4.3949 |
1.9160m/s |
| 最大正加速度 |
1.6940 |
+0.8783m/s2 |
| 最小负加速度 |
7.2151 |
−0.6020m/s2 |
整段速度保持非负。结合端点和全部极值:
0≤v(t)≤1.9161<2m/s,
∣a(t)∣≤0.8783<1m/s2.
因此,本例求得的最低代价解同时满足速度和加速度限制。位置也从 0 米单调增加到 10 米,始终沿着已检查过的直线路径运动。
2. 运动上限与平滑代价分别观察


加入起终 Jerk 条件后,曲线在整个时间区间内重新分配运动。与图中的五次曲线相比,本篇方案的速度峰值、加速度峰值略有增加,同时满足既定上限。
平方积分评价整段变化,运动上限约束某个量允许达到多大。 两者共同决定最终可用的方案。需要限制 Snap 峰值时,可以再规定 ∣σ(t)∣≤σmax。
八、从这个算例理解 Minimum Snap
本例的求解过程可以整理成:
这里的航点速度 1.9 和加速度 7/90 都是固定条件。得到的 κ=−49/288,是在这组固定条件下的最优选择。
当任务允许同时选择航点速度、加速度和 Jerk 时,可以把这三个量一起作为决策变量;增加航点后,再把各航点的待求状态放进同一个问题。固定分段时间时,边界方程使系数随这些变量线性变化,平方积分由此形成一个二次目标。
Minimum Jerk 与 Minimum Snap 的评价对象可以这样对应:
| 方法 |
目标函数 |
评价的变化 |
| Minimum Jerk |
∫j(t)2dt |
加速度的变化 |
| Minimum Snap |
∫σ(t)2dt |
Jerk 的变化 |
它们各自配合明确的边界、连续性和运动约束使用。比较方案的代价时,需要统一目标函数、时间和约束条件。
小结
在这个两段、10 米的算例中,给起终点增加 Jerk 为零的条件,再把航点 Jerk 作为变量,就得到了一组能够连续衔接的七次轨迹。
Snap 平方积分将这组曲线转化为一个关于 κ 的二次函数。最低点为 κ=−49/288≈−0.17014 米/秒³,恢复后的轨迹满足指定航点状态,并通过了速度、加速度上限检查。
边界条件决定曲线怎样衔接,目标函数决定在可选曲线中怎样取舍,区间检查决定运动需求是否符合限制。
轨迹已经给出了位置、速度、加速度以及更高阶变化。接下来可以进一步研究:执行这段运动需要怎样的推力与姿态,以及这些要求怎样通过多旋翼动力学计算出来。