卡尔曼滤波(KF)、拓展卡尔曼滤波(EKF)推导

背景知识

卡尔曼滤波是建立在贝叶斯滤波和高斯分布这两个前提上的,所以下面先大概讲一下这两者。

贝叶斯滤波

首先给出几个基本概念和公式

  • 联合分布
    p ( x , y ) = p ( X = x , Y = y ) p(x,y)=p(X=x, Y=y) p(x,y)=p(X=x,Y=y)
    表示x,y同时发生的概率
  • 条件概率
    p ( x ∣ y ) = p ( X = x ∣ Y = y ) p(x|y)=p(X=x|Y=y) p(xy)=p(X=xY=y)
    表示x在y已经发生的基础上发生的概率,设x、y相互独立(以后都是如此),则有
    p ( x ∣ y ) = p ( x , y ) p ( y ) p(x|y)=\frac{p(x,y)}{p(y)} p(xy)=p(y)p(x,y)
  • 先验概率
    可以被称作经验,当前数据读取前,系统估计出来的状态的概率分布
  • 后验概率
    在数据读取后(观测后),综合先验概率和观测概率得到的状态的概率分布
  • 全概率定律
    p ( x ) = ∑ y p ( x ∣ y ) p ( y ) ( 离 散 情 况 ) p(x)=\sum_{y}p(x|y)p(y)(离散情况) p(x)=yp(xy)p(y)
    p ( x ) = ∫ p ( x ∣ y ) p ( y ) d y ( 连 续 情 况 ) p(x)=\int p(x|y)p(y)dy(连续情况) p(x)=p(xy)p(y)dy
  • 贝叶斯准则
    p ( x ∣ y ) = p ( y ∣ x ) p ( x ) p ( y ) = p ( y ∣ x ) p ( x ) ∑ x ′ p ( y ∣ x ′ ) p ( x ′ ) ( 离 散 ) p(x|y)=\frac{p(y|x)p(x)}{p(y)}=\frac{p(y|x)p(x)}{\sum_{x^{'}}p(y|x^{'})p(x^{'})}(离散) p(xy)=p(y)p(yx)p(x)=xp(yx)p(x)p(yx)p(x)
    p ( x ∣ y ) = p ( y ∣ x ) p ( x ) p ( y ) = p ( y ∣ x ) p ( x ) ∫ p ( y ∣ x ′ ) p ( x ′ ) d x ′ ( 连 续 ) p(x|y)=\frac{p(y|x)p(x)}{p(y)}=\frac{p(y|x)p(x)}{\int p(y|x^{'})p(x^{'})dx^{'}}(连续) p(xy)=p(y)p(yx)p(x)=p(yx)p(x)dxp(yx)p(x)
    其中x被称作状态,y被称作数据, p ( x ) p(x) p(x)被称作先验概率, p ( y ∣ x ) p(y|x) p(yx)被称为“逆”条件概率,而 p ( y ) − 1 p(y)^{-1} p(y)1和x无关,常作为一个系数 η \eta η
    需要注意的是,一般情况下,x是在运算过程中作为自变量,我们的p是x的概率分布函数(在卡尔曼滤波里为高斯分布,在一些情况下可能是分段函数),而不是针对具体的x的概率值。在状态的转移过程中,预测的概率分布由前一个时刻的全部可能的x取值加权积分/求和得到
  • 完整性/马尔科夫性
    假设一个状态 x t x_t xt可以最好地预测未来,也就是说过去的一切控制信息都包含在其中并无法对之后产生影响(或者说过去信息要作用于未来,必须依赖于 x t x_t xt),则称 x t x_t xt是完整的,贝叶斯滤波是基于这个假设的。

贝叶斯滤波就是建立在贝叶斯准则上的,基本方法是通过先验概率和观测值去得到后验概率,得到较为准确的概率分布。
贝叶斯滤波的算法简单概括为两(三)行:

1 : b e l ‾ ( x t ) = ∫ p ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 ( 连 续 ) 2 : b e l ‾ ( x t ) = ∑ p ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) ( 离 散 ) 3 : b e l ( x t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) \begin{array}{l}1:\overline{bel}(x_t)=\int p(x_t|u_t,x_{t-1})bel(x_{t-1})dx_{t-1}(连续)\\2:\overline{bel}(x_t)=\sum p(x_t|u_t,x_{t-1})bel(x_{t-1})(离散)\\3:bel(x_t)=\eta p(z_t|x_t)\overline{bel}(x_t)\end{array} 1:bel(xt)=p(xtut,xt1)bel(xt1)dxt12:bel(xt)=p(xtut,xt1)bel(xt1)3:bel(xt)=ηp(ztxt)bel(xt)

其中:

  • η \eta η是归一化系数,在计算的过程中因各种常数的提出而不断发生变化。
  • x x x表示状态量
  • z z z表示观测数据
  • u u u表示里程计记录的运动数据
  • b e l 、 b e l ‾ bel、\overline{bel} belbel代表置信值 b e l ( x t ) = p ( x t ∣ z t ) , bel(x_t)=p(x_t|z_t), bel(xt)=p(xtzt)即观测后得到的 x t x_t xt概率分布, b e l ‾ \overline{bel} bel代表内部预测的置信值。
  • p ( x t ∣ u t , x t − 1 ) p(x_t|u_t,x_{t-1}) p(xtut,xt1)表示状态转移概率,表示 x t − 1 、 u t x_{t-1}、u_t xt1ut确定的情况下, x t x_t xt的概率分布函数
  • p ( z t ∣ x t ) p(z_t|x_t) p(ztxt)表观上表示 x t x_t xt确定的情况下, z t z_t zt的概率分布(通过z关于x的函数),实际上由于x是未知的,z是已知的,在运算过程中x作为自变量,z作为常数。
  • 行1、2代表的是预测或者叫控制更新
  • 行3代表的是观测更新

算法有一个前提是完整性假设,如用 p ( x t ∣ u t , x t − 1 ) p(x_t|u_t,x_{t-1}) p(xtut,xt1)来表示 p ( x t ∣ u 1 : t , x 0 : t − 1 , z 1 : t − 1 ) p(x_t|u_{1:t},x_{0:t-1},z_{1:t-1}) p(xtu1:t,x0:t1,z1:t1)

简单推导

预测

b e l ‾ ( x t ) = p ( x t ∣ z 1 : t − 1 , u 1 : t ) = ∫ p ( x t ∣ x t − 1 , z 1 : t − 1 , u 1 : t ) p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t ) d x t − 1 = ∫ p ( x t ∣ x t − 1 , u t ) b e l ( x t − 1 ) d x t − 1 \begin{aligned} \overline{bel}(x_t)&=p(x_t|z_{1:t-1},u_{1:t})\\ &=\int p(x_t|x_{t-1},z_{1:t-1},u_{1:t})p(x_{t-1}|z_{1:t-1},u_{1:t})dx_{t-1}\\ &=\int p(x_t|x_{t-1},u_{t})bel(x_{t-1})dx_{t-1}\\ \end{aligned} bel(xt)=p(xtz1:t1,u1:t)=p(xtxt1,z1:t1,u1:t)p(xt1z1:t1,u1:t)dxt1=p(xtxt1,ut)bel(xt1)dxt1

观测更新

b e l ( x t ) = p ( x t ∣ z 1 : t , u 1 : t ) = p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 , u 1 : t ) p ( z t ∣ z 1 : t − 1 , u 1 : t ) = η p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 , u 1 : t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) \begin{aligned} bel(x_t)=p(x_t|z_{1:t},u_{1:t})&=\frac{p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1},u_{1:t})}{p(z_t|z_{1:t-1,u_{1:t}})}\\ &=\eta p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1},u_{1:t})\\ &=\eta p(z_t|x_t)\overline{bel}(x_t) \end{aligned} bel(xt)=p(xtz1:t,u1:t)=p(ztz1:t1,u1:t)p(ztxt,z1:t1,u1:t)p(xtz1:t1,u1:t)=ηp(ztxt,z1:t1,u1:t)p(xtz1:t1,u1:t)=ηp(ztxt)bel(xt)

