不变扩展卡尔曼滤波(三):一个更通用的框架

同步更新于github page。

文章目录

  • 复杂系统下的不变扩展卡尔曼滤波
  • 混合误差的系统方程
  • 混合状态的更新
  • 总结
  • References

复杂系统下的不变扩展卡尔曼滤波

由前面的文章可知,不变性要靠合理的状态误差设计来实现。但在更复杂的系统中,为所有状态量找到一个满足不变性的状态误差是很困难的,甚至一些状态是不可能被表示为群运算的。在存在这类状态量的系统中,有没有可能保留InEKF的主要优点呢(主要指一致性方面的优点)?答案是肯定的。

考虑这样一类系统,其系统方程如下:

Θ ˙ t = g ( Θ t ) χ ˙ t = f ( χ t , u t , Θ t ) y t = h ( χ t , Θ t ) \begin{aligned} \dot\Theta_t &= g(\Theta_t) \\ \dot\chi_t &= f(\chi_t, u_t, \Theta_t) \\ y_t &= h(\chi_t, \Theta_t) \end{aligned} Θ˙tχ˙tyt=g(Θt)=f(χt,ut,Θt)=h(χt,Θt)

抛开矢量 Θ t \Theta_t Θt不看,上式就是之前讨论的普通系统方程,引入矢量 Θ t \Theta_t Θt后,系统的变化不仅依赖当前时刻的状态 χ t \chi_t χt和输入 u t u_t ut,还依赖另外一个随着时间变化的量 Θ t \Theta_t Θt。在普通的EKF中,可以将 Θ t \Theta_t Θt也融入到需要估计的状态量 χ t \chi_t χt中。这里之所以分开写,是为了在InEKF中区分可以被描述为群元素的状态量 χ t \chi_t χt,和不能被描述为群元素的量 Θ t \Theta_t Θt

以一个完整的IMU系统为例,系统方程为:

R ˙ t = R t [ w ~ t − b t w − n t w ] × v ˙ t = R t ( a ~ t − b t a − n t a ) + g p ˙ t = v t b ˙ t w = n t b w b ˙ t a = n t b a \begin{aligned} \dot{R}_t&=R_t[\tilde{w}_t-b_t^w-n_t^w]_\times \\ \dot{v}_t&=R_t(\tilde{a}_t-b_t^a-n_t^a)+g \\ \dot{p}_t&=v_t \\ \dot{b}_t^w&=n_t^{bw} \\ \dot{b}_t^a &=n_t^{ba} \end{aligned} R˙tv˙tp˙tb˙twb˙ta=Rt[w~tbtwntw]×=Rt(a~tbtanta)+g=vt=ntbw=ntba

其中 b t w , b t a b_t^w,b_t^a btw,bta分别为IMU的gyro bias和accelerator bias,他们满足Random Walk模型,即随时间的变化率是一个满足高斯分布的白噪声。

由之前的文章可知, R t , v t , p t R_t, v_t, p_t Rt,vt,pt能够构成一个群元素并且使得最终导出的误差系统方程满足不变性(系统矩阵与状态无关),但如果将两个bias也放入群中,就很难找到一个状态误差使其满足不变性了。也就是说, R t , v t , p t R_t, v_t, p_t Rt,vt,pt就是上文中的 χ t \chi_t χt,而 b t w , b t a b_t^w,b_t^a btw,bta就是上文中的 Θ t \Theta_t Θt

为了处理这类系统,可以将状态误差定义为如下形式:

e t = ( χ ^ t χ t − 1 ,   Θ ^ t − Θ t ) = ( η t ,   ζ t ) e_t=(\hat{\chi}_t\chi_t^{-1},\ \hat\Theta_t-\Theta_t)=(\eta_t,\ \zeta_t) et=(χ^tχt1, Θ^tΘt)=(ηt, ζt)

即右不变误差与普通线性误差的笛卡尔积,是一种混合误差。

混合误差的系统方程

