"如果你不能简单地解释某一概念,说明你没有很好地掌握它。"
艾尔伯特·爱因斯坦卡尔曼滤波是一个简单的概念。 但很多现有的教程都不能很好地解释这个概念,其中大部分原因是因为这些教程需要学习者具备高深的数学背景。除此之外,它们也缺乏相应的数值例子来解释相关知识。
因为上诉的原因,我决定编写一个既简单直白解释原理,且具有相关数值实验的卡尔曼滤波教程。
对于教程中的例子,很大部分来自于广泛应用卡尔曼滤波算法的雷达系统(主要用于目标跟踪),然而,卡尔曼滤波算法不仅仅只作用于此,原则上它可以应用在任何需要估算和预测的领域。
教程包含以下三部分:
在本教程中的所有数值例子都使用公制单位来表示,我计划在将来添加英制单位来表示这些这些例子。
"通过例子来学习会让你学习得更快和影响深远,而通过规则来学习则需要更多得时间和精力。"
卢修斯·塞内卡我是来自以色列的Alex Becker。我是一个具有15年无线技术从业经验的工程师。我的部分日常工作就是应用卡尔曼滤波来做跟踪相关的应用。
我十分欢迎建设性的批评。如果你什么想说和建议,欢迎你通过邮箱 email 和我联系。
大多数现代系统都搭载上数量众多的传感器,它们通过传感器返回的一系列测量数据来估算一些有用的信息。例如,我们生活上的GPS接收器就是提供位置和速度的装置,它估算的位置和速度就是我们需要的有用数据,而不同时刻的卫星数据就是一系列的测量数据。
对于一个跟踪和控制系统来说,其中最大的问题就是在存在不确定性的前提下提供一个准确的有用信息。回到刚刚的例子,GPS接收器测量的卫星数据充满不确定性,这些不确定性往往取决于外部环境的变化,其中包括热噪声,大气层影响,卫星位置的轻微改变,GPS的内部时钟准确性等等。
而卡尔曼滤波就是众多常用且重要的估算算法。因为卡尔曼滤波器在进行预估时是默认假设输入数据是不准确的。与此同时,卡尔曼滤波是根据上一次系统的预估值来预估下一次系统的状态。
这种类型的滤波器是卡尔曼首次公开发表的,因此被命名为卡尔曼滤波器。在1960年,卡尔曼发布了一篇描述离散数据线性滤波问题的递归解的问题的论文。
现在,卡尔曼滤波器常常用于雷达跟踪系统,位置和导航系统,控制系统,计算机图形等等领域。
在介绍卡尔曼滤波之前,让我们先来了解一下预测算法。
我们用一个雷达跟踪系统作为例子。
雷达跟踪系统向目标方向发射一个笔尖型射束用于追踪目标。假设发射周期为5S,因此,雷达系统会在每5秒的时间后通过向目标方向发射专用的跟踪射束来定位目标。
在发射射束之后,雷达系统会估算当前目标的位置和速度。与此同时,雷达系统也会预测下一个发射束应该发送到哪一个位置。
通过牛顿运动方程,我们能很容易计算出目标在下一个发射周期的位置。
\( x \) | :目标位置 |
\( x_{0} \) | :目标初始位置 |
\( v_{0} \) | :目标初始速度 |
\( a \) | :目标加速度 |
\( \Delta t \) | :时间间隔 (在本例子为5S) |
将上诉公式映射到三维空间,我们可以将牛顿运动方程作为系统的方程:
这些目标参数 \( \left[ x, y, z, v_{x},v_{y},v_{z},a_{x},a_{y},a_{z} \right] \) 被称为 系统状态. 通过当前系统状态代入到系统方程中,我们可以得到目标的下一个系统状态。
上面的方程被称为 动态模型 (或者空间状态模型). 动态模型是一种描述输入和输出关系的方法。
上面的方程被称为动态模型 (或者空间状态模型). 动态模型是一种描述输入和输出关系的方法。
回到我们的例子,我们知道当我们有了当前系统状态和掌握系统的动态模型之后,我们就能很容易地预测出目标的下一个状态。
然而并不是这样的。首先,雷达系统的测量数值不是完全可靠,它包含随机误差(或者这类型的不确定性)。这些随机错误的大小取决于很多因素,例如雷达自身的准确性,发射光束的宽度,返回信号强弱等等。这些测量误差被称为测量噪声。
此外, 因为有很多外部因素会做成干扰,目标运动并不是完全按着运动方程。例如:风向,空气流动,驾驶策略等等。这个动态模型误差被称为 处理噪声。
因为测量噪声和处理噪声的存在,这个根据上诉系统方程估算出来的目标位置会真实的目标位置相差很大。假若这样,雷达系统会向错误的方向发射跟踪射束并且丢失目标。
为了提高雷达跟踪系统的表现,这就需要能够将处理噪声和测量噪声考虑进来的预测算法。
对于此类算法,应用得最广泛无疑是卡尔曼滤波.