组合导航原理剖析(一):从扩展kalman滤波到ESKF算法

首先,递归滤波器与kalman滤波器在原理上有相似之处。
递归滤波器表示为下面几步,本质上与kalman滤波的思想是比较相似的。但是卡尔曼滤波所采用的增益是随时间变化逐渐趋近于稳定的,当滤波器收敛之后,理论上系统可以得到状态值的最优后验估计。

s t e p 1 : 计算 k a l m a n 增益 : K k = e k − 1 E S T e k − 1 E S T + e k M E A step1:计算kalman增益:K_k=\frac{e^{EST}_{k-1}}{e^{EST}_{k-1}+e^{MEA}_k} step1:计算kalman增益:Kk=ek1EST+ekMEAek1EST

s t e p 2 : 计算: x ^ k = x ^ k − 1 + K k ( z k − x ^ k − 1 ) step2:计算:\hat x_k=\hat x_{k-1}+K_k(z_k-\hat x_{k-1}) step2:计算:x^k=x^k1+Kk(zkx^k1)

e k E S T = ( 1 − K k ) e k − 1 E S T e^{EST}_k=(1-K_k)e^{EST}_{k-1} ekEST=(1Kk)ek1EST

首先,定义线性系统表示为:

x k = A x k − 1 + B u k − 1 + w k − 1 z k = H k − 1 + v k \begin{array}{l}{{\rm{x}}_k} = A{x_{k - 1}} + B{u_{k - 1}} + {w_{k - 1}}\\{z_k} = {H_{k - 1}} + {v_k}\end{array} xk=Axk1+Buk1+wk1zk=Hk1+vk

误差可以表示为:

P ( w ) ∼ N ( 0 , Q ) P ( v ) ∼ N ( 0 , R ) \begin{array}{l} P(w) \sim N(0,Q)\\ P(v) \sim N(0,R) \end{array} P(w)N(0,Q)P(v)N(0,R)

预测方程表示为:

x ^ k − = A x ^ k − 1 + B u k − 1 P k − = A P k − 1 A T + Q \begin{array}{l}\hat x_k^ - = A{{\hat x}_{k - 1}} + B{u_{k - 1}}\\P_k^ - = A{P_{k - 1}}{A^T} + Q\end{array} x^k=Ax^k1+Buk1Pk=APk1AT+Q

更新方程表示为:

K k = P k − H T H P k − H T + R x ^ k = x ^ k − + K k ( z k − H x ^ k − ) P k = ( I − K k H ) P k − \begin{array}{l}{K_k} = \frac{{P_k^ - {H^T}}}{{HP_k^ - {H^T} + R}}\\{{\hat x}_k} = \hat x_k^ - + {K_k}({z_k} - H\hat x_k^ - )\\{P_k} = (I - {K_k}H)P_k^ - \end{array} Kk=HPkHT+RPkHTx^k=x^k+Kk(zkHx^k)Pk=(IKkH)Pk

实际情况下,系统常常是非线性的。假设非线性系统表示为

x k = f ( x k − 1 , u k − 1 , w k − 1 ) z k = h ( x k , v k ) x_k=f(x_{k-1},u_{k-1},w_{k-1})\\z_k=h(x_k,v_k) xk=f(xk1,uk1,wk1)zk=h(xk,vk)

设计非线性kalman滤波系统,首先需要对非线性系统进行线性化,其中线性化的点被称为**“operating point**”,通常认为选取真实点作为**“operating point**”是最合适的。但由于误差的存在真实值往往是未知的。因此采用泰勒展开的方式将更新矩阵在 x ^ k − 1 \hat x_{k-1} x^k1处线性化,可以表示为**(其中 x ^ k − 1 \hat x_{k-1} x^k1为k-1时刻的后验估计)**