现在需要推导在混合系统误差下,该误差的系统方程是怎样的。直接以上文的IMU系统为例,令

χ t = ( R t v t p t 0 1 0 0 0 1 ) ,    η t = χ ^ t χ t − 1 \chi_t= \begin{pmatrix} R_t & v_t & p_t \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix},\ \ \eta_t=\hat{\chi}_t\chi_t^{-1} χt=Rt00vt10pt01,  ηt=χ^tχt1

以及

Θ t = ( b t w b t a ) ,    ζ t = ( b ^ t w − b t w b ^ t a − b t a ) = ( ζ t w ζ t a ) \Theta_t= \begin{pmatrix} b_t^w \\ b_t^a \end{pmatrix},\ \ \zeta_t= \begin{pmatrix} \hat{b}_t^w - b_t^w \\ \hat{b}_t^a - b_t^a \end{pmatrix}= \begin{pmatrix} \zeta_t^w \\ \zeta_t^a \end{pmatrix} Θt=(btwbta),  ζt=(b^twbtwb^tabta)=(ζtwζta)

推导方式模仿第二篇文章中普通系统的推导,也就是计算:

e ˙ t = ( η ˙ t ζ ˙ t ) \dot{e}_t= \begin{pmatrix} \dot{\eta}_t \\ \\ \dot{\zeta}_t \end{pmatrix} e˙t=η˙tζ˙t

其中 η ˙ t \dot{\eta}_t η˙t的定义和上一篇文章中一样

η ˙ t ≈ ( [ ξ ˙ R t ] × ξ ˙ v t ξ ˙ p t 0 0 0 0 0 0 ) = d d t Λ ( ξ R t ξ v t ξ p t ) \begin{aligned} \dot{\eta}_t\approx \begin{pmatrix} [\dot{\xi}_{R_t}]_\times & \dot{\xi}_{v_t} & \dot{\xi}_{p_t} \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} = \frac{d}{dt}\Lambda \begin{pmatrix} \xi_{R_t} \\ \xi_{v_t} \\ \xi_{p_t} \end{pmatrix} \end{aligned} η˙t[ξ˙Rt]×00ξ˙vt00ξ˙pt00=dtdΛξRtξvtξpt

仅在 ξ R t , ξ v t , ξ p t \xi_{R_t}, \xi_{v_t}, \xi_{p_t} ξRt,ξvt,ξpt的计算中有少许不同,分别为

[ ξ ˙ R t ] × ≈ η ˙ R t = R ^ ˙ t R t T + R ^ t R ˙ t T = R ^ t [ w ~ t − b ^ t w ] × R t T − R ^ t [ w t ] × R t T = R ^ t [ w ~ t − b ^ t w − w t ] × R t T      ( 其中  w ~ t = w t + b t w + n t w ) = R ^ t [ n t w − ζ t w ] × R t T = R ^ t [ n t w − ζ t w ] × R ^ t T R ^ t R t T = [ R ^ t ( n t w − ζ t w ) ] × η R t ≈ [ R ^ t ( n t w − ζ t w ) ] × ( I + [ ξ R t ] × ) ≈ [ R ^ t ( n t w − ζ t w ) ] × \begin{aligned} [\dot{\xi}_{R_t}]_\times\approx\dot{\eta}_{R_t}&=\dot{\hat{R}}_tR_t^T+\hat{R}_t\dot{R}_t^T \\ &=\hat{R}_t[\tilde{w}_t-\hat{b}_t^w]_\times R_t^T-\hat{R}_t[w_t]_\times R_t^T \\ &=\hat{R}_t[\tilde{w}_t-\hat{b}_t^w-w_t]_\times R_t^T \ \ \ \ (\text{其中}\ \tilde{w}_t=w_t+b_t^w+n_t^w) \\ &=\hat{R}_t[n_t^w-\zeta_t^w]_\times R_t^T \\ &=\hat{R}_t[n_t^w-\zeta_t^w]_\times \hat{R}_t^T \hat{R}_tR_t^T \\ &=[\hat{R}_t (n_t^w-\zeta_t^w)]_\times \eta_{R_t} \\ &\approx [\hat{R}_t (n_t^w-\zeta_t^w)]_\times ( I+[\xi_{R_t}]_\times) \\ &\approx [\hat{R}_t (n_t^w-\zeta_t^w)]_\times \end{aligned} [ξ˙Rt]×η˙Rt=R^˙tRtT+R^tR˙tT=R^t[w~tb^tw]×RtTR^t[wt]×RtT=R^t[w~tb^twwt]×RtT    (其中 w~t=wt+btw+ntw)=R^t[ntwζtw]×RtT=R^t[ntwζtw]×R^tTR^tRtT=[R^t(ntwζtw)]×ηRt[R^t(ntwζtw)]×(I+[ξRt]×)[R^t(ntwζtw)]×

