卡尔曼滤波器:6.扩展卡尔曼滤波器
卡尔曼滤波器是线性系统下最优的滤波器
这部分呢,讲一下,非线性环境下 扩展卡尔曼滤波器
对于非线性环境下的处理呢 有很多种处理方法,这部分就是讲最基础的方法,扩展卡尔曼滤波器的方式
非线性模型:
KaTeX parse error: No such environment: flalign* at position 8: \begin{̲f̲l̲a̲l̲i̲g̲n̲*̲}̲ &x_k=f(x_{k-1}…
正太分布分随机变量通过非线性系统后就不再是正态的了
如果我们还想向这个系统使用卡尔曼滤波的话,就是要对该系统实现线性化
线性化 linerization
线性化会利用到泰勒展开(taylor series)
f
(
x
)
=
f
(
x
0
)
+
δ
f
δ
x
(
x
−
x
0
)
f(x)=f(x_0)+\frac{\delta f}{\delta x}(x - x_0)
f(x)=f(x0)+δxδf(x−x0)
对于高纬度的来讲,就要用到雅可比矩阵(在非线性系统中有很详细的讲解)
最好的线性化的点 真实值 但是系统有误差,无法在真实点线性化
估计方程线性化
f ( x k ) f(x_k) f(xk)在 x ^ k − 1 \hat{x}_{k-1} x^k−1附近线性化即k-1时刻的后验估计
因此线性化模型可以变成这样:
x
k
=
f
(
x
^
k
−
1
,
μ
k
−
1
,
ω
k
−
1
)
+
A
(
x
k
−
x
^
k
−
1
)
+
ω
ω
k
−
1
x_k=f(\hat{x}_{k-1}, \mu_{k-1}, \omega_{k-1})+A(x_k-\hat{x}_{k-1})+\omega_{\omega_{k-1}}\\
xk=f(x^k−1,μk−1,ωk−1)+A(xk−x^k−1)+ωωk−1
误差为0,
f ( x ^ k − 1 , μ k − 1 , 0 ) = x ~ k f(\hat{x}_{k-1}, \mu_{k-1}, 0) = \widetilde{x}_k f(x^k−1,μk−1,0)=x k
A是雅可比矩阵
KaTeX parse error: No such environment: flalign* at position 8: \begin{̲f̲l̲a̲l̲i̲g̲n̲*̲}̲ &A=\frac{\delt…
然后把
x
^
k
−
1
,
μ
k
−
1
\hat{x}_{k-1}, \mu_{k-1}
x^k−1,μk−1代入进去就可以了
为了方便理解,举个栗子:(二维系统)
x
1
=
x
1
+
s
i
n
(
x
2
)
=
f
1
x
2
=
x
1
2
=
f
2
x_1=x_1+sin(x_2) = f_1\\ x_2=x_1^2=f_2
x1=x1+sin(x2)=f1x2=x12=f2
$$
\begin{align}
A&=\frac{\delta{f}}{\delta{x}}\
&=\left[\matrix{\frac{\delta{f_1}}{\delta{x_1}}&\frac{\delta{f_1}}{\delta{x_2}}\
\frac{\delta{f_2}}{\delta{x_1}}&\frac{\delta{f_2}}{\delta{x_2}}}\right]\
&=\left[\matrix{1&cos(x_2)\2x_1&0}\right]{|\hat{x}{1,k-1}, \hat{x}{2,k-1}}\
&=\left[\matrix{1&cos(\hat{x}{2,k-1})\2\hat{x}_{1,k-1}&0}\right]
\end{align}
$$
这样就得到了一个A矩阵在K时刻的样子
因为A矩阵在随着k的变换而变化,因此我们每一个时刻K矩阵都在变化中每次都需要对该矩阵进行求解
KaTeX parse error: Undefined control sequence: \matrix at position 12: A_k=\left[\̲m̲a̲t̲r̲i̲x̲{1&cos(\hat{x}_…
同样的可以求解出来
ω k = δ f δ ω \omega_k = \frac{\delta{f}}{\delta{\omega}} ωk=δωδf
然后把 x ^ k − 1 , μ k − 1 \hat{x}_{k-1}, \mu_{k-1} x^k−1,μk−1代入进去就可以了
测量方程线性化
z
k
z_k
zk在
x
~
k
\widetilde{x}_k
x
k线性化
z
k
=
h
(
x
~
k
,
ν
k
)
+
H
(
x
k
−
x
~
k
)
+
ν
ν
k
z_k=h(\widetilde{x}_k,\nu_k)+H(x_k-\widetilde{x}_k)+\nu_{\nu_k}
zk=h(x
k,νk)+H(xk−x
k)+ννk
h
(
x
~
k
−
1
,
0
)
=
z
~
k
h(\widetilde{x}_{k-1}, 0) = \widetilde{z}_k
h(x
k−1,0)=z
k
H = δ h δ x ∣ x ~ k H = \frac{\delta{h}}{\delta{x}}_{|\widetilde{x}_k} H=δxδh∣x k
ν = δ h δ ν ∣ x ~ k \nu=\frac{\delta{h}}{\delta{\nu}}_{|\widetilde{x}_k} ν=δνδh∣x k
综合
x k = x ~ k + A ( x k − 1 − x ^ k − 1 ) + ω ω k − 1 z k = z ~ k + H ( x k − x ~ k ) + ν ν k x_k=\widetilde{x}_k+A(x_{k-1}-\hat{x}_{k-1})+\omega_{\omega_{k-1}}\\ z_k=\widetilde{z}_k+H(x_k-\widetilde{x}_k)+\nu_{\nu_k} xk=x k+A(xk−1−x^k−1)+ωωk−1zk=z k+H(xk−x k)+ννk
其中
P
(
ω
)
∼
N
(
0
,
Q
)
P
(
ω
ω
)
∼
N
(
0
,
ω
Q
ω
T
)
P
(
ν
ν
)
∼
N
(
0
,
ν
R
ν
T
)
P(\omega)\sim N(0,Q)\\ P(\omega_{\omega})\sim N(0,\omega Q \omega^T)\\ P(\nu_{\nu}) \sim N(0, \nu R \nu^T)
P(ω)∼N(0,Q)P(ωω)∼N(0,ωQωT)P(νν)∼N(0,νRνT)
后面就可以用之前的方式进行推导了
公式
预测 | 更新 | ||
---|---|---|---|
先验 | x ^ k − = f ( x ^ k − 1 , μ k − 1 , 0 ) \hat{x}^-_k= f(\hat{x}_{k-1}, \mu_{k-1},0) x^k−=f(x^k−1,μk−1,0) | 卡尔曼增益 | K k = P k − H T H P k − H T + ν R ν T K_k=\frac{P^-_kH^T}{HP^-_kH^T+\nu R\nu^T} Kk=HPk−HT+νRνTPk−HT |
先验误差协方差 | P k − = A P k − 1 A T + ω Q ω T P^-_k=AP_{k-1}A^T+\omega Q\omega^T Pk−=APk−1AT+ωQωT | 后验估计 | x ^ k = x ^ k − + K k ( z k − h ( x ^ k − , 0 ) ) \hat{x}_k=\hat{x}^-_k + K_k(z_k - h(\hat{x}^-_k,0)) x^k=x^k−+Kk(zk−h(x^k−,0)) |
更新误差协方差 | P k = ( I − K k H ) P k − P_k=(I-K_kH)P^-_k Pk=(I−KkH)Pk− |