This blog is translated from https://www.kalmanfilter.net/default.aspx.
It’s an excellent tutorial about Kalman Filter written by Alex Becker.
目录
卡尔曼滤波器(1) – 背景知识
卡尔曼滤波器(2) – α−β−γ滤波器(例1)
卡尔曼滤波器(3) – α−β−γ滤波器(例2)
卡尔曼滤波器(4) – α−β−γ滤波器(例3&例4&总结)
卡尔曼滤波器(5) – 一维卡尔曼滤波器(介绍)
卡尔曼滤波器(6) – 一维卡尔曼滤波器(例5&完整模型)
卡尔曼滤波器(7) – 一维卡尔曼滤波器(例6)
卡尔曼滤波器(8) – 一维卡尔曼滤波器(例7&例8)
卡尔曼滤波器(9) – 多维卡尔曼滤波器(前言&预备)
卡尔曼滤波器(10) – 多维卡尔曼滤波器(状态外推方程)
卡尔曼滤波器(11) – 多维卡尔曼滤波器(线性动态系统模型)
卡尔曼滤波器(12) – 多维卡尔曼滤波器(协方差外推方程)
卡尔曼滤波器(13) – 多维卡尔曼滤波器(测量方程)
卡尔曼滤波器(14) – 多维卡尔曼滤波器(简短总结)
卡尔曼滤波器(15) – 多维卡尔曼滤波器(状态更新方程)
卡尔曼滤波器(16) – 多维卡尔曼滤波器(协方差更新方程)
卡尔曼滤波器(17) – 多维卡尔曼滤波器(卡尔曼增益)
卡尔曼滤波器(18) – 多维卡尔曼滤波器(简化的协方差更新方程)
卡尔曼滤波器(19) – 多维卡尔曼滤波器(总结)
卡尔曼滤波器(20) – 多维卡尔曼滤波器(例9)
这部分是本教程最短的。关于状态更新方程的详细描述已经在 “α−β−γ滤波器” 和 “一维卡尔曼滤波器” 讲过。
矩阵形式的状态更新方程:
x
^
n
,
n
=
x
^
n
,
n
−
1
+
K
n
(
z
n
−
H
x
^
n
,
n
−
1
)
\pmb{\hat{x}_{n,n}} = \pmb{\hat{x}_{n,n-1}} + \pmb{K_n}(\pmb{z_n} - \pmb{H} \pmb{\hat{x}_{n,n-1}})
x^n,nx^n,nx^n,n=x^n,n−1x^n,n−1x^n,n−1+KnKnKn(znznzn−HHHx^n,n−1x^n,n−1x^n,n−1)其中:
x
^
n
,
n
\pmb{\hat{x}_{n,n}}
x^n,nx^n,nx^n,n 是在时刻
n
n
n 的估计系统状态向量
x
^
n
,
n
−
1
\pmb{\hat{x}_{n,n-1}}
x^n,n−1x^n,n−1x^n,n−1 是在时刻
n
−
1
n-1
n−1 的预测系统状态向量
K
n
\pmb{K_n}
KnKnKn 是卡尔曼增益
z
n
\pmb{z_n}
znznzn 是测量值
H
\pmb{H}
HHH 是观察矩阵(observation matrix)
除了矩阵形式的卡尔曼增益以外,你应该熟悉状态更新方程中的所有成分,稍后我们会推导卡尔曼增益。
你需要注意这里的维度,例如,如果状态向量有 5 个维度,而仅有 3 个纬度是可测量的(第1,第3,第5个状态): x ( n ) = [ x 1 x 2 x 3 x 4 x 5 ] z ( n ) = [ z 1 z 2 z 3 ] \pmb{x(n)} = \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \\ x_5 \end{bmatrix} \pmb{z(n)} = \begin{bmatrix} z_1 \\ z_2 \\ z_3 \end{bmatrix} x(n)x(n)x(n)=⎣⎢⎢⎢⎢⎡x1x2x3x4x5⎦⎥⎥⎥⎥⎤z(n)z(n)z(n)=⎣⎡z1z2z3⎦⎤
观察矩阵是一个 3 × 5 3 \times 5 3×5 的矩阵: H = [ 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] \pmb{H} = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} HHH=⎣⎡100000010000001⎦⎤
更新(innovation)( z n − H x ^ n , n − 1 \pmb{z_n} - \pmb{H}\pmb{\hat{x}_{n,n-1}} znznzn−HHHx^n,n−1x^n,n−1x^n,n−1)得到: z n − H x ^ n , n − 1 = [ z 1 z 2 z 3 ] − [ 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] [ x ^ 1 x ^ 2 x ^ 3 x ^ 4 x ^ 5 ] = [ ( z 1 − x ^ 1 ) ( z 3 − x ^ 3 ) ( z 5 − x ^ 5 ) ] \pmb{z_n} - \pmb{H}\pmb{\hat{x}_{n,n-1}} = \begin{bmatrix} z_1 \\ z_2 \\ z_3 \end{bmatrix} - \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \hat{x}_1 \\ \hat{x}_2 \\ \hat{x}_3 \\ \hat{x}_4 \\ \hat{x}_5 \end{bmatrix} = \begin{bmatrix} (z_1 - \hat{x}_1) \\ (z_3 - \hat{x}_3) \\ (z_5 - \hat{x}_5) \end{bmatrix} znznzn−HHHx^n,n−1x^n,n−1x^n,n−1=⎣⎡z1z2z3⎦⎤−⎣⎡100000010000001⎦⎤⎣⎢⎢⎢⎢⎡x^1x^2x^3x^4x^5⎦⎥⎥⎥⎥⎤=⎣⎡(z1−x^1)(z3−x^3)(z5−x^5)⎦⎤
卡尔曼增益的维度应该为 5 × 3 5 \times 3 5×3
状态更新方程的维度
下面的表展示了状态更新方程变量的维度
变量(variable) | 描述(Description) | 维度(Dimension) |
---|---|---|
x \pmb{x} xxx | 状态向量(state vector) | n x × 1 n_x \times 1 nx×1 |
z \pmb{z} zzz | 输出向量(output vector) | n z × 1 n_z \times 1 nz×1 |
H \pmb{H} HHH | 观察矩阵(observation matrix) | n z × n x n_z \times n_x nz×nx |
K \pmb{K} KKK | 卡尔曼增益(kalman gain) | n x × n z n_x \times n_z nx×nz |