以及

ξ ˙ v t = v ^ ˙ t − η ˙ R t v t − η R t v ˙ t = R ^ t ( a ~ t − b ^ t a ) + g − [ R ^ t ( n t w − ζ t w ) ] × v t − R ^ t R t T ( R t a t + g ) = R ^ t ( a ~ t − b ^ t a − a t ) + g − [ R ^ t ( n t w − ζ t w ) ] × v t − R ^ t R t T g      ( 其中  a ~ t = a t + b t a + n t a ) ≈ R ^ t ( n t a − ζ t a ) + g − [ R ^ t ( n t w − ζ t w ) ] × v t − ( I + [ ξ R t ] × ) g = [ g ] × ξ R t + ( [ v t ] × R ^ t ) ( n t w − ζ t w ) + R ^ t ( n t a − ζ t a ) \begin{aligned} \dot{\xi}_{v_t} &= \dot{\hat{v}}_t - \dot{\eta}_{R_t}v_t-\eta_{R_t}\dot{v}_t \\ &=\hat{R}_t(\tilde{a}_t-\hat{b}_t^a)+g-[\hat{R}_t (n_t^w-\zeta_t^w)]_\times v_t-\hat{R}_tR_t^T(R_ta_t+g) \\ &=\hat{R}_t(\tilde{a}_t-\hat{b}_t^a-a_t) + g-[\hat{R}_t (n_t^w-\zeta_t^w)]_\times v_t-\hat{R}_tR_t^Tg \ \ \ \ (\text{其中}\ \tilde{a}_t=a_t+b_t^a+n_t^a)\\ &\approx \hat{R}_t(n_t^a-\zeta_t^a)+g-[\hat{R}_t (n_t^w-\zeta_t^w)]_\times v_t-(I+[\xi_{R_t}]_\times)g \\ &=[g]_\times \xi_{R_t}+([v_t]_\times \hat{R}_t) (n_t^w-\zeta_t^w)+\hat{R}_t(n_t^a-\zeta_t^a) \end{aligned} ξ˙vt=v^˙tη˙RtvtηRtv˙t=R^t(a~tb^ta)+g[R^t(ntwζtw)]×vtR^tRtT(Rtat+g)=R^t(a~tb^taat)+g[R^t(ntwζtw)]×vtR^tRtTg    (其中 a~t=at+bta+nta)R^t(ntaζta)+g[R^t(ntwζtw)]×vt(I+[ξRt]×)g=[g]×ξRt+([vt]×R^t)(ntwζtw)+R^t(ntaζta)

以及