高斯分布(正态分布)

贝叶斯滤波的x取值范围是离散的,所以贝叶斯滤波并不是真正可用的算法,贝叶斯滤波在高斯分布的基础上构成的高斯滤波可以让x取值连续,卡尔曼滤波是其中的一种。

高斯分布由以下函数表示
p ( x ) = ( 2 π σ 2 ) − 1 2 e − 1 2 ( x − μ ) 2 σ 2 ( x 为 标 量 ) p(x)=(2\pi\sigma^2)^{-\frac12}e^{-\frac12\frac{(x-\mu)^2}{\sigma^2}}(x为标量) p(x)=(2πσ2)21e21σ2(xμ)2x
其中 σ 2 \sigma^2 σ2为方差, μ \mu μ为均值
p ( x ‾ ) = ( 2 π Σ ) − 1 2 e − 1 2 ( x ‾ − μ ‾ ) T Σ − 1 ( x ‾ − μ ‾ ) ( x ‾ 为 向 量 ) p(\underline{x})=(2\pi\Sigma)^{-\frac12}e^{-\frac12{(\underline{x}-\underline{\mu})^T}{\Sigma^{-1}(\underline{x}-\underline{\mu})}}(\underline{x}为向量) p(x)=(2πΣ)21e21(xμ)TΣ1(xμ)x
其中 Σ \Sigma Σ为方差(协方差矩阵), μ ‾ \underline{\mu} μ为均值
为什么用高斯分布是因为高斯分布是自然界广泛存在的,且具有很好的性质,虽然也有缺点(单峰)。在卡尔曼滤波中,没有确定的状态,测量值、预测量和最后的校正值都是用高斯分布表示的。

