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

本文探讨了如何在复杂的系统中应用不变扩展卡尔曼滤波(InEKF),尤其是在存在不能表示为群运算状态量的情况下。通过引入混合误差,即右不变误差与普通线性误差的笛卡尔积,可以处理如IMU系统中包含随机游走模型的gyro bias和accelerator bias。虽然系统矩阵会随状态估计变化,但一致性仍能得到保证,且这种‘非完美’的InEKF在鲁棒性和收敛性上优于传统EKF。文章还详细介绍了混合状态的更新方法。
摘要由CSDN通过智能技术生成

同步更新于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~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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值