两类边界条件的OBVP求解方法
问题描述
OBVP 即 optimal bundary value problem,是特殊的 BVP, BVP 问题其实就是解决 state sampled lattice planning 的基本操作方法。
常见的应用案例如:给定初始位置和终点位置,求连接两点的多阶曲线方程。
- 已知边界条件如下
Position | Velocity | Acceleration | |
---|---|---|---|
t = 0 | a | 0 | 0 |
t = T | b | 0 | 0 |
求五次多项式轨迹
- x ( t ) = c 5 t 5 + c 4 t 4 + c 3 t 3 + c 2 t 2 + c 1 t + c 0 x(t)=c_5 t^5 + c_4 t^4 + c_3 t^3 + c_2 t^2 + c_1 t + c_0 x(t)=c5t5+c4t4+c3t3+c2t2+c1t+c0
求解
- [ a b 0 0 0 0 ] = [ 0 0 0 0 0 1 T 5 T 4 T 3 T 2 T 1 0 0 0 0 1 0 5 T 4 4 T 3 3 T 2 2 T 1 0 0 0 0 2 0 0 20 T 3 12 T 2 6 T 2 0 0 ] [ c 5 c 4 c 3 c 2 c 1 c 0 ] \begin{bmatrix} a\\b\\0\\0\\0\\0 \end{bmatrix} = \begin{bmatrix} 0 & 0 & 0 & 0 & 0 & 1 \\ T^5 & T^4 & T^3 & T^2 & T & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 5T^4 & 4T^3 & 3T^2 & 2T & 1 & 0 \\ 0 & 0 & 0 & 2 & 0 & 0 \\ 20T^3 & 12T^2 & 6T & 2 & 0 & 0\end{bmatrix} \begin{bmatrix} c_5 \\ c_4 \\ c_3 \\ c_2 \\ c_1 \\ c_0 \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡ab0000⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡0T505T4020T30T404T3012T20T303T206T0T202T220T1100110000⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡c5c4c3c2c1c0⎦⎥⎥⎥⎥⎥⎥⎤
那么对于 OBVP 问题,已经有成熟的解法,本文主要说明借助庞特里亚金最小值原理 (Pontryagin’s minimum principle) 求解 BVP 问题的方法。
对于如下所示的优化问题:
- a r g m i n J = h ( s ( T ) ) + ∫ 0 T g ( s ( t ) , u ( t ) ) ⋅ d t arg\ min \ J=h(s(T))+\int_0^Tg(s(t),u(t))\cdot dt arg min J=h(s(T))+∫0Tg(s(t),u(t))⋅dt
- 该优化问题的代价由两部分组成,分别为对最终状态的惩罚项和过程惩罚项
- 写出其 Hamiltonian 和 costate(协变量)
- H ( s , u , λ ) = g ( s , u ) + λ T f ( s , u ) H(s,u,\lambda)=g(s,u)+\lambda^Tf(s,u) H(s,u,λ)=g(s,u)+λTf(s,u)
- λ \lambda λ 为协变量,维数与系统模型 f ( s , u ) f(s,u) f(s,u) 相关
- 假设最优解
- s ∗ s^* s∗ :最优状态
- u ∗ u^* u∗ :最优控制(输入)
- 则满足以下最优性条件
- s ∗ ( t ) = f ( s ∗ ( t ) , u ∗ ( t ) ) , g i v e n : s ∗ ( 0 ) = s ( 0 ) s^*(t)=f(s^*(t),u^*(t)),given:s^*(0)=s(0) s∗(t)=f(s∗(t),u∗(t)),given:s∗(0)=s(0)
- λ ( t ) \lambda(t) λ(t) 是微分方程的解
- λ ˙ ( t ) = − ▽ s H ( s ∗ ( t ) , u ∗ ( t ) , λ ( t ) ) \dot\lambda(t)=-\triangledown_sH(s^*(t),u^*(t),\lambda(t)) λ˙(t)=−▽sH(s∗(t),u∗(t),λ(t))
- λ ( T ) = − ▽ h ( s ∗ ( T ) ) \lambda(T)=-\triangledown h(s^*(T)) λ(T)=−▽h(s∗(T))
- 最优控制
- u ∗ ( t ) = arg min u ( t ) H ( s ∗ ( t ) , u ( t ) , λ ( t ) ) u^*(t)=\mathop{\arg\min}\limits_{u(t)}H(s^*(t),u(t),\lambda(t)) u∗(t)=u(t)argminH(s∗(t),u(t),λ(t))
通常求解最优性条件即可得到最优解。但是在处理问题的过程中,会遇到不同的边界条件情况,比如固定边界条件和自由边界条件,下面将分别对这两类问题展开说明,并附上自由边界条件演示示意图
固定边界条件
- 建模
- 目标,最小化时间间隔和加速度
- J = ∫ 0 T g ( x , 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^Tg(x,u)dt=\int_0^T(1+u^TRu)dt=\int_0^T(1+a_x^2+a_y^2+a_z^2)dt J=∫0Tg(x,u)dt=∫0T(1+uTRu)dt=∫0T(1+ax2+ay2+az2)dt
- 系统方程
- x = ( p x , p y , p z , v x , v y , v z ) T x=(p_x,p_y,p_z,v_x,v_y,v_z)^T x=(px,py,pz,vx,vy,vz)T
- u = ( a x , a y , a z ) T u=(a_x,a_y,a_z)^T u=(ax,ay,az)T
- x ˙ = f ( x , u ) = ( v x , v y , v z , a x , a y , a z ) T \dot{x}=f(x,u)=(v_x,v_y,v_z,a_x,a_y,a_z)^T x˙=f(x,u)=(vx,vy,vz,ax,ay,az)T
- 目标,最小化时间间隔和加速度
- 求解
- 协变量 λ = ( λ 1 , λ 2 , λ 3 , λ 4 , λ 5 , λ 6 ) T \lambda=(\lambda_1,\lambda_2,\lambda_3,\lambda_4,\lambda_5,\lambda_6)^T λ=(λ1,λ2,λ3,λ4,λ5,λ6)T
- 定义 Hamiltonian 函数
- H ( x , u , λ ) = g ( x , u ) + λ T f ( x , u ) = ( 1 + a x 2 + a y 2 + a z 2 ) + λ T f ( x , u ) H(x,u,\lambda)=g(x,u)+\lambda^Tf(x,u)=(1+a_x^2+a_y^2+a_z^2)+\lambda^Tf(x,u) H(x,u,λ)=g(x,u)+λTf(x,u)=(1+ax2+ay2+az2)+λTf(x,u)
- λ ˙ = − ▽ H ( x ∗ , u ∗ , λ ) = ( 0 , 0 , 0 , − λ 1 , − λ 2 , − λ 3 ) T \dot{\lambda}=-\triangledown H(x^*,u^*,\lambda)=(0,0,0,-\lambda_1,-\lambda_2,-\lambda_3)^T λ˙=−▽H(x∗,u∗,λ)=(0,0,0,−λ1,−λ2,−λ3)T
- 则可以求解出协变量,引入常数 α , β \alpha,\beta α,β
- λ = [ 2 α 1 2 α 2 2 α 3 − 2 α 1 t − 2 β 1 − 2 α 2 t − 2 β 2 − 2 α 3 t − 2 β 3 ] \lambda=\begin{bmatrix} 2\alpha_1 \\ 2\alpha_2 \\ 2\alpha_3 \\ -2\alpha_1t-2\beta_1 \\ -2\alpha_2t-2\beta_2 \\ -2\alpha_3t-2\beta_3 \end{bmatrix} λ=⎣⎢⎢⎢⎢⎢⎢⎡2α12α22α3−2α1t−2β1−2α2t−2β2−2α3t−2β3⎦⎥⎥⎥⎥⎥⎥⎤
- 进一步的可以求解最优输入
- u ∗ = arg min a ( t ) H ( x ∗ ( t ) , u ( t ) , λ ( t ) ) = [ α 1 t + β 1 α 2 t + β 2 α 3 t + β 3 ] u^*=\mathop{\arg\min}\limits_{a(t)}H(x^*(t),u(t),\lambda(t))=\begin{bmatrix} \alpha_1t+\beta_1 \\ \alpha_2t+\beta_2 \\ \alpha_3t+\beta_3 \end{bmatrix} u∗=a(t)argminH(x∗(t),u(t),λ(t))=⎣⎡α1t+β1α2t+β2α3t+β3⎦⎤
- 那么最优状态(轨迹)如下
- x ∗ = [ 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 β 3 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 ] , i n i t i a l s t a t e : x ( 0 ) = [ p x 0 p y 0 p z 0 v x 0 v y 0 v z 0 ] x^*=\begin{bmatrix} \frac{1}{6}\alpha_1t^3+\frac{1}{2}\beta_1t^2+v_{x0}t+p_{x0} \\ \frac{1}{6}\alpha_2t^3+\frac{1}{2}\beta_2t^2+v_{y0}t+p_{y0} \\ \frac{1}{6}\alpha_3t^3+\frac{1}{2}\beta_3t^2+v_{z0}t+p_{z0} \\ \frac{1}{2}\alpha_1t^2+\beta_1t+v_{x0} \\ \frac{1}{2}\alpha_2t^2+\beta_2t+v_{y0} \\ \frac{1}{2}\alpha_3t^2+\beta_3t+v_{z0} \end{bmatrix},\ initial\ state:x(0)=\begin{bmatrix} p_{x0} \\ p_{y0} \\ p_{z0} \\ v_{x0} \\ v_{y0} \\ v_{z0} \end{bmatrix} x∗=⎣⎢⎢⎢⎢⎢⎢⎡61α1t3+21β1t2+vx0t+px061α2t3+21β2t2+vy0t+py061α3t3+21β3t2+vz0t+pz021α1t2+β1t+vx021α2t2+β2t+vy021α3t2+β3t+vz0⎦⎥⎥⎥⎥⎥⎥⎤, initial state:x(0)=⎣⎢⎢⎢⎢⎢⎢⎡px0py0pz0vx0vy0vz0⎦⎥⎥⎥⎥⎥⎥⎤
- 根据末状态边界条件可以求解 α , β \alpha,\beta α,β
- [ 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 ] \begin{bmatrix} \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{bmatrix} \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ \beta_1 \\ \beta_2 \\ \beta_3 \end{bmatrix}=\begin{bmatrix} p_{xf}-p_{x0}-v_{x0}T \\ p_{yf}-p_{y0}-v_{y0}T \\ p_{zf}-p_{z0}-v_{z0}T \\ v_{xf}-v_{x0} \\ v_{yf}-v_{y0} \\ v_{zf}-v_{z0} \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡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 ] \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ \beta_1 \\ \beta_2 \\ \beta_3 \end{bmatrix}=\begin{bmatrix} -\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{bmatrix}\begin{bmatrix} p_{xf}-p_{x0}-v_{x0}T \\ p_{yf}-p_{y0}-v_{y0}T \\ p_{zf}-p_{z0}-v_{z0}T \\ v_{xf}-v_{x0} \\ v_{yf}-v_{y0} \\ v_{zf}-v_{z0} \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡−T31200T26000−T31200T26000−T31200T26T2600−T2000T2600−T2000T2600−T2⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0Tvxf−vx0vyf−vy0vzf−vz0⎦⎥⎥⎥⎥⎥⎥⎤
- 计算代价(最优值)
- J = ∫ 0 T ( 1 + a x 2 + a y 2 + a z 2 ) d t J=\int_0^T(1+a_x^2+a_y^2+a_z^2)dt J=∫0T(1+ax2+ay2+az2)dt
- 将求解的最优输入 a = u ∗ = [ α 1 t + β 1 α 2 t + β 2 α 3 t + β 3 ] a=u^*=\begin{bmatrix} \alpha_1t+\beta_1 \\ \alpha_2t+\beta_2 \\ \alpha_3t+\beta_3 \end{bmatrix} a=u∗=⎣⎡α1t+β1α2t+β2α3t+β3⎦⎤ 带入上式,得到
- J = T + ( 1 3 α 1 2 T 3 + α 1 β 1 T 2 + β 1 2 T ) + ( 1 3 α 2 2 T 3 + α 2 β 2 T 2 + β 2 2 T ) + ( 1 3 α 3 2 T 3 + α 3 β 3 T 2 + β 3 2 T ) J=T+(\frac{1}{3}\alpha_1^2T^3+\alpha_1\beta_1T^2+\beta_1^2T)+(\frac{1}{3}\alpha_2^2T^3+\alpha_2\beta_2T^2+\beta_2^2T)+(\frac{1}{3}\alpha_3^2T^3+\alpha_3\beta_3T^2+\beta_3^2T) J=T+(31α12T3+α1β1T2+β12T)+(31α22T3+α2β2T2+β22T)+(31α32T3+α3β3T2+β32T)
- 最终 J J J 的只和 T T T 相关,则可以求出最优的 T ∗ = arg min T J ( T ) T^*=\mathop{\arg\min}\limits_{T}\ J(T) T∗=Targmin J(T) ,然后可求出 α , β \alpha,\beta α,β,进一步的可以求出 x ∗ ( t ) , u ∗ ( t ) x^*(t),u^*(t) x∗(t),u∗(t)
自由边界条件
在上述求解过程中,我们已知了初始状态 x 0 x_0 x0 和末状态 x f x_f xf ,但是如果对于末状态,我们只约束位置,而不约束速度,即末状态条件为 x f = ( p x f , p y f , p z f ) T x_f=(p_{xf},p_{yf},p_{zf})^T xf=(pxf,pyf,pzf)T,那么上述问题又该如何求解呢?
其实在根据末状态边界条件可以求解 α , β \alpha,\beta α,β 之前的操作都是相同的,不在赘述,在求解 α , β \alpha,\beta α,β 时,位置条件不变,仍然如下:
- [ 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 β 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 ] \begin{bmatrix} \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{bmatrix} \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ \beta_1 \\ \beta_2 \\ \beta_3 \end{bmatrix}=\begin{bmatrix} p_{xf}-p_{x0}-v_{x0}T \\ p_{yf}-p_{y0}-v_{y0}T \\ p_{zf}-p_{z0}-v_{z0}T \end{bmatrix} ⎣⎡61T300061T300061T321T200021T200021T2⎦⎤⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0T⎦⎤
- 现在需要将速度边界条件修改为自由边界条件,此时将用上这个条件 λ ( T ) = − ▽ h ( s ∗ ( T ) ) \lambda(T)=-\triangledown h(s^*(T)) λ(T)=−▽h(s∗(T))
- 由于代价函数中不存在 h ( s ( T ) ) h(s(T)) h(s(T)) 项,所以
- [ λ 4 ( T ) λ 5 ( T ) λ 6 ( T ) ] = [ − 2 α 1 T − 2 β 1 − 2 α 2 T − 2 β 2 − 2 α 3 T − 2 β 3 ] = 0 \begin{bmatrix} \lambda_4(T) \\ \lambda_5(T) \\ \lambda_6(T) \end{bmatrix}=\begin{bmatrix} -2\alpha_1T-2\beta_1 \\ -2\alpha_2T-2\beta_2 \\ -2\alpha_3T-2\beta_3 \end{bmatrix}=0 ⎣⎡λ4(T)λ5(T)λ6(T)⎦⎤=⎣⎡−2α1T−2β1−2α2T−2β2−2α3T−2β3⎦⎤=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 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 ] \begin{bmatrix} \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{bmatrix} \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ \beta_1 \\ \beta_2 \\ \beta_3 \end{bmatrix}=\begin{bmatrix} p_{xf}-p_{x0}-v_{x0}T \\ p_{yf}-p_{y0}-v_{y0}T \\ p_{zf}-p_{z0}-v_{z0}T \\ 0 \\ 0 \\ 0 \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡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 ] \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ \beta_1 \\ \beta_2 \\ \beta_3 \end{bmatrix}=\begin{bmatrix} -\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{bmatrix}\begin{bmatrix} p_{xf}-p_{x0}-v_{x0}T \\ p_{yf}-p_{y0}-v_{y0}T \\ p_{zf}-p_{z0}-v_{z0}T \\ 0 \\ 0 \\ 0 \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡α1α2α3β1β2β3⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡−T3300T23000−T3300T23000−T3300T232T300−210002T300−210002T300−21⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡pxf−px0−vx0Tpyf−py0−vy0Tpzf−pz0−vz0T000⎦⎥⎥⎥⎥⎥⎥⎤
计算代价(最优值)与上述过程一样,这里对最优值进行下深入计算
- J = T + ( 1 3 α 1 2 T 3 + α 1 β 1 T 2 + β 1 2 T ) + ( 1 3 α 2 2 T 3 + α 2 β 2 T 2 + β 2 2 T ) + ( 1 3 α 3 2 T 3 + α 3 β 3 T 2 + β 3 2 T ) J=T+(\frac{1}{3}\alpha_1^2T^3+\alpha_1\beta_1T^2+\beta_1^2T)+(\frac{1}{3}\alpha_2^2T^3+\alpha_2\beta_2T^2+\beta_2^2T)+(\frac{1}{3}\alpha_3^2T^3+\alpha_3\beta_3T^2+\beta_3^2T) J=T+(31α12T3+α1β1T2+β12T)+(31α22T3+α2β2T2+β22T)+(31α32T3+α3β3T2+β32T)
- 由于 [ − 2 α 1 T − 2 β 1 − 2 α 2 T − 2 β 2 − 2 α 3 T − 2 β 3 ] = 0 \begin{bmatrix} -2\alpha_1T-2\beta_1 \\ -2\alpha_2T-2\beta_2 \\ -2\alpha_3T-2\beta_3 \end{bmatrix}=0 ⎣⎡−2α1T−2β1−2α2T−2β2−2α3T−2β3⎦⎤=0
- J = T + 1 3 α 1 2 T 3 + 1 3 α 2 2 T 3 + 1 3 α 3 2 T 3 J=T+\frac{1}{3}\alpha_1^2T^3+\frac{1}{3}\alpha_2^2T^3+\frac{1}{3}\alpha_3^2T^3 J=T+31α12T3+31α22T3+31α32T3
- 记 Δ p = p f − p 0 \Delta p=p_f-p_0 Δp=pf−p0 ,则有 [ α 1 α 2 α 3 ] = [ − 3 ( Δ p x − v x 0 T ) T 3 − 3 ( Δ p y − v y 0 T ) T 3 − 3 ( Δ p z − v z 0 T ) T 3 ] \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \end{bmatrix}=\begin{bmatrix} \frac{-3(\Delta p_x-v_{x0}T)}{T^3} \\ \frac{-3(\Delta p_y-v_{y0}T)}{T^3} \\ \frac{-3(\Delta p_z-v_{z0}T)}{T^3} \end{bmatrix} ⎣⎡α1α2α3⎦⎤=⎣⎢⎡T3−3(Δpx−vx0T)T3−3(Δpy−vy0T)T3−3(Δpz−vz0T)⎦⎥⎤
- 可得 J = T + 3 [ ( v x 0 2 + v y 0 2 + v z 0 2 ) T 2 − 2 ( Δ p x v x 0 + Δ p y v y 0 + Δ p z v z 0 ) T + ( Δ p x 2 + Δ p y 2 + Δ p z 2 ) ] T 3 J=T+\frac{3[(v_{x0}^2+v_{y0}^2+v_{z0}^2)T^2-2(\Delta{p_x}v_{x0}+\Delta{p_y}v_{y0}+\Delta{p_z}v_{z0})T+(\Delta{p_x}^2+\Delta{p_y}^2+\Delta{p_z}^2)]}{T^3} J=T+T33[(vx02+vy02+vz02)T2−2(Δpxvx0+Δpyvy0+Δpzvz0)T+(Δpx2+Δpy2+Δpz2)]
- 记,
- a = v x 0 2 + v y 0 2 + v z 0 2 a=v_{x0}^2+v_{y0}^2+v_{z0}^2 a=vx02+vy02+vz02
- b = Δ p x v x 0 + Δ p y v y 0 + Δ p z v z 0 b=\Delta{p_x}v_{x0}+\Delta{p_y}v_{y0}+\Delta{p_z}v_{z0} b=Δpxvx0+Δpyvy0+Δpzvz0
- c = Δ p x 2 + Δ p y 2 + Δ p z 2 c=\Delta{p_x}^2+\Delta{p_y}^2+\Delta{p_z}^2 c=Δpx2+Δpy2+Δpz2
- 求 ∂ J ∂ T = T 4 − 3 a T 2 + 12 b T − 9 c T 4 = 0 \frac{\partial{J}}{\partial{T}}=\frac{T^4-3aT^2+12bT-9c}{T^4}=0 ∂T∂J=T4T4−3aT2+12bT−9c=0 ,即求一元四次方程 T 4 − 3 a T 2 + 12 b T − 9 c = 0 T^4-3aT^2+12bT-9c=0 T4−3aT2+12bT−9c=0 的“正实根”,在c++中可使用“求多项式伴随矩阵特征值”的方法进行求解
c++代码示例
// 该函数用于计算三维空间中的 OBVP 问题 // 输入:起点的位置、速度,终点的位置 // 计算最优解 T,以及最优值 J // 最优解 T 用于计算最优轨迹 (s*(t), u*(t)) // 最优值 J 用于评估轨迹的总代价 double OBVPtool::OptimalBVP(Eigen::Vector3d _start_position,Eigen::Vector3d _start_velocity, Eigen::Vector3d _target_position, double* _T) {double optimal_cost = 100000;Vector3d _delta_pos = _target_position - _start_position;// solving T^4 - 3*(vx0^2 + vy0^2 + vz0^2) * T^2 + 12 * (dx * vx0 + dy * vy0 + dz * vz0) * T - 9 * (dx^2 + dy^2 +dz^2)double c0 = -9.0 * _delta_pos.squaredNorm();double c1 = 12.0 * _delta_pos.dot(_start_velocity);double c2 = -3.0 * _start_velocity.squaredNorm();double c3 = 0.0;Matrix<double, 4, 4> matrix_4x4;Matrix<complex<double>, Dynamic, Dynamic> matrix_eigenvalues;matrix_4x4 << 0, 0, 0, -c0,1, 0, 0, -c1,0, 1, 0, -c2,0, 0, 1, -c3;matrix_eigenvalues = matrix_4x4.eigenvalues();for (int i = 0; i < (int)matrix_eigenvalues.size(); i++){double value_imag = imag(matrix_eigenvalues(i));double value_real = real(matrix_eigenvalues(i));if (std::abs(value_imag) >= 1e-6 || value_real <= 1e-6){// costs.emplace_back(optimal_cost);continue;}double cost = value_real + 3.0 * _start_velocity.squaredNorm() / value_real - 6.0 * _delta_pos.dot(_start_velocity) / (value_real * value_real) + 3.0 * _delta_pos.squaredNorm() / (value_real * value_real * value_real);if (cost < optimal_cost){optimal_cost = cost;*_T = value_real;}}return optimal_cost; }
运行效果
绿色轨迹表示最优
蓝色轨迹表示无碰撞但不是最优
红色轨迹表示有碰撞
总结
从以上计算过程中可见自由边界问题与固定边界问题的处理过程中,最大的区别主要是对边界条件 λ ( T ) = − ▽ h ( s ∗ ( T ) ) \lambda(T)=-\triangledown h(s^*(T)) λ(T)=−▽h(s∗(T)) 的处理方法不同,在固定边界问题中,由于我们对系统的末状态施加了确切的约束,因此 h ( s ∗ ( T ) ) h(s^*(T)) h(s∗(T)) 是不可导的(且先不说其是否存在),可以认为此时该边界条件无意义;而在处理自由边界问题时,由于末状态速度自由,所以 h ( s ∗ ( T ) ) h(s^*(T)) h(s∗(T)) 对速度是可导的,但是由于在代价函数中未定义对系统末状态的约束,可认为 h ( s ∗ ( T ) ) = 0 h(s^*(T))=0 h(s∗(T))=0 ,所以其对速度的偏导也为0。
两类边界条件的OBVP求解方法相关推荐
- 几类常微分方程的matlab求解方法 | 刚性微分方程、隐式微分方程、微分代数方程
目录 微分方程的转换 一.单个高阶常微分方程 二.高阶常微分方程组 刚性微分方程求解 隐式微分方程求解 微分代数方程求解 微分方程的转换 根据微分方程求解的标准型,要得到微分方程的数值解,应该先将该方 ...
- 算法:最小公倍数的求解方法
一 写在开头 1.1 本节内容 本文的主要内容是介绍一种两个数最小公倍数(Lowest Common Multiple)的求解方法. 二 最小公倍数求法 2.1 算法原理 两个数的公倍数可以是无限多个 ...
- 创建两个Thread子类,第一个用run()方法启动,并捕获第二个Thread对象的句柄,然后调用wait()。第二个类的run()方法几秒后为第一个线程调用notifAll(),使第一个线程打印消息
创建两个Thread子类,第一个用run()方法启动,并捕获第二个Thread对象的句柄,然后调用wait().第二个类的run()方法几秒后为第一个线程调用notifAll(),使第一个线程打印消息 ...
- 编写一个抽象类Shape,声明计算图形面积的抽象方法。再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法
编写一个抽象类Shape,声明计算图形面积的抽象方法.再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法 ...
- 数控编程方法可以分为两类:一类是手工编程,另一类是自动编程
数控加工工作过程:如下图所示,在数控机床上加工零件时,要预先根据零件加工图样的要求确定零件加工的工艺过程.工艺参数和走刀运动数据,然后编制加工程序,传输给数控系统,在事先存入数控装置内部的控制软件支持 ...
- 线性规划两阶段求解方法
想快速掌握线性规划两阶段求解方法,强烈推荐博文<三言两语讲清楚线性规划单纯形方法>. 百度百科给了下面一个例子,感觉其解法不容易看明白原理,换一种解释方法,应该很容易看明白两阶段法的原理. ...
- 《C语言程序设计:问题与求解方法》——3.8节不同类型数据之间的类型转换
本节书摘来自华章社区<C语言程序设计:问题与求解方法>一书中的第3章,第3.8节不同类型数据之间的类型转换,作者:何 勤,更多章节内容可以访问云栖社区"华章社区"公众号 ...
- 《C语言程序设计:问题与求解方法》——3.9节常见编程错误
本节书摘来自华章社区<C语言程序设计:问题与求解方法>一书中的第3章,第3.9节常见编程错误,作者:何 勤,更多章节内容可以访问云栖社区"华章社区"公众号查看 3.9 ...
- 重磅!一文读懂线性方程组的求解方法
目录 1.AAA为方阵 直接法 迭代法 2.AAA为非方阵且A∈Rm×n,m>nA\in R^{m\times n},m>nA∈Rm×n,m>n 2.1. r(A)=n<mr( ...
最新文章
- OpenAI推新程序包:GPU适应十倍大模型仅需增加20%训练时间
- 项目小结:日立OA系统(Asp.net)
- Spring Boot 2.0 新特性
- Linux下配置FTP、SSH服务
- ELK学习5_ELK文档资料:《ELK stack 权威指南/饶琛琳》推荐
- dart系列之:dart类中的构造函数
- php定义数据表类,phpwind中的数据库操作类
- 2017年WorkApplication牛客网线上机试题
- Js 日期 多少分钟前,多少秒前
- 重做系统,出现invalid switch noid
- 2017iOS开发最新的打包测试步骤(亲测)
- SQL prompt无法激活跳转到127.0.0.1:22223的解决方案
- 深信服vmp云桌面安装测试小结
- ENSP实验五——三层交换机+二层交换机
- centos usb转网口_CentOS 6.5安装qf9700 USB网卡驱动
- android scheme 配置多个,Android Scheme URL 使用方法
- 美元的阿拉伯数字转换为英文大写的格式
- 服务器只识别2t硬盘,网吧用2008R2服务器系统不认2T以上单个硬盘?
- Camera硬件结构组成(三)
- 城市道路井盖安全监测系统 opencv
热门文章
- 8.利用红外遥控信号控制LED灯的亮灭
- 苹果第四财季净利润85亿美元 同比增长13%
- 种春草肥禾,织数字天下
- python可以这样学读书笔记_Python 编程:从入门到实战 读书笔记
- chm文件的文件格式 (chm format)
- 关于js关闭窗口的事件和用法
- Win10 .chm文件无法打开解决方案
- 什么是智慧社区 智慧社区解决方案概括
- 对于c++面向对象的深刻认识和理解--哲学角度看问题(源生论)
- [这是兴趣么](http://simplemind.info/blog/?paged=2m=201104)