路径规划算法中的OBVP例子
文章目录
通过 上章的OBVP的原理讲解,大家想必对该算法的流程有了大致了解,现在通过路径规划课程里面的例子,加深对OBVP的了解。
1.已知量
1.1 目标函数
J = ∫ 0 T g ( s , u ) d t = ∫ 0 T ( 1 + u T R u ) d t = ∫ 0 T ( 1 + a x 2 + a y 2 + a z 2 ) d t J=\int_0^T {g(s,u)dt = \int_0^T {(1 + {u^T}Ru)dt = \int_0^T {(1 + a_x^2 + a_y^2 + a_z^2)} } } dt J=∫0Tg(s,u)dt=∫0T(1+uTRu)dt=∫0T(1+ax2+ay2+az2)dt
目标函数表示时间也会参与整个系统的损失计算,同时矩阵 R R R为权重矩阵,这里为单位矩阵,向量 u u u为输入变量
1.2 变量
状态变量: x = ( p x , p y , p z , v x , v y , v z ) x=(p_x,p_y,p_z,v_x,v_y,v_z) x=(px,py,pz,vx,vy,vz)
输入变量: u = ( a x , a y , a z ) u=(a_x,a_y,a_z) u=(ax,ay,az)
1.3 状态方程
状态方程如下
x
˙
=
f
(
s
,
u
)
=
(
v
x
v
y
v
z
a
x
a
y
a
z
)
\dot x=f(s,u)=\left( {\begin{matrix} {{v_x}}\\ {{v_y}}\\ {{v_z}}\\ {{a_x}}\\ {{a_y}}\\ {{a_z}} \end{matrix}} \right)
x˙=f(s,u)=⎝⎜⎜⎜⎜⎜⎜⎛vxvyvzaxayaz⎠⎟⎟⎟⎟⎟⎟⎞
1.4 初始值
0时刻系统的状态: x ( 0 ) = ( p x 0 , p y 0 , p z 0 , v x 0 , v y 0 , v z 0 ) T x(0)=(p_{x0},p_{y0},p_{z0},v_{x0},v_{y0},v_{z0})^T x(0)=(px0,py0,pz0,vx0,vy0,vz0)T
T时刻系统的状态:根据是否确定机器人的最终状态,OBVP有两种解法
2.固定边界条件
设定机器人的最终状态 x ( T ) = ( p x f , p y f , p z f , v x f , v y f , v z f ) T x(T)=(p_{xf},p_{yf},p_{zf},v_{xf},v_{yf},v_{zf})^T x(T)=(pxf,pyf,pzf,vxf,vyf,vzf)T,那么OBVP求解步骤如下
2.1 构建系统的Hamiltonian矩阵 H H H和协变量 λ \lambda λ
构造如下
λ
=
(
λ
1
,
λ
2
,
λ
3
,
λ
4
,
λ
5
,
λ
6
)
H
(
s
,
u
,
λ
)
=
g
(
s
,
u
)
+
λ
T
f
(
s
,
u
)
=
(
1
+
a
x
2
+
a
y
2
+
a
z
2
)
+
λ
1
v
x
+
λ
2
v
y
+
λ
3
v
z
+
λ
4
a
x
+
λ
5
a
y
+
λ
6
a
z
\lambda=(\lambda_1,\lambda_2,\lambda_3,\lambda_4,\lambda_5,\lambda_6)\\ H(s,u,\lambda)=g(s,u)+\lambda^Tf(s,u)\\ \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad\quad \quad \quad \quad\quad \quad \quad =(1+a_x^2+a_y^2+a_z^2)+\lambda_1v_x+\lambda_2v_y+\lambda_3v_z+\lambda_4a_x+\lambda_5a_y+\lambda_6a_z
λ=(λ1,λ2,λ3,λ4,λ5,λ6)H(s,u,λ)=g(s,u)+λTf(s,u)=(1+ax2+ay2+az2)+λ1vx+λ2vy+λ3vz+λ4ax+λ5ay+λ6az
2.2 通过Hamiltonian矩阵对协变量进行求导
求导如下
λ
˙
(
t
)
=
−
∇
s
H
(
s
∗
(
t
)
,
u
∗
(
t
)
,
λ
(
t
)
)
=
(
0
,
0
,
0
−
λ
1
,
−
λ
2
,
−
λ
3
)
\dot \lambda (t) = - {\nabla _s}H({s^*}(t),{u^*}(t),\lambda (t))=(0,0,0-\lambda_1,-\lambda_2,-\lambda_3)
λ˙(t)=−∇sH(s∗(t),u∗(t),λ(t))=(0,0,0−λ1,−λ2,−λ3)
由常微分方程可得协方差
{
λ
˙
1
=
0
λ
˙
2
=
0
λ
˙
3
=
0
λ
4
=
−
λ
1
λ
5
=
−
λ
2
λ
6
=
−
λ
3
⇒
{
λ
1
=
2
α
1
λ
2
=
2
α
2
λ
3
=
2
α
3
λ
4
=
−
2
α
1
t
−
2
β
1
λ
5
=
−
2
α
2
t
−
2
β
2
λ
6
=
−
2
α
3
t
−
2
β
3
\left\{ {\begin{matrix} {{{\dot \lambda }_1} = 0}\\ {{{\dot \lambda }_2} = 0}\\ {{{\dot \lambda }_3} = 0}\\ {{\lambda _4} = - {\lambda _1}}\\ {{\lambda _5} = - {\lambda _2}}\\ {{\lambda _6} = - {\lambda _3}} \end{matrix}} \right. \Rightarrow \left\{ {\begin{matrix} {{\lambda _1} = 2{\alpha _1}}\\ {{\lambda _2} = 2{\alpha _2}}\\ {{\lambda _3} = 2{\alpha _3}}\\ {{\lambda _4} = - 2{\alpha _1}t - 2{\beta _1}}\\ {{\lambda _5} = - 2{\alpha _2}t - 2{\beta _2}}\\ {{\lambda _6} = - 2{\alpha _3}t - 2{\beta _3}} \end{matrix}} \right.
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧λ˙1=0λ˙2=0λ˙3=0λ4=−λ1λ5=−λ2λ6=−λ3⇒⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧λ1=2α1λ2=2α2λ3=2α3λ4=−2α1t−2β1λ5=−2α2t−2β2λ6=−2α3t−2β3
2.3 最小化输入变量
由于
u
∗
(
t
)
=
arg
min
u
(
t
)
H
(
s
∗
(
t
)
,
u
(
t
)
,
λ
(
t
)
)
\quad {u^*}(t) = \arg \mathop {\min }\limits_{u(t)} H({s^*}(t),u(t),\lambda (t))
u∗(t)=argu(t)minH(s∗(t),u(t),λ(t))
因为
H
(
s
∗
,
u
,
λ
)
=
(
1
+
a
x
2
+
a
y
2
+
a
z
2
)
+
λ
1
v
x
∗
+
λ
2
v
y
∗
+
λ
3
v
z
∗
+
λ
4
a
x
+
λ
5
a
y
+
λ
6
a
z
H(s^*,u,\lambda)=(1+a_x^2+a_y^2+a_z^2)+\lambda_1v_x^*+\lambda_2v_y^*+\lambda_3v_z^*+\lambda_4a_x+\lambda_5a_y+\lambda_6a_z
H(s∗,u,λ)=(1+ax2+ay2+az2)+λ1vx∗+λ2vy∗+λ3vz∗+λ4ax+λ5ay+λ6az
对上式方程
H
H
H关于
u
u
u进行求偏导
{
∂
u
∗
∂
a
x
=
2
a
x
+
λ
4
=
0
∂
u
∗
∂
a
y
=
2
a
y
+
λ
5
=
0
∂
u
∗
∂
a
z
=
2
a
z
+
λ
6
=
0
⇒
{
a
x
=
−
1
2
λ
4
a
y
=
−
1
2
λ
5
a
z
=
−
1
2
λ
6
\left\{ {\begin{matrix} {\frac{{\partial {u^*}}}{{\partial {a_x}}} = 2{a_x} + {\lambda _4} = 0}\\ {\frac{{\partial {u^*}}}{{\partial {a_y}}} = 2{a_y} + {\lambda _5} = 0}\\ {\frac{{\partial {u^*}}}{{\partial {a_z}}} = 2{a_z} + {\lambda _6} = 0} \end{matrix}} \right. \Rightarrow \left\{ {\begin{matrix} {{a_x} = - \frac{1}{2}{\lambda _4}}\\ {{a_y} = - \frac{1}{2}{\lambda _5}}\\ {{a_z} = - \frac{1}{2}{\lambda _6}} \end{matrix}} \right.
⎩⎪⎨⎪⎧∂ax∂u∗=2ax+λ4=0∂ay∂u∗=2ay+λ5=0∂az∂u∗=2az+λ6=0⇒⎩⎨⎧ax=−21λ4ay=−21λ5az=−21λ6
所以
u
∗
=
[
−
1
2
λ
4
−
1
2
λ
5
−
1
2
λ
6
]
=
[
a
1
t
+
β
1
a
2
t
+
β
2
a
3
t
+
β
3
]
=
[
a
x
∗
a
y
∗
a
z
∗
]
{u^*} = \left[ {\begin{matrix} { - \frac{1}{2}{\lambda _4}}\\ { - \frac{1}{2}{\lambda _5}}\\ { - \frac{1}{2}{\lambda _6}} \end{matrix}} \right] = \left[ {\begin{matrix} {{a_1}t + {\beta _1}}\\ {{a_2}t + {\beta _2}}\\ {{a_3}t + {\beta _3}} \end{matrix}} \right] = \left[ {\begin{matrix} {a_x^*}\\ {a_y^*}\\ {a_z^*} \end{matrix}} \right]
u∗=⎣⎡−21λ4−21λ5−21λ6⎦⎤=⎣⎡a1t+β1a2t+β2a3t+β3⎦⎤=⎣⎡ax∗ay∗az∗⎦⎤
2.4 通过积分求得最优轨迹 s ∗ s^* s∗
众所周知,对加速度关于时间的一次积分,表示速度;二次积分表示位置。那么
s
∗
(
t
)
=
[
p
x
∗
p
y
∗
p
z
∗
v
x
∗
v
y
∗
v
z
∗
]
=
[
∫
v
x
∗
d
t
+
p
x
0
∫
v
y
∗
d
t
+
p
y
0
∫
v
z
∗
d
t
+
p
z
0
∫
a
x
∗
d
t
+
v
x
0
∫
a
y
∗
d
t
+
v
y
0
∫
a
z
∗
d
t
+
v
z
0
]
=
[
1
6
α
1
t
3
+
1
2
β
1
t
2
+
v
x
0
t
+
p
x
0
1
6
α
2
t
3
+
1
2
β
2
t
2
+
v
y
0
t
+
p
y
0
1
6
α
3
t
3
+
1
2
β
2
t
2
+
v
z
0
t
+
p
z
0
1
2
α
1
t
2
+
β
1
t
+
v
x
0
1
2
α
2
t
2
+
β
2
t
+
v
y
0
1
2
α
3
t
2
+
β
3
t
+
v
z
0
]
{s^*(t)} = \left[ {\begin{matrix} {p_x^*}\\ {p_y^*}\\ {p_z^*}\\ {v_x^*}\\ {v_y^*}\\ {v_z^*} \end{matrix}} \right] = \left[ {\begin{matrix} {\int {v_x^*dt + {p_{x0}}} }\\ {\int {v_y^*dt + {p_{y0}}} }\\ {\int {v_z^*dt + {p_{z0}}} }\\ {\int {a_x^*dt + {v_{x0}}} }\\ {\int {a_y^*dt + {v_{y0}}} }\\ {\int {a_z^*dt + {v_{z0}}} } \end{matrix}} \right] = \left[ {\begin{matrix} {\frac{1}{6}{\alpha _1}{t^3} + \frac{1}{2}{\beta _1}{t^2} + {v_{x0}}t + {p_{x0}}}\\ {\frac{1}{6}{\alpha _2}{t^3} + \frac{1}{2}{\beta _2}{t^2} + {v_{y0}}t + {p_{y0}}}\\ {\frac{1}{6}{\alpha _3}{t^3} + \frac{1}{2}{\beta _2}{t^2} + {v_{z0}}t + {p_{z0}}}\\ {\frac{1}{2}{\alpha _1}{t^2} + {\beta _1}t + {v_{x0}}}\\ {\frac{1}{2}{\alpha _2}{t^2} + {\beta _2}t + {v_{y0}}}\\ {\frac{1}{2}{\alpha _3}{t^2} + {\beta _3}t + {v_{z0}}} \end{matrix}} \right]
s∗(t)=⎣⎢⎢⎢⎢⎢⎢⎡px∗py∗pz∗vx∗vy∗vz∗⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡∫vx∗dt+px0∫vy∗dt+py0∫vz∗dt+pz0∫ax∗dt+vx0∫ay∗dt+vy0∫az∗dt+vz0⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡61α1t3+21β1t2+vx0t+px061α2t3+21β2t2+vy0t+py061α3t3+21β2t2+vz0t+pz021α1t2+β1t+vx021α2t2+β2t+vy021α3t2+β3t+vz0⎦⎥⎥⎥⎥⎥⎥⎤
2.5 最终状态确定最优轨迹的参数
通过
s
∗
(
T
)
=
s
f
s^*(T)=s_f
s∗(T)=sf,可以得出最优轨迹中的未知数
(
α
1
,
α
2
,
α
3
,
β
1
,
β
2
,
β
3
)
(\alpha_1,\alpha_2,\alpha_3,\beta_1,\beta_2,\beta_3)
(α1,α2,α3,β1,β2,β3)
[
1
6
T
3
0
0
1
2
T
2
0
0
0
1
6
T
3
0
0
1
2
T
2
0
0
0
1
6
T
3
0
0
1
2
T
2
1
2
T
2
0
0
T
0
0
0
1
2
T
2
0
0
T
0
0
0
1
2
T
2
0
0
T
]
[
α
1
α
2
α
3
β
1
β
2
β
3
]
=
[
p
x
f
−
p
x
0
−
v
x
0
T
p
y
f
−
p
y
0
−
v
y
0
T
p
z
f
−
p
z
0
−
v
z
0
T
v
x
f
−
v
x
0
v
y
f
−
v
y
0
v
z
f
−
v
z
0
]
\left[ {\begin{matrix} {\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}&0&0\\ 0&{\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}&0\\ 0&0&{\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}\\ {\frac{1}{2}{T^2}}&0&0&T&0&0\\ 0&{\frac{1}{2}{T^2}}&0&0&T&0\\ 0&0&{\frac{1}{2}{T^2}}&0&0&T \end{matrix}} \right]\left[ {\begin{matrix} {{\alpha _1}}\\ {{\alpha _2}}\\ {{\alpha _3}}\\ {{\beta _1}}\\ {{\beta _2}}\\ {{\beta _3}} \end{matrix}} \right] = \left[ {\begin{matrix} {{p_{xf}} - {p_{x0}} - {v_{x0T}}}\\ {{p_{yf}} - {p_{y0}} - {v_{y0T}}}\\ {{p_{zf}} - {p_{z0}} - {v_{z0T}}}\\ {{v_{xf}} - {v_{x0}}}\\ {{v_{yf}} - {v_{y0}}}\\ {{v_{zf}} - {v_{z0}}} \end{matrix}} \right]
⎣⎢⎢⎢⎢⎢⎢⎡61T30021T200061T30021T200061T30021T221T200T00021T200T00021T200T⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0Tvxf−vx0vyf−vy0vzf−vz0⎦⎥⎥⎥⎥⎥⎥⎤
推导出
[
α
1
α
2
α
3
β
1
β
2
β
3
]
=
[
−
12
T
3
0
0
6
T
2
0
0
0
−
12
T
3
0
0
6
T
2
0
0
0
−
12
T
3
0
0
6
T
2
6
T
2
0
0
−
2
T
0
0
0
6
T
2
0
0
−
2
T
0
0
0
6
T
2
0
0
−
2
T
]
[
p
x
f
−
p
x
0
−
v
x
0
T
p
y
f
−
p
y
0
−
v
y
0
T
p
z
f
−
p
z
0
−
v
z
0
T
v
x
f
−
v
x
0
v
y
f
−
v
y
0
v
z
f
−
v
z
0
]
\left[ {\begin{matrix} {{\alpha _1}}\\ {{\alpha _2}}\\ {{\alpha _3}}\\ {{\beta _1}}\\ {{\beta _2}}\\ {{\beta _3}} \end{matrix}} \right] = \left[ {\begin{matrix} { - \frac{{12}}{{{T^3}}}}&0&0&{\frac{6}{{{T^2}}}}&0&0\\ 0&{ - \frac{{12}}{{{T^3}}}}&0&0&{\frac{6}{{{T^2}}}}&0\\ 0&0&{ - \frac{{12}}{{{T^3}}}}&0&0&{\frac{6}{{{T^2}}}}\\ {\frac{6}{{{T^2}}}}&0&0&{ - \frac{2}{T}}&0&0\\ 0&{\frac{6}{{{T^2}}}}&0&0&{ - \frac{2}{T}}&0\\ 0&0&{\frac{6}{{{T^2}}}}&0&0&{ - \frac{2}{T}} \end{matrix}} \right]\left[ {\begin{matrix} {{p_{xf}} - {p_{x0}} - {v_{x0T}}}\\ {{p_{yf}} - {p_{y0}} - {v_{y0T}}}\\ {{p_{zf}} - {p_{z0}} - {v_{z0T}}}\\ {{v_{xf}} - {v_{x0}}}\\ {{v_{yf}} - {v_{y0}}}\\ {{v_{zf}} - {v_{z0}}} \end{matrix}} \right]
⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡−T31200T26000−T31200T26000−T31200T26T2600−T2000T2600−T2000T2600−T2⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0Tvxf−vx0vyf−vy0vzf−vz0⎦⎥⎥⎥⎥⎥⎥⎤
2.6 最优状态下目标函数
将上述所得到的最优输入变量
u
∗
u^*
u∗代入到目标函数中,那么
J
∗
(
T
)
=
∫
0
T
(
1
+
a
x
2
+
a
y
2
+
a
z
2
)
d
t
=
∫
0
T
[
1
+
(
α
1
t
+
β
)
2
+
(
α
2
t
+
β
2
)
2
+
(
α
3
t
+
β
3
)
2
]
d
t
=
T
+
∫
0
T
(
α
1
t
+
β
1
)
2
d
t
+
∫
0
T
(
α
1
t
+
β
2
)
2
d
t
+
∫
0
T
(
α
1
t
+
β
2
)
2
d
t
=
(
1
3
α
1
2
+
1
3
α
2
2
+
1
3
α
3
2
)
T
3
+
(
a
1
β
1
+
a
2
β
2
+
a
3
β
3
)
T
2
+
(
β
1
2
+
β
2
2
+
β
3
2
)
T
{J^*}(T) = \int_0^T {(1 + a_x^2 + a_y^2 + a_z^2)dt} \\ \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad=\int_0^T {[1 + {{({\alpha _1}t + {\beta _{}})}^2} + {{({\alpha _2}t + {\beta _2})}^2} + {{({\alpha _3}t + {\beta _3})}^2}]} dt \\ \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad = T + \int_0^T {{{({\alpha _1}t + {\beta _1})}^2}dt} + \int_0^T {{{({\alpha _1}t + {\beta _2})}^2}dt} + \int_0^T {{{({\alpha _1}t + {\beta _2})}^2}dt} \\ \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad= (\frac{1}{3}\alpha _1^2 + \frac{1}{3}\alpha _2^2 + \frac{1}{3}\alpha _3^2){T^3} + ({a_1}{\beta _1} + {a_2}{\beta _2} + {a_3}{\beta _3}){T^2} + (\beta _1^2 + \beta _2^2 + \beta _3^2)T
J∗(T)=∫0T(1+ax2+ay2+az2)dt=∫0T[1+(α1t+β)2+(α2t+β2)2+(α3t+β3)2]dt=T+∫0T(α1t+β1)2dt+∫0T(α1t+β2)2dt+∫0T(α1t+β2)2dt=(31α12+31α22+31α32)T3+(a1β1+a2β2+a3β3)T2+(β12+β22+β32)T
将上式所得到
(
α
1
,
α
2
,
α
3
,
β
1
,
β
2
,
β
3
)
(\alpha_1,\alpha_2,\alpha_3,\beta_1,\beta_2,\beta_3)
(α1,α2,α3,β1,β2,β3)代入目标函数中,得知目标函数仅关于T有关,由于计算过程复杂,此时可有matlab代替人工完成
syms T
syms px0 py0 pz0 vx0 vy0 vz0 pxf pyf pzf vxf vyf vzf
H=[-12/T^3 0 0 6/T^2 0 0;
0 -12/T^3 0 0 6/T^2 0;
0 0 -12/T^3 0 0 6/T^2 ;
6/T^2 0 0 -2/T 0 0;
0 6/T^2 0 0 -2/T 0;
0 0 6/T^2 0 0 -2/T;];
DeltaPV=[pxf-vx0*T-px0;
pyf-vy0*T-py0;
pzf-vz0*T-pz0;
vxf-vx0;
vyf-vy0;
vzf-vz0
];
Param=H*DeltaPV;
alpha1=Param(1);
alpha2=Param(2);
alpha3=Param(3);
beta1=Param(4);
beta2=Param(5);
beta3=Param(6);
J=T+(1/3*alpha1^2*T^3+alpha1*beta1*T^2+beta1^2*T) ...
+(1/3*alpha2^2*T^3+alpha2*beta2*T^2+beta2^2*T) ...
+(1/3*alpha3^2*T^3+alpha3*beta3*T^2+beta3^2*T);
disp("J方程:")
disp(J)
dJdT=diff(J,T);
disp("dJ/dT方程:")
disp(dJdT)
%latex()转化为mathtype格式
dJdT=simplify(dJdT);
dJdT=collect(dJdT,T);
disp("化简dJdT:")
disp(dJdT)
[I,D]=numden(dJdT);
disp("分子:")
I=collect(I,T);
disp(I)
disp("分母:")
disp(D)
matlab显示结果
其中图片中的dJdT表示目标函数对时间
T
T
T进行求导,然后根据上章的根据矩阵的特征值求解多项式根的方法,求解最优的时间T
3.自由边界条件
此时并不完全知道机器人最终的状态信息,假设我们只约束了位置信息,而不约束速度信息,即 s f = ( p x f , p y f , p z f , ? , ? , ? ) T s_f=(p_{xf},p_{yf},p_{zf},?,?,?)^T sf=(pxf,pyf,pzf,?,?,?)T,那么可通过Pontrayagin’s 最小值的边界条件 λ ( T ) = − ∇ h ( s ∗ ( T ) ) \lambda(T)=- {\nabla}h(s^{*}(T)) λ(T)=−∇h(s∗(T))进行对未知参数的计算,但是本系统并没有设置最终状态的惩罚项 h h h,可认为 h = 0 h=0 h=0,因此
位置信息没有改变,依然如下:
[
1
6
T
3
0
0
1
2
T
2
0
0
0
1
6
T
3
0
0
1
2
T
2
0
0
0
1
6
T
3
0
0
1
2
T
2
]
[
α
1
α
2
α
3
]
=
[
p
x
f
−
p
x
0
−
v
x
0
T
p
y
f
−
p
y
0
−
v
y
0
T
p
z
f
−
p
z
0
−
v
z
0
T
]
\left[ {\begin{matrix} {\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}&0&0\\ 0&{\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}&0\\ 0&0&{\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}\\ \end{matrix}} \right]\left[ {\begin{matrix} {{\alpha _1}}\\ {{\alpha _2}}\\ {{\alpha _3}}\\ \end{matrix}} \right] = \left[ {\begin{matrix} {{p_{xf}} - {p_{x0}} - {v_{x0T}}}\\ {{p_{yf}} - {p_{y0}} - {v_{y0T}}}\\ {{p_{zf}} - {p_{z0}} - {v_{z0T}}}\\ \end{matrix}} \right]
⎣⎡61T300061T300061T321T200021T200021T2⎦⎤⎣⎡α1α2α3⎦⎤=⎣⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0T⎦⎤
速度信息发生变化,如下:
[
λ
4
λ
5
λ
6
]
=
[
−
2
α
1
T
−
2
β
1
−
2
α
2
T
−
2
β
2
−
2
α
3
T
−
2
β
3
]
=
0
\left[ {\begin{matrix} {{\lambda _4}}\\ {{\lambda _5}}\\ {{\lambda _6}} \end{matrix}} \right] = \left[ {\begin{matrix} { - 2{\alpha _1}T - 2{\beta _1}}\\ { - 2{\alpha _2}T - 2{\beta _2}}\\ { - 2{\alpha _3}T - 2{\beta _3}} \end{matrix}} \right] = 0
⎣⎡λ4λ5λ6⎦⎤=⎣⎡−2α1T−2β1−2α2T−2β2−2α3T−2β3⎦⎤=0
因此,新的最优轨迹
s
∗
s^*
s∗的未知参数表达式如下
[
1
6
T
3
0
0
1
2
T
2
0
0
0
1
6
T
3
0
0
1
2
T
2
0
0
0
1
6
T
3
0
0
1
2
T
2
T
0
0
1
0
0
0
T
0
0
1
0
0
0
T
0
0
1
]
[
α
1
α
2
α
3
β
1
β
2
β
3
]
=
[
p
x
f
−
p
x
0
−
v
x
0
T
p
y
f
−
p
y
0
−
v
y
0
T
p
z
f
−
p
z
0
−
v
z
0
T
0
0
0
]
\left[ {\begin{matrix} {\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}&0&0\\ 0&{\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}&0\\ 0&0&{\frac{1}{6}{T^3}}&0&0&{\frac{1}{2}{T^2}}\\ T&0&0&1&0&0\\ 0&T&0&0&1&0\\ 0&0&T&0&0&1 \end{matrix}} \right]\left[ {\begin{matrix} {{\alpha _1}}\\ {{\alpha _2}}\\ {{\alpha _3}}\\ {{\beta _1}}\\ {{\beta _2}}\\ {{\beta _3}} \end{matrix}} \right] = \left[ {\begin{matrix} {{p_{xf}} - {p_{x0}} - {v_{x0T}}}\\ {{p_{yf}} - {p_{y0}} - {v_{y0T}}}\\ {{p_{zf}} - {p_{z0}} - {v_{z0T}}}\\ 0\\ 0\\ 0 \end{matrix}} \right]
⎣⎢⎢⎢⎢⎢⎢⎡61T300T00061T300T00061T300T21T200100021T200100021T2001⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0T000⎦⎥⎥⎥⎥⎥⎥⎤
推导如下
[
α
1
α
2
α
3
β
1
β
2
β
3
]
=
[
−
3
T
3
0
0
3
2
T
0
0
0
−
3
T
3
0
0
3
2
T
0
0
0
−
3
T
3
0
0
3
2
T
3
T
2
0
0
−
1
2
0
0
0
3
T
2
0
0
−
1
2
0
0
0
3
T
2
0
0
−
1
2
]
[
p
x
f
−
p
x
0
−
v
x
0
T
p
y
f
−
p
y
0
−
v
y
0
T
p
z
f
−
p
z
0
−
v
z
0
T
0
0
0
]
\left[ {\begin{matrix} {{\alpha _1}}\\ {{\alpha _2}}\\ {{\alpha _3}}\\ {{\beta _1}}\\ {{\beta _2}}\\ {{\beta _3}} \end{matrix}} \right] = \left[ {\begin{matrix} { - \frac{3}{{{T^3}}}}&0&0&{\frac{3}{{2T}}}&0&0\\ 0&{ - \frac{3}{{{T^3}}}}&0&0&{\frac{3}{{2T}}}&0\\ 0&0&{ - \frac{3}{{{T^3}}}}&0&0&{\frac{3}{{2T}}}\\ {\frac{3}{{{T^2}}}}&0&0&{ - \frac{1}{2}}&0&0\\ 0&{\frac{3}{{{T^2}}}}&0&0&{ - \frac{1}{2}}&0\\ 0&0&{\frac{3}{{{T^2}}}}&0&0&{ - \frac{1}{2}} \end{matrix}} \right]\left[ {\begin{matrix} {{p_{xf}} - {p_{x0}} - {v_{x0T}}}\\ {{p_{yf}} - {p_{y0}} - {v_{y0T}}}\\ {{p_{zf}} - {p_{z0}} - {v_{z0T}}}\\ 0\\ 0\\ 0 \end{matrix}} \right]
⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡−T3300T23000−T3300T23000−T3300T232T300−210002T300−210002T300−21⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0T000⎦⎥⎥⎥⎥⎥⎥⎤
matlab代码化简目标函数如下
syms T
syms px0 py0 pz0 vx0 vy0 vz0 pxf pyf pzf vxf vyf vzf
H=[-3/T^3 0 0 3/(2*T) 0 0;
0 -3/T^3 0 0 3/(2*T) 0;
0 0 -3/T^3 0 0 3/(2*T) ;
3/T^2 0 0 -1/2 0 0;
0 3/T^2 0 0 -1/2 0;
0 0 3/T^2 0 0 -1/2;];
DeltaPV=[pxf-px0-vx0*T;
pyf-py0-vy0*T;
pzf-pz0-vz0*T;
0;
0;
0;
];
Param=H*DeltaPV;
alpha1=Param(1);
alpha2=Param(2);
alpha3=Param(3);
beta1=Param(4);
beta2=Param(5);
beta3=Param(6);
J=T+(1/3*alpha1^2*T^3+alpha1*beta1*T^2+beta1^2*T) ...
+(1/3*alpha2^2*T^3+alpha2*beta2*T^2+beta2^2*T) ...
+(1/3*alpha3^2*T^3+alpha3*beta3*T^2+beta3^2*T);
% J=(1/3*alpha1^2+1/3*alpha2^2+1/3*alpha3^2)*T^3 ...
% +(alpha1*beta1+alpha1*beta1+alpha1*beta1)*T^2 ...
% +(beta1^2+beta2^2+beta3^2+1)*T;
disp("J方程:")
disp(J)
dJdT=diff(J,T);
disp("dJ/dT方程:")
disp(dJdT)
%latex()转化为mathtype格式
dJdT=simplify(dJdT);
dJdT=collect(dJdT,T);
disp("化简dJdT:")
disp(dJdT)
[I,D]=numden(dJdT);
disp("分子:")
I=collect(I,T);
disp(I)
disp("分母:")
disp(D)
显示结果如下
其中图片中的dJdT表示目标函数对时间
T
T
T进行求导,然后根据上章的根据矩阵的特征值求解多项式根的方法,求解最优的时间T
4 .小结
OBVP基本步骤如下
1.确定系统的已知量,例如目标函数、系统变量、系统状态方程、以及初始值
2.根据初始值中的最终状态是否明确边界条件,可分为固定边界和自由边界
2.1 固定边界
(1) 先构建系统的Hamiltonian矩阵 H H H和协变量 λ \lambda λ
(2) 通过Hamiltonian矩阵对协变量进行求导
(3) 最小化输入变量
(4) 积分确定最优轨迹
(5) 最终状态信息确定系统的未知参数
(6) 求解目标函数的极值,以确定系统的最优时间
2.2 自由边界
(1) 先构建系统的Hamiltonian矩阵
H
H
H和协变量
λ
\lambda
λ
(2) 通过Hamiltonian矩阵对协变量进行求导
(3) 最小化输入变量
(4) 积分确定最优轨迹
(5) 通过Pontrayagin’s 最小值边界条件确定系统的未知参数
(6) 求解目标函数的极值,以确定系统的最优时间
本文参考:https://blog.csdn.net/m0_51238303/article/details/123384256
其中,matlab代码也是参考网上的一位博主的,不过我不知道他的链接在哪,尴尬,知道的小伙伴,可以告诉我一声。最后,码字不容易,转载请注明出处,谢谢。