卡尔曼滤波(kalman filter)超详细推导

1. 概率论相关知识

这一节主要回忆概率论的一些相关基础知识,包括全概率公式、贝叶斯公式、协方差矩阵、多维高斯分布等等,对这些熟悉的可以直接跳到第2节看贝叶斯滤波

1.1 条件概率

P ( x , y ) = P ( x ∣ y ) P ( y ) P ( x , y , z , t ) = P ( x ∣ y , z , t ) P ( y , z , t ) P ( x , y ∣ z , t ) = P ( x ∣ y , z , t ) P ( y ∣ z , t ) \begin{aligned} &\mathrm P(x, y) = \mathrm P(x|y)\mathrm P(y) \\ &\mathrm P(x, y, z, t) = \mathrm P(x|y, z, t)\mathrm P(y, z, t) \\ &\mathrm P(x, y| z, t) = \mathrm P(x|y, z, t)\mathrm P(y| z, t) \end{aligned} P(x,y)=P(xy)P(y)P(x,y,z,t)=P(xy,z,t)P(y,z,t)P(x,yz,t)=P(xy,z,t)P(yz,t)

1.2 全概率公式

离散型
P ( x ) = ∑ i P ( x ∣ y i ) P ( y i ) \mathrm P(x) = \sum_i \mathrm P(x|y_i)\mathrm P(y_i) P(x)=iP(xyi)P(yi)
连续型
P ( x ) = ∫ P ( x ∣ y ) P ( y ) d y \mathrm P(x) = \int \mathrm P(x|y)\mathrm P(y) \mathrm dy P(x)=P(xy)P(y)dy

1.3 贝叶斯公式

贝叶斯公式其实就是联合概率、条件概率公式、全概率公式的扩展
对于联合概率 P ( x , y ) \mathrm P(x,y) P(x,y)
P ( x , y ) = P ( x ∣ y ) P ( y ) = P ( y ∣ x ) P ( x ) \mathrm P(x,y) = \mathrm P(x|y)\mathrm P(y) = \mathrm P(y|x)\mathrm P(x) P(x,y)=P(xy)P(y)=P(yx)P(x)
那么得到贝叶斯公式:
P ( x ∣ y ) = P ( y ∣ x ) P ( x ) P ( y ) = P ( y ∣ x ) P ( x ) ∑ i P ( y ∣ x i ) P ( x i ) 离 散 型 = P ( y ∣ x ) P ( x ) ∫ P ( y ∣ x ) P ( x ) d x 连 续 型 \begin{aligned} \mathrm P(x|y) &= \frac{\mathrm P(y|x)\mathrm P(x)}{\mathrm P(y)} \\ &= \frac{\mathrm P(y|x)\mathrm P(x)}{\displaystyle\sum_i \mathrm P(y|x_i)\mathrm P(x_i)} \quad\quad\quad离散型 \\ &= \frac{\mathrm P(y|x)\mathrm P(x)}{\displaystyle\int \mathrm P(y|x)\mathrm P(x) \mathrm dx} \quad\quad\quad连续型 \end{aligned} P(xy)=P(y)P(yx)P(x)=iP(yxi)P(xi)P(yx)P(x)=P(yx)P(x)dxP(yx)P(x)


在建模的时候我们如果用 x x x表示状态(需要优化的变量), y y y表示观测(实际测量得到的数据)
那么,贝叶斯公式中:
我们常常称 P ( x ) \mathrm P(x) P(x) 先验(prior)
P ( y ∣ x ) \mathrm P(y|x) P(yx) 似然(likelihood)
P ( x ∣ y ) \mathrm P(x|y) P(xy) 后验(posterior)
P ( y ) \mathrm P(y) P(y) 是观测值,是某一个特定的常数,可以将其记为 1 / η 1/\eta 1/η
则有
P ( x ∣ y ) = η P ( y ∣ x ) P ( x ) \mathrm P(x|y) = \eta\mathrm P(y|x)\mathrm P(x) P(xy)=ηP(yx)P(x)
也就是
P ( x ∣ y ) ∝ P ( y ∣ x ) P ( x ) \mathrm P(x|y) \propto \mathrm P(y|x)\mathrm P(x) P(xy)P(yx)P(x)

有一点要提一下的就是
比如观测值与状态值有某种线性关系 y = a x + b y=ax+b y=ax+b,那么,就当然也有 x = ( y − b ) / a ,     ( a ≠ 0 ) x = (y-b)/a, ~~~(a\not = 0) x=(yb)/a,   (a=0)
意思就是如果给出状态样本 x x x 去看观测 y y y 的概率,讲的就是似然
如果知道观测值 y y y 去看状态 x x x 的可能性,讲的就是后验
它们其实是同一个式子从两个不同方向看的结果

1.4 贝叶斯递推公式

