引言
Boundary value problem (BVP):给出机器人在起始点与终止点的状态,设计出一条状态转移的轨迹。是stated sampled lattice planning的基础,在motion planning技术栈中的位置如下。
Optimal boundary value problem:按某种原则设计出一条最优轨迹。
建模
对于二维/三维空间中的机器人,通常在每个维度上分别进行轨迹设计。此处以三维空间中的无人机为例,考察其在一个轴向的运动。
无人机状态 s = ( p , v , a ) s=(p, v, a) s=(p,v,a)
使用jerk作为控制输入: u = j u=j u=j
状态方程:
s ˙ = f s ( s , u ) = ( v , a , j ) \dot{s}=f_s(s,u)=(v,a,j) s˙=fs(s,u)=(v,a,j)
目标:最小化jerk二次方的积分,即
min J : = 1 T ∫ 0 T j ( t ) 2 d t \min J : = \frac{1}{T}\int_{0}^{T}j(t)^{2}dt minJ:=T1∫0Tj(t)2dt
待求解的量是 u ( t ) u(t) u(t)
求解
寻找最优轨迹的一般形式是极小化代价函数
J = h ( s ( T ) ) + ∫ 0 T g ( s ( t ) , u ( t ) ) ⋅ d t J=h(s(T))+\int_{0}^{T} g(s(t), u(t)) \cdot d t J=h(s(T))+∫0Tg(s(t),u(t))⋅dt
其中,第一项反映了末状态与理想状态的差别,可理解为惩罚项,第二项反映了状态转移过程的代价 (transition cost)。
为求解最优的 u ( t ) u(t) u(t)(即最优 j j j),可以使用庞特里亚金极小值原理:引入costate λ = ( λ 1 , λ 2 , λ 3 ) \lambda=(\lambda_1,\lambda_2,\lambda_3) λ=(λ1,λ2,λ3),(实际上是 λ ( t ) = ( λ 1 ( t ) , λ 2 ( t ) , λ 3 ( t ) ) \lambda(t)=(\lambda_1(t),\lambda_2(t),\lambda_3(t)) λ(t)=(λ1(t),λ2(t),λ3(t)),为形式简洁,将t省略),构建Hamiltonian funciton
H ( s , j , λ ) = 1 T j 2 + λ T f s ( s , j ) = 1 T j 2 + λ 1 v + λ 2 a + λ 3 j \begin{aligned} H(s, j, \lambda) &=\frac{1}{T} j^{2}+\lambda^{T} f_{s}(s, j) \\ &=\frac{1}{T} j^{2}+\lambda_{1} v+\lambda_{2} a+\lambda_{3} j \end{aligned} H(s,j,λ)=T1j2+λTfs(s,j)=T1j2+λ1v+λ2a+λ3j
在继续向下之前,首先简要介绍庞特里亚金极小值原理 (Pontryagin’s minimum principle):
庞特里亚金极小值原理 (Pontryagin’s minimum principle)是最优控制范畴里的概念。wiki百科 - Pontryagin’s minimum principle
对于初始状态给定的问题,
λ ˙ ( t ) = − ∇ s H ( s ∗ ( t ) , u ∗ ( t ) , λ ( t ) ) λ 的导数 = − ( H 对 p 求导 , H 对 v 求导 , H 对 a 求导 ) \dot{\lambda}(t)=-\nabla_{s} H\left(s^{*}(t), u^{*}(t), \lambda(t)\right) \\ \lambda的导数=-(H对p求导, H对v求导, H对a求导) λ˙(t)=−∇sH(s∗(t),u∗(t),λ(t))λ的导数=−(H对p求导,H对v求导,H对a求导)
最优控制输入为
u ∗ ( t ) = arg min u ( t ) H ( s ∗ ( t ) , u ( t ) , λ ( t ) ) u^{*}(t)=\arg \min _{u(t)} H\left(s^{*}(t), u(t), \lambda(t)\right) u∗(t)=argu(t)minH(s∗(t),u(t),λ(t))
如果 h ( s ( T ) ) h(s(T)) h(s(T))是连续的,还有terminal boundary condition成立:
λ ( T ) = − ∇ h ( s ∗ ( T ) ) \lambda(T)=-\nabla h\left(s^{*}(T)\right) λ(T)=−∇h(s∗(T))
下面开始求解,由庞特里亚金极小值原理,
λ ˙ = − ∇ s H ( s ∗ , j ∗ , λ ) = ( 0 , − λ 1 , − λ 2 ) \dot{\lambda}=-\nabla_{s} H\left(s^{*}, j^{*}, \lambda\right)=\left(0,-\lambda_{1},-\lambda_{2}\right) λ˙=−∇sH(s∗,j∗,λ)=(0,−λ1,−λ2)
注意上式的意义: λ ( t ) \lambda(t) λ(t)这一向量第一项的导数为0,第二项的导数为第一项的相反数,第三项的导数为第二项的相反数。
引入待定系数 α , β , γ \alpha,\beta,\gamma α,β,γ,易写出
λ ( t ) = 1 T [ − 2 α 2 α t + 2 β − α t 2 − 2 β t − 2 γ ] \lambda(t)=\frac{1}{T}\left[\begin{array}{c} -2 \alpha \\ 2 \alpha t+2 \beta \\ -\alpha t^{2}-2 \beta t-2 \gamma \end{array}\right] λ(t)=T1⎣
⎡−2α2αt+2β−αt2−2βt−2γ⎦
⎤
进而,可得最优jerk
j ∗ ( t ) = arg min j ( t ) H ( s ∗ ( t ) , j ( t ) , λ ( t ) ) = a r g min j ( t ) [ 1 T j 2 + 1 T ( − α t 2 − 2 β t − 2 γ ) j ] = 1 2 α t 2 + β t + γ \begin{aligned} j^{*}(t) &=\arg \min _{j(t)} H\left(s^{*}(t), j(t), \lambda(t)\right) \\ &= arg \min _{j(t)}\left [ \frac{1}{T} j^{2}+\frac{1}{T}(-\alpha t^{2}-2 \beta t-2 \gamma)j \right ] \\ &=\frac{1}{2} \alpha t^{2}+\beta t+\gamma \end{aligned} j∗(t)=argj(t)minH(s∗(t),j(t),λ(t))