Minimum Snap 轨迹优化问题
文章目录
1. 前景
上一章介绍了OBVP的基本原理,但OBVP更多的关心从起点到终点,如何规划一条最优的路径,但是如果中间出现很多个必经节点(例如巡检工作),则需要经过多次OBVP进行计算。那么出现这种情况可以通过本章的算法进行解决。
一般最小化Jerk(acceleration的导数),目的用于最小化角速度,可用于视觉跟踪(最小化视觉变化率)。最小化snap(jerk的导数)可以节省能量。在实际情况下,具体最小化哪种还需要从时间的准确度进行综合衡量。
导数次数 | 位置 | 姿态 |
---|---|---|
0 | Position | |
1 | Velocity | |
2 | Acceleration | Rotation |
3 | Jerk | Angular Velocity |
4 | Snap | Angular Acceleration |
2. 基本原理
2.1 轨迹生成条件
- 边界条件:起点、终点状态(位置、速度、加速度等)
- 中间点:可有 A ∗ 、 R R T ∗ A^*、RRT^* A∗、RRT∗算法提供
- 评价函数:通过评价函数得到轨迹的平滑性指标。
2.2 评价函数
f ( t ) = { f 1 ( t ) = ∑ i = 0 N p 1 , t t i T 0 ≤ t ≤ T 1 f 2 ( t ) = ∑ i = 0 N p 2 , t t i T 1 ≤ t ≤ T 2 . . . f M ( t ) = ∑ i = 0 N p M , t t i T M − 1 ≤ t ≤ T M f(t) = \left\{ {\begin{matrix} {{f_1}(t) = \sum\nolimits_{i = 0}^N {{p_{1,t}}{t^i} \quad \quad{T_0} \le t \le {T_1}} }\\ {{f_2}(t) = \sum\nolimits_{i = 0}^N {{p_{2,t}}{t^i} \quad \quad{T_1} \le t \le {T_2}} }\\ {...}\\ {{f_M}(t) = \sum\nolimits_{i = 0}^N {{p_{M,t}}{t^i} \quad \quad {T_{M - 1}} \le t \le {T_M}} } \end{matrix}} \right. f(t)=⎩⎪⎪⎨⎪⎪⎧f1(t)=∑i=0Np1,ttiT0≤t≤T1f2(t)=∑i=0Np2,ttiT1≤t≤T2...fM(t)=∑i=0NpM,ttiTM−1≤t≤TM
通过上式可知,每一段轨迹均为多项式表示,为了简化计算过程,每一段轨迹的参数系数一致,即轨迹阶数一致。其次每段轨迹的时间 T T T是固定的,并不像OBVP那样可得到最优的时间 T T T。
因此目标函数,即最小化
f
(
t
)
f(t)
f(t)。单段轨迹
f
(
t
)
f(t)
f(t)矩阵化简得。其中
f
(
4
)
f^{(4)}
f(4)中的
4
4
4表示Minimum Snap,状态变量为
(
p
,
v
,
a
,
j
)
(p,v,a,j)
(p,v,a,j) 4个;对
f
(
4
)
f^{(4)}
f(4)进行平方处理,目的是为了防止方程中正负号相消,这点类似最小二乘算法中的平方。
f
(
t
)
=
∑
i
p
i
t
i
⇒
f
(
4
)
(
t
)
=
∑
i
≥
4
i
(
i
−
1
)
(
i
−
2
)
(
i
−
3
)
t
i
−
4
p
i
⇒
(
f
(
4
)
(
t
)
)
2
=
∑
i
≥
4
,
l
≥
4
i
(
i
−
1
)
(
i
−
2
)
(
i
−
3
)
l
(
l
−
1
)
(
l
−
2
)
(
l
−
3
)
t
i
+
l
−
8
p
i
p
l
\begin{array}{l} f(t) = \sum\limits_i {{p_i}{t^i}} \\ \Rightarrow {f^{(4)}}(t) = \sum\limits_{i \ge 4} {i(i - 1)(i - 2)(i - 3){t^{i - 4}}{p_i}} \\ \Rightarrow {({f^{(4)}}(t))^2} = \sum\limits_{i \ge 4,l \ge 4} {i(i - 1)(i - 2)(i - 3)l(l - 1)(l - 2)(l - 3){t^{i + l - 8}}{p_i}{p_l}} \end{array}
f(t)=i∑piti⇒f(4)(t)=i≥4∑i(i−1)(i−2)(i−3)ti−4pi⇒(f(4)(t))2=i≥4,l≥4∑i(i−1)(i−2)(i−3)l(l−1)(l−2)(l−3)ti+l−8pipl
单段的目标函数如下,其中
J
j
,
p
j
,
Q
j
J_j,\bf p_j, \bf Q_j
Jj,pj,Qj均为轨迹
j
j
j段所对应的目标函数、多项式系数所组成的向量、权重矩阵。
J
(
T
)
=
∫
T
j
−
1
T
j
(
f
(
4
)
(
t
)
)
2
d
t
=
[
⋮
p
i
⋮
]
T
[
⋮
⋯
i
(
i
−
1
)
(
i
−
2
)
(
i
−
3
)
l
(
l
−
1
)
(
l
−
2
)
(
l
−
3
)
i
+
l
−
7
T
i
+
l
−
7
⋯
⋮
]
[
⋮
p
i
⋮
]
⇒
J
j
(
T
)
=
p
j
T
Q
j
p
j
\begin{matrix} J(T) = \int_{{T_{j - 1}}}^{{T_j}} {{{({f^{(4)}}(t))}^2}dt} \\ = {\left[ {\begin{matrix} \vdots \\ {{p_i}}\\ \vdots \end{matrix}} \right]^T}\left[ {\begin{matrix} {}& \vdots &{}\\ \cdots &{\frac{{i(i - 1)(i - 2)(i - 3)l(l - 1)(l - 2)(l - 3)}}{{i + l - 7}}{T^{i + l - 7}}}& \cdots \\ {}& \vdots &{} \end{matrix}} \right]\left[ {\begin{matrix} \vdots \\ {{p_i}}\\ \vdots \end{matrix}} \right]\\ \Rightarrow {J_j}(T) = {\bf{p}}_j^T{{\bf{Q}}_j}{{\bf{p}}_j} \end{matrix}
J(T)=∫Tj−1Tj(f(4)(t))2dt=⎣⎢⎢⎡⋮pi⋮⎦⎥⎥⎤T⎣⎢⎢⎡⋯⋮i+l−7i(i−1)(i−2)(i−3)l(l−1)(l−2)(l−3)Ti+l−7⋮⋯⎦⎥⎥⎤⎣⎢⎢⎡⋮pi⋮⎦⎥⎥⎤⇒Jj(T)=pjTQjpj
那么整个
M
M
M段的目标函数为
J
=
P
T
Q
P
=
[
p
1
p
2
⋮
p
M
]
T
[
Q
1
0
0
0
0
Q
2
0
0
0
0
⋱
0
0
0
0
Q
M
]
[
p
1
p
2
⋮
p
M
]
J = {{\bf{P}}^T}{\bf{QP}} = {\left[ {\begin{matrix} {{{\bf{p}}_1}}\\ {{{\bf{p}}_2}}\\ \vdots \\ {{{\bf{p}}_M}} \end{matrix}} \right]^T}\left[ {\begin{matrix} {{{\bf{Q}}_1}}&0&0&0\\ 0&{{{\bf{Q}}_2}}&0&0\\ 0&0& \ddots &0\\ 0&0&0&{{{\bf{Q}}_M}} \end{matrix}} \right]\left[ {\begin{matrix} {{{\bf{p}}_1}}\\ {{{\bf{p}}_2}}\\ \vdots \\ {{{\bf{p}}_M}} \end{matrix}} \right]
J=PTQP=⎣⎢⎢⎢⎡p1p2⋮pM⎦⎥⎥⎥⎤T⎣⎢⎢⎡Q10000Q20000⋱0000QM⎦⎥⎥⎤⎣⎢⎢⎢⎡p1p2⋮pM⎦⎥⎥⎥⎤
2.3 约束条件
2.3.1 导数约束(Derivative constraint)
目前已知起点
P
0
P_0
P0、终点
P
N
P_N
PN和中间路标点
P
1
、
P
2
、
P
N
−
2
、
P
N
−
1
P_1 、P_2 、P_{N-2} 、P_{N-1}
P1、P2、PN−2、PN−1的位置,因此导数约束数学表示为
f
j
(
k
)
(
T
j
)
=
x
j
(
k
)
f_j^{(k)}({T_j}) = x_j^{(k)}
fj(k)(Tj)=xj(k)
其中参数
j
j
j表示第
j
j
j段轨迹,
k
k
k表示导数的阶数,
T
j
T_j
Tj表示在
j
j
j段轨迹内从某点到某点所需的时间,
x
x
x表示轨迹的多项式方程。
将上式进行化简
f
j
(
k
)
(
T
j
)
=
x
j
(
k
)
⇒
∑
i
≥
k
i
!
(
i
−
k
)
!
T
j
i
−
k
p
j
,
i
=
x
T
,
j
(
k
)
⇒
[
…
i
!
(
i
−
k
)
!
T
j
i
−
k
…
]
[
⋮
p
j
,
i
⋮
]
=
x
T
,
j
(
k
)
∵
[
…
i
!
(
i
−
k
)
!
T
j
−
1
i
−
k
…
]
[
⋮
p
j
,
i
⋮
]
=
x
0
,
j
(
k
)
∴
[
…
i
!
(
i
−
k
)
!
T
j
−
1
i
−
k
…
…
i
!
(
i
−
k
)
!
T
j
i
−
k
…
]
[
⋮
p
j
,
i
⋮
]
=
[
x
0
,
j
(
k
)
x
T
,
j
(
k
)
]
⇒
A
j
p
j
=
d
j
\begin{matrix} f_j^{(k)}({T_j}) = x_j^{(k)}\\ \Rightarrow \sum\limits_{i \ge k} {\frac{{i!}}{{(i - k)!}}} T_j^{i - k}{p_{j,i}} = x_{T,j}^{(k)}\\ \Rightarrow \left[ {\begin{matrix} \ldots &{\frac{{i!}}{{(i - k)!}}T_j^{i - k}}& \ldots \end{matrix}} \right]\left[ {\begin{matrix} \vdots \\ {{p_{j,i}}}\\ \vdots \end{matrix}} \right] = x_{T,j}^{(k)} \end{matrix}\\ \because \left[ {\begin{matrix} \ldots &{\frac{{i!}}{{(i - k)!}}T_{j - 1}^{i - k}}& \ldots \end{matrix}} \right]\left[ {\begin{matrix} \vdots \\ {{p_{j,i}}}\\ \vdots \end{matrix}} \right] = x_{0,j}^{(k)} \\ \therefore \left[ {\begin{matrix} \ldots &{\frac{{i!}}{{(i - k)!}}T_{j - 1}^{i - k}}& \ldots \\ \ldots &{\frac{{i!}}{{(i - k)!}}T_j^{i - k}}& \ldots \end{matrix}} \right]\left[ {\begin{matrix} \vdots \\ {{p_{j,i}}}\\ \vdots \end{matrix}} \right] = \left[ {\begin{matrix} {x_{0,j}^{(k)}}\\ {x_{T,j}^{(k)}} \end{matrix}} \right] \\ \Rightarrow {{\bf{A}}_j}{{\bf{p}}_j} = {{\bf{d}}_j}
fj(k)(Tj)=xj(k)⇒i≥k∑(i−k)!i!Tji−kpj,i=xT,j(k)⇒[…(i−k)!i!Tji−k…]⎣⎢⎢⎡⋮pj,i⋮⎦⎥⎥⎤=xT,j(k)∵[…(i−k)!i!Tj−1i−k…]⎣⎢⎢⎡⋮pj,i⋮⎦⎥⎥⎤=x0,j(k)∴[……(i−k)!i!Tj−1i−k(i−k)!i!Tji−k……]⎣⎢⎢⎡⋮pj,i⋮⎦⎥⎥⎤=[x0,j(k)xT,j(k)]⇒Ajpj=dj
2.3.2 连续性约束(Continuity constraint)
要想机器人在中间点之间满足连续性约束,即 使机器人在
j
−
1
j-1
j−1段轨迹的末端的速度、加速度等于
j
j
j段轨迹的初始时刻的速度、加速度。例如**
P
1
P_1
P1点左端的速度、加速度等于右端的速度、加速度**,数学表达式如下
f
j
(
k
)
(
T
j
)
=
f
j
+
1
(
k
)
(
T
j
)
f_j^{(k)}(T_j)=f_{j+1}^{(k)}(T_j)
fj(k)(Tj)=fj+1(k)(Tj)
将上式进行化简得
l
f
j
(
k
)
(
T
j
)
=
f
j
+
1
(
k
)
(
T
j
)
⇒
∑
i
≥
k
i
!
(
i
−
k
)
!
T
j
i
−
k
p
j
,
i
−
∑
i
≥
k
l
!
(
l
−
k
)
!
T
j
l
−
k
p
j
+
1
,
l
=
0
⇒
[
…
i
!
(
i
−
k
)
!
T
j
i
−
k
…
−
l
!
(
l
−
k
)
!
T
j
l
−
k
…
]
[
⋮
p
j
,
i
⋮
p
j
+
1
,
i
⋮
]
=
0
⇒
[
A
j
−
A
j
+
1
]
[
p
j
p
j
+
1
]
=
0
\begin{matrix}{l} f_j^{(k)}({T_j}) = f_{j + 1}^{(k)}({T_j})\\ \Rightarrow \sum\limits_{i \ge k} {\frac{{i!}}{{(i - k)!}}T_j^{i - k}{p_{j,i}}} - \sum\limits_{i \ge k} {\frac{{l!}}{{(l - k)!}}T_j^{l - k}{p_{j + 1,l}}} = 0\\ \Rightarrow \left[ {\begin{matrix} \ldots &{\frac{{i!}}{{(i - k)!}}T_j^{i - k}}& \ldots &{-\frac{{l!}}{{(l - k)!}}T_j^{l - k}}& \ldots \end{matrix}} \right]\left[ {\begin{matrix} \vdots \\ {{p_{j,i}}}\\ \vdots \\ {{p_{j + 1,i}}}\\ \vdots \end{matrix}} \right] = 0\\ \Rightarrow \left[ {\begin{matrix} {{{\bf{A}}_j}}&{ - {{\bf{A}}_{{\rm{j + }}1}}} \end{matrix}} \right]\left[ {\begin{matrix} {{{\bf{p}}_j}}\\ {{{\bf{p}}_{j + 1}}} \end{matrix}} \right] = 0 \end{matrix}
lfj(k)(Tj)=fj+1(k)(Tj)⇒i≥k∑(i−k)!i!Tji−kpj,i−i≥k∑(l−k)!l!Tjl−kpj+1,l=0⇒[…(i−k)!i!Tji−k…−(l−k)!l!Tjl−k…]⎣⎢⎢⎢⎢⎢⎢⎢⎡⋮pj,i⋮pj+1,i⋮⎦⎥⎥⎥⎥⎥⎥⎥⎤=0⇒[Aj−Aj+1][pjpj+1]=0
联立上述的导数约束和连续性约束,得到最终的约束条件
A
e
q
[
p
1
⋮
p
M
]
=
d
e
q
{{\bf{A}}_{eq}}\left[ {\begin{matrix} {{{\bf{p}}_1}}\\ \vdots \\ {{{\bf{p}}_M}} \end{matrix}} \right] = {{\bf{d}}_{eq}}
Aeq⎣⎢⎡p1⋮pM⎦⎥⎤=deq
2.4 问题求解
联立评价函数和约束条件可得
m
i
n
J
=
P
T
Q
P
=
m
i
n
[
p
1
⋮
p
M
]
T
[
Q
1
0
0
0
⋱
0
0
0
Q
M
]
[
p
1
⋮
p
M
]
s
.
t
.
A
e
q
[
p
1
⋮
p
M
]
=
d
e
q
min \quad J = {{\bf{P}}^T}{\bf{QP}} = min \quad {\left[ {\begin{matrix} {{{\bf{p}}_1}}\\ \vdots \\ {{{\bf{p}}_M}} \end{matrix}} \right]^T}\left[ {\begin{matrix} {{{\bf{Q}}_1}}&0&0\\ 0& \ddots &0\\ 0&0&{{{\bf{Q}}_M}} \end{matrix}} \right]\left[ {\begin{matrix} {{{\bf{p}}_1}}\\ \vdots \\ {{{\bf{p}}_M}} \end{matrix}} \right] \\ s.t.{{\bf{A}}_{eq}}\left[ {\begin{matrix} {{{\bf{p}}_1}}\\ \vdots \\ {{{\bf{p}}_M}} \end{matrix}} \right] = {{\bf{d}}_{eq}}
minJ=PTQP=min⎣⎢⎡p1⋮pM⎦⎥⎤T⎣⎡Q1000⋱000QM⎦⎤⎣⎢⎡p1⋮pM⎦⎥⎤s.t.Aeq⎣⎢⎡p1⋮pM⎦⎥⎤=deq
其实上述是一个凸优化(附录1)的问题,可以采用QP进行求解,详情参见附录2。
附录
1. 凸函数基本概念
若函数
f
f
f满足
f
(
θ
x
+
(
1
−
θ
)
y
)
≤
θ
f
(
x
)
+
(
1
−
θ
)
f
(
y
)
其
中
0
<
θ
<
1
f(\theta x+ (1-\theta)y) \le \theta f(x)+(1-\theta)f(y) \\ 其中 0< \theta< 1
f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)其中0<θ<1
则
f
f
f为凸函数,且
−
f
-f
−f为凹函数。
凸集是对于集合内的每一对点,连接该对点的直线段上的每个点也在该集合内,如下图
凸优化一般表达形式如下
min
i
m
i
z
e
x
f
0
(
x
)
s
u
b
j
e
c
t
t
o
f
i
(
x
)
≤
0
i
=
1
,
.
.
.
,
m
A
x
=
b
\mathop {\min {\rm{imize}}}\limits_x \quad {f_0}(x) \\ \begin{array}{l} \quad \quad \quad \quad \quad \quad \quad \quad {\rm{subject \quad to}} \quad {f_i}(x) \le 0\quad i = 1,...,m\\ \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad Ax = b \end{array}
xminimizef0(x)subjecttofi(x)≤0i=1,...,mAx=b
其中
f
0
(
x
)
,
f
1
(
x
)
.
.
.
f
m
(
x
)
f_0(x),f_1(x)...f_m(x)
f0(x),f1(x)...fm(x)为凸函数,
A
x
=
b
Ax=b
Ax=b为反射变换。凸优化的优点:局部最优等于局部最优。
2. QP问题
通过观察,本文Minimum Snap算法的表达式与QP表达式一致,只是将
q
T
x
+
r
=
0
q^Tx+r=0
qTx+r=0,且不考虑不等式约束
G
x
≤
h
Gx \le h
Gx≤h,仅考虑等式约束
A
x
=
b
Ax=b
Ax=b。
注意:上述的图片均来自深蓝学院的路径规划课程,码字不易,转载请注明出处,谢谢