一架无人机从 0 米处出发,第 4 秒经过 4 米处的航点,第 10 秒到达 10 米处并停下。每段运动使用五次多项式,相邻两段共享航点处的位置、速度和加速度。
给航点指定速度 1 米/秒、加速度 0,就能求出一条轨迹。改变这两个数,会得到其他同样经过航点的运动安排。
轨迹优化进一步回答:按照一个明确的评价标准,航点速度和加速度应该取多少?
本文使用 Jerk 平方积分作为评价标准,沿同一个算例,先求通过速度,再同时求速度与加速度。
一、哪些条件固定,哪些数值可以调整?
通道中的直线路径已经通过碰撞检查,用沿通道的坐标 p 表示无人机中心的位置。下面计算沿这条直线的参考运动。
航点 W 把运动分为两段:第一段 4 秒,第二段 6 秒。用 w 表示经过 W 时的速度,用 α 表示当时的加速度。
| 条件 |
起点 S |
航点 W |
终点 G |
| 到达时刻 |
0 秒 |
4 秒 |
10 秒 |
| 位置 |
0 米 |
4 米 |
10 米 |
| 速度 |
0 |
待求:w |
0 |
| 加速度 |
0 |
待求:α |
0 |
途中仍要求:
0≤v(t)≤2m/s,∣a(t)∣≤1m/s2.
先把 α 固定为 0,只调整 w,例如分别以 1、1.5、1.875 米/秒经过 W(方案 A、B、C)。每选择一个速度,两段曲线就分别获得六个边界条件,可以求出全部系数。第一段终点与第二段起点使用相同的 w,速度在航点处连续。
这里将 w=1、α=0 作为原方案,用来对照后续结果。分段时间始终保持 4 秒和 6 秒。
二、用 Jerk 给整条运动评分
1. Jerk 描述加速度怎样变化
加速度对时间的变化率称为 Jerk(加加速度),记为 j(t):
j(t)=dtda(t)=dt3d3p(t).
例如,加速度在 1 秒内从 0 均匀增加到 0.6m/s2,这段 Jerk 为:
j=10.6−0=0.6m/s3.
相同变化若在 0.2 秒内完成,Jerk 就变成:
j=0.20.6−0=3m/s3.
完成同样的加速度变化,时间越短,对应的变化率越大。
2. 为什么使用平方积分?
先把 Jerk 平方,再沿运动时间累积:
J=∫010j(t)2dt.
平方使正、负 Jerk 都产生非负代价,并让较大的变化率获得更大的权重。积分则把整个运动过程的贡献加起来。
以两段各持续 1 秒的简化记录为例:
| Jerk 记录 |
平方后累计的代价 |
| 前 1 秒为 +1,后 1 秒为 −1 |
12×1+(−1)2×1=2 |
| 前 1 秒为 +2,后 1 秒为 −2 |
22×1+(−2)2×1=8 |
对连续变化的 Jerk,可以把时间分成很多小段,近似计算:
J≈j12Δt+j22Δt+⋯.
时间段不断细分,就得到上面的积分。J 的单位为 m2/s5,后文的代价数值均使用这个单位。
Minimum Jerk 在满足指定条件的轨迹中,寻找这个积分最小的方案。 本文在两段五次多项式组成的轨迹中进行求解,速度和加速度上限在得到候选解后逐段核验。
三、把航点速度写进两段曲线
1. 第一段:速度 w 怎样影响系数?
第一段使用归一化时间:
s=4t,0≤t≤4.
起点位置、速度、加速度都为 0,因此五次式只剩:
P1(s)=b3s3+b4s4+b5s5.
第一段结束时,位置为 4,实际速度为 w,加速度为 0。对应的方程为:
b3+b4+b53b3+4b4+5b56b3+12b4+20b5=4,=4w,=0.
第二行右侧的 4w,来自 P1′(1)/4=w。归一化时间下的导数需要除以 4,才是实际速度。
与求固定边界的曲线一样,通过消元得到:
b4+2b5=4w−12,
3b4+7b5=−12.
第二式减去第一式的 3 倍:
b5=−12−3(4w−12)=24−12w.
代回,依次得到:
b4=28w−60,b3=40−16w.
于是:
P1(s)=(40−16w)s3+(28w−60)s4+(24−12w)s5.
这次求出的系数中保留了 w。将不同的速度代进去,就得到不同的第一段曲线。
2. 第二段:从同一个速度 w 接续
第二段使用自己的时间刻度:
s=6t−4,4≤t≤10.
起点位置为 4,速度为 w,加速度为 0,因此:
P2(s)=4+6ws+d3s3+d4s4+d5s5.
6ws 对实际时间求导后,在本段起点给出速度 w。
把终点位置 10、速度 0、加速度 0 代入,得到:
d3+d4+d53d3+4d4+5d56d3+12d4+20d5=6−6w,=−6w,=0.
使用相同的消元方法:
P2(s)=4+6ws+(60−36w)s3+(48w−90)s4+(36−18w)s5.
两式中的 s 分别是各自的归一化时间。数值公式中,时间按秒计,位置按米计,w 按米/秒计;后面的 α 按米/秒²计。相应系数带有匹配的单位。
3. 代入一次,核对曲线的来源
取原方案 w=1,两式变为:
P1(s)=24s3−32s4+12s5,
P2(s)=4+6s+24s3−42s4+18s5.
它们分别满足(位置、速度、加速度):
| 分段 |
起点状态 |
终点状态 |
| 第一段 |
(0, 0, 0) |
(4, 1, 0) |
| 第二段 |
(4, 1, 0) |
(10, 0, 0) |
现在,两段运动都由同一个待求速度 w 控制。 后面要做的,就是比较不同 w 对应的总代价。
四、从曲线算出一个关于速度的代价函数
1. 归一化时间怎样进入积分?
设某一段持续 T 秒,位置表示为 P(s),其中 s 从 0 变化到 1。
连续对实际时间求三次导数:
j=T3P′′′(s).
这一段中,归一化时间增加 ds,实际时间就增加 dt=Tds。因此,本段代价为:
∫j2dt=T51∫01[P′′′(s)]2ds.
其中,Jerk 的平方带来 1/T6,时间换算再乘上 T,合起来是 1/T5。
本例的两段代价相加:
J(w,0)=451∫01[P1′′′(s)]2ds+651∫01[P2′′′(s)]2ds.
J(w,0) 中的第二个参数表示:这一阶段将航点加速度固定为 0。
2. 先给原方案算一次分数
代入 w=1,第一段的实际 Jerk 为:
j1(s)=64144−768s+720s2=49−12s+445s2.
第二段为:
j2(s)=216144−1008s+1080s2=32−314s+5s2.
两段分别持续 4 秒和 6 秒,所以:
J1=4∫01(49−12s+445s2)2ds=3,
J2=6∫01(32−314s+5s2)2ds=98.
这些积分可以直接把平方展开,再逐项计算。例如:
∫01skds=k+11.
对于 j(s)=A+Bs+Cs2,展开后的统一结果为:
∫01j(s)2ds=A2+AB+3B2+2AC+2BC+5C2.
第一段使用 A=9/4、B=−12、C=45/4,上式得到 3/4,再乘本段的 4 秒,得到 J1=3。
原方案的总代价为:
J(1,0)=3+98=935≈3.8889.
这个数就成为比较其他方案的基准。
3. 保留 w,得到整条代价曲线
在两段位置公式中保留 w,执行同样的“求三次导数—平方—积分”。例如,第一段的实际 Jerk 为:
j1(s;w)=(415−23w)+(221w−245)s+(245−445w)s2.
将三个括号分别作为上一节公式中的 A、B、C,积分后再乘本段的 4 秒,就得到 J1(w)。第二段采用相同计算,乘上对应的 6 秒。结果为:
J1(w)=3w2−445w+445,
J2(w)=98w2−310w+310.
相加得到:
J(w,0)=935w2−12175w+12175.
每一个 w 对应两段完整曲线,这个函数则给出它们的总代价:
| 航点速度 w(米/秒) |
Jerk 平方积分 J(w,0) |
| 1.000 |
3.8889 |
| 1.500 |
1.4583 |
| 1.875 |
0.9115 |
| 2.000 |
0.9722 |
这里先比较平滑代价,整段速度与加速度的上限将在后面核验。
五、找出航点速度:1.875 米/秒
代价函数是一个二次函数,可以整理成:
J(w,0)=935(w−815)2+192175.
平方项总是大于或等于 0。当:
w=815=1.875m/s
时,平方项恰好为 0,代价取得最低值:
Jmin,α=0=192175≈0.9115.

