同步更新于github page。
复杂系统下的不变扩展卡尔曼滤波
由前面的文章可知,不变性要靠合理的状态误差设计来实现。但在更复杂的系统中,为所有状态量找到一个满足不变性的状态误差是很困难的,甚至一些状态是不可能被表示为群运算的。在存在这类状态量的系统中,有没有可能保留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~t−btw−ntw]×=Rt(a~t−bta−nta)+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χt−1, Θ^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χt−1
以及
Θ 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^tw−btwb^ta−bta)=(ζ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