(三)路径规划算法---OBVP例子

路径规划算法中的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α1t2β1λ5=2α2t2β2λ6=2α3t2β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. axu=2ax+λ4=0ayu=2ay+λ5=0azu=2az+λ6=0ax=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λ421λ521λ6=a1t+β1a2t+β2a3t+β3=axayaz

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)=pxpypzvxvyvz=vxdt+px0vydt+py0vzdt+pz0axdt+vx0aydt+vy0azdt+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=pxfpx0vx0Tpyfpy0vy0Tpzfpz0vz0Tvxfvx0vyfvy0vzfvz0
推导出
[ α 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=T31200T26000T31200T26000T31200T26T2600T2000T2600T2000T2600T2pxfpx0vx0Tpyfpy0vy0Tpzfpz0vz0Tvxfvx0vyfvy0vzfvz0

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=pxfpx0vx0Tpyfpy0vy0Tpzfpz0vz0T
速度信息发生变化,如下:
[ λ 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α1T2β12α2T2β22α3T2β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=pxfpx0vx0Tpyfpy0vy0Tpzfpz0vz0T000
推导如下
[ α 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=T3300T23000T3300T23000T3300T232T300210002T300210002T30021pxfpx0vx0Tpyfpy0vy0Tpzfpz0vz0T000

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代码也是参考网上的一位博主的,不过我不知道他的链接在哪,尴尬,知道的小伙伴,可以告诉我一声。最后,码字不容易,转载请注明出处,谢谢。

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值