文章目录
卡尔曼滤波
背景
卡尔曼滤波作为一种状态最优估计的方法,其应用也越来越普遍,如在无人机、机器人等领域均得到了广泛应用。
对于Kalman Filter的理解,用过的都知道“黄金五条”公式,且通过“预测”与“更新”两个过程来对系统的状态进行最优估计,被广泛应用于估计问题中。
线性系统模型建立
对于一个线性系统来说,运动、观测模型如下
{
X
k
=
A
X
k
−
1
+
B
u
k
+
w
k
Z
k
=
H
X
k
+
n
k
\left\{ \begin{aligned} \bf{X}_{k} &= A\bf{X}_{k-1}+B\bf{u}_{k}+w_k \\ \bf{Z}_k & = H\bf{X}_k+n_k \end{aligned} \right.
{XkZk=AXk−1+Buk+wk=HXk+nk
其中:
A
A
A表示转移矩阵、
X
k
\bf{X}_k
Xk表示系统状态、
B
B
B表示控制矩阵\、
u
k
\bf{u}_k
uk表示输入,
w
k
w_k
wk表示输入高斯噪声,其均值为0,协方差矩阵为
P
P
P,
P
(
w
)
∈
N
(
0
,
P
)
P(w)\in N(0, P)
P(w)∈N(0,P)。
Z
k
\bf{Z}_k
Zk表示测量值、
H
H
H表示观测矩阵、
n
k
n_k
nk表示测量的噪声平均值为0,协方差为
R
R
R,
p
(
v
)
∈
N
(
0
,
R
)
p(v)\in N(0,R)
p(v)∈N(0,R)。
对于大多数系统来讲,并不是严格意义上的线性时变系统,或者是系统结构参数存在不确定性,这个不确定性用过程噪声和估计噪声来表征。总之,引入
w
k
、
n
k
w_k\text{、}n_k
wk、nk的主要目的是表征不确定性。
公式推导
对于状态估计算法来说,我们可以获得状态量的三个值:状态预测值(
x
ˉ
k
\bar{x}_k
xˉk)、最佳估计值(
x
~
k
\tilde{x}_k
x~k)以及真实值(
x
k
x_{k}
xk)。
预测值是系统先验估计值,真实值是系统的测量值,最佳估计值是系统后验最大估计值,它通过一个卡尔曼增益
K
K
K来调节预测值和真实值。
状态预测值为(黄金法则1):
x
ˉ
k
=
A
x
~
k
−
1
+
B
u
k
\bar{x}_k = A\tilde{x}_{k-1} + Bu_{k}
xˉk=Ax~k−1+Buk
从而得到更新方程(黄金法则2):
x
~
k
=
x
ˉ
k
+
K
(
Z
k
−
H
x
ˉ
k
)
;
\tilde{x}_{k} = \bar{x}_k + K(Z_k-H\bar{x}_k);
x~k=xˉk+K(Zk−Hxˉk);
我们将联立式(1)(3)得到:
x
~
k
=
x
ˉ
k
+
K
(
H
x
k
+
n
k
−
H
x
ˉ
k
)
\tilde{x}_k = \bar{x}_k + K(Hx_k+n_k-H\bar{x}_k)\\
x~k=xˉk+K(Hxk+nk−Hxˉk)
进一步得到:
x
~
k
=
x
ˉ
k
+
K
(
H
x
k
−
H
x
ˉ
k
)
+
K
n
k
\tilde{x}_k = \bar{x}_k + K(Hx_k-H\bar{x}_k)+Kn_k
x~k=xˉk+K(Hxk−Hxˉk)+Knk
经过变换可得:
x
k
−
x
~
k
=
x
k
−
x
ˉ
k
−
K
(
H
x
k
−
H
x
ˉ
k
)
−
K
n
k
x_k-\tilde{x}_k = x_k - \bar{x}_k - K(H{x}_k-H\bar{x}_k)-Kn_k
xk−x~k=xk−xˉk−K(Hxk−Hxˉk)−Knk
我们定义:
e
ˉ
k
=
x
k
−
x
ˉ
k
\bar{e}_k=x_k-\bar{x}_k
eˉk=xk−xˉk表示真值与估计值之间的误差(先验)
e
k
=
x
k
−
x
~
k
{e}_k=x_k-\tilde{x}_k
ek=xk−x~k表示真值与最优估计值之间的误差(后验)
P
ˉ
k
=
E
[
e
ˉ
k
e
ˉ
k
T
]
\bar{P}_k=E[\bar{e}_k\bar{e}_k^T]
Pˉk=E[eˉkeˉkT]表示真值与估计之间的协方差矩阵
P
k
=
E
[
e
k
e
k
T
]
{P}_k=E[{e}_k{e}_k^T]
Pk=E[ekekT]表示真值与估计之间的协方差矩阵
于是,式(6)转换为:
e
k
=
(
I
−
K
H
)
e
ˉ
k
−
K
n
k
e_k =(I-KH)\bar{e}_k-Kn_k
ek=(I−KH)eˉk−Knk
于是,可以得到后验最优协方差矩阵:
P
k
=
E
[
e
k
e
k
T
]
=
(
I
−
K
H
)
P
ˉ
k
(
I
−
K
H
)
T
+
K
R
K
T
P_k=E[e_ke_k^T]=(I-KH)\bar{P}_k(I-KH)^T+KRK^T
Pk=E[ekekT]=(I−KH)Pˉk(I−KH)T+KRKT
式(8)展开得到:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ P_k = \bar{P}_…
对于卡尔曼滤波来说,其目标是观测值与预测值之间的协方差最下,使得其接近真值:
J
=
arg
min
K
t
r
(
P
)
J = \arg\min_K tr(P)
J=argKmintr(P)
对于每一项
P
k
P_k
Pk来说,对
K
K
K求导:
∂
P
k
∂
K
=
−
2
P
ˉ
k
H
T
+
2
K
(
H
P
ˉ
k
H
T
+
R
)
=
0
\frac{\partial P_k}{\partial K}= -2\bar{P}_kH^T+2K(H\bar{P}_kH^T+R) = 0
∂K∂Pk=−2PˉkHT+2K(HPˉkHT+R)=0
得到黄金法则3更新卡尔曼滤波的增益:
K
=
P
ˉ
k
H
T
(
H
P
ˉ
k
H
T
+
R
)
−
1
K = \bar{P}_kH^T(H\bar{P}_kH^T+R)^{-1}
K=PˉkHT(HPˉkHT+R)−1
将式(11)带入式(8)中,得到黄金法则4更新后验最佳协方差:
P
k
=
(
I
−
K
H
)
P
ˉ
k
P_k = (I-KH)\bar{P}_k
Pk=(I−KH)Pˉk
可以通过这次状态递推得到下一阶段的先验估计值及先验误差值:
e
ˉ
k
+
1
=
x
k
+
1
−
x
ˉ
k
+
1
=
A
x
k
+
w
k
−
A
x
~
=
A
e
~
k
+
w
k
\begin{aligned} \bar{e} _{k+1} &= x_{k+1} - \bar{x}_{k+1} \\ &=Ax_k+w_k-A\tilde{x}\\&=A\tilde{e}_k+w_k \end{aligned}
eˉk+1=xk+1−xˉk+1=Axk+wk−Ax~=Ae~k+wk
然后可以更新下一次的先验协方差矩阵(黄金法则5):
P
ˉ
k
+
1
=
E
[
e
ˉ
k
e
ˉ
k
T
]
=
E
[
(
A
e
~
k
+
w
k
)
(
A
e
~
k
+
w
k
)
T
]
=
E
[
(
A
e
~
k
)
(
A
e
~
k
)
T
]
+
E
[
w
k
w
k
T
]
=
A
P
k
A
T
+
Q
\begin{aligned} \bar{P}_{k+1} &= E[\bar{e}_{k}\bar{e}_{k}^T]\\ &=E[(A\tilde{e}_{k}+w_{k})(A\tilde{e}_{k}+w_k)^T]\\ &=E[(A\tilde{e}_k)(A\tilde{e}_k)^T]+E[w_kw_k^T]\\ &=AP_kA^T+Q \end{aligned}
Pˉk+1=E[eˉkeˉkT]=E[(Ae~k+wk)(Ae~k+wk)T]=E[(Ae~k)(Ae~k)T]+E[wkwkT]=APkAT+Q
至此我们递推出卡尔曼滤波的黄金五法则!
总结
从推导过程,我们可以看出,卡尔曼滤波分为两个部分:
预测
预测的过程就是根据上次的最优状态估计量,去估计下次的状态,这个估计往往是一个先验值:
x
ˉ
k
=
A
x
~
k
−
1
+
B
u
k
\bar{x}_k = A\tilde{x}_{k-1}+Bu_k
xˉk=Ax~k−1+Buk
并且,我们同样可以根据上次估计的协方差估计本次协方差:
P
ˉ
k
=
A
P
k
−
1
A
T
+
Q
\bar{P}_k = A{P}_{k-1}A^T + Q
Pˉk=APk−1AT+Q
于是,我们就得到了关于先验的信息,接下来进行与观测值的加权过程(修正)
更新
首先,我们可以得到最新卡尔曼增益值:
K
k
=
P
ˉ
k
H
T
(
H
P
ˉ
k
H
T
+
R
)
−
1
K_k = \bar{P}_kH^T(H\bar{P}_kH^T+R)^{-1}
Kk=PˉkHT(HPˉkHT+R)−1
然后我们用卡尔曼滤波进行对估计值进行修正:
x
~
k
=
x
ˉ
k
+
K
k
(
z
k
−
H
x
ˉ
k
)
\tilde{x}_k = \bar{x}_k+K_k(z_k-H\bar{x}_k)
x~k=xˉk+Kk(zk−Hxˉk)
最后更新最优估计的协方差矩阵:
P
k
=
(
I
−
K
k
H
)
P
ˉ
k
P_k = (I -K_kH)\bar{P}_k
Pk=(I−KkH)Pˉk