背景知识
卡尔曼滤波是建立在贝叶斯滤波和高斯分布这两个前提上的,所以下面先大概讲一下这两者。
贝叶斯滤波
首先给出几个基本概念和公式
- 联合分布
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(x∣y)=p(X=x∣Y=y)
表示x在y已经发生的基础上发生的概率,设x、y相互独立(以后都是如此),则有
p ( x ∣ y ) = p ( x , y ) p ( y ) p(x|y)=\frac{p(x,y)}{p(y)} p(x∣y)=p(y)p(x,y) - 先验概率
可以被称作经验,当前数据读取前,系统估计出来的状态的概率分布 - 后验概率
在数据读取后(观测后),综合先验概率和观测概率得到的状态的概率分布 - 全概率定律
p ( x ) = ∑ y p ( x ∣ y ) p ( y ) ( 离 散 情 况 ) p(x)=\sum_{y}p(x|y)p(y)(离散情况) p(x)=y∑p(x∣y)p(y)(离散情况)
p ( x ) = ∫ p ( x ∣ y ) p ( y ) d y ( 连 续 情 况 ) p(x)=\int p(x|y)p(y)dy(连续情况) p(x)=∫p(x∣y)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(x∣y)=p(y)p(y∣x)p(x)=∑x′p(y∣x′)p(x′)p(y∣x)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(x∣y)=p(y)p(y∣x)p(x)=∫p(y∣x′)p(x′)dx′p(y∣x)p(x)(连续)
其中x被称作状态,y被称作数据, p ( x ) p(x) p(x)被称作先验概率, p ( y ∣ x ) p(y|x) p(y∣x)被称为“逆”条件概率,而 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(xt∣ut,xt−1)bel(xt−1)dxt−1(连续)2:bel(xt)=∑p(xt∣ut,xt−1)bel(xt−1)(离散)3:bel(xt)=ηp(zt∣xt)bel(xt)
其中:
- η \eta η是归一化系数,在计算的过程中因各种常数的提出而不断发生变化。
- x x x表示状态量
- z z z表示观测数据
- u u u表示里程计记录的运动数据
- b e l 、 b e l ‾ bel、\overline{bel} bel、bel代表置信值, b e l ( x t ) = p ( x t ∣ z t ) , bel(x_t)=p(x_t|z_t), bel(xt)=p(xt∣zt),即观测后得到的 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(xt∣ut,xt−1)表示状态转移概率,表示 x t − 1 、 u t x_{t-1}、u_t xt−1、ut确定的情况下, x t x_t xt的概率分布函数
- p ( z t ∣ x t ) p(z_t|x_t) p(zt∣xt)表观上表示 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(xt∣ut,xt−1)来表示 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(xt∣u1:t,x0:t−1,z1:t−1)
简单推导
预测
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(xt∣z1:t−1,u1:t)=∫p(xt∣xt−1,z1:t−1,u1:t)p(xt−1∣z1:t−1,u1:t)dxt−1=∫p(xt∣xt−1,ut)bel(xt−1)dxt−1
观测更新
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(xt∣z1:t,u1:t)=p(zt∣z1:t−1,u1:t)p(zt∣xt,z1:t−1,u1:t)p(xt∣z1:t−1,u1:t)=ηp(zt∣xt,z1:t−1,u1:t)p(xt∣z1:t−1,u1:t)=ηp(zt∣xt)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)−21e−21σ2(x−μ)2(x为标量)
其中
σ
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πΣ)−21e−21(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. {X1∼N(μ1,Σ1)X2∼N(μ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)Σ=Σ1−KΣ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=Atxt−1+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μt−1+Btut2:Σt=AtΣt−1AtT+Rt3:Kt=ΣtCtT(CtΣtCtT+Qt)−14:μt=μt+Kt(zt−Ctμt)5:Σt=(I−KtCt)Σ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(xt∣ut,xt−1)bel(xt−1)dxt−1
所以有
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)=η∫e−Ltdxt−1
其中
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(xt−Atxt−1−Btut)TRt−1(xt−Atxt−1−Btut)+21(xt−1−μt−1)TΣt−1−1(xt−1−μt−1)
L
t
L_t
Lt是
x
t
x_t
xt也是
x
t
−
1
x_{t-1}
xt−1的二次函数
为了避免积分运算,我们令
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(xt−1,xt)+Lt(xt)
提出一项不包含
x
t
−
1
x_{t-1}
xt−1的
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)=ηe−Lt(xt)∫e−Lt(xt−1,xt)dxt−1
下面把
L
t
(
x
t
−
1
,
x
t
)
L_t(x_{t-1},x_t)
Lt(xt−1,xt)构造成二次型(配方后)(个人理解是这样做不会再次提出含
x
t
x_t
xt的项)
接下来计算
L
t
L_t
Lt关于
x
t
−
1
x_{t-1}
xt−1的一二阶导数,得到
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(xt−1,xt)=21(xt−1−Ψ[AtTRt−1(xt−Btut)+Σt−1−1μt−1])TΨ−1(xt−1−Ψ[AtTRt−1(xt−Btut)+Σt−1−1μt−1])
又因为
∫
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πΨ)−21e−Lt(xt−1,xt)dxt−1=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}
∫e−Lt(xt−1,xt)dxt−1=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)=ηe−Lt(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)=Lt−Lt(xt−1,xt)=...(含xt−1项全部消去)=21(xt−Btut)TRt−1(xt−Btut)+21μt−1TΣt−1−1μt−1−21[AtTRt−1(xt−Btut)+Σt−1−1μt−1]T(AtTRt−1At+Σt−1−1)[AtTRt−1(xt−Btut)+Σt−1−1μt−1]
尽管这不是关于
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}
∂xt∂Lt(xt)=Rt−1(xt−Btut)−Rt−1At(AtTRt−1At+Σt−1−1)−1[AtTRt−1(xt−Btut)+Σt−1−1μt−1]=[Rt−1−Rt−1At(AtTRt−1At+Σt−1−1)−1AtTRt−1](xt−Btut)−Rt−1At(AtTRt−1At+Σt−1−1)−1Σt−1−1μt−1
由谢尔曼莫里森公式(证明打起来太慢了,提示:可以通过
[
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}
Rt−1−Rt−1At(AtTRt−1At+Σt−1−1)−1AtTRt−1=(Rt+AtΣt−1AtT)−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}
∂xt∂Lt(xt)=(Rt+AtΣt−1AtT)−1(xt−Btut)−Rt−1At(AtTRt−1At+Σt−1−1)−1Σt−1−1μt−1=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Σt−1AtT)Rt−1At(AtTRt−1At+Σt−1−1)−1Σt−1−1μt−1=Btut+At(I+Σt−1AtTRt−1At)(I+Σt−1AtTRt−1At)−1μt−1=Btut+Atμt−1
那么
μ
‾
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
Σ
‾
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=[∂xt2∂2Lt(xt)]−1=(AtΣt−1AtT+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(zt∣xt)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
)
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(zt−Ctxt)TQt−1(zt−Ctxt)+21(xt−μt)TΣt−1(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=(CTQt−1Ct+Σt−1)−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)
CtTQt−1(zt−Ctμt)=Σt−1(μ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}
左边=CtTQt−1(zt−Ctμt+Ctμt−Ctμt)=CtTQt−1(zt−Ctμt)−CtTQt−1Ct(μ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)
CtTQt−1(zt−Ctμt)=Σt−1(μt−μt)ΣtCtTQt−1(zt−Ctμt)=(μt−μt)
令
K
=
Σ
t
C
t
T
Q
t
−
1
K=\Sigma_tC_t^TQ_t^{-1}
K=ΣtCtTQt−1,称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(zt−Ctμ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=ΣtCtTQt−1=ΣtCtTQt−1(CtΣtCtT+Qt)(CtΣtCtT+Qt)−1=Σt(CtTQt−1CtΣtCtT+CtTQt−1Qt)(CtΣtCtT+Qt)−1=Σt(CtTQt−1CtΣtCtT+CtT)(CtΣtCtT+Qt)−1=Σt(CtTQt−1CtΣtCtT+Σt−1ΣtCtT)(CtΣtCtT+Qt)−1=Σt(CtTQt−1Ct+Σt−1)Σ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=(CTQt−1Ct+Σt−1)−1=Σt−ΣtCtT(Qt+CtΣtCtT)−1CtΣt=[(I−KtCt)]Σ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,xt−1)+ε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=∂xt−1∂g(ut,xt−1),xt−1=μt−1Ht=∂xt∂h(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,xt−1)=g(ut,μt−1)+Gt(xt−1−μt−1)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,μt−1)2:Σt=GtΣt−1GtT+Rt3:Kt=ΣtHtT(HtΣtHtT+Qt)−14:μt=μt+Kt(zt−h(μt))5:Σt=(I−KtHt)Σt