高斯分布中, p p p的积分(累加)为1,当然这也是所有概率分布函数的规律。

高斯分布的融合

本人在第一遍推导的学习中没有用到以下公式,但用了后似乎后面的推导都形同虚设…先挖个坑

  • 高斯分布乘高斯分布还是高斯分布(从结构上看显然)

  • 对于高斯分布的乘积 X = X 1 X 2 X=X_1X_2 X=X1X2,其中
    { X 1 ∼ N ( μ 1 , Σ 1 ) X 2 ∼ N ( μ 2 , Σ 2 ) \left\{\begin{array}{l}X_1\sim\mathbb{N}(\mu_1,\Sigma_1)\\X_2\sim\mathbb{N}(\mu_2,\Sigma_2)\end{array}\right. {X1N(μ1,Σ1)X2N(μ2,Σ2)
    可以得到如下结果:

{ K = Σ 1 ( Σ 1 + Σ 2 ) − 1 ) μ = μ 1 + K ( μ 2 − μ 1 ) Σ = Σ 1 − K Σ 1 \left\{\begin{array}{l}K=\Sigma_1(\Sigma_1+\Sigma_2)^{-1})\\\mu=\mu_1+K(\mu_2-\mu_1)\\\Sigma=\Sigma_1-K\Sigma_1\end{array}\right. K=Σ1(Σ1+Σ2)1)μ=μ1+K(μ2μ1)Σ=Σ1KΣ1
其中K为卡尔曼增益,证明略

线代相关

自己去复习/预习

卡尔曼滤波(KF)

卡尔曼滤波建立在线性的假设上的,我们假设:
x t = A t x t − 1 + B t u t + ε t ( 状 态 转 移 函 数 ) x_t=A_tx_{t-1}+B_tu_t+\varepsilon_t(状态转移函数) xt=Atxt1+Btut+εt
其中 ε t \varepsilon_t εt是均值为0,方差为 R t R_t Rt的高斯随机向量

z t = C t x t + δ t ( 测 量 函 数 ) z_t=C_tx_t+\delta_t(测量函数) zt=Ctxt+δt
其中 δ t \delta_t δt是均值为0,方差为 Q t Q_t Qt的高斯随机向量

b e l ( x 0 ) = p ( x 0 ) ( 初 始 置 信 度 ) bel(x_0)=p(x_0)(初始置信度) bel(x0)=p(x0)
其中 p p p是均值为 μ 0 \mu_0 μ0,方差为 Σ 0 \Sigma_0 Σ0的高斯随机向量

卡尔曼滤波可以表示为以下几行算法

1 : μ ‾ t = A t μ t − 1 + B t u t 2 : Σ ‾ t = A t Σ t − 1 A t T + R t 3 : K t = Σ ‾ t C t T ( C t Σ ‾ t C t T + Q t ) − 1 4 : μ t = μ ‾ t + K t ( z t − C t μ ‾ t ) 5 : Σ t = ( I − K t C t ) Σ ‾ t \begin{array}{l} 1:\overline{\mu}_t=A_t\mu_{t-1}+B_tu_t \\ 2:\overline{\Sigma}_t=A_t\Sigma_{t-1}A_t^{T}+R_t\\ 3:K_t=\overline{\Sigma}_tC_t^T(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ 4:\mu_t=\overline{\mu}_t+K_t(z_t-C_t\overline{\mu}_t)\\ 5:\Sigma_t=(I-K_tC_t)\overline{\Sigma}_t \end{array} 1:μt=Atμt1+Btut2:Σt=AtΣt1AtT+Rt3:Kt=ΣtCtT(CtΣtCtT+Qt)14:μt=μt+Kt(ztCtμt)5:Σt=(IKtCt)Σt

下面给出证明

KF的数学推导

预测

根据贝叶斯滤波,我们得到
b e l ‾ ( x t ) = ∫ p ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 \overline{bel}(x_t)=\int p(x_t|u_t,x_{t-1})bel(x_{t-1})dx_{t-1} bel(xt)=p(xtut,xt1)bel(xt1)dxt1
所以有
b e l ‾ ( x t ) = η ∫ e − L t d x t − 1 \overline{bel}(x_t)=\eta\int e^{-L_t}dx_{t-1} bel(xt)=ηeLtdxt1
其中
L t = 1 2 ( x t − A t x t − 1 − B t u t ) T R t − 1 ( x t − A t x t − 1 − B t u t ) + 1 2 ( x t − 1 − μ t − 1 ) T Σ t − 1 − 1 ( x t − 1 − μ t − 1 ) L_t=\frac12(x_t-A_tx_{t-1}-B_tu_t)^TR_t^{-1}(x_t-A_tx_{t-1}-B_tu_t)+\frac12(x_{t-1}-\mu_{t-1})^T\Sigma_{t-1}^{-1}(x_{t-1}-\mu_{t-1}) Lt=21(xtAtxt1Btut)TRt1(xtAtxt1Btut)+21(xt1μt1)TΣt11(xt1μt1)
L t L_t Lt x t x_t xt也是 x t − 1 x_{t-1} xt1的二次函数
为了避免积分运算,我们令
L t = L t ( x t − 1 , x t ) + L t ( x t ) L_t=L_t(x_{t-1},x_t)+L_t(x_t) Lt=Lt(xt1,xt)+Lt(xt)
提出一项不包含 x t − 1 x_{t-1} xt1 L t ( x t ) L_t(x_t) Lt(xt)
b e l ‾ ( x t ) = η e − L t ( x t ) ∫ e − L t ( x t − 1 , x t ) d x t − 1 \overline{bel}(x_t)=\eta e^{-L_t(x_t)}\int e^{-L_t(x_{t-1},x_t)}dx_{t-1} bel(xt)=ηeLt(xt)eLt(xt1,xt)dxt1
下面把 L t ( x t − 1 , x t ) L_t(x_{t-1},x_t) Lt(xt1,xt)构造成二次型(配方后)(个人理解是这样做不会再次提出含 x t x_t xt的项)
接下来计算 L t L_t Lt关于 x t − 1 x_{t-1} xt1的一二阶导数,得到
L t ( x t − 1 , x t ) = 1 2 ( x t − 1 − Ψ [ A t T R t − 1 ( x t − B t u t ) + Σ t − 1 − 1 μ t − 1 ] ) T Ψ − 1 ( x t − 1 − Ψ [ A t T R t − 1 ( x t − B t u t ) + Σ t − 1 − 1 μ t − 1 ] ) L_t(x_{t-1},x_t)=\frac12(x_{t-1}-\Psi[A_t^TR_t^{-1}(x_t-B_tu_t)+\Sigma_{t-1}^{-1}\mu_{t-1}])^T\Psi^{-1}(x_{t-1}-\Psi[A_t^TR_t^{-1}(x_t-B_tu_t)+\Sigma_{t-1}^{-1}\mu_{t-1}]) Lt(xt1,xt)=21(xt1Ψ[AtTRt1(xtBtut)+Σt11μt1])TΨ1(xt1Ψ[AtTRt1(xtBtut)+Σt11μt1])

又因为
∫ d e t ( 2 π Ψ ) − 1 2 e − L t ( x t − 1 , x t ) d x t − 1 = 1 \int det(2\pi\Psi)^{-\frac12}e^{-L_t(x_{t-1},x_t)}dx_{t-1}=1 det(2πΨ)21eLt(xt1,xt)dxt1=1
所以
∫ e − L t ( x t − 1 , x t ) d x t − 1 = d e t ( 2 π Ψ ) 1 2 \int e^{-L_t(x_{t-1},x_t)}dx_{t-1}=det(2\pi\Psi)^{\frac12} eLt(xt1,xt)dxt1=det(2πΨ)21

所以
b e l ‾ ( x t ) = η e − L t ( x t ) \overline{bel}(x_t)=\eta e^{-L_t(x_t)} bel(xt)=ηeLt(xt)
现在计算 L t ( x t ) L_t(x_t) Lt(xt):
L t ( x t ) = L t − L t ( x t − 1 , x t ) = . . . ( 含 x t − 1 项 全 部 消 去 ) = 1 2 ( x t − B t u t ) T R t − 1 ( x t − B t u t ) + 1 2 μ t − 1 T Σ t − 1 − 1 μ t − 1 − 1 2 [ A t T R t − 1 ( x t − B t u t ) + Σ t − 1 − 1 μ t − 1 ] T ( A t T R t − 1 A t + Σ t − 1 − 1 ) [ A t T R t − 1 ( x t − B t u t ) + Σ t − 1 − 1 μ t − 1 ] \begin{aligned} L_t(x_t)&=L_t-L_t(x_{t-1},x_t)\\ &=...(含x_{t-1}项全部消去)\\ &=\frac12(x_t-B_tu_t)^TR_t^{-1}(x_t-B_tu_t)+\frac12\mu_{t-1}^T\Sigma_{t-1}^{-1}\mu_{t-1}-\frac12[A_t^TR_t^{-1}(x_t-B_tu_t)+\Sigma_{t-1}^{-1}\mu_{t-1}]^T(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})[A_t^TR_t^{-1}(x_t-B_tu_t)+\Sigma_{t-1}^{-1}\mu_{t-1}] \end{aligned} Lt(xt)=LtLt(xt1,xt)=...(xt1)=21(xtBtut)TRt1(xtBtut)+21μt1TΣt11μt121[AtTRt1(xtBtut)+Σt11μt1]T(AtTRt1At+Σt11)[AtTRt1(xtBtut)+Σt11μt1]
尽管这不是关于 x t x_t xt的二次型(配方后),但确实是一个二次函数,无非影响了前面的系数。
求一二阶导数来得到 x t x_t xt的均值和方差:
∂ L t ( x t ) ∂ x t = R t − 1 ( x t − B t u t ) − R t − 1 A t ( A t T R t − 1 A t + Σ t − 1 − 1 ) − 1 [ A t T R t − 1 ( x t − B t u t ) + Σ t − 1 − 1 μ t − 1 ] = [ R t − 1 − R t − 1 A t ( A t T R t − 1 A t + Σ t − 1 − 1 ) − 1 A t T R t − 1 ‾ ] ( x t − B t u t ) − R t − 1 A t ( A t T R t − 1 A t + Σ t − 1 − 1 ) − 1 Σ t − 1 − 1 μ t − 1 \begin{aligned} \frac{\partial L_t(x_t)}{\partial x_t}&=R_t^{-1}(x_t-B_tu_t)-R_t^{-1}A_t(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})^{-1}[A_t^TR_t^{-1}(x_t-B_tu_t)+\Sigma_{t-1}^{-1}\mu_{t-1}]\\ &=[\underline{R_t^{-1}-R_t^{-1}A_t(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})^{-1}A_t^TR_t^{-1}}](x_t-B_tu_t)-R_t^{-1}A_t(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})^{-1}\Sigma_{t-1}^{-1}\mu_{t-1} \end{aligned} xtLt(xt)=Rt1(xtBtut)Rt1At(AtTRt1At+Σt11)1[AtTRt1(xtBtut)+Σt11μt1]=[Rt1Rt1At(AtTRt1At+Σt11)1AtTRt1](xtBtut)Rt1At(AtTRt1At+Σt11)1Σt11μt1