在实验中,一般观测值会有很多。
那么根据贝叶斯公式可得,在 n n n次观测下的后验概率
P ( x ∣ y 1 : n ) = P ( x ) ∏ i = 1 n η i P ( y i ∣ x ) \mathrm P(x|y_{1:n}) = \mathrm P(x) \prod_{i=1}^n\eta_i \mathrm P(y_i|x) P(xy1:n)=P(x)i=1nηiP(yix)
(符号 y 1 : n y_{1:n} y1:n表示 y 1 , y 2 , . . . , y n y_1, y_2, ... , y_n y1,y2,...,yn

推导过程如下:
由于 y y y为观测数据(实际测量得到),所以一般每次测量都是相互独立的,并不相关
所以, P ( y n ∣ y 1 : n − 1 ) = P ( y n ) \mathrm P(y_n|y_{1:n-1})=\mathrm P(y_n) P(yny1:n1)=P(yn)
接下来,我们记所求后验概率 P ( x ∣ y 1 : n ) = Φ n \mathrm P(x|y_{1:n}) = \Phi_n P(xy1:n)=Φn,那么 Φ 0 = P ( x ) \Phi_0=\mathrm P(x) Φ0=P(x)

Φ n = P ( x ∣ y 1 : n ) = P ( y n ∣ y 1 : n − 1 , x ) P ( x ∣ y 1 : n − 1 ) P ( y n ∣ y 1 : n − 1 ) = P ( y n ∣ x ) P ( x ∣ y 1 : n − 1 ) P ( y n ) = η n P ( y n ∣ x ) P ( x ∣ y 1 : n − 1 ) = η n P ( y n ∣ x ) Φ n − 1 = η n P ( y n ∣ x ) η n − 1 P ( y n − 1 ∣ x ) Φ n − 2 … = ∏ i = 1 n η i P ( y i ∣ x ) ⋅ Φ 0 = P ( x ) ∏ i = 1 n η i P ( y i ∣ x ) \begin{aligned} \Phi_n = \mathrm P(x|y_{1:n}) &= \frac{\mathrm P(y_n|y_{1:n-1},x)\mathrm P(x|y_{1:n-1})}{\mathrm P(y_n|y_{1:n-1})} \\ &= \frac{\mathrm P(y_n|x)\mathrm P(x|y_{1:n-1})}{\mathrm P(y_n)} \\ &= \eta_n \mathrm P(y_n|x)\mathrm P(x|y_{1:n-1}) \\ &= \eta_n \mathrm P(y_n|x)\Phi_{n-1} \\ &= \eta_n \mathrm P(y_n|x)\eta_{n-1} \mathrm P(y_{n-1}|x)\Phi_{n-2} \\ & \dots \\ &= \prod_{i=1}^n\eta_i \mathrm P(y_i|x) · \Phi_0 \\ &= \mathrm P(x) \prod_{i=1}^n\eta_i \mathrm P(y_i|x) \end{aligned} Φn=P(xy1:n)=P(yny1:n1)P(yny1:n1,x)P(xy1:n1)=P(yn)P(ynx)P(xy1:n1)=ηnP(ynx)P(xy1:n1)=ηnP(ynx)Φn1=ηnP(ynx)ηn1P(yn1x)Φn2=i=1nηiP(yix)Φ0=P(x)i=1nηiP(yix)

1.5 协方差矩阵

还记得两个随机变量 x x x, y y y的协方差表示为 C o v ( x , y ) \mathrm{Cov}(x,y) Cov(x,y)
多个随机变量 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn的协方差矩阵如下:
Σ = ( C o v ( x 1 , x 1 ) C o v ( x 1 , x 2 ) … C o v ( x 1 , x n ) C o v ( x 2 , x 1 ) C o v ( x 2 , x 2 ) … C o v ( x 2 , x n ) ⋮ ⋮ ⋱ ⋮ C o v ( x n , x 1 ) C o v ( x n , x 2 ) … C o v ( x n , x n ) )   = ( V a r ( x 1 ) C o v ( x 1 , x 2 ) … C o v ( x 1 , x n ) C o v ( x 2 , x 1 ) V a r ( x 2 ) … C o v ( x 2 , x n ) ⋮ ⋮ ⋱ ⋮ C o v ( x n , x 1 ) C o v ( x n , x 2 ) … V a r ( x n ) ) \begin{aligned} \boldsymbol \Sigma &= \begin{pmatrix} \mathrm{Cov}(x_1,x_1) & \mathrm{Cov}(x_1,x_2) & \dots & \mathrm{Cov}(x_1,x_n) \\ \mathrm{Cov}(x_2,x_1) & \mathrm{Cov}(x_2,x_2) & \dots & \mathrm{Cov}(x_2,x_n) \\ \vdots & \vdots & \ddots & \vdots \\ \mathrm{Cov}(x_n,x_1) & \mathrm{Cov}(x_n,x_2) & \dots & \mathrm{Cov}(x_n,x_n) \end{pmatrix} \\ ~\\ &= \begin{pmatrix} \mathrm{Var}(x_1) & \mathrm{Cov}(x_1,x_2) & \dots & \mathrm{Cov}(x_1,x_n) \\ \mathrm{Cov}(x_2,x_1) & \mathrm{Var}(x_2) & \dots & \mathrm{Cov}(x_2,x_n) \\ \vdots & \vdots & \ddots & \vdots \\ \mathrm{Cov}(x_n,x_1) & \mathrm{Cov}(x_n,x_2) & \dots & \mathrm{Var}(x_n) \end{pmatrix} \end{aligned} Σ =Cov(x1,x1)Cov(x2,x1)Cov(xn,x1)Cov(x1,x2)Cov(x2,x2)Cov(xn,x2)Cov(x1,xn)Cov(x2,xn)Cov(xn,xn)=Var(x1)Cov(x2,x1)Cov(xn,x1)Cov(x1,x2)Var(x2)Cov(xn,x2)Cov(x1,xn)Cov(x2,xn)Var(xn)
其中 V a r ( ⋅ ) \mathrm{Var}(·) Var()表示方差
协方差矩阵表示了多个随机变量之间的相关程度

1.6 多维高斯分布

本科学过二维高斯分布概率密度
f ( x 1 , x 2 ) = ( 2 π σ 1 σ 2 1 − ρ 2 ) − 1 exp ⁡ [ − 1 2 ( 1 − ρ 2 ) ( ( x 1 − μ 1 ) 2 σ 1 2 − 2 ρ ( x 1 − μ 1 ) ( x 2 − μ 2 ) σ 1 σ 2 + ( x 2 − μ 2 ) 2 σ 2 2 ) ] f(x_1,x_2) = \bigg(2\pi\sigma_1\sigma_2\sqrt{1-\rho^2}\bigg)^{-1}\exp\bigg[-\frac{1}{2(1-\rho^2)}\bigg(\frac{(x_1-\mu_1)^2}{\sigma_1^2}-\frac{2\rho(x_1-\mu_1)(x_2-\mu_2)}{\sigma_1\sigma_2}+\frac{(x_2-\mu_2)^2}{\sigma_2^2}\bigg)\bigg] f(x1,x2)=(2πσ1σ21ρ2 )1exp[2(1ρ2)1(σ12(x1μ1)2σ1σ22ρ(x1μ1)(x2μ2)+σ22(x2μ2)2)]
由于
ρ = C o v ( x 1 , x 2 ) V a r ( x 1 ) V a r ( x 2 ) = C o v ( x 1 , x 2 ) σ 1 σ 2   Σ = ( σ 1 2 ρ σ 1 σ 2 ρ σ 1 σ 2 σ 2 2 )   det ⁡ Σ = ( 1 − ρ 2 ) σ 1 2 σ 2 2 \begin{aligned} &\rho=\frac{\mathrm{Cov}(x_1,x_2)}{\sqrt{\mathrm{Var}(x_1)\mathrm{Var}(x_2)}}=\frac{\mathrm{Cov}(x_1,x_2)}{\sigma_1\sigma_2} \\ ~\\ &\boldsymbol \Sigma = \begin{pmatrix} \sigma_1^2 & \rho\sigma_1\sigma_2 \\ \rho\sigma_1\sigma_2 & \sigma_2^2 \end{pmatrix} \\ ~\\ &\det \boldsymbol \Sigma = (1-\rho^2)\sigma_1^2\sigma_2^2 \end{aligned}   ρ=Var(x1)Var(x2) Cov(x1,x2)=σ1σ2Cov(x1,x2)Σ=(σ12ρσ1σ2ρσ1σ2σ22)detΣ=(1ρ2)σ12σ22
于是二维高斯分布的概率密度可以改为用协方差矩阵表示(实际上 n n n 维高斯分布概率密度也是它):
f ( x ) = det ⁡ ( 2 π Σ ) − 1 2 exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } f(\boldsymbol x)= \det\big(2\pi\boldsymbol\Sigma\big)^{-\frac{1}{2}}\exp\Big\{-\frac{1}{2}(\boldsymbol x-\boldsymbol\mu)^{\mathrm{T}}\boldsymbol \Sigma^{-1}(\boldsymbol x-\boldsymbol\mu)\Big\} f(x)=det(2πΣ)21exp{21(xμ)TΣ1(xμ)}


