Iterated Kalman Filter(IKF/IEKF)总结

写在前面

本篇内容主要介绍一下IKF的推导过程,IKF作为KF的一种变体,和EKF一样,主要是为了解决非线性问题。两者相比较而言,在精度上,IKF要比EKF好一些,但是花费的计算代价要稍大一些,当IKF仅仅进行一次迭代的话相当于EKF。
这里看到还有ROVIO等一些文章中使用IEKF来优化位姿,但是看公式和原理上和IKF是一样的(如有大神知道不同点还请指出)。

 


更新阶段的问题表示

由于IKF的主要贡献在于更新阶段,因此KF中的预测阶段这里直接跳过了,后面可以看到,算法把预测阶段的状态估计值作为了当前阶段的观测值。
在更新阶段,主要涉及到如下几个变量:

  • 当前状态 x x x,可以认为就是 f ( x ) f(x) f(x)中的x;
  • 当前状态的估计 x ‾ \overline{x} x,对应的协方差矩阵 P P P
  • 当前时刻的观测量 z z z,对应的噪声协方差为R;

观测与状态之间的无噪声模型为 h ( x ) h(x) h(x),所以该阶段概率模型可表示为:
z ~ N ( h ( x ) , R ) , x ‾ ~ N ( x , P ) z ~ N(h(x), R), \quad \overline{x} ~ N(x, P) zN(h(x),R),xN(x,P)
更新阶段最重要的目标就是根据给定的 z , x ‾ , R , P z,\overline{x}, R, P z,x,R,P的状态下找到更好的估计 x ‾ + , P + \overline{x}^+, P^+ x+,P+
 


KF方法的优化目标

这部分主要是为了引入最小化问题,比较清晰的朋友可以直接跳过了