由谢尔曼莫里森公式(证明打起来太慢了,提示:可以通过 [ A B C D ] [ x A x B ] = [ y A y B ] \begin{bmatrix} {A}&{B}\\ {C}&{D}\\ \end{bmatrix} \begin{bmatrix} {x_A}\\ {x_B}\\ \end{bmatrix} =\begin{bmatrix} {y_A}\\ {y_B}\\ \end{bmatrix} [ACBD][xAxB]=[yAyB]求分块矩阵 [ A B C D ] \begin{bmatrix} {A}&{B}\\ {C}&{D}\\ \end{bmatrix} [ACBD]的两个逆矩阵的表达形式,利用两个逆矩阵相等得到。)
R t − 1 − R t − 1 A t ( A t T R t − 1 A t + Σ t − 1 − 1 ) − 1 A t T R t − 1 = ( R t + A t Σ t − 1 A t T ) − 1 R_t^{-1}-R_t^{-1}A_t(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})^{-1}A_t^TR_t^{-1}=(R_t+A_t\Sigma_{t-1}A_t^T)^{-1} Rt1Rt1At(AtTRt1At+Σt11)1AtTRt1=(Rt+AtΣt1AtT)1

因此
∂ L t ( x t ) ∂ x t = ( R t + A t Σ t − 1 A t T ) − 1 ( x t − B t u t ) − R t − 1 A t ( A t T R t − 1 A t + Σ t − 1 − 1 ) − 1 Σ t − 1 − 1 μ t − 1 = 0 \begin{aligned} \frac{\partial L_t(x_t)}{\partial x_t}&=(R_t+A_t\Sigma_{t-1}A_t^T)^{-1}(x_t-B_tu_t)-R_t^{-1}A_t(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})^{-1}\Sigma_{t-1}^{-1}\mu_{t-1}\\ &=0 \end{aligned} xtLt(xt)=(Rt+AtΣt1AtT)1(xtBtut)Rt1At(AtTRt1At+Σt11)1Σt11μt1=0