ξ ˙ p t = p ^ ˙ t − η ˙ R t p t − η R t p ˙ t = v ^ t − [ R ^ t ( n t w − ζ t w ) ] × p t − R ^ t R t T v t = ( v ^ t − R ^ t R t T v t ) − [ R ^ t ( n t w − ζ t w ) ] × p t = ξ v t + ( [ p t ] × R ^ t ) ( n t w − ζ t w ) \begin{aligned} \dot{\xi}_{p_t} &= \dot{\hat{p}}_t - \dot{\eta}_{R_t}p_t-\eta_{R_t}\dot{p}_t \\ &=\hat{v}_t-[\hat{R}_t (n_t^w-\zeta_t^w)]_\times p_t - \hat{R}_tR_t^Tv_t \\ &=(\hat{v}_t-\hat{R}_tR_t^Tv_t)-[\hat{R}_t (n_t^w-\zeta_t^w)]_\times p_t \\ &=\xi_{v_t}+([p_t]_\times \hat{R}_t) (n_t^w-\zeta_t^w) \end{aligned} ξ˙pt=p^˙tη˙RtptηRtp˙t=v^t[R^t(ntwζtw)]×ptR^tRtTvt=(v^tR^tRtTvt)[R^t(ntwζtw)]×pt=ξvt+([pt]×R^t)(ntwζtw)

ζ t \zeta_t ζt由于是普通的线性误差,推导就比较简单了,即

ζ ˙ t = ( ζ ˙ t w ζ ˙ t a ) = ( − n t b w − n t b a ) \dot{\zeta}_t= \begin{pmatrix} \dot{\zeta}_t^w \\ \dot{\zeta}_t^a \end{pmatrix} = \begin{pmatrix} -n_t^{bw} \\ -n_t^{ba} \end{pmatrix} ζ˙t=(ζ˙twζ˙ta)=(ntbwntba)

综上,模仿上一篇文章的处理方式,可以得到整个系统状态误差的系统方程:

d d t ( ξ R t ξ v t ξ p t ζ t w ζ t a ) = ( 0 0 0 − R ^ t 0 [ g ] × 0 0 − [ v ^ t ] R ^ t − R ^ t 0 I 0 − [ p ^ t ] R ^ t 0 0 0 0 0 0 0 0 0 0 0 ) ( ξ R t ξ v t ξ p t ζ t w ζ t a ) + ( R ^ t 0 0 0 0 [ v ^ t ] × R ^ t R ^ t 0 0 0 [ p ^ t ] × R ^ t 0 R ^ t 0 0 0 0 0 − I 0 0 0 0 0 − I ) ( n t w n t a 0 n t b w n t b a ) \frac{d}{dt} \begin{pmatrix} \xi_{R_t} \\ \xi_{v_t} \\ \xi_{p_t} \\ \zeta_t^w \\ \zeta_t^a \end{pmatrix} = \begin{pmatrix} 0 & 0 & 0 & -\hat{R}_t & 0\\ [g]_\times & 0 & 0 & -[\hat{v}_t]\hat{R}_t & -\hat{R}_t \\ 0 & I & 0 & -[\hat{p}_t]\hat{R}_t & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \end{pmatrix} \begin{pmatrix} \xi_{R_t} \\ \xi_{v_t} \\ \xi_{p_t} \\ \zeta_t^w \\ \zeta_t^a \end{pmatrix} + \begin{pmatrix} \hat{R}_t & 0 & 0 & 0 & 0\\ [\hat{v}_t]_\times\hat{R}_t & \hat{R}_t & 0 & 0 & 0\\ [\hat{p}_t]_\times\hat{R}_t & 0 & \hat{R}_t & 0 & 0\\ 0 & 0 & 0 & -I & 0 \\ 0 & 0 & 0 & 0 & -I \end{pmatrix} \begin{pmatrix} n_t^w \\ n_t^a \\ 0 \\ n_t^{bw} \\ n_t^{ba} \end{pmatrix} dtdξRtξvtξptζtwζta=0[g]×00000I0000000R^t[v^t]R^t[p^t]R^t000R^t000ξRtξvtξptζtwζta+R^t[v^t]×R^t[p^t]×R^t000R^t00000R^t00000I00000Intwnta0ntbwntba

将其写为更紧凑的形式,容易看出带有bias的IMU系统与之前不带bias的IMU系统之间的联系