相关性质
J ( x ) = 1 2 ( x − μ ) T Σ − 1 ( x − μ ) \boldsymbol J(\boldsymbol x) = \displaystyle\frac{1}{2}(\boldsymbol x-\boldsymbol\mu)^{\mathrm{T}}\boldsymbol \Sigma^{-1}(\boldsymbol x-\boldsymbol\mu) J(x)=21(xμ)TΣ1(xμ)
那么
f ( x ) = det ⁡ ( 2 π Σ ) − 1 2 e − J ( x ) f(\boldsymbol x)= \det\big(2\pi\boldsymbol\Sigma\big)^{-\frac{1}{2}}e^{-\boldsymbol J(\boldsymbol x)} f(x)=det(2πΣ)21eJ(x)
J \boldsymbol J J关于 x \boldsymbol x x求导:
∂ J ∂ x = Σ − 1 ( x − μ ) ∂ 2 J ∂ x 2 = Σ − 1 \begin{aligned} &\frac{\partial\boldsymbol J}{\partial\boldsymbol x}=\boldsymbol\Sigma^{-1}(\boldsymbol x-\boldsymbol \mu) \\ &\frac{\partial^2\boldsymbol J}{\partial\boldsymbol x^2} = \boldsymbol\Sigma^{-1} \end{aligned} xJ=Σ1(xμ)x22J=Σ1可以看出,对于 J \boldsymbol J J:

  1. 一阶导数为零的点是分布的均值点
  2. 二阶导数是分布的协方差矩阵的逆

2. 贝叶斯(Bayes)滤波

卡尔曼滤波是基于贝叶斯滤波的一种改进,这里先说明一下贝叶斯滤波的相关原理。
已经熟悉运动状态和贝叶斯滤波的这一节也可以跳过。

2.1 变量定义

运动过程一般需要用到的变量主要有3个:
x i \boldsymbol x_i xi表示 i i i时刻的状态。比如当前坐标、速度等等。
z i \boldsymbol z_i zi表示 i i i时刻的观测值。指 用其他手段或工具可以得到目标的状态。例如使用视觉、触碰等传感器获得外界状态等等。
u i \boldsymbol u_i ui表示 i i i时刻的控制量。指 外界给他施加的作用力。例如推一下、跳一下等等。


2.2 马尔科夫假设

贝叶斯滤波是一个基于马尔科夫假设的算法
马尔科夫模型如图所示:
卡尔曼滤波(kalman filter)超详细推导_第1张图片


  • 马尔科夫假设认为 t t t 时刻的状态 x t \boldsymbol x_t xt 只与 t − 1 t-1 t1 时刻的状态 x t − 1 \boldsymbol x_{t-1} xt1 t t t 时刻的控制量 u t \boldsymbol u_t ut 相关,与之前无关:
    卡尔曼滤波(kalman filter)超详细推导_第2张图片
    即:
    P ( x t ∣ x 1 : t − 1 , z 1 : t , u 1 : t ) = P ( x t ∣ x t − 1 , u t ) \mathrm P(\boldsymbol x_t|\boldsymbol x_{1:t-1}, \boldsymbol z_{1:t}, \boldsymbol u_{1:t}) = \mathrm P(\boldsymbol x_t|\boldsymbol x_{t-1}, \boldsymbol u_{t}) P(xtx1:t1,z1:t,u1:t)=P(xtxt1,ut)
    (符号 x 1 : t \boldsymbol x_{1:t} x1:t表示 x 1 , x 2 , . . . , x t \boldsymbol x_1, \boldsymbol x_2, ... , \boldsymbol x_t x1,x2,...,xt

  • 马尔科夫假设认为 t t t 时刻的观测值 z t \boldsymbol z_t zt 只与 t t t 时刻的状态 x t \boldsymbol x_t xt 相关,与之前无关:
    卡尔曼滤波(kalman filter)超详细推导_第3张图片
    即:
    P ( z t ∣ z 1 : t − 1 , x 1 : t , u 1 : t ) = P ( z t ∣ x t ) \mathrm P(\boldsymbol z_t|\boldsymbol z_{1:t-1}, \boldsymbol x_{1:t}, \boldsymbol u_{1:t}) = \mathrm P(\boldsymbol z_t|\boldsymbol x_{t}) P(ztz1:t1,x1:t,u1:t)=P(ztxt)

马尔科夫假设其实是比较苛刻的,真实世界中有很多因素会扰乱马尔科夫假设。

2.3 运动观测方程

从马尔科夫的两个假设我们可以得出两个重要的方程,即状态转移方程与观测方程
{ x t = f ( x t − 1 , u t ) + ε t           ⋅ ⋅ ⋅ 状 态 转 移 方 程 z t = h ( x t ) + δ t ⋅ ⋅ ⋅ 观 测 方 程 \left \{ \begin{aligned} \boldsymbol x_t&=f(\boldsymbol x_{t-1},\boldsymbol u_t)+\boldsymbol\varepsilon_t ~~~~~~~~~&···状态转移方程\\ \boldsymbol z_t&=h(\boldsymbol x_t)+\boldsymbol\delta_t&···观测方程 \end{aligned} \right. {xtzt=f(xt1,ut)+εt         =h(xt)+δt
这里的 f ( ⋅ ) f(·) f() h ( ⋅ ) h(·) h()可以是线性也可以是非线性的, ε t \boldsymbol\varepsilon_t εt δ t \boldsymbol\delta_t δt 为误差项
u \boldsymbol u u 在这个模型下其实是一个常数,在没有外力干扰的时候,也可以将它去掉简化状态方程)
可以看出,这两个方程分别对应了马尔科夫两个假设中的概率
{ P ( x t ∣ u t , x t − 1 ) P ( z t ∣ x t ) \left \{ \begin{aligned} &\mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1})\\ &\mathrm P(\boldsymbol z_t|\boldsymbol x_t) \end{aligned} \right. {P(xtut,xt1)P(ztxt)

2.4 算法思想

目标
通过上一时刻的状态后验概率 P ( x t − 1 ∣ u 1 : t − 1 , z 1 : t − 1 ) \mathrm P(\boldsymbol x_{t-1}|\boldsymbol u_{1:t-1}, \boldsymbol z_{1:t-1}) P(xt1u1:t1,z1:t1),推导出当前时刻的后验概率 P ( x t ∣ u 1 : t , z 1 : t ) \mathrm P(\boldsymbol x_t|\boldsymbol u_{1:t}, \boldsymbol z_{1:t}) P(xtu1:t,z1:t)
把这俩概率记为: b e l ( x t − 1 ) \mathrm{bel}(\boldsymbol x_{t-1}) bel(xt1) b e l ( x t ) \mathrm{bel}(\boldsymbol x_{t}) bel(xt),称为xx时刻的置信度

已知
控制集: { u 1 : t } \big\{\boldsymbol u_{1:t}\big\} {u1:t}
观测集: { z 1 : t } \big\{\boldsymbol z_{1:t}\big\} {z1:t}
运动模型: P ( x t ∣ x t − 1 , u t ) \mathrm P(\boldsymbol x_t|\boldsymbol x_{t-1}, \boldsymbol u_{t}) P(xtxt1,ut)
观测模型: P ( z t ∣ x t ) \mathrm P(\boldsymbol z_t|\boldsymbol x_{t}) P(ztxt)
初始状态: P ( x 0 ) \mathrm P(\boldsymbol x_0) P(x0) b e l ( x 0 ) \mathrm{bel}(\boldsymbol x_0) bel(x0)

输入
b e l ( x t − 1 ) \mathrm{bel}(\boldsymbol x_{t-1}) bel(xt1)

输出
b e l ( x t ) \mathrm{bel}(\boldsymbol x_{t}) bel(xt)


大致流程就是将 b e l ( x t − 1 ) \mathrm{bel}(\boldsymbol x_{t-1}) bel(xt1)带入到第1个方程中,求出的结果再通过结合第2个方程算出最终的 b e l ( x t ) \mathrm{bel}(\boldsymbol x_{t}) bel(xt)
这里的运动模型和观测模型是需要设计的,即需要设计一套合理的 f ( ⋅ ) f(·) f() h ( ⋅ ) h(·) h() ε t \boldsymbol\varepsilon_t εt δ t \boldsymbol\delta_t δt

之后要说的卡尔曼滤波的创作者Kalman就是将它们假设成了线性高斯模型,即 f ( ⋅ ) f(·) f() h ( ⋅ ) h(·) h()为线性函数、 ε t \boldsymbol\varepsilon_t εt δ t \boldsymbol\delta_t δt是高斯噪声。具体内容可看第3节

2.5 算法流程

基本贝叶斯滤波算法流程如下

1. Algorithm Bayes_filter( b e l ( x t − 1 ) , u t , z t bel(x_{t-1}), u_t, z_t bel(xt1),ut,zt):
2.   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})\mathrm dx_{t-1} bel(xt)=p(xtut,xt1)bel(xt1)dxt1
3.   b e l ( x t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) bel(x_t)=\eta p(z_t|x_t) \overline{bel}(x_t) bel(xt)=ηp(ztxt)bel(xt)
4.   return b e l ( x t ) bel(x_t) bel(xt)

算法核心其实就是第2、3两行


伪代码第2行称为预测
b e l ( x t − 1 ) P ( x t ∣ u t , x t − 1 ) } ⟹ b e l ‾ ( x t ) \left. \begin{aligned} \mathrm{bel}(\boldsymbol x_{t-1}) \\ \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1}) \end{aligned} \right\} \Longrightarrow\overline{\mathrm{bel}}(x_t) bel(xt1)P(xtut,xt1)}bel(xt)
即 通过上一个状态的置信度和运动转移模型去预测当前可能的状态