为了方便表示,我们把观测 z z z和当前状态的估计 x ‾ \overline{x} x看做为一个观测向量 ,同时对观测方程也进行重写可得下式:
Z = [ z x ‾ ] , g ( x ) = [ h ( x ) x ] , G = g ′ ( x ) = [ H ( x ) I ] Z=\begin{bmatrix}z \\ \overline{x} \end{bmatrix} , \quad g(x)=\begin{bmatrix}h(x) \\ x \end{bmatrix} , \quad G=g'(x)=\begin{bmatrix}H(x) \\ I \end{bmatrix} Z=[zx],g(x)=[h(x)x],G=g(x)=[H(x)I]
因此我们把它们重新写为概率分布的形式:
Z ~ N ( g ( x ) , Q ) , Q = [ R 0 0 P ] Z~N(g(x), Q) \quad , \quad Q=\begin{bmatrix}R & 0 \\ 0 & P \end{bmatrix} ZN(g(x),Q),Q=[R00P]
有了上面的概率分布,可以很容易的得到似然函数:
(1) L ( x ) = α ∗ e x p ( − 0.5 ( Z − g ( x ) ) T Q − 1 ( Z − g ( x ) ) ) L(x) = \alpha*exp(-0.5(Z-g(x))^TQ^{-1}(Z-g(x))) \tag{1} L(x)=αexp(0.5(Zg(x))TQ1(Zg(x)))(1)
对公式(1)关于x取最大,就可以得到最大似然的解,即:
x + = a r g m a x ( L ( x ) ) x^+ = argmax(L(x)) x+=argmax(L(x))
通常,对于公式(1),我们经常取负对数将最大似然问题转换为求最小值的问题,简化后我们需要最小化的函数设为 q ( x ) q(x) q(x),其表示如下:
(2) q ( x ) = 0.5 ( Z − g ( x ) ) T Q − 1 ( Z − g ( x ) ) q(x) = 0.5(Z-g(x))^TQ^{-1}(Z-g(x)) \tag{2} q(x)=0.5(Zg(x))TQ1(Zg(x))(2)
将公式(2)求导并等于0就可以得到最优的状态量 x + x^+ x+所满足的条件:
(3) 0 = g ′ ( x + ) T Q − 1 ( Z − g ( x + ) ) 0 = g'(x^+)^T Q^{-1}(Z-g(x^+)) \tag{3} 0=g(x+)TQ1(Zg(x+))(3)
现假设 V = ( Z − g ( x ) ) ~ N ( 0 , Q ) V = (Z-g(x)) ~ N(0, Q) V=(Zg(x))N(0,Q),则 Z = V + g ( x ) Z=V+g(x) Z=V+g(x),公式(3)可以继续写作:
(4) 0 = g ′ ( x + ) T Q − 1 ( V + g ( x ) − g ( x + ) ) = g ′ ( x + ) T Q − 1 ( V + g ′ ( x + ) ( x − x + ) ) 0 = g'(x^+)^T Q^{-1}(V+g(x)-g(x^+)) = g'(x^+)^T Q^{-1}(V+g'(x^+)(x-x^+)) \tag{4} 0=g(x+)TQ1(V+g(x)g(x+))=g(x+)TQ1(V+g(x+)(xx+))(4)
公式(3)到公式(4)的化简中,有一个比较强的假设就是当前状态量 x x x与最优的状态量 x + x^+ x+非常的接近,这个假设是完全合理的,之后使用了 g ( x ) g(x) g(x) x + x^+ x+点的一阶泰勒展开 g ( x ) = g ( x + ) + g ′ ( x + ) ( x − x + ) g(x)=g(x^+)+g'(x^+)(x-x^+) g(x)=g(x+)+g(x+)(xx+),至此,设 G = g ′ ( x + ) G=g'(x^+) G=g(x+),上述经过符号化简可得:
(5) 0 = G T Q − 1 ( G ( x − x + ) + V ) = > x + − x = ( G T Q − 1 G ) − 1 G T Q − 1 V 0=G^TQ^{-1}(G(x-x^+)+V) => x^+-x = (G^TQ^{-1}G)^{-1}G^T Q^{-1}V \tag{5} 0=GTQ1(G(xx+)+V)=>x+x=(GTQ1G)1GTQ1V(5)
根据方差的定义,下面计算当前状态的协方差:
(6) P + = E ( ( x + − x ) ( x + − x ) T ) = ( G T Q − 1 G ) − 1 G T Q − 1 E ( V V T ) G ( G T Q − 1 G ) − 1 = ( G T Q − 1 G ) − 1 P^+ = E((x^+-x)(x^+-x)^T)=(G^TQ^{-1}G)^{-1}G^TQ^{-1}E(VV^T)G(G^TQ^{-1}G)^{-1}=(G^TQ^{-1}G)^{-1} \tag{6} P+=E((x+x)(x+x)T)=(GTQ1G)1GTQ1E(VVT)G(GTQ1G)1=(GTQ1G)1(6)
这里由于整个公式中仅有 V V V是变量,因此期望直接由 E ( A V V T B ) E(AVV^TB) E(AVVTB)变为 A E ( V V T ) B AE(VV^T)B AE(VVT)B
对于公式(6),把G和Q的符号进行替换,同时使用矩阵逆引理(Matrix Inversion Lemma)
( A + B C D ) − 1 = A − 1 − A − 1 B ( D A − 1 B + C − 1 ) − 1 D A − 1 (A+BCD)^{-1}=A^{-1}-A^{-1}B(DA^{-1}B+C^{-1})^{-1}DA^{-1} (A+BCD)1=A1A1B(DA1B+C1)1DA1
可得:
P + = P − ( H T R − 1 H + P − 1 ) − 1 H T R − 1 H P = ( I − K H ) P w h e r e K = ( H T R − 1 H + P − 1 ) − 1 H T R − 1 = P H T ( H P H T + R ) − 1 P^+ = P-(H^TR^{-1}H+P^{-1})^{-1}H^TR^{-1}HP = (I-KH)P \\ where \quad K=(H^TR^{-1}H+P^{-1})^{-1}H^TR^{-1} =PH^T(HPH^T+R)^{-1} P+=P(HTR1H+P1)1HTR1HP=(IKH)PwhereK=(HTR1H+P1)1HTR1=PHT(HPHT+R)1
到此,我们看到最优状态的协方差矩阵的更新与三个量有关:观测的状态量 x ‾ \overline{x} x的协方差P,观测方程的一阶导数H以及观测量 z z z的噪声协方差R有关。
 


使用GN方法优化目标函数

根据上面的推导,公式(2)就是整个问题的优化目标函数,下面的内容主要是通过使用Gauss-Newton方法对目标函数进行优化,推导得到IKF(IEKF)的结论。
对于目标函数:
(2) q ( x ) = 1 2 ( Z − g ( x ) ) T Q − 1 ( Z − g ( x ) ) q(x) = \frac{1}{2}(Z-g(x))^TQ^{-1}(Z-g(x)) \tag{2} q(x)=21(Zg(x))TQ1(Zg(x))(2)
可以重写为如下形式,其中 r ( x ) = S ∗ ( Z − g ( x ) ) r(x)=S*(Z-g(x)) r(x)=S(Zg(x)), S满足 S ∗ S T = Q − 1 S*S^T=Q^{-1} SST=Q1:
q ( x ) = 1 2 ∣ ∣ r ( x ) ∣ ∣ 2 q(x)=\frac{1}{2}||r(x)||^2 q(x)=21r(x)2
对于上述形式,使用Guass-Newton法(可以参考这里)进行求解,可以得到变量每次的迭代公式为:
x i + 1 = x i − ( r ′ ( x i ) T r ′ ( x i ) ) − 1 ( r ′ ( x i ) T r ( x i ) ) x_{i+1}=x_i-(r'(x_i)^Tr'(x_i))^{-1}(r'(x_i)^Tr(x_i)) xi+1=xi(r(xi)Tr(xi))1(r(xi)Tr(xi))
r ( x ) = S ∗ ( Z − g ( x ) ) , r ′ ( x ) = S ∗ g ′ ( x ) r(x)=S*(Z-g(x)), r'(x)=S*g'(x) r(x)=S(Zg(x)),r(x)=Sg(x)带入之后,不难得到如下公式,这里 G = g ′ ( x i ) G=g'(x_i) G=g(xi)
x i + 1 = ( G T Q − 1 G ) − 1 G T Q − 1 ( Z − g ( x i ) + G i x i ) x_{i+1}=(G^TQ^{-1}G)^{-1}G^TQ^{-1}(Z-g(x_i)+G_ix_i) xi+1=(GTQ1G)1GTQ1(Zg(xi)+Gixi)
同样把状态量 g ( x ) g(x) g(x)和协方差 Q Q Q展开就可得到状态量的更新公式:
(7) x i + 1 = x i + ( H i T R − 1 H i + P − 1 ) − 1 H i T R − 1 ( z − h ( x i ) − H i ( x ‾ − x ) ) = x i + K i ( z − h ( x i ) − H i ( x ‾ − x i ) ) x_{i+1}=x_i+(H_i^TR^{-1}H_i+P^{-1})^{-1}H_i^TR^{-1}(z-h(x_i)-H_i(\overline x-x))=x_i+K_i(z-h(x_i)-H_i(\overline x-x_i)) \tag{7} xi+1=xi+(HiTR1Hi+P1)1HiTR1(zh(xi)Hi(xx))=xi+Ki(zh(xi)Hi(xxi))(7)
所以,从公式(7)可以看到,状态量的迭代更新与6个变量有关:观测值 z z z及其协方差,观测状态 x ‾ \overline{x} x及其协方差以及观测方程 h ( x ) h(x) h(x)及其一阶导数 H ( x ) H(x) H(x)喜大普奔的是,每次的迭代过程并不用更新每个中间状态 x i x_i xi的协方差矩阵,也算是稍微节省了一些算力吧。

Ps:
对于公式(7)或者说整个状态变量的迭代过程,如果仅仅进行一次,即 x 0 = x ‾ x_0=\overline{x} x0=x,则IKF就变化为了EKF

 


IKF推导小结

对于以上流程而言,简而言之就是:

  1. 使用最大似然的方法得到优化的目标函数(即公式(2));
  2. 随后使用Gauss-Newton方法进行迭代优化,不断的更新状态变量x;
  3. 对于算法而言,当x的改变量很小的时候,就可以停止迭代返回结果了。

 


reference

[1] The Iterated Kalman Filter Update as a Gauss-Newton Method.
[2] Performance evaluation of iterated extended Kalman filter with variable step-length.
.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值