x k = f ( x ^ k − 1 , u k − 1 , w k − 1 ) + A ( x k − x ^ k − 1 ) + W k w k − 1 x_k=f(\hat x_{k-1},u_{k-1},w_{k-1})+A(x_k-\hat x_{k-1})+W_kw_{k-1} xk=f(x^k1,uk1,wk1)+A(xkx^k1)+Wkwk1

那么假设 w k − 1 w_{k-1} wk1为0,有 x ~ k = f ( x ^ k − 1 , u k − 1 , 0 ) \tilde x_k=f(\hat x_{k-1},u_{k-1},0) x~k=f(x^k1,uk1,0),假设 v k v_{k} vk为0,有 z ~ k = h ( x ~ k , 0 ) \tilde z_k=h(\tilde x_k,0) z~k=h(x~k,0)。另外,雅克比矩阵表示为

A = ∂ f ∂ x ∣ x ^ k − 1 , u k − 1 W k = ∂ f ∂ w ∣ x ^ k − 1 , u k − 1 A=\frac{\partial f}{\partial x}|\hat x_{k-1},u_{k-1}\\W_k=\frac{\partial f}{\partial w}|\hat x_{k-1},u_{k-1} A=xfx^k1,uk1Wk=wfx^k1,uk1

其中A为状态量 x k x_k xk对状态量 x k − 1 x_{k-1} xk1的雅克比矩阵, ∗ ∗ W k **W_k Wk为状态量 x k x_k xk对状态量 w k − 1 w_{k-1} wk1的雅克比矩阵**。

观测方程在 x ~ k \tilde x_k x~k处线性化,可以表示为

z k = z ~ k + H ( x k − x ~ k − 1 ) + V k v k − 1 z_k=\tilde z_k+H(x_k-\tilde x_{k-1})+V_kv_{k-1} zk=z~k+H(xkx~k1)+Vkvk1

雅克比矩阵表示为

H k = ∂ h ∂ x ∣ x ~ k V k = ∂ h ∂ v ∣ x ~ k H_k=\frac{\partial h}{\partial x}|\tilde x_k\\V_k=\frac{\partial h}{\partial v}|\tilde x_k Hk=xhx~kVk=vhx~k

协方差矩阵表示为

P ( w ) − N ( 0 , Q ) P ( W w ) − N ( 0 , W Q W T ) P ( v ) − N ( 0 , R ) P ( V v ) − N ( 0 , V R V T ) P(w)-N(0,Q)\\P(Ww)-N(0,WQW^T)\\P(v)-N(0,R)\\P(Vv)-N(0,VRV^T) P(w)N(0,Q)P(Ww)N(0,WQWT)P(v)N(0,R)P(Vv)N(0,VRVT)

扩展卡尔曼滤波可以表示为

x ^ k − = f ( x ^ k − 1 , u k − 1 , 0 ) P k − = A P k − 1 A T + W Q W T \hat x_k^-=f(\hat x_{k-1},u_{k-1},0)\\P^-_k=AP_{k-1}A^T+WQW^T x^k=f(x^k1,uk1,0)Pk=APk1AT+WQWT

更新方程表示为

K k = P k − H T H P k − H T + V R V T {K_k} = \frac{{P_k^ - {H^T}}}{{HP_k^ - {H^T} + VRV^T}} Kk=HPkHT+VRVTPkHT

x ^ k = x ^ k − + K k ( z k − h ( x ^ k − , 0 ) ) P k = ( I − K k H ) P k − {{\hat x}_k} = \hat x_k^ - + {K_k}({z_k} - h(\hat x_k^-,0) )\\{P_k} = (I - {K_k}H)P_k^ - x^k=x^k+Kk(zkh(x^k,0))Pk=(IKkH)Pk

结合组合导航原理,从上面的公式推导中可以得到下面的结论:

  1. 求导获得雅克比矩阵,不光需要对状态量进行求导,还需要对噪声进行求导;
  2. 一般认为上式中的 x ^ k \hat x_k x^k为后验估计值,与误差状态kalman滤波中对“真实值”和“标称值”的定义并不一致。