从图上看,原方案 w=1 位于最低点左侧。提高通过速度,能够减少这组运动中的加速度变化;超过最低点后,代价又开始增加。
将 w=1.875 代回位置公式:
P1(s)=10s3−7.5s4+1.5s5,
P2(s)=4+11.25s−7.5s3+2.25s5.
比较几个时刻:
| 总时刻(秒) |
原方案速度(米/秒) |
只优化 w 后的速度(米/秒) |
| 0 |
0 |
0 |
| 2 |
1.4375 |
1.0547 |
| 4 |
1.0000 |
1.8750 |
| 7 |
1.4375 |
1.0547 |
| 10 |
0 |
0 |
原方案在航点前减速到 1,通过后再次加速。新方案在第一段持续加速,在第二段持续减速,航点处以更高速度通过。两种方案都在第 4 秒到达 4 米处,第 10 秒到达终点。
这一步的最优结果,针对“航点加速度固定为零、只调整航点速度”的轨迹集合。
六、再把航点加速度交给优化
1. 增加一个待求数 α
接下来,让航点加速度也参与选择。第一段末端与第二段起点仍使用相同的 α,保证加速度连续。
令上一节含 w 的两段公式分别记为 P1(s;w,0) 和 P2(s;w,0)。加入加速度条件后,得到:
P1(s;w,α)=P1(s;w,0)+8α(s3−2s4+s5),
P2(s;w,α)=P2(s;w,0)+18α(s2−3s3+3s4−s5).
这些新增项来自两段的加速度边界方程。它们在相应端点保留原有位置与速度,并调整加速度。
例如,第一段新增项在 s=1 处的二阶导数为 16α,除以 42 后,正好增加实际加速度 α。第二段新增项在 s=0 处的二阶导数为 36α,除以 62 后,同样得到 α。
2. 重新计算总代价
继续对两段求三次导数、平方并积分,得到:
J(w,α)=935w2−25wα+415α2−12175w+625α+12175.
令 α=0,就回到上一节的代价函数。现在每一组 (w,α) 都对应一条完整轨迹和一个分数。
要找这个二次函数的最低点,分别计算两个方向的变化率。
先暂时把 α 当作常数,对 w 求导:
∂w∂J=970w−25α−12175.
再把 w 当作常数,对 α 求导:
∂α∂J=−25w+215α+625.
符号 ∂ 表示只改变其中一个变量时的变化率。令两者为 0,并去掉分母,得到两个线性方程:
56w−18α−3w+9α=105,=−5.
3. 解出两个具体数值
由第二式:
α=3w−95.
代入第一式:
56w−18(3w−95)=105,
整理:
56w−6w+10=105,50w=95.
因此:
w=1.9m/s,
α=907≈0.07778m/s2.
总代价为:
Jmin=432385≈0.8912.
还可以用平方项核对它确实是最低值。记相对这一结果的偏移为:
Δw=w−1019,Δα=α−907.
同一个代价函数可以整理成:
J=432385+935(Δw−289Δα)2+112375(Δα)2.
两个平方项的系数都为正。只有 Δw=0、Δα=0 时,两项同时消失,因此得到这组分段轨迹中的唯一最低点。
七、把优化结果还原成运动,再检查约束
1. 求解结果对应哪两条曲线?
将 w=19/10、α=7/90 代回系数,第一段为:
P1(s)=45460s3−362s4+82s5.
第二段为:
P2(s)=4+11.4s+1.4s2−12.6s3+5.4s4+0.4s5.
整条位置轨迹仍按总时间分段:
p(t)={P1(t/4),P2((t−4)/6),0≤t≤4,4<t≤10.
例如,第 7 秒位于第二段,s=(7−4)/6=0.5。代入位置公式:
p(7)=4+11.4×0.5+1.4×0.25−12.6×0.125+5.4×0.0625+0.4×0.03125=8.825 米.
同样计算速度和加速度:
| 总时刻(秒) |
位置(米) |
速度(米/秒) |
加速度(米/秒²) |
| 0 |
0 |
0 |
0 |
| 2 |
0.8319 |
1.0535 |
0.6931 |
| 4 |
4.0000 |
1.9000 |
0.0778 |
| 5 |
5.8848 |
1.8197 |
-0.2212 |
| 7 |
8.8250 |
1.0292 |
-0.4944 |
| 10 |
10.0000 |
0 |
0 |
航点处加速度略大于零,所以经过 W 后,速度还会短暂增加,随后进入减速阶段。
2. 检查速度和加速度峰值
对每段,仍然采用同一套极值检查方法:求位置的一、二、三阶时间导数,在加速度为零处检查速度极值,在 Jerk 为零处检查加速度极值,并把各段端点一起比较。
计算得到:
| 检查项目 |
出现时刻(秒,约) |
数值 |
| 整段最高速度 |
4.2298 |
1.9088m/s |
| 最大正加速度 |
1.6616 |
+0.7145m/s2 |
| 最小负加速度 |
7.1866 |
−0.4965m/s2 |
端点与各段极值比较后,得到:
0≤v(t)≤1.9089<2m/s,
∣a(t)∣≤0.7146<1m/s2.
速度始终非负,位置从 0 米单调增加到 10 米,沿着原来已经检查过的直线前进。起终状态与航点时刻也都满足要求。
本例先求只受位置、时间和衔接条件限制的最低代价解,再验证运动上限。它通过了全部检查,因此也满足加上这些速度、加速度限制后的问题。
3. 对照三种方案
| 方案 |
航点速度 |
航点加速度 |
最高速度 |
加速度大小峰值 |
Jerk 代价 |
| 原方案 |
1.000 |
0 |
1.512 |
0.9851 |
3.8889 |
| 只优化速度 |
1.875 |
0 |
1.875 |
0.7217 |
0.9115 |
| 同时优化速度、加速度 |
1.900 |
0.0778 |
1.9088 |
0.7145 |
0.8912 |
表中速度按米/秒计,加速度按米/秒²计,Jerk 代价按米²/秒⁵计。三种方案都使用相同的到达时间和航点位置。

优化后的速度在前半段逐渐升高,通过航点附近后逐渐降低。原方案中“航点前减速、航点后再加速”的过程被重新安排。

加速度也随之改变:更长时间地保持适度加速,再转入减速,降低了本例中的加速度变化代价。
4. Jerk 曲线发生了什么变化?

原方案在航点两侧的 Jerk 为:
j1(1)=1.5,j2(0)=32.
优化后:
j1(1)=j2(0)=−0.35m/s3.
本例在共同求解 w 和 α 后,航点两侧的 Jerk 也连续起来。曲线正、负部分平方后累积,给出前面算出的总代价。
积分衡量的是整段加速度变化的累计程度。某一时刻的 Jerk 峰值、速度上限和加速度上限,各有相应的检查;需要直接限制 Jerk 大小时,可以另外加入 ∣j(t)∣≤jmax。
运动区间两端的 Jerk 由本次求解确定。若还要与前后静止段实现 Jerk 连续,可以继续把起终 Jerk 为零写入边界条件,并增加相应的轨迹自由度。
八、这就是一次完整的轨迹优化
整个过程可以整理为:
其中,w 和 α 是决策变量,Jerk 平方积分是目标函数,位置、时间、连续性和运动上限构成约束。
本例的系数随 w、α 线性变化,Jerk 也随它们线性变化。平方并积分后,目标就成为关于两个变量的二次函数,因此能通过两个线性方程求出最低点。
增加航点后,可以把各个中间速度和加速度一起作为变量。每个航点同时影响前后两段,所有段的代价相加,形成一个共同求解的问题。
如果某个候选解超出速度或加速度上限,就需要将相应限制纳入求解;到达时间允许调整时,还可以联合选择分段时间。空间曲线还需要按机体模型进行整段碰撞检查。
小结
给航点指定速度和加速度,可以生成一条分段轨迹;把这些数作为变量,再用 Jerk 平方积分比较,就形成了 Minimum Jerk 轨迹优化。
在这个 10 米算例中,原方案以 1 米/秒通过航点,总代价约为 3.8889。只优化通过速度,得到 1.875 米/秒;同时优化速度和加速度,得到 1.9 米/秒与约 0.0778 米/秒²,总代价降到约 0.8912,并满足既定运动上限。
每一个待求数都对应一个航点状态,每一次求导都对应一种运动量,目标函数把整条运动转化成可以比较的分数。 轨迹优化就在这组对应关系中,选出满足要求的运动安排。