d d t ( ξ t ζ t ) = ( F χ t F χ t , Θ t 0 F Θ t ) ( ξ t ζ t ) + ( A d χ ^ t 0 0 − I ) ( n t n t b ) \frac{d}{dt} \begin{pmatrix} \xi_t \\ \zeta_t \end{pmatrix} = \begin{pmatrix} F_{\chi_t} & F_{\chi_t, \Theta_t} \\ 0 & F_{\Theta_t} \end{pmatrix} \begin{pmatrix} \xi_t \\ \zeta_t \end{pmatrix}+ \begin{pmatrix} Ad_{\hat{\chi}_t} & 0 \\ 0 & -I \end{pmatrix} \begin{pmatrix} n_t \\ n_t^b \end{pmatrix} dtd(ξtζt)=(Fχt0Fχt,ΘtFΘt)(ξtζt)+(Adχ^t00I)(ntntb)

其中 F χ t F_{\chi_t} Fχt就是上一篇文章中,不带bias的IMU系统的系统矩阵, A d χ ^ t Ad_{\hat{\chi}_t} Adχ^t是其噪声矩阵。带有bias的IMU系统,只是在原来的系统矩阵上进行了增广。这个结论适用于所有满足本文开头所定义的系统形式。

可以看到,在这种混合误差形式下,系统矩阵不再是一个常量了,每个时刻的系统矩阵与当前状态的估计值有关。但是,这种联系只通过bias或噪声等小量引入。可以证明对于这样的系统方程,一致性仍然能够保证。同时大量的实验也表明,这种“非完美”的InEKF在鲁棒性和收敛性上仍然优于传统的EKF。

混合状态的更新

之前已经知道,观测误差 z t z_t zt与状态误差 ξ t \xi_t ξt的线性关系为

z ~ t = H t ξ t + s t \tilde{z}_t=H_t\xi_t+s_t z~t=Htξt+st

其中 s t s_t st是观测噪声。

现在设系统的观测量不变(即 Θ t \Theta_t Θt是无法直接观测到的),但是状态误差变成了 ( ξ t , ζ t ) (\xi_t, \zeta_t) (ξt,ζt),显然线性关系应该变为

z ~ t = ( H χ t    H Θ t ) ( ξ t ζ t ) + s t \tilde{z}_t=(H_{\chi_t}\ \ H_{\Theta_t}) \begin{pmatrix} \xi_t \\ \zeta_t \end{pmatrix}+s_t z~t=(Hχt  HΘt)(ξtζt)+st

以带有bias的IMU系统为例, H χ t H_{\chi_t} Hχt就是上一篇文章中的观测矩阵 H t H_t Ht,即

H χ t = ( − [ m 1 ] × 0 3 × 3 I 3 × 3 ⋮ − [ m k ] × 0 3 × 3 I 3 × 3 ) H_{\chi_t}= \begin{pmatrix} -[m_1]_\times & 0_{3\times3} & I_{3\times3} \\ \vdots \\ -[m_k]_\times & 0_{3\times3} & I_{3\times3} \end{pmatrix} Hχt=[m1]×[mk]×03×303×3I3×3I3×3

其中 m k m_k mk是观测到的landmark在世界系下的坐标。而观测误差与bias的误差没有直接关系,即

H Θ t = ( 0 3 k × 3    0 3 k × 3 ) H_{\Theta_t}=(0_{3k\times3}\ \ 0_{3k\times3}) HΘt=(03k×3  03k×3)

同理,线性状态误差的更新变为了:

( ξ t + ζ t + ) = ( ξ t ζ t ) + ( K t ξ K t ζ ) z ~ t \begin{pmatrix} \xi_t^+ \\ \zeta_t^+ \end{pmatrix}= \begin{pmatrix} \xi_t \\ \zeta_t \end{pmatrix}+ \begin{pmatrix} K_t^\xi \\ K_t^\zeta \end{pmatrix}\tilde{z}_t (ξt+ζt+)=(ξtζt)+(KtξKtζ)z~t

卡尔曼增益的计算都一样,即