得到
x t = B t u t + ( R t + A t Σ t − 1 A t T ) R t − 1 A t ( A t T R t − 1 A t + Σ t − 1 − 1 ) − 1 Σ t − 1 − 1 μ t − 1 = B t u t + A t ( I + Σ t − 1 A t T R t − 1 A t ) ( I + Σ t − 1 A t T R t − 1 A t ) − 1 μ t − 1 = B t u t + A t μ t − 1 \begin{aligned} x_t&=B_tu_t+(R_t+A_t\Sigma_{t-1}A_t^T)R_t^{-1}A_t(A_t^TR_t^{-1}A_t+\Sigma_{t-1}^{-1})^{-1}\Sigma_{t-1}^{-1}\mu_{t-1}\\ &=B_tu_t+A_t(I+\Sigma_{t-1}A_t^TR_t^{-1}A_t)(I+\Sigma_{t-1}A_t^TR_t^{-1}A_t)^{-1}\mu_{t-1}\\ &=B_tu_t+A_t\mu_{t-1} \end{aligned} xt=Btut+(Rt+AtΣt1AtT)Rt1At(AtTRt1At+Σt11)1Σt11μt1=Btut+At(I+Σt1AtTRt1At)(I+Σt1AtTRt1At)1μt1=Btut+Atμt1
那么
μ ‾ t = A t μ t − 1 + B t u t \overline\mu_t=A_t\mu_{t-1}+B_tu_t μt=Atμt1+Btut
Σ ‾ t = [ ∂ 2 L t ( x t ) ∂ x t 2 ] − 1 = ( A t Σ t − 1 A t T + R t ) \overline\Sigma_{t}=[\frac{\partial^2 L_t(x_t)}{\partial x_t^2}]^{-1}=(A_t\Sigma_{t-1}A_t^T+R_t) Σt=[xt22Lt(xt)]1=(AtΣt1AtT+Rt)

