总览

“如果你不能把它解释地足够简洁,说明你还不够理解它。”

阿尔伯特·爱因斯坦

关于本教程

卡尔曼滤波算法是一个在存在不确定性的情况下对系统状态进行估计和预测的强大工具,被广泛应用在诸如目标跟踪、导航和控制等应用场景下。

尽管卡尔曼滤波器的思路十分直观明了,但多数关于它的文献和资料都充斥着大量的严密数学推导,将问题描述得过于复杂,而疏于提供一种实际的、简洁的示例和说明。

2017年,我使用一些数值示例和导引性的解释创建了一个在线教程,意在将卡尔曼滤波这个话题解释得更加通俗易懂。这套教程提供了一些介绍性的材料和知识来讲解单变量(一维)和多变量(多维)卡尔曼滤波。

随后,我收到了不少朋友的请求,希望我介绍一些更高级的内容,例如非线性卡尔曼滤波(扩展卡尔曼滤波和无迹卡尔曼滤波)、传感器融合,以及实际应用上的指引。

基于这个线上教程所涉及的资料,我编写了 从零开始学卡尔曼滤波 这本电子书。

原线上教程会保持免费开放,电子书 从零开始学卡尔曼滤波 及数值示例对应的源码(Python和MATLAB)可以在线购买

本书的范围涵盖从基础知识到高级算法,兼顾理论概念和实际应用。行文优先注重直观和简洁地阐述概念和思路,意在首先从理解层面接近卡尔曼滤波的本质,其次再从数学和定量的层面予以精确说明。

本书包含共计14个数值示例及其数值解、性能图和列表。示例前后关联,并且随内容的深入而逐步递进。

本书同时也包含理解卡尔曼滤波所需的数学背景知识,为拓宽基础知识、克服读者对数学的畏惧做足准备。

读完本书后,读者将学会如何设计、仿真卡尔曼滤波器,并且知道如何评估它的性能。

本书由四部分组成:

  • 第一部分构成了卡尔曼滤波的简介,包含八个数值示例,无需复杂的数学知识。可以理解为“给小白准备的卡尔曼滤波”,因为它重在帮助读者直观理解“卡尔曼滤波的思路和原理”。读完这部分,读者将能够彻底了解卡尔曼滤波的概念,并能够着手设计一个单变量(一维)卡尔曼滤波器。
    这部分可免费阅读!
  • 第二部分以矩阵形式给出卡尔曼滤波的描述,扩展到多变量(多维)卡尔曼滤波,包括卡尔曼滤波方程的数学推导、动态系统建模,辅以两个数值示例。这部分比较深入,需要一定的线性代数基础知识(仅矩阵相关运算即可)。读完这部分,读者能够了解卡尔曼滤波背后的数学原理,并能够着手设计一个多变量卡尔曼滤波器。
    这里大部分可免费阅读!
  • 第三部分专门讲述非线性卡尔曼滤波,这对完全掌握卡尔曼滤波至关重要,因为实际生活中的系统大部分都是非线性的。这部分从一个问题定义开始,描述线性和非线性系统的差异。内容包含最常用的非线性卡尔曼滤波器的推导和示例:扩展卡尔曼滤波和无迹卡尔曼滤波。
  • 第四部分包含面向卡尔曼滤波器的实现的指引,包括传感器融合、变量测量的不确定性、测量缺失的处理、外点的处理等,以及卡尔曼滤波器的设计流程。

"The road to learning by precept is long, by example short and effective."

Lucius Seneca

关于作者

我叫Alex Becker,我来自以色列。我是一名在无线领域有着超过20年经验的工程师。我工作的一部分便是和卡尔曼滤波器打交道,主要应用于目标跟踪。

我始终接受建设性的批评,我很乐意倾听你的评价和建议。如有需要请给我发邮件

免责声明:本教程的所有数值示例所体现和涉及到的、包括但不限于设计模式、方法论、技术和参数等,与作者已知或从事的任何应用系统均无关。
Alex Becker

关于卡尔曼滤波

许多现代系统均使用多个传感器的多个测量结果来估计隐藏(未知)状态。例如GPS接收机能够用来估计位置和速度,此处位置和速度就是隐藏状态,接收到的卫星信号时差就构成了一组测量。

对跟踪和控制系统而言,最大的挑战之一便是在存在不确定性的情况下获取一个对隐藏状态的精准的估计。例如GPS接收机会受各种外部干扰,如热噪声、大气效应、卫星轨道微小变化、接收机时间精度等。

卡尔曼滤波是最常用最重要的状态估计算法之一。卡尔曼滤波器能从不确定且非精确的测量中估计隐藏状态,同时还可以根据历史估计值对未来系统状态进行预测。

这种滤波算法以 Rudolf E. Kálmán (1930年5月19日 - 2016年7月2日) 的名字命名。在1960年,卡尔曼发表了著名的论文,描述了一个离散数据的线性滤波问题的递归解法。

如今卡尔曼滤波广泛应用于目标追踪、定位和导航系统、控制系统、计算机图形学等等许多领域。

Rudolf E. Kálmán

为什么需要预测算法

在开始讲解卡尔曼滤波以前,我们先闹明白为什么需要一套跟踪和预测算法。

为说明这一点,我们拿一个目标追踪雷达来举例。

Tracking Radar

假设我们每5秒发起一次追踪,即以5秒为间隔,雷达发出一束波束照射目标。

雷达波到达目标并返回后,它开始估计目标当前的位置和速度。雷达同时还能估计(或预测)目标在下一个测量周期即5秒后的位置。

目标未来的位置可以通过牛顿运动方程得到:

\[ x= x_{0} + v_{0} \Delta t+ \frac{1}{2}a \Delta t^{2} \]
其中:
\( x \) 是目标位置
\( x_{0} \) 是初始目标位置
\( v_{0} \) 是初始目标速度
\( a \) 是目标加速度
\( \Delta t \) 是采样周期(本例中为5秒)

处理三维空间中的运动时,牛顿运动方程可以以方程组形式给出:

\[ \left\{\begin{matrix} 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{matrix}\right. \]

这组目标的参数 \( \left[ x, y, z, v_{x},v_{y},v_{z},a_{x},a_{y},a_{z} \right] \) 称为 系统状态。当前状态作为预测算法的输入,预测算法的输出则是目标未来的状态,即目标在下一个采样点所具有的参数。

上面的牛顿运动方程组称为 动态模型状态空间模型。动态模型描述了预测算法的输入和输出之间的关系。

显然,如果目标当前的状态和动态模型是已知的,预测目标后续的状态就可以很简单地实现。

实际中,雷达的测量并不完全准确,它所包含的随机噪声或不确定性会影响对目标状态的预测的精准度。误差大小取决于多方面因素,例如雷达校准、波束宽度、回波的信噪比等。雷达测量的随机噪声或不确定性称为 测量噪声

另外,由于存在风扰、飞行员干预等因素,目标的运动并不总能依照运动方程。运动方程预测和实际目标的运动轨迹之间的差异称为 过程噪声

由于测量噪声和过程噪声的存在,估计的目标位置有可能和目标的真实位置大相径庭。这种情况下,雷达的波束完全可能指向错误的方位,从而跟丢目标。

为了提升雷达跟踪的精准度,一套能对抗测量和模型的不确定性的预测算法就至关重要。

最常用的跟踪和预测算法就是 卡尔曼滤波

下一章