伪代码第3行称为更新
b e l ‾ ( x t ) P ( z t ∣ x t ) } ⟹ b e l ( x t ) \left. \begin{aligned} \overline{\mathrm{bel}}(\boldsymbol x_t) \\ \mathrm P(\boldsymbol z_t|\boldsymbol x_t) \end{aligned} \right\} \Longrightarrow\mathrm{bel}(x_t) bel(xt)P(ztxt)}bel(xt)
即 使用当前的观测状态,去修正上一步预测的状态


2.6 推导

我们称所求的 t t t 时刻的后验概率 P ( x t ∣ u 1 : t , z 1 : t ) \mathrm P(\boldsymbol x_t|\boldsymbol u_{1:t}, \boldsymbol z_{1:t}) P(xtu1:t,z1:t) t t t 时刻的状态置信度,记为 b e l ( x t ) \mathrm{bel}(\boldsymbol x_t) bel(xt),那么
b e l ( x t ) = P ( z t ∣ x t , u 1 : t , z 1 : t − 1 ) P ( x t ∣ u 1 : t , z 1 : t − 1 ) P ( z t ∣ u 1 : t , z 1 : t − 1 ) = P ( z t ∣ x t ) P ( x t ∣ u 1 : t , z 1 : t − 1 ) P ( z t ) = η t P ( z t ∣ x t ) P ( x t ∣ u 1 : t , z 1 : t − 1 ) \begin{aligned} \mathrm{bel}(\boldsymbol x_t) &= \frac{\mathrm P(\boldsymbol z_t|\boldsymbol x_t, \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1})\mathrm P(\boldsymbol x_t | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1})}{\mathrm P(\boldsymbol z_t|\boldsymbol u_{1:t}, \boldsymbol z_{1:t-1})} \\ &= \frac{\mathrm P(\boldsymbol z_t|\boldsymbol x_t)\mathrm P(\boldsymbol x_t | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1})}{\mathrm P(\boldsymbol z_t)} \\ &= \boldsymbol\eta_t \mathrm P(\boldsymbol z_t|\boldsymbol x_t)\mathrm P(\boldsymbol x_t | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1}) \end{aligned} bel(xt)=P(ztu1:t,z1:t1)P(ztxt,u1:t,z1:t1)P(xtu1:t,z1:t1)=P(zt)P(ztxt)P(xtu1:t,z1:t1)=ηtP(ztxt)P(xtu1:t,z1:t1)
根据全概率公式以及上一小节的马尔科夫假设可得,上式中:
P ( x t ∣ u 1 : t , z 1 : t − 1 ) = ∫ P ( x t ∣ u 1 : t , z 1 : t − 1 , x t − 1 ) P ( x t − 1 ∣ u 1 : t , z 1 : t − 1 ) d x t − 1 = ∫ P ( x t ∣ u t , x t − 1 ) P ( x t − 1 ∣ u 1 : t − 1 , z 1 : t − 1 ) d x t − 1 = ∫ P ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 = d e f b e l ‾ ( x t ) \begin{aligned} \mathrm P(\boldsymbol x_t | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1}) &= \int \mathrm P(\boldsymbol x_t | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1}, \boldsymbol x_{t-1}) \mathrm P(\boldsymbol x_{t-1} | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1}) \mathrm d\boldsymbol x_{t-1} \\ &= \int \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1}) \mathrm P(\boldsymbol x_{t-1} | \boldsymbol u_{1:t-1}, \boldsymbol z_{1:t-1}) \mathrm d\boldsymbol x_{t-1} \\ &= \int \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1}) \mathrm{bel}(\boldsymbol x_{t-1}) \mathrm d\boldsymbol x_{t-1} \\ &\overset{\mathrm {def}}{=}\overline{\mathrm {bel}}(\boldsymbol x_t) \end{aligned} P(xtu1:t,z1:t1)=P(xtu1:t,z1:t1,xt1)P(xt1u1:t,z1:t1)dxt1=P(xtut,xt1)P(xt1u1:t1,z1:t1)dxt1=P(xtut,xt1)bel(xt1)dxt1=defbel(xt)

所以得到贝叶斯滤波递推公式为:

b e l ( x t ) = η t P ( z t ∣ x t ) ∫ P ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 或 b e l ( x t ) = η t P ( z t ∣ x t ) b e l ‾ ( x t ) \mathrm{bel}(\boldsymbol x_t) = \boldsymbol\eta_t \mathrm P(\boldsymbol z_t|\boldsymbol x_t)\int \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1}) \mathrm{bel}(\boldsymbol x_{t-1}) \mathrm d\boldsymbol x_{t-1} \\ 或 \\ \mathrm{bel}(\boldsymbol x_t) = \boldsymbol\eta_t \mathrm P(\boldsymbol z_t|\boldsymbol x_t)\overline{\mathrm {bel}}(\boldsymbol x_t) bel(xt)=ηtP(ztxt)P(xtut,xt1)bel(xt1)dxt1bel(xt)=ηtP(ztxt)bel(xt)

可以看到,算法流程伪代码第2、3两行和上面的贝叶斯递推公式描述的是一样的。


3. 卡尔曼滤波

3.1 线性高斯系统

可能实现贝叶斯滤波的最好的研究技术就是卡尔曼滤波,整个卡尔曼滤波就是一个线性高斯系统,各种假设与模型都是基于线性高斯而建立的。

3.1.1 状态转移概率

卡尔曼滤波认为状态转移概率服从高斯分布
即状态转移方程可以表示为一个带有随机高斯噪声的线性函数:
x t = A t x t − 1 + B t u t + ε t \boldsymbol x_t=\boldsymbol A_t\boldsymbol x_{t-1}+\boldsymbol B_t\boldsymbol u_t+\boldsymbol \varepsilon_t xt=Atxt1+Btut+εt
其中 ε t ∼ N ( 0 , R t ) \boldsymbol \varepsilon_t\sim N(0, \boldsymbol R_t) εtN(0,Rt)

所以在 x t − 1 \boldsymbol x_{t-1} xt1 u t \boldsymbol u_t ut给定的情况下, x t ∼ N ( A t x t − 1 + B t u t , R t ) \boldsymbol x_t\sim N(\boldsymbol A_t\boldsymbol x_{t-1}+\boldsymbol B_t\boldsymbol u_t, \boldsymbol R_t) xtN(Atxt1+Btut,Rt)

P ( x t ∣ u t , x t − 1 ) = det ⁡ ( 2 π R t ) − 1 2 exp ⁡ { − 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 ) } \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1}) = \det(2\pi\boldsymbol R_t)^{-\frac{1}{2}}\exp\Big\{-\frac{1}{2}(\boldsymbol x_t-\boldsymbol A_t\boldsymbol x_{t-1}-\boldsymbol B_t\boldsymbol u_t)^{\mathrm{T}}\boldsymbol R_t^{-1}(\boldsymbol x_t-\boldsymbol A_t\boldsymbol x_{t-1}-\boldsymbol B_t\boldsymbol u_t)\Big\} P(xtut,xt1)=det(2πRt)21exp{21(xtAtxt1Btut)TRt1(xtAtxt1Btut)}

3.1.2 观测概率

卡尔曼滤波认为观测概率也服从高斯分布
即观测方程可以表示为一个带有随机高斯噪声的线性函数:
z t = C t x t + δ t \boldsymbol z_t=\boldsymbol C_t\boldsymbol x_t+\boldsymbol \delta_t zt=Ctxt+δt
其中 δ t ∼ N ( 0 , Q t ) \boldsymbol \delta_t\sim N(0, \boldsymbol Q_t) δtN(0,Qt)

所以在 x t \boldsymbol x_t xt给定的情况下, z t ∼ N ( C t x t , Q t ) \boldsymbol z_t\sim N(\boldsymbol C_t\boldsymbol x_t, \boldsymbol Q_t) ztN(Ctxt,Qt)

P ( z t ∣ x t ) = det ⁡ ( 2 π Q t ) − 1 2 exp ⁡ { − 1 2 ( z t − C t x t ) T Q t − 1 ( z t − C t x t ) } \mathrm P(\boldsymbol z_t | \boldsymbol x_t) = \det(2\pi\boldsymbol Q_t)^{-\frac{1}{2}}\exp\Big\{-\frac{1}{2}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol x_t)^{\mathrm{T}}\boldsymbol Q_t^{-1}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol x_t)\Big\} P(ztxt)=det(2πQt)21exp{21(ztCtxt)TQt1(ztCtxt)}

3.1.3 初始置信度

卡尔曼滤波认为初始置信度仍然是服从高斯分布的

b e l ( x 0 ) = P ( x 0 ) = det ⁡ ( 2 π Σ 0 ) − 1 2 exp ⁡ { − 1 2 ( x 0 − μ 0 ) T Σ 0 − 1 ( x 0 − μ 0 ) } \mathrm{bel}(\boldsymbol x_0)=\mathrm P(\boldsymbol x_0) = \det(2\pi\boldsymbol\Sigma_0)^{-\frac{1}{2}}\exp\Big\{-\frac{1}{2}(\boldsymbol x_0-\boldsymbol\mu_0)^{\mathrm{T}}\boldsymbol \Sigma_0^{-1}(\boldsymbol x_0-\boldsymbol\mu_0)\Big\} bel(x0)=P(x0)=det(2πΣ0)21exp{21(x0μ0)TΣ01(x0μ0)}


这三个高斯分布的假设可以保证之后的每一个置信度 b e l ( x t ) \mathrm{bel}(\boldsymbol x_t) bel(xt)都是高斯分布的: b e l ( x t ) ∼ N ( μ t , Σ t ) \mathrm{bel}(\boldsymbol x_t)\sim N(\boldsymbol \mu_t, \boldsymbol \Sigma_t) bel(xt)N(μt,Σt)

3.2 算法流程

下面给出卡尔曼滤波伪代码

1. Algorithm Kalman_filter( μ t − 1 , Σ t − 1 , u t , z t \mu_{t-1},\Sigma_{t-1}, u_t, z_t μt1,Σt1,ut,zt):

2.   μ ‾ t = A t μ t − 1 + B t u t \overline\mu_t=A_t\mu_{t-1}+B_tu_t μt=Atμt1+Btut
3.   Σ ‾ t = A t Σ t − 1 A t T + R t \overline\Sigma_t=A_t\Sigma_{t-1}A_t^\mathrm T+R_t Σt=AtΣt1AtT+Rt

4.   K t = Σ ‾ t C t T ( C t Σ ‾ t C t T + Q t ) − 1 K_t=\overline\Sigma_tC_t^\mathrm T(C_t\overline\Sigma_tC_t^\mathrm T+Q_t)^{-1} Kt=ΣtCtT(CtΣtCtT+Qt)1
5.   μ t = μ ‾ t + K t ( z t − C t μ ‾ t ) \mu_t=\overline\mu_t+K_t(z_t-C_t\overline\mu_t) μt=μt+Kt(ztCtμt)
6.   Σ t = ( I − K t C t ) Σ ‾ t \Sigma_t=(I-K_tC_t)\overline\Sigma_t Σt=(IKtCt)Σt

7.  return μ t , Σ t \mu_t,\Sigma_t μt,Σt