测量更新

b e l ( x t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) = η e − J t bel(x_t)=\eta p(z_t|x_t)\overline{bel}(x_t)=\eta e^{-J_t} bel(xt)=ηp(ztxt)bel(xt)=ηeJt
其中
J t = 1 2 ( z t − C t x t ) T Q t − 1 ( z t − C t x t ) + 1 2 ( x t − μ ‾ t ) T Σ t − 1 ( x t − μ ‾ t ) J_t=\frac12(z_t-C_tx_t)^TQ_t^{-1}(z_t-C_tx_t)+\frac12(x_{t}-\overline\mu_{t})^T\Sigma_{t}^{-1}(x_{t}-\overline\mu_{t}) Jt=21(ztCtxt)TQt1(ztCtxt)+21(xtμt)TΣt1(xtμt)
求导数得
Σ t = ( C T Q t − 1 C t + Σ ‾ t − 1 ) − 1 \begin{aligned} \Sigma_t&=(C^TQ_t^{-1}C_t+\overline{\Sigma}_t^{-1})^{-1}\\ \end{aligned} Σt=(CTQt1Ct+Σt1)1
因为求二次函数的极小值,用 μ t \mu_t μt替换 x t x_t xt:
C t T Q t − 1 ( z t − C t μ t ) = Σ ‾ t − 1 ( μ t − μ ‾ t ) C_t^TQ_t^{-1}(z_t-C_t\mu_t)=\overline{\Sigma}_t^{-1}(\mu_t-\overline{\mu}_t) CtTQt1(ztCtμt)=Σt1(μtμt)
左 边 = C t T Q t − 1 ( z t − C t μ t + C t μ ‾ t − C t μ ‾ t ) = C t T Q t − 1 ( z t − C t μ ‾ t ) − C t T Q t − 1 C t ( μ t − μ ‾ t ) \begin{aligned} 左边&=C_t^TQ_t^{-1}(z_t-C_t\mu_t+C_t\overline{\mu}_t-C_t\overline{\mu}_t)\\ &=C_t^TQ_t^{-1}(z_t-C_t\overline{\mu}_t)-C_t^TQ_t^{-1}C_t (\mu_t-\overline{\mu}_t)\end{aligned} =CtTQt1(ztCtμt+CtμtCtμt)=CtTQt1(ztCtμt)CtTQt1Ct(μtμt)
代回得
C t T Q t − 1 ( z t − C t μ ‾ t ) = Σ t − 1 ( μ t − μ ‾ t ) Σ t C t T Q t − 1 ( z t − C t μ ‾ t ) = ( μ t − μ ‾ t ) C_t^TQ_t^{-1}(z_t-C_t\overline{\mu}_t)=\Sigma_t^{-1}(\mu_t-\overline{\mu}_t)\\ \Sigma_tC_t^TQ_t^{-1}(z_t-C_t\overline{\mu}_t)=(\mu_t-\overline{\mu}_t) CtTQt1(ztCtμt)=Σt1(μtμt)ΣtCtTQt1(ztCtμt)=(μtμt)
K = Σ t C t T Q t − 1 K=\Sigma_tC_t^TQ_t^{-1} K=ΣtCtTQt1,称K为卡尔曼增益
μ t − μ ‾ t = K ( z t − C t μ ‾ t ) \mu_t-\overline{\mu}_t=K(z_t-C_t\overline{\mu}_t) μtμt=K(ztCtμt)