K t = ( K t ξ K t ζ ) = P t H t T ( H t P t H t T + V t ) − 1 K_t= \begin{pmatrix} K_t^\xi \\ K_t^\zeta \end{pmatrix}=P_tH_t^T(H_tP_tH_t^T+V_t)^{-1} Kt=(KtξKtζ)=PtHtT(HtPtHtT+Vt)1

只是现在的 H t = ( H χ t    H Θ t ) H_t=(H_{\chi_t}\ \ H_{\Theta_t}) Ht=(Hχt  HΘt),状态的协方差矩阵 P t P_t Pt在维数上也有相应改变。

最终,混合状态的更新方式也采用混合的形式,能表示为群元素的部分采用指数更新,不能表示为群元素的部分采用普通的线性更新,即

( χ ^ t + Θ ^ t + ) = ( Exp ( K t ξ z ~ t ) χ ^ t Θ ^ t + K t ζ z ~ t ) \begin{pmatrix} \hat{\chi}_t^+ \\ \hat{\Theta}_t^+ \end{pmatrix}= \begin{pmatrix} \text{Exp}(K_t^\xi\tilde{z}_t)\hat{\chi}_t \\ \hat{\Theta}_t+K_t^{\zeta}\tilde{z}_t \end{pmatrix} (χ^t+Θ^t+)=(Exp(Ktξz~t)χ^tΘ^t+Ktζz~t)

总结

设系统方程满足如下形式:

Θ ˙ t = g ( Θ t ) χ ˙ t = f ( χ t , u t , Θ t ) y t = h ( χ t , Θ t ) \begin{aligned} \dot\Theta_t &= g(\Theta_t) \\ \dot\chi_t &= f(\chi_t, u_t, \Theta_t) \\ y_t &= h(\chi_t, \Theta_t) \end{aligned} Θ˙tχ˙tyt=g(Θt)=f(χt,ut,Θt)=h(χt,Θt)

其中 χ t , Θ t \chi_t, \Theta_t χt,Θt都是需要估计的量,但是 χ t \chi_t χt是一个群元素(比如 S E k ( 3 ) SE_k(3) SEk(3)中的元素), Θ t \Theta_t Θt是一个矢量,一般不可直接观测。则该系统在InEKF框架下,具有如下形式的系统矩阵 F t F_t Ft和观测矩阵 H t H_t Ht

F t = ( F χ t F χ t , Θ t 0 F Θ t ) ,    H t = ( H χ t    H Θ t ) F_t= \begin{pmatrix} F_{\chi_t} & F_{\chi_t, \Theta_t} \\ 0 & F_{\Theta_t} \end{pmatrix},\ \ H_t=(H_{\chi_t}\ \ H_{\Theta_t}) Ft=(Fχt0Fχt,ΘtFΘt),  Ht=(Hχt  HΘt)

且卡尔曼增益

K t = ( K t ξ K t ζ ) = P t H t T ( H t P t H t T + V t ) − 1 K_t= \begin{pmatrix} K_t^\xi \\ K_t^\zeta \end{pmatrix}=P_tH_t^T(H_tP_tH_t^T+V_t)^{-1} Kt=(KtξKtζ)=PtHtT(HtPtHtT+Vt)1

状态的更新方式为

( χ ^ t + Θ ^ t + ) = ( Exp ( K t ξ z ~ t ) χ ^ t Θ ^ t + K t ζ z ~ t ) \begin{pmatrix} \hat{\chi}_t^+ \\ \hat{\Theta}_t^+ \end{pmatrix}= \begin{pmatrix} \text{Exp}(K_t^\xi\tilde{z}_t)\hat{\chi}_t \\ \hat{\Theta}_t+K_t^{\zeta}\tilde{z}_t \end{pmatrix} (χ^t+Θ^t+)=(Exp(Ktξz~t)χ^tΘ^t+Ktζz~t)

References

  1. Non-linear state error based extended Kalman flters with applications to navigation
  2. Contact-Aided Invariant Extended Kalman Filtering for Legged Robot State Estimation

你可能感兴趣的:(Robotics)