赞
踩
回顾 M i n i m u m Minimum Minimum S n a p Snap Snap当中的闭式求解的问题,闭式求解可以把轨迹变的更加顺滑,但是由于没有过多考虑障碍物的信息,可能会与障碍物发生碰撞。所以现在软约束的轨迹优化原理就是在原本顺滑性的基础上考虑代价碰撞函数,以及速度和加速度的限制。
优化方程:
min
λ
1
f
s
+
λ
2
f
o
+
λ
3
(
f
v
+
f
a
)
\min \quad \lambda_{1} f_{s}+\lambda_{2} f_{o}+\lambda_{3}\left(f_{v}+f_{a}\right)
minλ1fs+λ2fo+λ3(fv+fa),前面的这个顺滑性
f
s
f_{s}
fs就是之前在
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap当中介绍过的表达式,又加入了
f
o
f_{o}
fo碰撞目标函数,以及
f
v
f_{v}
fv和
f
a
f_{a}
fa速度和加速度的目标函数,
λ
1
、
λ
2
、
λ
3
\lambda_{1}、\lambda_{2}、\lambda_{3}
λ1、λ2、λ3是他们的权重系数。求解目标函数的最小值,可以采用梯度下降法。
轨迹依然是分成与
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap当中的多段轨迹。
p
μ
(
t
)
=
{
∑
j
=
0
N
η
1
j
(
t
−
T
0
)
j
T
0
≤
t
≤
T
1
∑
j
=
0
N
η
2
j
(
t
−
T
1
)
j
T
1
≤
t
≤
T
2
⋮
⋮
∑
j
=
0
N
η
M
j
(
t
−
T
M
−
1
)
j
T
M
−
1
≤
t
≤
T
M
p_{\mu}(t)=\left\{∑Nj=0η1j(t−T0)jT0≤t≤T1∑Nj=0η2j(t−T1)jT1≤t≤T2⋮⋮∑Nj=0ηMj(t−TM−1)jTM−1≤t≤TM\right.
pμ(t)=⎩
⎨
⎧∑j=0Nη1j(t−T0)j∑j=0Nη2j(t−T1)j⋮∑j=0NηMj(t−TM−1)jT0≤t≤T1T1≤t≤T2⋮TM−1≤t≤TM
软约束轨迹优化方法是用来“完善”
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap方法的,也用到了
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap当中的一些理论,有关
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap的推导可以去看之前的博客。首先就是把参数的映射成每段轨迹两个端点的
P
V
A
PVA
PVA(位置,速度,加速度),
η
=
M
−
1
C
[
d
F
d
P
]
\eta=\mathbf{M}^{-1}\mathbf{C}\left[dFdP\right]
η=M−1C[dFdP]
这样做的目的就是,让系数突出其物理含义。其中,
d
F
d_{F}
dF表示端点需要固定的一些值,
d
P
d_{P}
dP表示需要优化的一些值。
M
−
1
M^{-1}
M−1表示在
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap当中的
A
−
1
M
A^{-1}M
A−1M。
C
C
C是类似的。将上面的
η
\eta
η带入
M
i
n
i
m
u
m
Minimum
Minimum
S
n
a
p
Snap
Snap的顺滑性目标函数,即可得到以下表达式。
顺滑性的目标函数:
f
s
=
[
d
F
d
P
]
T
C
T
M
−
T
Q
M
−
1
C
[
d
F
d
P
]
f_{s}=\left[dFdP\right]^{T} \mathbf{C}^{T} \mathbf{M}^{-T} \mathbf{Q} \mathbf{M}^{-1} \mathbf{C}\left[dFdP\right]
fs=[dFdP]TCTM−TQM−1C[dFdP]
把
C
T
M
−
T
Q
M
−
1
C
\mathbf{C}^{T} \mathbf{M}^{-T} \mathbf{Q} \mathbf{M}^{-1} \mathbf{C}
CTM−TQM−1C记作
R
R
R矩阵,如下。
f
s
=
[
d
F
d
P
]
T
[
R
F
F
R
F
P
R
P
F
R
P
P
]
[
d
F
d
P
]
f_{s}=\left[dFdP\right]^{T}\left[RFFRFPRPFRPP\right]\left[dFdP\right]
fs=[dFdP]T[RFFRPFRFPRPP][dFdP]
R
R
R阵通过
d
F
、
d
P
d_F、d_P
dF、dP的下标被分为四块,分界的地方分为四块。之后对上述表达式进行求导处理,对
d
p
η
d_{{p}_{\eta}}
dpη进行求导,
η
\eta
η表示的是维度,因为在
x
、
y
、
z
x、y、z
x、y、z三个方向都是用分段的多项式进行表示的,所以三个方向就得考虑
d
p
x
、
d
p
y
、
d
p
z
d_{{p}_{x}}、d_{{p}_{y}}、d_{{p}_{z}}
dpx、dpy、dpz,就可以得出一个通式,如下方最后一行的式子,主要是为了简化符号,表示对一个轴的计算:
J
s
=
[
∂
f
s
∂
d
P
x
,
∂
f
s
∂
d
P
y
,
∂
f
s
∂
d
P
z
]
,
H
s
=
[
∂
2
f
s
∂
d
P
x
2
,
∂
2
f
s
∂
d
P
y
2
,
∂
2
f
s
∂
d
P
z
2
]
,
∂
f
s
∂
d
P
μ
=
2
d
F
T
R
F
P
+
2
d
P
T
R
P
P
,
∂
2
f
s
∂
d
P
μ
2
=
2
R
P
P
T
,
Js=[∂fs∂dPx,∂fs∂dPy,∂fs∂dPz],Hs=[∂2fs∂d2Px,∂2fs∂d2Py,∂2fs∂d2Pz],∂fs∂dPμ=2dTFRFP+2dTPRPP,∂2fs∂d2Pμ=2RTPP,
Js=[∂dPx∂fs,∂dPy∂fs,∂dPz∂fs],Hs=[∂dPx2∂2fs,∂dPy2∂2fs,∂dPz2∂2fs],∂dPμ∂fs=2dFTRFP+2dPTRPP,∂dPμ2∂2fs=2RPPT,
这就是一个对矩阵的求导,想象成数的求导就行。
得到导数后,因为是凸函数,可以得到最优解,因为此时又考虑了碰撞的代价函数以及速度和加速度的代价函数,所以现在考虑顺滑性的代价函数所得到的最优解并不一定是全局的最优解。所以接下来考虑碰撞的目标函数。
因为接下来的速度与加速度目标函数的构建与碰撞的目标函数构建方法大同小异,所以只列举碰撞目标函数的构建方法。
地图上保留了当前点和距离最近的障碍物及其导数,安全距离
d
d
d和
d
0
d_0
d0之类的信息,看图说明也是和人工势场法比较相似。
如果比较近(与障碍物),就会有力把无人机往外推,防止碰撞;如果比较远,力就不会那么大。
这个方法也有一些确定,从名字上就可以体现出来,因为是软约束的方法,有好几个优化目标,可能会导致函数取到局部最优解,当地形比较复杂的时候,可能会陷入局部最优解反而出不来,但是大多数情况下还是能找到最优解的。
Code下次来仿真。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。