简明ESKF推导

下面以组合导航为例讨论EKF的用法。在组合导航中,常用误差状态量表示状态更新,具有诸多优点不赘述。

首先,对于一般的非线性系统,将状态量进行误差化可以表示为下式,就可以使用扩展

x k = f ( x ^ k − 1 , u k − 1 , w k − 1 ) + A ( x k − x ^ k − 1 ) + W k w k − 1 x ~ k + δ x k = f ( x ^ k − 1 , u k − 1 , w k − 1 = 0 ) + A ( x ~ k − 1 − x ^ k − 1 ) + W k w k − 1 δ x k = A δ x k − 1 + W k w k − 1 x_k=f(\hat x_{k-1},u_{k-1},w_{k-1})+A(x_k-\hat x_{k-1})+W_kw_{k-1}\\ \tilde x_k+\delta x_k=f(\hat x_{k-1},u_{k-1},w_{k-1}=0)+A(\tilde x_{k-1}-\hat x_{k-1})+W_kw_{k-1}\\\delta x_k=A\delta x_{k-1}+W_kw_{k-1} xk=f(x^k1,uk1,wk1)+A(xkx^k1)+Wkwk1x~k+δxk=f(x^k1,uk1,wk1=0)+A(x~k1x^k1)+Wkwk1δxk=Aδxk1+Wkwk1

但是在组合导航的状态量运行学预测更新的计算中,已知状态导数与状态之间的转移矩阵,比如

v ˙ = R a b + g \dot{\mathbf{v}}=\mathbf{R} \mathbf{a}^{b}+\mathbf{g} v˙=Rab+g

可以推导出误差状态的微分公式如下:(这里是忽略了加速度计的零偏值,不是特别准确)

v ˙ + δ v ˙ = R ( I + [ δ θ ] × ) ( a b + δ a b ) + g + δ g δ v ˙ = R δ a b + R [ δ θ ] × ( a b + δ a b ) + δ g δ ˙ v = R δ a b − R [ a b ] × δ θ + δ g \begin{aligned}\dot{\mathbf{v}}+\dot{\delta \mathbf{v}} &=\mathbf{R}\left(\mathbf{I}+[\delta \boldsymbol{\theta}]_{\times}\right)\left(\mathbf{a}^{b}+\delta \mathbf{a}^{b}\right)+\mathbf{g}+\delta \mathbf{g} \\\dot{\delta \mathbf{v}} &=\mathbf{R} \delta \mathbf{a}^{b}+\mathbf{R}[\delta \boldsymbol{\theta}]_{\times}\left(\mathbf{a}^{b}+\delta \mathbf{a}^{b}\right)+\delta \mathbf{g} \\\dot{\delta} \mathbf{v} &=\mathbf{R} \delta \mathbf{a}^{\mathbf{b}}-\mathbf{R}\left[\mathbf{a}^{b}\right]_{\times} \delta \boldsymbol{\theta}+\delta \mathbf{g}\end{aligned} v˙+δv˙δv˙δ˙v=R(I+[δθ]×)(ab+δab)+g+δg=Rδab+R[δθ]×(ab+δab)+δg=RδabR[ab]×δθ+δg

这里面的表示有点问题,需要注意正负。

这里面的表示有点问题,需要注意正负。

再将上式进行离散化,同样可以得到误差状态量的离散传递方程。

下面讨论观测方程。由于采用误差状态量作为待估计对象,因此将观测方程对 δ x \delta x δx求导得到观测矩阵H,求导方式可以采用链式法则。

H = ∂ h ∂ δ x = ∂ h ∂ x ∂ x ∂ δ x {\rm{H = }}\frac{{\partial h}}{{\partial \delta x}} = \frac{{\partial h}}{{\partial x}}\frac{{\partial x}}{{\partial \delta x}} H=δxh=xhδxx

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

擦擦擦大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值