卡尔曼滤波器
在B站看了一个卡尔曼滤波器的推导视频,感觉很详细,做一个笔记。
状态和测量方程
X k = A X k − 1 + B u k − 1 + w k − 1 Z k = H X k + v k (1) \begin{aligned} X_k &= AX_{k-1} + Bu_{k-1} + w_{k-1} \\ Z_k &= HX_{k} + v_{k} \end{aligned}\tag{1} XkZk=AXk−1+Buk−1+wk−1=HXk+vk(1)
式(1)中 A A A, B B B和 H H H分别是状态矩阵、控制矩阵和测量矩阵, X k X_k Xk, u k u_k uk, w k w_k wk, Z k Z_k Zk 和 v k v_k vk分别是状态变量,控制变量,过程噪声,测量变量和测量噪声,其中测量噪声和过程噪声是不确定的,一般假设满足正态分布, w w w满足分布 p ( w ) ∼ ( 0 , Q ) p(w)\sim(0,Q) p(w)∼(0,Q), v v v满足分布 p ( v ) ∼ ( 0 , R ) p(v)\sim(0,R) p(v)∼(0,R)。
过程噪声和测量噪声实际应用时是不知道的,忽略掉噪声可以得到先验估计和测量结果,分别为:
X
k
~
=
A
X
k
−
1
^
+
B
u
k
−
1
X
k
m
e
a
~
=
H
−
1
Z
k
(2)
\begin{aligned} \widetilde{X_k} &= A\widehat{X_{k-1}} + Bu_{k-1}\\ \widetilde{X_{k_{mea}}} &= H^{-1} Z_k \end{aligned}\tag{2}
Xk
Xkmea
=AXk−1
+Buk−1=H−1Zk(2)
卡尔曼的作用就是结合先验
X
k
~
\widetilde{X_k}
Xk
和测量
X
k
m
e
a
~
\widetilde{X_{k_{mea}}}
Xkmea
结果得到比较准确的估计值
X
k
^
\widehat{X_{k}}
Xk
,即:
X
k
^
=
X
k
~
+
G
k
(
H
−
1
Z
k
−
X
k
~
)
(3)
\widehat{X_{k}} = \widetilde{X_k} + G_{k}(H^{-1} Z_k - \widetilde{X_k} )\tag{3}
Xk
=Xk
+Gk(H−1Zk−Xk
)(3)
为了简化计算,令
K
k
=
G
k
H
K_k = G_{k}H
Kk=GkH,则,
X
k
^
=
X
k
~
+
K
k
(
Z
k
−
H
X
k
~
)
(4)
\widehat{X_{k}} = \widetilde{X_k} + K_{k}(Z_k - H\widetilde{X_k} )\tag{4}
Xk
=Xk
+Kk(Zk−HXk
)(4)
其中 K k ∈ [ 0 , H − 1 ] K_k \in [0,H^{-1}] Kk∈[0,H−1],当 K k = 0 K_k=0 Kk=0时,完全相信根据状态方程估计的先验结果,当 K k = H − 1 K_k=H^{-1} Kk=H−1时,完全相信测量结果,取到两者之间时,则融合两个结果。
卡尔曼增益推导
从卡尔曼增益融合两个结果后使得误差最小入手,估计卡尔曼增益,定义误差为,
e
k
=
X
k
−
X
k
^
(5)
e_{k} = X_{k} - \widehat{X_{k}} \tag{5}
ek=Xk−Xk
(5)
假设
e
k
e_k
ek满足分布
p
(
e
k
)
∼
(
0
,
P
)
p(e_k)\sim(0,P)
p(ek)∼(0,P),协方差P定义为,
P
=
E
{
e
k
e
k
T
}
(6)
P=E\{e_ke_k^T\} \tag{6}
P=E{ekekT}(6)
将式(1)、式(2)、式(4)和式(5)带入后得,
e k = X k − X k ^ = X k − ( X k ~ + K k ( Z k − H X k ~ ) ) = X k − ( X k ~ + K k ( H X k + v k − H X k ~ ) ) = ( I − K k H ) ( X k − X k ~ ) + K k v k = ( I − K k H ) e k ~ + K k v k (7) \begin{aligned} e_{k} &= X_{k} - \widehat{X_{k}} \\ &= X_{k} - ( \widetilde{X_k} + K_{k}(Z_k - H\widetilde{X_k} )) \\ &= X_{k} - ( \widetilde{X_k} + K_{k}(HX_{k} + v_{k} - H\widetilde{X_k} ))\\ &= (I - K_kH)(X_{k} - \widetilde{X_k}) + K_kv_k \\ &= (I - K_kH)\widetilde{e_k} + K_kv_k\end{aligned} \tag{7} ek=Xk−Xk =Xk−(Xk +Kk(Zk−HXk ))=Xk−(Xk +Kk(HXk+vk−HXk ))=(I−KkH)(Xk−Xk )+Kkvk=(I−KkH)ek +Kkvk(7)
其中
e
k
~
\widetilde{e_k}
ek
代表先验误差,
e
k
~
=
X
k
−
X
k
~
(8)
\widetilde{e_k} = X_{k} - \widetilde{X_{k}} \tag{8}
ek
=Xk−Xk
(8)
将式(7)带入式(6)得,
P
k
=
E
{
e
k
e
k
T
}
=
E
{
[
(
I
−
K
k
H
)
e
k
~
+
K
k
v
k
]
[
(
I
−
K
k
H
)
e
k
~
+
K
k
v
k
]
T
}
=
E
{
(
I
−
K
k
H
)
e
k
~
e
k
~
T
(
I
−
K
k
H
)
T
+
(
I
−
K
k
H
)
e
k
~
v
k
T
K
k
T
+
K
k
v
k
e
k
~
T
(
I
−
K
k
H
)
T
+
K
k
v
k
v
k
T
K
k
T
}
=
(
I
−
K
k
H
)
E
{
e
k
~
e
k
~
T
}
(
I
−
K
k
H
)
T
+
K
k
E
{
v
k
v
k
T
}
K
k
T
=
(
I
−
K
k
H
)
P
k
~
(
I
−
K
k
H
)
T
+
K
k
R
K
k
T
=
(
P
k
~
−
K
k
H
P
k
~
)
(
I
−
K
k
H
)
T
+
K
k
R
K
k
T
=
P
k
~
−
K
k
H
P
k
~
−
P
k
~
H
T
K
k
T
+
K
k
H
P
k
~
H
T
K
k
T
+
K
k
R
K
k
T
(9)
\begin{aligned}P_k &=E\{e_ke_k^T\} \\ &=E\{[(I - K_kH)\widetilde{e_k} + K_kv_k][(I - K_kH)\widetilde{e_k} + K_kv_k]^T\} \\ &= E\{(I - K_kH)\widetilde{e_k}\widetilde{e_k}^T(I - K_kH)^T + (I - K_kH)\widetilde{e_k} v_k^TK_k^T + K_kv_k\widetilde{e_k}^T(I - K_kH)^T + K_kv_kv_k^TK_k^T \} \\ &=(I - K_kH) E\{\widetilde{e_k}\widetilde{e_k}^T \} (I - K_kH)^T + K_kE\{v_kv_k^T\}K_k^T \\ &=(I - K_kH)\widetilde{P_k}(I - K_kH)^T + K_kRK_k^T \\ &=(\widetilde{P_k} - K_kH\widetilde{P_k})(I - K_kH)^T + K_kRK_k^T \\ &=\widetilde{P_k} - K_kH\widetilde{P_k} - \widetilde{P_k}H^TK_k^T + K_kH\widetilde{P_k}H^TK_k^T + K_kRK_k^T \end{aligned} \tag{9}
Pk=E{ekekT}=E{[(I−KkH)ek
+Kkvk][(I−KkH)ek
+Kkvk]T}=E{(I−KkH)ek
ek
T(I−KkH)T+(I−KkH)ek
vkTKkT+Kkvkek
T(I−KkH)T+KkvkvkTKkT}=(I−KkH)E{ek
ek
T}(I−KkH)T+KkE{vkvkT}KkT=(I−KkH)Pk
(I−KkH)T+KkRKkT=(Pk
−KkHPk
)(I−KkH)T+KkRKkT=Pk
−KkHPk
−Pk
HTKkT+KkHPk
HTKkT+KkRKkT(9)
上式化简时利用了
e
k
~
\widetilde{e_k}
ek
和
v
k
v_k
vk不相关的期望为0的性质,其中
P
k
~
\widetilde{P_k}
Pk
代表先验误差协方差,为了使误差方差最小,即最小化
P
k
P_k
Pk的迹
t
r
(
P
k
)
tr(P_k)
tr(Pk),求导得,
中
∂
t
r
(
P
k
)
∂
K
k
=
−
2
(
H
P
k
~
)
T
+
2
K
k
H
P
k
~
H
T
+
2
K
k
R
(10)
\frac{\partial tr(P_k)}{\partial K_k} = -2(H\widetilde{P_k})^T + 2K_kH\widetilde{P_k}H^T + 2K_kR \tag{10}
∂Kk∂tr(Pk)=−2(HPk
)T+2KkHPk
HT+2KkR(10)
令导数等于0,得到
K
k
=
P
k
~
H
T
H
P
k
~
H
T
+
R
(11)
K_k=\frac{\widetilde{P_k}H^T}{H\widetilde{P_k}H^T + R} \tag{11}
Kk=HPk
HT+RPk
HT(11)
其中 P k ~ \widetilde{P_k} Pk 代表先验误差估计,且 P k ~ = P k ~ T \widetilde{P_k}=\widetilde{P_k}^T Pk =Pk T,定义为:
P k ~ = E { e k ~ e k ~ T } (12) \widetilde{P_k} = E\{\widetilde{e_k}\widetilde{e_k}^T\} \tag{12} Pk =E{ek ek T}(12)
观察式(11),可以发现当测量噪声的协方差 R R R趋近于无穷大时,卡尔曼增益趋近于0,结合式(4),可以发现估计的结果等于(基于模型的)先验结果,测量噪声大时,相信模型的先验结果;当测量噪声的协方差 R R R趋近零时,卡尔曼增益趋近于 H − 1 H^{-1} H−1,估计的结果等于测量结果,测量噪声小时更相信于测量结果。
误差矩阵推导
将式(1)、式(2)、式(8)带入式(12)得,
P
k
~
=
E
{
e
k
~
e
k
~
T
}
=
E
{
e
k
~
e
k
~
T
}
=
E
{
(
(
A
X
k
−
1
+
B
u
k
−
1
+
w
k
−
1
)
−
(
A
X
k
−
1
^
+
B
u
k
−
1
)
)
e
k
~
T
}
=
E
{
(
A
e
k
−
1
^
+
w
k
−
1
)
(
A
e
k
−
1
^
+
w
k
−
1
)
T
}
=
E
{
A
e
k
−
1
^
e
k
−
1
^
T
A
}
+
E
{
A
e
k
−
1
^
w
k
−
1
T
}
+
E
{
w
k
−
1
T
A
e
k
−
1
^
T
}
+
E
{
w
k
−
1
w
k
−
1
T
}
=
A
P
k
−
1
^
A
+
Q
(13)
\begin{aligned}\widetilde{P_k} &= E\{\widetilde{e_k}\widetilde{e_k}^T\} \\ &= E\{\widetilde{e_k}\widetilde{e_k}^T\} \\ &= E\{((AX_{k-1} + Bu_{k-1} + w_{k-1})-(A\widehat{X_{k-1}} + Bu_{k-1}))\widetilde{e_k}^T \} \\ &=E\{ (A\widehat{e_{k-1}}+w_{k-1})(A\widehat{e_{k-1}}+w_{k-1})^T \} \\ &=E\{A\widehat{e_{k-1}}\widehat{e_{k-1}}^TA\} + E\{A\widehat{e_{k-1}}w_{k-1}^T\} + E\{w_{k-1}^TA\widehat{e_{k-1}}^T\} + E\{w_{k-1}w_{k-1}^T\} \\ &= A\widehat{P_{k-1}}A + Q \end{aligned} \tag{13}
Pk
=E{ek
ek
T}=E{ek
ek
T}=E{((AXk−1+Buk−1+wk−1)−(AXk−1
+Buk−1))ek
T}=E{(Aek−1
+wk−1)(Aek−1
+wk−1)T}=E{Aek−1
ek−1
TA}+E{Aek−1
wk−1T}+E{wk−1TAek−1
T}+E{wk−1wk−1T}=APk−1
A+Q(13)
上式中利用了
e
k
−
1
^
\widehat{e_{k-1}}
ek−1
和
w
k
−
1
w_{k-1}
wk−1不相关的期望为0的性质,观察式(1),其中
w
k
−
1
w_{k-1}
wk−1作用于
X
k
X_k
Xk,也就间接作用于
e
k
e_k
ek,而
e
k
−
1
^
\widehat{e_{k-1}}
ek−1
是上一帧的误差估计,因此两者不相关。
式(13)说明,先验误差估计可以从上一帧的误差估计推理得到,因此需要继续推导误差估计,将式(11)带入式(9)中可得,
P k = P k ~ − K k H P k ~ − P k ~ H T K k T + K k H P k ~ H T K k T + K k R K k T = P k ~ − K k H P k ~ − P k ~ H T K k T + K k ( H P k ~ H T + R ) K k T = P k ~ − K k H P k ~ − P k ~ H T K k T + P k ~ H T H P k ~ H T + R ( H P k ~ H T + R ) K k T = P k ~ − K k H P k ~ = ( I − K k H ) P k ~ (14) \begin{aligned}P_k &=\widetilde{P_k} - K_kH\widetilde{P_k} - \widetilde{P_k}H^TK_k^T + K_kH\widetilde{P_k}H^TK_k^T + K_kRK_k^T \\ &=\widetilde{P_k} - K_kH\widetilde{P_k} - \widetilde{P_k}H^TK_k^T + K_k(H\widetilde{P_k}H^T+R)K_k^T \\ &=\widetilde{P_k} - K_kH\widetilde{P_k} - \widetilde{P_k}H^TK_k^T + \frac{\widetilde{P_k}H^T}{H\widetilde{P_k}H^T + R} (H\widetilde{P_k}H^T+R)K_k^T \\ &=\widetilde{P_k} - K_kH\widetilde{P_k} \\ &=(I - K_kH)\widetilde{P_k} \end{aligned} \tag{14} Pk=Pk −KkHPk −Pk HTKkT+KkHPk HTKkT+KkRKkT=Pk −KkHPk −Pk HTKkT+Kk(HPk HT+R)KkT=Pk −KkHPk −Pk HTKkT+HPk HT+RPk HT(HPk HT+R)KkT=Pk −KkHPk =(I−KkH)Pk (14)
卡尔曼预测校正步骤
由于每一次的预测都依赖上一次的结果, P k ~ \widetilde{P_k} Pk 依赖于 P k − 1 ^ \widehat{P_{k-1}} Pk−1 , X k ~ \widetilde{X_k} Xk 依赖于 X k − 1 ^ \widehat{X_{k-1}} Xk−1 ,因此迭代前需要先设置初始值 X 0 ^ \widehat{X_{0}} X0 , P 0 ^ \widehat{P_{0}} P0 。
预测过程
-
先验更新:
X k ~ = A X k − 1 ^ + B u k − 1 \widetilde{X_k} = A\widehat{X_{k-1}} + Bu_{k-1} Xk =AXk−1 +Buk−1 -
先验误差矩阵更新:
P k ~ = A P k − 1 ^ A + Q \widetilde{P_k} = A\widehat{P_{k-1}}A + Q Pk =APk−1 A+Q
校正
-
计算卡尔曼增益
K k = P k ~ H T H P k ~ H T + R K_k=\frac{\widetilde{P_k}H^T}{H\widetilde{P_k}H^T + R} Kk=HPk HT+RPk HT -
后验估计
X k ^ = X k ~ + K k ( Z k − H X k ~ ) \widehat{X_{k}} = \widetilde{X_k} + K_{k}(Z_k - H\widetilde{X_k} ) Xk =Xk +Kk(Zk−HXk ) -
更新误差矩阵
P k ^ = ( I − K k H ) P k ~ \widehat{P_k} =(I - K_kH)\widetilde{P_k} Pk =(I−KkH)Pk
参考
张贤达. 矩阵分析与应用