卡尔曼滤波器
看十四讲以及课件没看懂,好多推导都是基于贝叶斯公式的那就更难以理解了。突然想到以前学控制的时候在B站看到过Up主DR_CAN的卡尔曼滤波器的推导,感觉比较清晰,于是听完之后记录一下推导过程。
状态空间方程:
{
x
k
=
A
x
k
−
1
+
B
u
k
−
1
+
w
k
−
1
z
k
=
C
x
k
+
v
k
\begin{cases} x_k = Ax_{k-1} + Bu_{k-1} +w_{k-1}\\ z_k=Cx_k+v_k\\ \end{cases}
{xk=Axk−1+Buk−1+wk−1zk=Cxk+vk
其中:过程噪声
w
∼
N
(
0
,
R
)
w \sim N(0,R)
w∼N(0,R),测量噪声
v
∼
N
(
0
,
Q
)
v \sim N(0,Q)
v∼N(0,Q),R,Q为协方差矩阵
先验估计值
x
^
k
−
\hat{x}_k^{-}
x^k−:
x
^
k
−
=
A
x
^
k
−
1
+
B
u
k
−
1
\hat{x}_k^{-} = A\hat{x}_{k-1}+Bu_{k-1}
x^k−=Ax^k−1+Buk−1
测量结果
x
k
x_k
xk:
由
z
k
=
C
x
k
z_k = Cx_k
zk=Cxk
得:
x
^
k
m
e
a
=
C
−
1
z
k
\hat{x}_{k\;mea}=C^{-1}z_k
x^kmea=C−1zk
设后验结果
x
^
k
\hat{x}_k
x^k
x
^
k
=
x
^
k
−
+
G
(
C
−
1
z
k
−
x
^
k
−
)
\hat{x}_k=\hat{x}_k^{-}+G(C^{-1}z_k-\hat{x}_k^{-})
x^k=x^k−+G(C−1zk−x^k−)
分析上式:当G=0时,
x
^
k
=
x
^
k
−
\hat{x}_k=\hat{x}_k^{-}
x^k=x^k−;当G=1时,
x
^
k
=
C
−
1
z
k
\hat{x}_k=C^{-1}z_k
x^k=C−1zk。
若 G=KC,K为卡尔曼增益,得
x
^
k
=
x
^
k
−
+
K
(
z
k
−
C
x
^
k
−
)
\hat{x}_k=\hat{x}_k^{-}+K(z_k-C\hat{x}_k^{-})
x^k=x^k−+K(zk−Cx^k−)
现在的目标为寻找K,使得$\hat{x}_k
趋
近
于
趋近于
趋近于x_k$(即估计值趋近于真实值)
令误差 e k = x k − x ^ k e_k=x_k-\hat{x}_k ek=xk−x^k, e k ∼ N ( 0 , P ) e_k \sim N(0,P) ek∼N(0,P), P = E [ e e T ] P=E[ee^T] P=E[eeT]
若估计值与实际值差距越小,则误差的方差越小,因此目标转化为寻找K,使得P矩阵的迹最小。
P
=
E
[
e
e
T
]
=
E
[
(
x
k
−
x
^
k
)
(
x
k
−
x
^
k
)
T
]
P=E[ee^T]=E[(x_k-\hat{x}_k)(x_k-\hat{x}_k)^T]
P=E[eeT]=E[(xk−x^k)(xk−x^k)T]
x k − x ^ k = x k − ( x ^ k − + K ( z k − C x ^ k − ) ) = . . . = ( I − K C ) e k − − K v k x_k-\hat{x}_k=x_k-(\hat{x}_k^{-}+K(z_k-C\hat{x}_k^{-}))=...=(I-KC)e_k^--Kv_k xk−x^k=xk−(x^k−+K(zk−Cx^k−))=...=(I−KC)ek−−Kvk
所以
P
k
=
E
[
(
(
I
−
K
C
)
e
k
−
−
K
v
k
)
(
(
I
−
K
C
)
e
k
−
−
K
v
k
)
T
]
=
.
.
.
=
P
k
−
−
K
C
P
k
−
−
P
k
−
C
T
K
T
+
K
C
P
k
−
C
T
K
T
+
K
Q
K
T
P_k=E[((I-KC)e_k^--Kv_k)((I-KC)e_k^--Kv_k)^T]=...=P_k^- -KCP_k^--P_k^-C^TK^T+KCP_k^-C^TK^T+KQK^T
Pk=E[((I−KC)ek−−Kvk)((I−KC)ek−−Kvk)T]=...=Pk−−KCPk−−Pk−CTKT+KCPk−CTKT+KQKT
现在求迹:
t
r
(
P
k
)
=
t
r
(
P
k
−
)
−
2
t
r
(
K
C
P
k
−
)
+
t
r
(
K
C
P
k
−
C
T
K
T
)
+
t
r
(
K
Q
K
T
)
tr(P_k)=tr(P_k^-) -2tr(KCP_k^-)+tr(KCP_k^-C^TK^T)+tr(KQK^T)
tr(Pk)=tr(Pk−)−2tr(KCPk−)+tr(KCPk−CTKT)+tr(KQKT)
对迹求导:
d
t
r
(
P
k
)
d
K
=
0
\frac{d\;tr(P_k)}{dK}=0
dKdtr(Pk)=0
得到:
−
P
k
−
C
T
+
K
(
C
P
k
−
C
T
+
Q
)
=
0
-P_k^-C^T+K(CP_k^-C^T+Q)=0
−Pk−CT+K(CPk−CT+Q)=0
化简得:
K
=
P
k
−
C
T
(
C
P
k
−
C
T
+
Q
)
−
1
K=P_k^-C^T(CP_k^-C^T+Q)^{-1}
K=Pk−CT(CPk−CT+Q)−1
现在求
P
k
−
P_k^-
Pk−:
P
k
−
=
E
(
e
k
−
e
k
−
T
)
P_k^-=E(e_k^-e_k^{-\;T})
Pk−=E(ek−ek−T)
其中:
e
k
−
=
x
k
−
x
^
k
−
=
A
x
k
−
1
+
B
u
k
−
1
+
w
k
−
1
−
A
x
^
k
−
1
−
B
u
k
−
1
=
A
(
x
k
−
1
−
x
^
k
−
1
)
+
w
k
−
1
=
A
e
k
−
1
+
w
k
−
1
e_k^-=x_k-\hat{x}_k^-=Ax_{k-1} + Bu_{k-1} +w_{k-1}-A\hat{x}_{k-1}-Bu_{k-1}=A(x_{k-1}-\hat{x}_{k-1})+w_{k-1}=Ae_{k-1}+w_{k-1}
ek−=xk−x^k−=Axk−1+Buk−1+wk−1−Ax^k−1−Buk−1=A(xk−1−x^k−1)+wk−1=Aek−1+wk−1
所以:
P
k
−
=
E
(
e
k
−
e
k
−
T
)
=
.
.
.
=
A
P
^
k
−
1
A
T
+
R
P_k^-=E(e_k^-e_k^{-\;T})=...=A\hat{P}_{k-1}A^T +R
Pk−=E(ek−ek−T)=...=AP^k−1AT+R
总结卡尔曼滤波五大公式:
1.预测
先验:
x
^
k
−
=
A
x
^
k
−
1
+
B
u
k
−
1
\hat{x}_k^{-} = A\hat{x}_{k-1}+Bu_{k-1}
x^k−=Ax^k−1+Buk−1
先验误差协方差:
P
k
−
=
A
P
^
k
−
1
A
T
+
R
P_k^-=A\hat{P}_{k-1}A^T +R
Pk−=AP^k−1AT+R
2.校正
卡尔曼增益:
K
=
P
k
−
C
T
(
C
P
k
−
C
T
+
Q
)
−
1
K=P_k^-C^T(CP_k^-C^T+Q)^{-1}
K=Pk−CT(CPk−CT+Q)−1
后验估计:
x
^
k
=
x
^
k
−
+
K
(
z
k
−
C
x
^
k
−
)
\hat{x}_k=\hat{x}_k^{-}+K(z_k-C\hat{x}_k^{-})
x^k=x^k−+K(zk−Cx^k−)
更新误差协方差:
P
^
k
=
(
I
−
K
C
)
P
k
−
\hat{P}_k=(I-KC)P_k^-
P^k=(I−KC)Pk−