算法伪代码中:
输入:上一时刻状态的均值与方差、当前时刻的控制量、当前时刻的观测值
输出:当前时刻状态的均值与方差

2~3步为预测,使用 前面状态 x t − 1 x_{t-1} xt1的均值与方差 去预测新状态的均值方差
4~6步为更新,使用新的观测数据,对上面预测的均值方差做出更新调整,得到修正后的 状态 x t x_t xt的均值方差
第7步返回修正后 x t x_t xt的均值与方差

这里出现了三个新的字母: μ ‾ t , Σ ‾ t , K t \overline\boldsymbol\mu_t, \overline\boldsymbol\Sigma_t, \boldsymbol K_t μt,Σt,Kt
其中前两个字母是通过预测步骤得到的状态均值方差,即 x ‾ t ∼ N ( μ ‾ t , Σ ‾ t ) \overline \boldsymbol x_t\sim N(\overline\boldsymbol \mu_t, \overline\boldsymbol\Sigma_t) xtN(μt,Σt),亦或是先验置信度的均值与方差: b e l ‾ ( x t ) ∼ N ( μ ‾ t , Σ ‾ t ) \overline\mathrm{bel}(\boldsymbol x_t)\sim N(\overline\boldsymbol \mu_t, \overline\boldsymbol\Sigma_t) bel(xt)N(μt,Σt)
最后一个字母 K t \boldsymbol K_t Kt代表的是卡尔曼增益(Kalman Gain)

3.3 推导

