感慨
虽然本人只是个小小码农,主攻java后台开发,但吾以为,学习技术,应当不分领域。
本文首先假设读者像我当初一样,是个对卡尔曼滤波望而生畏的小白。
参考链接
https://zhuanlan.zhihu.com/p/39912633
该链接是本人觉得描述得比较好理解的一篇文章了,从基础一步一步推进,推导出卡尔曼滤波的过程。
https://zh.wikipedia.org/wiki/卡尔曼滤波
该链接有很详尽的说明,不得不提,维基百科是个学习的好地方
公式
时间更新方程
x
^
k
ˉ
=
A
x
^
k
−
1
+
B
u
k
−
1
①
{\hat{x}}_{\bar{k}}=A{\hat{x}}_{{k-1}}+Bu_{k-1} ~~~~~~~~~~~~~~~ ①
x^kˉ=Ax^k−1+Buk−1 ①
P
k
ˉ
=
A
P
k
−
1
A
T
+
Q
②
P_{\bar{k}}=AP_{k-1}A^T+Q ~~~~~~~~~~~~~~~ ②
Pkˉ=APk−1AT+Q ②
状态更新方程
K
k
=
P
k
ˉ
H
T
H
P
k
ˉ
H
T
+
R
③
K_k=\frac {P_{\bar{k}}H^T} {HP_{\bar{k}}H^T+R}~~~~~~~~~~~~~~~ ③
Kk=HPkˉHT+RPkˉHT ③
x
^
k
=
x
^
k
ˉ
+
K
k
(
z
k
−
H
x
^
k
ˉ
)
④
{\hat{x}}_{k}={\hat{x}}_{\bar{k}}+K_k(z_k-H{\hat{x}}_{\bar{k}})~~~~~~~~~~~~~~~ ④
x^k=x^kˉ+Kk(zk−Hx^kˉ) ④
P
k
=
(
I
−
K
k
H
)
P
k
ˉ
⑤
P_k=(I-K_kH)P_{\bar{k}}~~~~~~~~~~~~~~~ ⑤
Pk=(I−KkH)Pkˉ ⑤
时间更新方程解读
为何要称它为时间更新方程,主要在于等式左边都是当前值,而右边变量则都是上一时刻值。故方程是随着时间在推进的。
方程的目标在于,预测一个当前值以及得到该预测值的误差。假设我们再知道测量值以及测量值的误差,那么就可以按照
z
=
a
x
+
(
1
−
a
)
y
z=ax+(1-a)y
z=ax+(1−a)y 进行融合,即
结
果
=
预
测
值
占
一
定
比
例
+
测
量
值
占
一
定
比
例
结果=预测值占一定比例+测量值占一定比例
结果=预测值占一定比例+测量值占一定比例
决定比例大小的因素就是误差,误差小更可信,占比会更大。
①式解读
本式子是一个预测模型的表示,通俗地翻译公式为:
当
前
预
测
值
=
上
一
个
最
优
估
计
值
+
外
力
作
用
当前预测值=上一个最优估计值+外力作用
当前预测值=上一个最优估计值+外力作用
其中的A和B矩阵用于转换关系的表示,并不影响理解。
一般来讲,有没有外力都无所谓的,甚至你采用的预测模型不够准确,也是可以应用卡尔曼滤波的,只要你的预测值不要与实际差个十万八千里即可
②式解读
翻译公式为:
先
验
估
计
协
方
差
=
上
一
后
验
估
计
协
方
差
+
噪
声
协
方
差
先验估计协方差=上一后验估计协方差+噪声协方差
先验估计协方差=上一后验估计协方差+噪声协方差
首先搞清楚何为先验,何为后验。
举一个先验的例子,两个骰子,和为5的概率。共36种可能性,其中和为8有1+4,2+3,3+2,4+1四种,故概率为1/9。
举一个后验的例子,两个骰子,现在摇出5点,求一个是1另一个是4的概率。由上面列举可见,概率为1/2。
主要是①式两边求协方差得到的,其中使用到如下公式
C
o
v
(
A
x
)
=
A
C
o
v
(
x
)
A
T
Cov(Ax)=ACov(x)A^T
Cov(Ax)=ACov(x)AT
状态更新方程解读
状态更新方程两边都是k量,目标是融合出一个最优估计值,同时求出其协方差。
③式解读
翻译公式为:
卡
尔
曼
增
益
=
先
验
估
计
协
方
差
+
量
噪
声
协
方
差
卡尔曼增益=先验估计协方差+量噪声协方差
卡尔曼增益=先验估计协方差+量噪声协方差
卡尔曼增益指明了预测值和测量值之间的以何种比例进行结果融合,这涉及两个高斯分布之间的融合,参考链接中有详细说明
④式解读(目标)
翻译公式为:
最
优
估
计
值
=
预
测
值
+
一
定
比
例
的
(
测
量
值
−
当
前
预
测
值
)
最优估计值=预测值+一定比例的(测量值-当前预测值)
最优估计值=预测值+一定比例的(测量值−当前预测值)
乍一看,好像哪里不对,加号右边的预测值比左边的预测值多了一个
H
k
H_k
Hk,原因其实是最开始都带了
H
k
H_k
Hk,从而两边都消掉了
H
k
H_k
Hk,而加号右边的预测值携带的
H
k
H_k
Hk无法被消掉,从而在公式上显得比较突兀,实际表达的意思和
z
=
a
x
+
(
1
−
a
)
y
z=ax+(1-a)y
z=ax+(1−a)y是一致的。
本式子也是我们最关心的一个式子,该式子对外输出了最优估计值,而其他的式子,对外并不输出外部关心的信息。
⑤式解读
没得翻译,是通过对④式两边求协方差得来的。
总结
讲解卡尔曼滤波的文章有很多,小弟也只是初学,表达一下个人粗浅看法,纯属笔记。