多项式轨迹表示
路径规划可以得到一系列路径点,而轨迹则是时间的函数,可以使用n阶多项式表示:
\[
\begin{aligned}
f(t) &=p_{0}+p_{1} t+p_{2} t^{2}+\cdots+p_{n} t^{n} \\
&=\sum_{i=0}^{n} p_{i} t^{i}
\end{aligned}
\]
写成向量形式:
\[
f(t)=\left[\begin{array}{llll}
1 & t & \cdots & t^{n}
\end{array}\right]\left[\begin{array}{c}
p_{0} \\
p_{1} \\
\vdots \\
p_{n}
\end{array}\right]
\]
对轨迹函数求导,可以得到速度、加速度、jerk等参数随时间变化的函数:
\[
\begin{aligned}
\operatorname{vel}(t) &=f^{(1)}(t)=\left[\begin{array}{llllll}
0 & 1 & 2 t & 3 t^{2} & \cdots & \frac{n !}{(n-1) !} t^{n-1}
\end{array}\right] \cdot p \\
\operatorname{acc}(t) &=f^{(2)}(t)=\left[\begin{array}{llllll}
0 & 0 & 2 & 6 t & \cdots & \frac{n !}{(n-2) !} t^{n-2}
\end{array}\right] \cdot p \\
\operatorname{jerk}(t) &=f^{(3)}(t)=\left[\begin{array}{llllll}
0 & 0 & 0 & 6 & \cdots & \frac{n !}{(n-3) !} t^{n-3}
\end{array}\right] \cdot p \\
p &= \left[ \begin{array}{} p_0 & p_1 \cdots p_n \end{array} \right]^T
\end{aligned}
\]
概括得到轨迹的k阶通用导数:
\[
f^{(k)}(t)=\left[\begin{array}{}
\overbrace{ \begin{array}{}0 &{0} &{\cdots} &{0} \end{array} }^{k} & \overbrace{ \begin{array}{} \frac{(k+0) !}{0 !} t^{0} &{\frac{(k+1) !}{1 !} t^{1}} &{\frac{(k+2) !}{2 !} t^{2}} &{\cdots} &{\frac{n !}{(n-k) !} t^{n-k}} \end{array} }^{n-k+1}
\end{array}\right] \cdot p
\]
Minimum-jerk
Minimum-jerk,顾名思义就是求解每段轨迹的系数p使得总的jerk最小,同时还要满足约束条件,所以这是一个带约束的最优化问题。
jerk是轨迹\(f(t)\)的3阶导数,所以令\(k=3\),Minimum-jerk会直接对首尾的位置、速度和加速度进行约束,这就有6个等式约束了,所以优化参数必须提供6个以上的自由度,而5阶多项式有6个系数,所以符合要求的多项式的最小阶次为\(n = order = 5\).因此可以选择五阶多项式表示轨迹:
\[
f(t)=\left\{\begin{array}{cc}
p_{1,0}+p_{1,1} t+p_{1,2} t^{2}+p_{1,3} t^{3}+p_{1,4} t^{4}+p_{1,5} t^{5} & T_{0} \leq t \leq T_{1} \\
p_{2,0}+p_{2,1} t+p_{2,2} t^{2}+p_{2,3} t^{3}+p_{2,4} t^{4}+p_{2,5} t^{5} & T_{1} \leq t \leq T_{2} \\
\vdots & \\
p_{M, 0}+p_{M, 1} t+p_{M, 2} t^{2}+p_{M, 3} t^{3}+p_{M, 4} t^{4}+p_{M, 5} t^{5} & T_{M-1} \leq t<T_{M}
\end{array}\right.
\]
包含M段多项式,每段有\(n + 1 = 6\)个参数。
目标函数
Minimum-jerk使整个轨迹jerk最小即是是jerk积分最小,选择jerk 2范数最小:
\[
\min _{p} f^{(3)}(t)=\min _{p} \sum_{i=1}^{M} \int_{T_{i-1}}^{T_{i}}\left(f^{(3)}(t)\right)^{2} d t
\]
定义目标函数:
\[
J(p) = \sum_{i=1}^{M} \int_{T_{i-1}}^{T_{i}}\left(f^{(3)}(t)\right)^{2} d t
\]
令\(a = \left[\begin{array}{}0 & 0 & 0 & 6 & \cdots & \frac{n !}{(n-3) !} t^{n-3}\end{array}\right]^T\). 对\(f^{(3)}(t)\)求平方:
\[
\begin{aligned}
\left(f^{(3)}(t)\right)^{2} &\left.=\left(\begin{array}{llllll}
0 & 0 & 0 & 6 & 12 t & 20 t^{2}
\end{array}\right] \cdot p\right)^{T}\left(\left[\begin{array}{llllll}
0 & 0 & 0 & 6 & 12 t & 20 t^{2}
\end{array}\right] \cdot p\right) \\
&=\left(a^{T} p\right)^{T}\left(a^{T} p\right) \\
&=p^{T} a a^{T} p
\end{aligned}
\]
令\(A(t) = aa^T\):
\[
A=a a^{T}=\left[\begin{array}{c}
0 \\
0 \\
0 \\
6 \\
12 t \\
20 t^{2}
\end{array}\right]\left[\begin{array}{llllll}
0 & 0 & 0 & 6 & 12 t & 20 t^{2}
\end{array}\right]=\left[\begin{array}{cccccc}
0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 36 & 72 t & 120 t^{2} \\
0 & 0 & 0 & 72 t & 144 t^{2} & 240 t^{3} \\
0 & 0 & 0 & 120 t^{2} & 240 t^{3} & 400 t^{4}
\end{array}\right]
\]
因此积分:
\[
\begin{aligned}
\int_{T_{i-1}}^{T_{i}}\left(f^{(3)}(t)\right)^{2} d t &=\int_{T_{i-1}}^{T_{i}} p^{T} A(t) p d t \\
&=p^{T} \cdot \int_{T_{i-1}}^{T_{i}} A(t) d t \cdot p
\end{aligned}
\]
令\(A(t)\)的积分矩阵Q:
\[
Q=\int_{T_{i-1}}^{T_{i}} A(t) d t=\left[\begin{array}{cccccc}
0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 36 t & 36 t^{2} & 40 t^{3} \\
0 & 0 & 0 & 36 t^{2} & 48 t^{3} & 60 t^{4} \\
0 & 0 & 0 & 40 t^{3} & 60 t^{4} & 80 t^{5}
\end{array}\right]_{T_{i-1}}^{T_i}
\]
因此目标函数:
\[
\begin{aligned}
J(p) &=\sum_{i=1}^{M} \int_{T_{i-1}}^{T_{i}}\left(f^{(3)}(t)\right)^{2} \\
&=\sum_{i=1}^{M} p_{i}^{T} Q_{i} p_{i} \\
&=\left[\begin{array}{llll}
p_{1}^{T} & p_{2}^{T} & \cdots & p_{M}^{T}
\end{array}\right]\left[\begin{array}{llll}
Q_{1} & & & & \\
& Q_{2} & & \\ & & \ddots & \\
& & & Q_{M}
\end{array}\right]\left[\begin{array}{c}
p_{1} \\
p_{2} \\
\vdots \\
p_{M}
\end{array}\right] \\
&=p^{T} Q p \\
p &= \left[\begin{array}{llll}
p_{1}^{T} & p_{2}^{T} & \cdots & p_{M}^{T}
\end{array}\right]^{T}=\left[\begin{array}{lllllll}
p_{1,0} & p_{1,1} & \cdots & p_{1, K} & p_{2,0} & \cdots & p_{M, K}
\end{array}\right]^{T}
\end{aligned}
\]
可以看到\(J(p)\)是一个二次型,所以基于Minimum-jerk的轨迹优化问题可以转换为一个二次规划问题。
约束
如果不考虑障碍物,主要有两类约束,一类是导数约束(Derivative Constraint),它约束了轨迹的初始状态和终止状态,以及每一段轨迹的开始/结束位置,也就是用路径规划得到的路径点对轨迹进行约束;另一类约束是连续性约束(Continuity Constraint),它可以使相邻轨迹平滑过渡。
导数约束
-
初始状态和终止状态约束,如位置、速度、加速度等状态
\[
\left\{\begin{array}{l}
f^{(k)}\left(T_{0}\right)=x_{0}^{(k)} \\
f^{(k)}\left(T_{M}\right)=x_{M}^{(k)}
\end{array}, k=0,1, \cdots, K-1\right.
\]
-
每一段轨迹的初始位置由路径点给出,\(x_0, x_1, \dots x_M\)。
\[
f_i(T_{i-1}) = x_{i - 1}
\]
连续性约束
在两段轨迹的连接点处,我们希望这个点处的轨迹是平滑的,可以通过施加连续性约束来实现这个要求,也就是使相邻两段轨迹在连接点k-1阶导数分别相等
\[
\begin{gathered}
f_{i}\left(T_{i}\right)=f_{i+1}\left(T_{i}\right) \\
f_{i}^{(1)}\left(T_{i}\right)=f_{i+1}^{(1)}\left(T_{i}\right) \\
\vdots \\
f_{i}^{(k)}\left(T_{i}\right)=f_{i+1}^{(k)}\left(T_{i}\right)
\end{gathered}
\]
其中\(i = 1, 2, \dots M-1\)表示第i段轨迹。对于M+1个路径点,一共有M段轨迹,连续性约束一共有\(k * (M-1)\)。
对于Minimum-jerk,要求每一段轨迹连接处的位置、速度、加速度一致。
References
[1] Richter C, Bry A, Roy N. Polynomial trajectory planning for aggressive quadrotor flight in dense indoor environments[M]//Robotics Research. Springer International Publishing, 2016: 649-666.
[2] Mellinger D, Kumar V. Minimum snap trajectory generation and control for quadrotors[C]//Robotics and Automation (ICRA), 2011 IEEE International Conference on. IEEE, 2011: 2520-2525.