回顾运动观测方程:
{ x t = A t x t − 1 + B t u t + ε t z t = C t x t + δ t \left\{ \begin{aligned} \boldsymbol x_t&=\boldsymbol A_t\boldsymbol x_{t-1}+\boldsymbol B_t\boldsymbol u_t+\boldsymbol \varepsilon_t \\ \boldsymbol z_t&=\boldsymbol C_t\boldsymbol x_t+\boldsymbol \delta_t \end{aligned} \right. {xtzt=Atxt1+Btut+εt=Ctxt+δt我们将两个式子中的 x t \boldsymbol x_t xt都改一下符号,以便它们与真实值 x t \boldsymbol x_t xt有所区分
{ x ‾ t = A t x t − 1 + B t u t + ε t ⋅ ⋅ ⋅   3.1 z t = C t x ~ t + δ t ⋅ ⋅ ⋅   3.2 \left\{ \begin{aligned} \overline \boldsymbol x_t&=\boldsymbol A_t\boldsymbol x_{t-1}+\boldsymbol B_t\boldsymbol u_t+\boldsymbol \varepsilon_t \quad\quad\quad\quad\quad &···~3.1 \\ \boldsymbol z_t&=\boldsymbol C_t\tilde\boldsymbol x_t+\boldsymbol \delta_t &···~3.2 \end{aligned} \right. {xtzt=Atxt1+Btut+εt=Ctx~t+δt 3.1 3.2
下面分为预测、更新两部分详细讲解2~7行的公式如何得出


— 第1部分,预测 —

对于3.1式 x ‾ t = A t x t − 1 + B t u t + ε t \overline \boldsymbol x_t=\boldsymbol A_t\boldsymbol x_{t-1}+\boldsymbol B_t\boldsymbol u_t+\boldsymbol \varepsilon_t xt=Atxt1+Btut+εt
x ‾ t ∼ N ( μ ‾ t , Σ ‾ t ) \overline \boldsymbol x_t\sim N(\overline\boldsymbol \mu_t, \overline\boldsymbol\Sigma_t) xtN(μt,Σt)
x t − 1 ∼ N ( μ t − 1 , Σ t − 1 ) \boldsymbol x_{t-1}\sim N(\boldsymbol \mu_{t-1}, \boldsymbol\Sigma_{t-1}) xt1N(μt1,Σt1)
u t \boldsymbol u_t ut是常量
ε t ∼ N ( 0 , R t ) \boldsymbol \varepsilon_t\sim N(0, \boldsymbol R_t) εtN(0,Rt)

x t − 1 \boldsymbol x_{t-1} xt1 ε t \boldsymbol \varepsilon_t εt是独立的,所以
μ ‾ t = A t μ t − 1 + B t u t + 0 Σ ‾ t = A t Σ t − 1 A t T + R t \begin{aligned} \overline\boldsymbol \mu_t &= \boldsymbol A_t\boldsymbol \mu_{t-1}+\boldsymbol B_t\boldsymbol u_t+\boldsymbol 0 \\ \overline\boldsymbol\Sigma_t &= \boldsymbol A_t\boldsymbol \Sigma_{t-1}\boldsymbol A_t^\mathrm T+\boldsymbol R_t \\ \end{aligned} μtΣt=Atμt1+Btut+0=AtΣt1AtT+Rt对应了算法伪代码第2、3行

相关公式:)
1. E ( x + y ) = E ( x ) + E ( y ) \mathrm{E}(\boldsymbol x+\boldsymbol y) = \mathrm{E}(\boldsymbol x)+\mathrm{E}(\boldsymbol y) E(x+y)=E(x)+E(y)
2. D ( a x ) = a 2 D ( x ) \mathrm{D}(a\boldsymbol x) = a^2\mathrm{D}(\boldsymbol x) D(ax)=a2D(x)
3. D ( A x ) = A D ( x ) A T \mathrm{D}(\boldsymbol A\boldsymbol x) = \boldsymbol A\mathrm{D}(\boldsymbol x)\boldsymbol A^\mathrm T D(Ax)=AD(x)AT
4. D ( x + y ) = D ( x ) + D ( y )         \mathrm{D}(\boldsymbol x+\boldsymbol y) = \mathrm{D}(\boldsymbol x)+\mathrm{D}(\boldsymbol y)~~~~~~~ D(x+y)=D(x)+D(y)        x , y \boldsymbol x,\boldsymbol y x,y独立)

另外,这两个公式用贝叶斯滤波知识也是可以推的,即
b e l ‾ ( x t ) = P ( x t ∣ u 1 : t , z 1 : t − 1 ) = ∫ P ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 \begin{aligned} \overline{\mathrm {bel}}(\boldsymbol x_t) &= \mathrm P(\boldsymbol x_t | \boldsymbol u_{1:t}, \boldsymbol z_{1:t-1}) \\ &= \int \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1}) \mathrm{bel}(\boldsymbol x_{t-1}) \mathrm d\boldsymbol x_{t-1} \end{aligned} bel(xt)=P(xtu1:t,z1:t1)=P(xtut,xt1)bel(xt1)dxt1而右边的积分中,
P ( x t ∣ u t , x t − 1 ) ∼ N ( A t x t − 1 + B t u t , R t ) \mathrm P(\boldsymbol x_t | \boldsymbol u_{t}, \boldsymbol x_{t-1})\sim\mathrm N(\boldsymbol A_t\boldsymbol x_{t-1}+\boldsymbol B_t\boldsymbol u_t,\boldsymbol R_t) P(xtut,xt1)N(Atxt1+Btut,Rt)
b e l ( x t − 1 ) ∼ N ( μ t − 1 , Σ t − 1 ) \mathrm{bel}(\boldsymbol x_{t-1})\sim\mathrm N(\boldsymbol \mu_{t-1},\boldsymbol \Sigma_{t-1}) bel(xt1)N(μt1,Σt1)
写出它们俩的概率密度,相乘,然后积分,直接求出 b e l ‾ ( x t ) \overline{\mathrm {bel}}(\boldsymbol x_t) bel(xt)的概率密度,从而求出他的均值与方差: μ ‾ t , Σ ‾ t \overline\boldsymbol \mu_t, \overline\boldsymbol\Sigma_t μt,Σt
但此方法推导有些复杂,有兴趣的同学可以查阅相关资料——《概率机器人》3.2.2节


— 第2部分,更新 —

对于3.2式
z t = C t x ~ t + δ t \boldsymbol z_t=\boldsymbol C_t\tilde\boldsymbol x_t+\boldsymbol \delta_t zt=Ctx~t+δt
并没有与真实值 x t \boldsymbol x_t xt有关的变量,所以只能根据贝叶斯滤波原理来推导 x t \boldsymbol x_t xt的置信度
b e l ( x t ) = η t P ( z t ∣ x t ) b e l ‾ ( x t ) \mathrm{bel}(\boldsymbol x_t) = \boldsymbol\eta_t \mathrm P(\boldsymbol z_t|\boldsymbol x_t)\overline{\mathrm {bel}}(\boldsymbol x_t) bel(xt)=ηtP(ztxt)bel(xt)由于 P ( z t ∣ x t ) ∼ N ( C t x t , Q t ) \mathrm P(\boldsymbol z_t|\boldsymbol x_t)\sim \mathrm N(\boldsymbol C_t\boldsymbol x_t, \boldsymbol Q_t) P(ztxt)N(Ctxt,Qt) b e l ‾ ( x t ) ∼ N ( μ ‾ t , Σ ‾ t ) \overline\mathrm{bel}(\boldsymbol x_t)\sim \mathrm N(\overline\boldsymbol \mu_t, \overline\boldsymbol \Sigma_t) bel(xt)N(μt,Σt)
所以可得
b e l ( x t ) = η ′ e − J t \mathrm{bel}(\boldsymbol x_t) = \boldsymbol\eta' e^{-\boldsymbol J_t} 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 ) \boldsymbol J_t = \frac{1}{2}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol x_t)^{\mathrm{T}}\boldsymbol Q_t^{-1}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol x_t)+\frac{1}{2}(\boldsymbol x_t-\overline\boldsymbol \mu_t)^{\mathrm{T}}\overline\boldsymbol\Sigma_t^{-1}(\boldsymbol x_t-\overline\boldsymbol \mu_t) Jt=21(ztCtxt)TQt1(ztCtxt)+21(xtμt)TΣt1(xtμt)
J t \boldsymbol J_t Jt这仍然是关于 x t \boldsymbol x_t xt的二次型,说明 b e l ( x t ) \mathrm{bel}(\boldsymbol x_t) bel(xt)仍是高斯分布
接下来我们就需要找这个分布的均值 μ t \boldsymbol \mu_t μt 与方差 Σ t \boldsymbol \Sigma_t Σt
J t \boldsymbol J_t Jt关于 x t \boldsymbol x_t xt求一二阶导:
∂ J t ∂ x t = − C t T Q t − 1 ( z t − C t x t ) + Σ ‾ t − 1 ( x t − μ ‾ t ) ∂ 2 J t ∂ x t 2 = C t T Q t − 1 C t + Σ ‾ t − 1 \begin{aligned} &\frac{\partial\boldsymbol J_t}{\partial\boldsymbol x_t} = -\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol x_t)+\overline\boldsymbol\Sigma_t^{-1}(\boldsymbol x_t-\overline\boldsymbol \mu_t) \\ &\frac{\partial^2\boldsymbol J_t}{\partial\boldsymbol x_t^2} = \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t+\overline\boldsymbol\Sigma_t^{-1} \end{aligned} xtJt=CtTQt1(ztCtxt)+Σt1(xtμt)xt22Jt=CtTQt1Ct+Σt1

相关公式:
1. ∂ A x ∂ x = A T   \displaystyle\frac{\partial\boldsymbol A\boldsymbol x}{\partial\boldsymbol x}=\boldsymbol A^\mathrm T \\ ~ xAx=AT 
2. ∂ x T A x ∂ x = 2 A x \displaystyle\frac{\partial\boldsymbol x^\mathrm T\boldsymbol A\boldsymbol x}{\partial\boldsymbol x}=2\boldsymbol A\boldsymbol x xxTAx=2Ax
3. 协方差矩阵是对称矩阵

根据多维高斯分布性质(1.6里有)可以求其均值方差,得到
{ C t T Q t − 1 ( z t − C t μ t ) = Σ ‾ t − 1 ( μ t − μ ‾ t ) Σ t − 1 = C t T Q t − 1 C t + Σ ‾ t − 1 \left\{ \begin{aligned} &\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol \mu_t)=\overline\boldsymbol\Sigma_t^{-1}(\boldsymbol \mu_t-\overline\boldsymbol \mu_t) \\ &\boldsymbol \Sigma_t^{-1} = \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t+\overline\boldsymbol\Sigma_t^{-1} \end{aligned} \right. CtTQt1(ztCtμt)=Σt1(μtμt)Σt1=CtTQt1Ct+Σt1整理得
{ μ t = μ ‾ t + Σ t C t T Q t − 1 ( z t − C t μ ‾ t ) Σ t − 1 = C t T Q t − 1 C t + Σ ‾ t − 1 \left\{ \begin{aligned} & \boldsymbol \mu_t= \overline\boldsymbol \mu_t+\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}(\boldsymbol z_t-\boldsymbol C_t\overline\boldsymbol \mu_t) \\ &\boldsymbol \Sigma_t^{-1} = \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t+\overline\boldsymbol\Sigma_t^{-1} \end{aligned} \right. {μt=μt+ΣtCtTQt1(ztCtμt)Σt1=CtTQt1Ct+Σt1定义 Σ t C t T Q t − 1 = K t \boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}=\boldsymbol K_t ΣtCtTQt1=Kt 为卡尔曼增益
继续整理可得
{ K t = Σ ‾ t C t T ( C t Σ ‾ t C t T + Q t ) − 1 μ t = μ ‾ t + K t ( z t − C t μ ‾ t ) Σ t = ( I − K t C t ) Σ ‾ t \left\{ \begin{aligned} &\boldsymbol K_t=\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T(\boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol Q_t)^{-1} \\ &\boldsymbol \mu_t=\overline\boldsymbol \mu_t+\boldsymbol K_t(\boldsymbol z_t-\boldsymbol C_t\overline\boldsymbol \mu_t) \\ &\boldsymbol \Sigma_t=(\boldsymbol I-\boldsymbol K_t\boldsymbol C_t)\overline\boldsymbol \Sigma_t \end{aligned} \right. Kt=ΣtCtT(CtΣtCtT+Qt)1μt=μt+Kt(ztCtμt)Σt=(IKtCt)Σt
对应了算法第4~6行


① 具体推导
C t T Q t − 1 ( z t − C t μ t ) = Σ ‾ t − 1 ( μ t − μ ‾ t ) C t T Q t − 1 z t − C t T Q t − 1 C t μ t = Σ ‾ t − 1 μ t − Σ ‾ t − 1 μ ‾ t C t T Q t − 1 z t + Σ ‾ t − 1 μ ‾ t = Σ ‾ t − 1 μ t + C t T Q t − 1 C t μ t C t T Q t − 1 z t + Σ ‾ t − 1 μ ‾ t = Σ t − 1 μ t Σ t C t T Q t − 1 z t + Σ t Σ ‾ t − 1 μ ‾ t = μ t K t z t + Σ t Σ ‾ t − 1 μ ‾ t = μ t K t z t + ( Σ t Σ ‾ t − 1 − I ) μ ‾ t = μ t − μ ‾ t K t z t + ( Σ t Σ ‾ t − 1 − Σ t Σ t − 1 ) μ ‾ t = μ t − μ ‾ t K t z t − Σ t ( Σ t − 1 − Σ ‾ t − 1 ) μ ‾ t = μ t − μ ‾ t K t z t − Σ t C t T Q t − 1 C t μ ‾ t = μ t − μ ‾ t K t z t − K t C t μ ‾ t = μ t − μ ‾ t μ t − μ ‾ t = K t ( z t − C t μ ‾ t ) \begin{aligned} \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}(\boldsymbol z_t-\boldsymbol C_t\boldsymbol \mu_t)&=\overline\boldsymbol\Sigma_t^{-1}(\boldsymbol \mu_t-\overline\boldsymbol \mu_t) \\ \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol z_t-\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t\boldsymbol \mu_t&=\overline\boldsymbol\Sigma_t^{-1}\boldsymbol \mu_t-\overline\boldsymbol\Sigma_t^{-1}\overline\boldsymbol \mu_t \\ \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol z_t+\overline\boldsymbol\Sigma_t^{-1}\overline\boldsymbol \mu_t&=\overline\boldsymbol\Sigma_t^{-1}\boldsymbol \mu_t +\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t\boldsymbol \mu_t \\ \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol z_t+\overline\boldsymbol\Sigma_t^{-1}\overline\boldsymbol \mu_t&=\boldsymbol\Sigma_t^{-1} \boldsymbol \mu_t \\ \boldsymbol\Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol z_t+\boldsymbol\Sigma_t\overline\boldsymbol\Sigma_t^{-1}\overline\boldsymbol \mu_t&=\boldsymbol \mu_t \\ \boldsymbol K_t\boldsymbol z_t+\boldsymbol\Sigma_t\overline\boldsymbol\Sigma_t^{-1}\overline\boldsymbol \mu_t&=\boldsymbol \mu_t \\ \boldsymbol K_t\boldsymbol z_t+(\boldsymbol\Sigma_t\overline\boldsymbol\Sigma_t^{-1}-\boldsymbol I)\overline\boldsymbol \mu_t&=\boldsymbol \mu_t - \overline\boldsymbol \mu_t \\ \boldsymbol K_t\boldsymbol z_t+(\boldsymbol\Sigma_t\overline\boldsymbol\Sigma_t^{-1}-\boldsymbol\Sigma_t\boldsymbol\Sigma_t^{-1})\overline\boldsymbol \mu_t&=\boldsymbol \mu_t - \overline\boldsymbol \mu_t \\ \boldsymbol K_t\boldsymbol z_t-\boldsymbol\Sigma_t(\boldsymbol\Sigma_t^{-1}-\overline\boldsymbol\Sigma_t^{-1})\overline\boldsymbol \mu_t&=\boldsymbol \mu_t - \overline\boldsymbol \mu_t \\ \boldsymbol K_t\boldsymbol z_t-\boldsymbol\Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t\overline\boldsymbol \mu_t&=\boldsymbol \mu_t - \overline\boldsymbol \mu_t \\ \boldsymbol K_t\boldsymbol z_t-\boldsymbol K_t\boldsymbol C_t\overline\boldsymbol \mu_t&=\boldsymbol \mu_t - \overline\boldsymbol \mu_t \\ \boldsymbol \mu_t - \overline\boldsymbol \mu_t&=\boldsymbol K_t(\boldsymbol z_t-\boldsymbol C_t\overline\boldsymbol \mu_t) \end{aligned} CtTQt1(ztCtμt)CtTQt1ztCtTQt1CtμtCtTQt1zt+Σt1μtCtTQt1zt+Σt1μtΣtCtTQt1zt+ΣtΣt1μtKtzt+ΣtΣt1μtKtzt+(ΣtΣt1I)μtKtzt+(ΣtΣt1ΣtΣt1)μtKtztΣt(Σt1Σt1)μtKtztΣtCtTQt1CtμtKtztKtCtμtμtμt=Σt1(μtμt)=Σt1μtΣt1μt=Σt1μt+CtTQt1Ctμt=Σt1μt=μt=μt=μtμt=μtμt=μtμt=μtμt=μtμt=Kt(ztCtμt)
② 具体推导
先推 K t \boldsymbol K_t Kt,第4行公式中的 K t \boldsymbol K_t Kt有个 ( C t Σ ‾ t C t T + Q t ) − 1 (\boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol Q_t)^{-1} (CtΣtCtT+Qt)1,所以我们也要凑一下
K t = Σ t C t T Q t − 1 \boldsymbol K_t=\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} Kt=ΣtCtTQt1
   = Σ t =\boldsymbol \Sigma_t =Σt C t T Q t − 1 \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} CtTQt1 ( C t Σ ‾ t C t T + Q t ) ( C t Σ ‾ t C t T + Q t ) − 1 (\boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol Q_t)(\boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol Q_t)^{-1} (CtΣtCtT+Qt)(CtΣtCtT+Qt)1
   = Σ t ( =\boldsymbol \Sigma_t( =Σt( C t T Q t − 1 \boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} CtTQt1 C t Σ ‾ t C t T + \boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+ CtΣtCtT+ C t T Q t − 1 ‾ \boldsymbol C_t^\mathrm T\underline{\boldsymbol Q_t^{-1}} CtTQt1 Q t ‾ ) ( C t Σ ‾ t C t T + Q t ) − 1 \underline{\boldsymbol Q_t})(\boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol Q_t)^{-1} Qt)(CtΣtCtT+Qt)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 =\boldsymbol \Sigma_t(\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} \boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol C_t^\mathrm T)(\boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\boldsymbol Q_t)^{-1} =Σt(CtTQt1CtΣtCtT+CtT)(CtΣtCtT

你可能感兴趣的:(卡尔曼滤波(kalman filter)超详细推导)