概述
关于这份教程
卡尔曼滤波是一个简单的话题。然而,许多教程却不是那么好去理解。大多数的教程需要深厚的数学背景从而导致了它非常难以理解。与此同时,大多数的教程也缺乏一个实际的例子。
我之前决定去写一份基于实际例子并且提供简单且直观的解释的教程。
许多例子是从雷达的领域而来的,这也是卡尔曼滤波用的最广泛的地方,主要是用在目标跟踪上,然而,这里介绍的原则可以应用于任何需要进行估计和预测的领域。
这份教程包含三部分:
- 第一部分:介绍了卡尔曼滤波,这部分是基于 8 个数值例子。在这份教程里并不需要有一个好的数学基础。所有需要的数学只是已经在这份教程里提供了,并且它包含着均值,方差以及标准差等术语。如果你喜欢,你可以称它为“傻瓜式卡尔曼滤波”。在阅读了第一部分之后,你也就能够去理解卡尔曼滤波的概念以及扩展“卡尔曼滤波的直觉?”。于此同时,你也能够去设计一个一维卡尔曼滤波器。
- 第二部分:多维卡尔曼滤波器(矩阵表示法中的卡尔曼滤波器)。它更加高级一点。大多数在现实中的卡尔曼滤波器的实现是多维的并且需要基本的线性代数的知识(只有矩阵运算)。这必要的数学知识背景同时也提供在这份教程中。文中还介绍了卡尔曼滤波器的数学推导以及动态系统建模。在阅读完第二部分之后,你将能够理解卡尔曼滤波器背后的数学。你也将能够自己设计一个多维的卡尔曼滤波器。
- 第三部分:高级的主题。这部分是给高阶读者阅读的,它需要一些数学背景,特别是在统计学领域。目前,这部分还在规划之中,它应该包含扩展卡尔曼滤波器,无迹卡尔曼滤波器,卡尔曼滤波器在不同的现实生活中的实现。
目前,所有数值例子都以公制单位给出。
关于卡尔曼滤波
大多数的现代系统都搭配了一系列的传感器,并根据一系列的测量提供隐藏(未知)变量的估计。例如,GPS 接收机提供位置和速度的估计,位置和速度是隐藏变量,卫星信号到达的差分信号时间是测量值。
在一个跟踪和控制系统中一个最大的挑战就是在不确定性的条件下对隐藏变量进行精确的估计。在 GPS 接收机,测量的不确定性取决于许多的外部因素,如热噪声、大气影响,卫星位置的细微变化、接收机时钟精度等等。
卡尔曼滤波算法是一种最重要也是最常用的估计算法。卡尔曼滤波算法基于不准确和不确定的测量来估计隐藏变量。同时,卡尔曼滤波提供了基于过去的估计预测未来系统状态的能力。
该滤波器以 Rudolf E. Kalman 命名(1930 年 5 月 19 - 2016 年 7 月 2 日)。在 1960 年,卡尔曼发表了他著名的文章,文章里就描述了离散数据线性滤波问题的递归解决方案。
今天卡尔曼滤波被用在追踪目标,定位和导航系统中,控制系统中,电脑绘图过程中。
预测的要求
在深入讲解卡尔曼滤波之前,让我们先理解预测算法的必要性。
正如下面这个例子,让我们假定现在有一个雷达跟踪算法。
跟踪雷达向目标发送光束,假定轨道周期为 5 s。因此,每隔 5 s,雷达通过向目标方向发送一个专用的跟踪波束来重新访问目标。
在发送波束后,雷达估计当前目标的位置和速度。同样,雷达估计(或预测)下一个轨道波束的目标位置
未来的目标位置用牛顿运动定理能够被轻松的计算出来:
x
=
x
0
+
v
0
Δ
t
+
1
2
∗
a
∗
Δ
t
2
x = x_{0} + v_{0}\Delta t + \frac{1}{2}*a*\Delta t^2
x=x0+v0Δt+21∗a∗Δt2
x 是目标的位置
x0 目标的初始位置
v0 目标的初始速度
a 目标的加速度
Δt 时间间隔
在三维空间,牛顿运动方程能够写成系统的运动方程:
{
x
=
x
0
+
v
x
0
Δ
t
+
1
2
a
x
Δ
t
2
y
=
y
0
+
v
y
0
Δ
t
+
1
2
a
y
Δ
t
2
z
=
z
0
+
v
z
0
Δ
t
+
1
2
a
z
Δ
t
2
\begin{cases} x = x_{0} + v_{x0}\Delta t + \frac{1}{2}a_{x}\Delta t^{2} \\ y = y_{0} + v_{y0}\Delta t + \frac{1}{2}a_{y}\Delta t^{2} \\ z = z_{0} + v_{z0}\Delta t + \frac{1}{2}a_{z}\Delta t^{2} \end{cases}
⎩⎪⎨⎪⎧x=x0+vx0Δt+21axΔt2y=y0+vy0Δt+21ayΔt2z=z0+vz0Δt+21azΔt2
目标的参数 [x,y,z,vx,vy,vz,ax,ay,az] 被叫做是系统状态。目前的状态的预测算法的输入,下一个状态(下一个时间间隔的目标参数)是算法的输出。
上述一系列的等式叫做动态模型(或者说是状态空间方程)。动态模型描述了输入和输出之间的关系。
让我们回到我们的例子上来,正如我们看到的,如果当前的状态和动态模型都是已知的,那么下一个目标的状态就能够被轻易的预测出来。
但是,真实的情况下它并不是这样理想的。首先来说,雷达并不是绝对的。它包含一个随机错误(或者不确定性)。误差大小取决于许多参数,如雷达校准,波束宽度、回波大小等。测量中包含的误差称为测量噪声。
此外,由于风、空气湍流、飞行员机动等外部因素,目标运动与运动方程没有严格对齐。动态模型误差(或不确定性)称为过程噪声。
由于测量噪声和过程噪声的存在,估计的目标位置可能会远离真实的目标位置。在这种情况下,雷达将把轨道波束发送到错误的方向,而没有击中目标。
为了提高雷达跟踪性能,需要一种考虑过程不确定性和测量不确定性的预测算法。应用最广泛的预测算法是卡尔曼滤波。