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(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)
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)=i∑P(x∣yi)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(x∣y)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(x∣y)P(y)=P(y∣x)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(x∣y)=P(y)P(y∣x)P(x)=i∑P(y∣xi)P(xi)P(y∣x)P(x)离散型=∫P(y∣x)P(x)dxP(y∣x)P(x)连续型
在建模的时候我们如果用
x
x
x表示状态(需要优化的变量),
y
y
y表示观测(实际测量得到的数据)
那么,贝叶斯公式中:
我们常常称
P
(
x
)
\mathrm P(x)
P(x) 先验(prior)
称
P
(
y
∣
x
)
\mathrm P(y|x)
P(y∣x) 似然(likelihood)
称
P
(
x
∣
y
)
\mathrm P(x|y)
P(x∣y) 后验(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(x∣y)=ηP(y∣x)P(x)
也就是
P
(
x
∣
y
)
∝
P
(
y
∣
x
)
P
(
x
)
\mathrm P(x|y) \propto \mathrm P(y|x)\mathrm P(x)
P(x∣y)∝P(y∣x)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=(y−b)/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(x∣y1:n)=P(x)i=1∏nηiP(yi∣x)
(符号
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(yn∣y1:n−1)=P(yn)
接下来,我们记所求后验概率
P
(
x
∣
y
1
:
n
)
=
Φ
n
\mathrm P(x|y_{1:n}) = \Phi_n
P(x∣y1: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(x∣y1:n)=P(yn∣y1:n−1)P(yn∣y1:n−1,x)P(x∣y1:n−1)=P(yn)P(yn∣x)P(x∣y1:n−1)=ηnP(yn∣x)P(x∣y1:n−1)=ηnP(yn∣x)Φn−1=ηnP(yn∣x)ηn−1P(yn−1∣x)Φn−2…=i=1∏nηiP(yi∣x)⋅Φ0=P(x)i=1∏nηiP(yi∣x)
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πΣ)−21e−J(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}
∂x∂J=Σ−1(x−μ)∂x2∂2J=Σ−1可以看出,对于
J
\boldsymbol J
J:
- 一阶导数为零的点是分布的均值点
- 二阶导数是分布的协方差矩阵的逆
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 马尔科夫假设
贝叶斯滤波是一个基于马尔科夫假设的算法
马尔科夫模型如图所示:
- 马尔科夫假设认为
t
t
t 时刻的状态
x
t
\boldsymbol x_t
xt 只与
t
−
1
t-1
t−1 时刻的状态
x
t
−
1
\boldsymbol x_{t-1}
xt−1 和
t
t
t 时刻的控制量
u
t
\boldsymbol u_t
ut 相关,与之前无关:
即:
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(xt∣x1:t−1,z1:t,u1:t)=P(xt∣xt−1,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 相关,与之前无关:
即:
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(zt∣z1:t−1,x1:t,u1:t)=P(zt∣xt)
马尔科夫假设其实是比较苛刻的,真实世界中有很多因素会扰乱马尔科夫假设。
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(xt−1,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(xt∣ut,xt−1)P(zt∣xt)
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(xt−1∣u1:t−1,z1:t−1),推导出当前时刻的后验概率
P
(
x
t
∣
u
1
:
t
,
z
1
:
t
)
\mathrm P(\boldsymbol x_t|\boldsymbol u_{1:t}, \boldsymbol z_{1:t})
P(xt∣u1:t,z1:t)
把这俩概率记为:
b
e
l
(
x
t
−
1
)
\mathrm{bel}(\boldsymbol x_{t-1})
bel(xt−1)和
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(xt∣xt−1,ut)
观测模型:
P
(
z
t
∣
x
t
)
\mathrm P(\boldsymbol z_t|\boldsymbol x_{t})
P(zt∣xt)
初始状态:
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(xt−1)
输出
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(xt−1)带入到第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(xt−1),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(xt∣ut,xt−1)bel(xt−1)dxt−1
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(zt∣xt)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(xt−1)P(xt∣ut,xt−1)}⟹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(zt∣xt)}⟹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(xt∣u1: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(zt∣u1:t,z1:t−1)P(zt∣xt,u1:t,z1:t−1)P(xt∣u1:t,z1:t−1)=P(zt)P(zt∣xt)P(xt∣u1:t,z1:t−1)=ηtP(zt∣xt)P(xt∣u1:t,z1:t−1)
根据全概率公式以及上一小节的马尔科夫假设可得,上式中:
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(xt∣u1:t,z1:t−1)=∫P(xt∣u1:t,z1:t−1,xt−1)P(xt−1∣u1:t,z1:t−1)dxt−1=∫P(xt∣ut,xt−1)P(xt−1∣u1:t−1,z1:t−1)dxt−1=∫P(xt∣ut,xt−1)bel(xt−1)dxt−1=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(zt∣xt)∫P(xt∣ut,xt−1)bel(xt−1)dxt−1或bel(xt)=ηtP(zt∣xt)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=Atxt−1+Btut+εt
其中
ε
t
∼
N
(
0
,
R
t
)
\boldsymbol \varepsilon_t\sim N(0, \boldsymbol R_t)
εt∼N(0,Rt)
所以在
x
t
−
1
\boldsymbol x_{t-1}
xt−1与
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)
xt∼N(Atxt−1+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(xt∣ut,xt−1)=det(2πRt)−21exp{−21(xt−Atxt−1−Btut)TRt−1(xt−Atxt−1−Btut)}
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)
δt∼N(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)
zt∼N(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(zt∣xt)=det(2πQt)−21exp{−21(zt−Ctxt)TQt−1(zt−Ctxt)}
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Σ0−1(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 μt−1,Σt−1,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μt−1+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Σt−1AtT+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(zt−Ctμt)
6. Σ t = ( I − K t C t ) Σ ‾ t \Sigma_t=(I-K_tC_t)\overline\Sigma_t Σt=(I−KtCt)Σt
7. return μ t , Σ t \mu_t,\Sigma_t μt,Σt
算法伪代码中:
输入:上一时刻状态的均值与方差、当前时刻的控制量、当前时刻的观测值
输出:当前时刻状态的均值与方差
2~3步为预测,使用 前面状态
x
t
−
1
x_{t-1}
xt−1的均值与方差 去预测新状态的均值方差
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)
xt∼N(μ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=Atxt−1+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=Atxt−1+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=Atxt−1+Btut+εt
x
‾
t
∼
N
(
μ
‾
t
,
Σ
‾
t
)
\overline \boldsymbol x_t\sim N(\overline\boldsymbol \mu_t, \overline\boldsymbol\Sigma_t)
xt∼N(μt,Σt)
x
t
−
1
∼
N
(
μ
t
−
1
,
Σ
t
−
1
)
\boldsymbol x_{t-1}\sim N(\boldsymbol \mu_{t-1}, \boldsymbol\Sigma_{t-1})
xt−1∼N(μt−1,Σt−1)
u
t
\boldsymbol u_t
ut是常量
ε
t
∼
N
(
0
,
R
t
)
\boldsymbol \varepsilon_t\sim N(0, \boldsymbol R_t)
εt∼N(0,Rt)
而
x
t
−
1
\boldsymbol x_{t-1}
xt−1与
ε
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μt−1+Btut+0=AtΣt−1AtT+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(xt∣u1:t,z1:t−1)=∫P(xt∣ut,xt−1)bel(xt−1)dxt−1而右边的积分中,
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(xt∣ut,xt−1)∼N(Atxt−1+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(xt−1)∼N(μt−1,Σt−1)
写出它们俩的概率密度,相乘,然后积分,直接求出
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(zt∣xt)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(zt∣xt)∼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)=η′e−Jt其中
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(zt−Ctxt)TQt−1(zt−Ctxt)+21(xt−μt)TΣt−1(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}
∂xt∂Jt=−CtTQt−1(zt−Ctxt)+Σt−1(xt−μt)∂xt2∂2Jt=CtTQt−1Ct+Σt−1
相关公式:
1.
∂
A
x
∂
x
=
A
T
\displaystyle\frac{\partial\boldsymbol A\boldsymbol x}{\partial\boldsymbol x}=\boldsymbol A^\mathrm T \\ ~
∂x∂Ax=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
∂x∂xTAx=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.
⎩⎨⎧CtTQt−1(zt−Ctμt)=Σt−1(μt−μt)Σt−1=CtTQt−1Ct+Σt−1整理得①
{
μ
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+ΣtCtTQt−1(zt−Ctμt)Σt−1=CtTQt−1Ct+Σt−1定义
Σ
t
C
t
T
Q
t
−
1
=
K
t
\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}=\boldsymbol K_t
ΣtCtTQt−1=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(zt−Ctμt)Σt=(I−KtCt)Σ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}
CtTQt−1(zt−Ctμt)CtTQt−1zt−CtTQt−1CtμtCtTQt−1zt+Σt−1μtCtTQt−1zt+Σt−1μtΣtCtTQt−1zt+ΣtΣt−1μtKtzt+ΣtΣt−1μtKtzt+(ΣtΣt−1−I)μtKtzt+(ΣtΣt−1−ΣtΣt−1)μtKtzt−Σt(Σt−1−Σt−1)μtKtzt−ΣtCtTQt−1CtμtKtzt−KtCtμtμt−μt=Σt−1(μt−μt)=Σt−1μt−Σt−1μt=Σt−1μt+CtTQt−1Ctμt=Σt−1μt=μt=μt=μt−μt=μt−μt=μt−μt=μt−μt=μt−μt=Kt(zt−Ctμ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=ΣtCtTQt−1
=
Σ
t
=\boldsymbol \Sigma_t
=Σt
C
t
T
Q
t
−
1
\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}
CtTQt−1
(
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}
CtTQt−1
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}}
CtTQt−1
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(CtTQt−1CtΣtCtT+CtT)(CtΣtCtT+Qt)−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
=\boldsymbol \Sigma_t(\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} \boldsymbol C_t\overline\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T+\underline{\overline\boldsymbol \Sigma_t^{-1}\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}
=Σt(CtTQt−1CtΣtCtT+Σt−1ΣtCtT)(CtΣtCtT+Qt)−1
=
Σ
t
=\boldsymbol \Sigma_t
=Σt
(
C
t
T
Q
t
−
1
C
t
+
Σ
‾
t
−
1
)
(\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} \boldsymbol C_t+\overline\boldsymbol \Sigma_t^{-1})
(CtTQt−1Ct+Σt−1)
Σ
‾
t
C
t
T
(
C
t
Σ
‾
t
C
t
T
+
Q
t
)
−
1
\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}
ΣtCtT(CtΣtCtT+Qt)−1
=
Σ
t
=\boldsymbol \Sigma_t
=Σt
Σ
t
−
1
\boldsymbol \Sigma_t^{-1}
Σt−1
Σ
‾
t
C
t
T
(
C
t
Σ
‾
t
C
t
T
+
Q
t
)
−
1
\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}
ΣtCtT(CtΣtCtT+Qt)−1
=
Σ
‾
t
C
t
T
(
C
t
Σ
‾
t
C
t
T
+
Q
t
)
−
1
=\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}
=ΣtCtT(CtΣtCtT+Qt)−1
再来推
Σ
t
\boldsymbol \Sigma_t
Σt
K
t
=
Σ
t
C
t
T
Q
t
−
1
K
t
C
t
=
Σ
t
C
t
T
Q
t
−
1
C
t
K
t
C
t
=
Σ
t
C
t
T
Q
t
−
1
C
t
+
Σ
t
Σ
‾
t
−
1
−
Σ
t
Σ
‾
t
−
1
K
t
C
t
=
Σ
t
(
C
t
T
Q
t
−
1
C
t
+
Σ
‾
t
−
1
)
−
Σ
t
Σ
‾
t
−
1
K
t
C
t
=
Σ
t
Σ
t
−
1
−
Σ
t
Σ
‾
t
−
1
K
t
C
t
=
I
−
Σ
t
Σ
‾
t
−
1
Σ
t
=
(
I
−
K
t
C
t
)
Σ
‾
t
\begin{aligned} \boldsymbol K_t&=\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1} \\ \boldsymbol K_t\boldsymbol C_t&=\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t \\ \boldsymbol K_t\boldsymbol C_t&=\boldsymbol \Sigma_t\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t + \boldsymbol \Sigma_t \overline\boldsymbol \Sigma_t^{-1}-\boldsymbol \Sigma_t \overline\boldsymbol \Sigma_t^{-1} \\ \boldsymbol K_t\boldsymbol C_t&=\boldsymbol \Sigma_t (\boldsymbol C_t^\mathrm T\boldsymbol Q_t^{-1}\boldsymbol C_t + \overline\boldsymbol \Sigma_t^{-1})-\boldsymbol \Sigma_t \overline\boldsymbol \Sigma_t^{-1} \\ \boldsymbol K_t\boldsymbol C_t&=\boldsymbol \Sigma_t\boldsymbol\Sigma_t^{-1}-\boldsymbol \Sigma_t \overline\boldsymbol \Sigma_t^{-1} \\ \boldsymbol K_t\boldsymbol C_t&=\boldsymbol I-\boldsymbol \Sigma_t \overline\boldsymbol \Sigma_t^{-1} \\ \boldsymbol \Sigma_t&=(\boldsymbol I-\boldsymbol K_t\boldsymbol C_t)\overline\boldsymbol \Sigma_t \\ \end{aligned}
KtKtCtKtCtKtCtKtCtKtCtΣt=ΣtCtTQt−1=ΣtCtTQt−1Ct=ΣtCtTQt−1Ct+ΣtΣt−1−ΣtΣt−1=Σt(CtTQt−1Ct+Σt−1)−ΣtΣt−1=ΣtΣt−1−ΣtΣt−1=I−ΣtΣt−1=(I−KtCt)Σt
在以上所有的推导中要注意
C
t
\boldsymbol C_t
Ct不一定可逆,所以不能去随便乘
C
t
−
1
\boldsymbol C_t^{-1}
Ct−1
至此,卡尔曼滤波推导完成。
4. 扩展卡尔曼滤波
(正在看… 后面有时间再写)
参考资料
Sebastian Thrun, Wolfram Burgard, Dieter Fox. Probabilistic Robotics [M].