K t = Σ t C t T Q t − 1 = Σ t C t T Q t − 1 ( C t Σ ‾ t C t T + Q t ) ( C t Σ ‾ t C t T + Q t ) − 1 = Σ t ( C t T Q t − 1 C t Σ ‾ t C t T + C t T Q t − 1 Q t ) ( C t Σ ‾ t C t T + Q t ) − 1 = Σ t ( C t T Q t − 1 C t Σ ‾ t C t T + C t T ) ( C t Σ ‾ t C t T + Q t ) − 1 = Σ t ( C t T Q t − 1 C t Σ ‾ t C t T + Σ ‾ t − 1 Σ ‾ t C t T ) ( C t Σ ‾ t C t T + Q t ) − 1 = Σ t ( C t T Q t − 1 C t + Σ ‾ t − 1 ) Σ ‾ t C t T ( C t Σ ‾ t C t T + Q t ) − 1 = Σ ‾ t C t T ( C t Σ ‾ t C t T + Q t ) − 1 \begin{aligned} K_t&=\Sigma_tC_t^TQ_t^{-1}\\ &=\Sigma_tC_t^TQ_t^{-1}(C_t\overline{\Sigma}_tC_t^T+Q_t)(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ &=\Sigma_t(C_t^TQ_t^{-1}C_t\overline{\Sigma}_tC_t^T+C_t^TQ_t^{-1}Q_t)(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ &=\Sigma_t(C_t^TQ_t^{-1}C_t\overline{\Sigma}_tC_t^T+C_t^T)(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ &=\Sigma_t(C_t^TQ_t^{-1}C_t\overline{\Sigma}_tC_t^T+\overline{\Sigma}_t^{-1}\overline{\Sigma}_tC_t^T)(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ &=\Sigma_t(C_t^TQ_t^{-1}C_t+\overline{\Sigma}_t^{-1})\overline{\Sigma}_tC_t^T(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ &=\overline{\Sigma}_tC_t^T(C_t\overline{\Sigma}_tC_t^T+Q_t)^{-1}\\ \end{aligned} Kt=ΣtCtTQt1=ΣtCtTQt1(CtΣtCtT+Qt)(CtΣtCtT+Qt)1=Σt(CtTQt1CtΣtCtT+CtTQt1Qt)(CtΣtCtT+Qt)1=Σt(CtTQt1CtΣtCtT+CtT)(CtΣtCtT+Qt)1=Σt(CtTQt1CtΣtCtT+Σt1ΣtCtT)(CtΣtCtT+Qt)1=Σt(CtTQt1Ct+Σt1)ΣtCtT(CtΣtCtT+Qt)1=ΣtCtT(CtΣtCtT+Qt)1

此时,可以继续化简 Σ t \Sigma_t Σt
Σ t = ( C T Q t − 1 C t + Σ ‾ t − 1 ) − 1 = Σ ‾ t − Σ ‾ t C t T ( Q t + C t Σ ‾ t C t T ) − 1 C t Σ ‾ t = [ ( I − K t C t ) ] Σ ‾ t \begin{aligned} \Sigma_t&=(C^TQ_t^{-1}C_t+\overline{\Sigma}_t^{-1})^{-1}\\ &=\overline{\Sigma}_t-\overline{\Sigma}_tC_t^T(Q_t+C_t\overline{\Sigma}_tC_t^T)^{-1}C_t\overline{\Sigma}_t\\ &=[(I-K_tC_t)]\overline{\Sigma}_t \end{aligned} Σt=(CTQt1Ct+Σt1)1=ΣtΣtCtT(Qt+CtΣtCtT)1CtΣt=[(IKtCt)]Σt

拓展卡尔曼滤波(EKF)

考虑到非线性情况
x t = g ( u t , x t − 1 ) + ε t z t = h ( x t ) + δ t x_t=g(u_t,x_{t-1})+\varepsilon_t\\ z_t=h(x_t)+\delta_t xt=g(ut,xt1)+εtzt=h(xt)+δt
对此,EKF提出泰勒展开保留一阶导数:
G t = ∂ g ( u t , x t − 1 ) ∂ x t − 1 , x t − 1 = μ t − 1 H t = ∂ h ( x t ) ∂ x t , x t = μ ‾ t G_t=\frac{\partial g(u_t,x_{t-1})}{\partial x_{t-1}},x_{t-1}=\mu_{t-1}\\ H_t=\frac{\partial h(x_{t})}{\partial x_{t}},x_t=\overline{\mu}_t Gt=xt1g(ut,xt1),xt1=μt1Ht=xth(xt),xt=μt
那么
g ( u t , x t − 1 ) = g ( u t , μ t − 1 ) + G t ( x t − 1 − μ t − 1 ) h ( x t ) = h ( μ ‾ t ) + H t ( x t − μ ‾ t ) g(u_t,x_{t-1})=g(u_t,\mu_{t-1})+G_t(x_{t-1}-\mu_{t-1})\\ h(x_t)=h(\overline{\mu}_t)+H_t(x_t-\overline{\mu}_t) g(ut,xt1)=g(ut,μt1)+Gt(xt1μt1)h(xt)=h(μt)+Ht(xtμt)
类似KF,可证明EKF如下:

1 : μ ‾ t = g ( u t , μ t − 1 ) 2 : Σ ‾ t = G t Σ t − 1 G t T + R t 3 : K t = Σ ‾ t H t T ( H t Σ ‾ t H t T + Q t ) − 1 4 : μ t = μ ‾ t + K t ( z t − h ( μ ‾ t ) ) 5 : Σ t = ( I − K t H t ) Σ ‾ t \begin{array}{l} 1:\overline{\mu}_t=g(u_t,\mu_{t-1}) \\ 2:\overline{\Sigma}_t=G_t\Sigma_{t-1}G_t^{T}+R_t\\ 3:K_t=\overline{\Sigma}_tH_t^T(H_t\overline{\Sigma}_tH_t^T+Q_t)^{-1}\\ 4:\mu_t=\overline{\mu}_t+K_t(z_t-h(\overline{\mu}_t))\\ 5:\Sigma_t=(I-K_tH_t)\overline{\Sigma}_t \end{array} 1:μt=g(ut,μt1)2:Σt=GtΣt1GtT+Rt3:Kt=ΣtHtT(HtΣtHtT+Qt)14:μt=μt+Kt(zth(μt))5:Σt=(IKtHt)Σt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萧易风船长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值