详细解释卡尔曼滤波的原理。
不得不说卡尔曼滤波器,因为它能做的事情简直太神奇了。
不幸的是,很少有软件工程师和科学家对此有深刻的理解。这让我感到沮丧,因为卡尔曼滤波器是一个如此通用和强大的工具,它可以在不确定的情况下组合信息。有时,它提取准确信息的能力似乎令人难以置信。如果听起来我说得太多了,请看看之前发布的视频,它演示了一种使用卡尔曼滤波器来观察自由漂浮物体的速度以确定其方向的方法。太好了!
您可以在任何具有不确定信息的动态系统中使用卡尔曼滤波器来对系统的下一步行动做出明智的猜测。即使有各种干扰,卡尔曼滤波器也总能指出现实世界中正在发生的事情。它可以利用奇怪现象之间的联系,这一点你可能想不到!
卡尔曼滤波器是连续变化系统的理想选择。由于卡尔曼滤波不需要保留除前一状态之外的其他历史记忆信息,因此具有轻量级和运行速度极快的特点,非常适合处理实时问题和嵌入式系统。
你在谷歌上找到的大多数卡尔曼滤波的数学描述都是晦涩难懂的。这是一个非常糟糕的情况!因为卡尔曼滤波可以简单易懂。所以这篇文章是一个很好的话题,本文会尽量用很多清晰漂亮的图片来说明。这篇论文的前提很简单,你只需要对概率和矩阵有一个基本的了解。
本文将以一个简单的例子来说明卡尔曼滤波器可以解决的问题。但如果你想直接接触美图和数学,请随时跳转。
举个简单的例子:你做了一个可以在丛林里游泳的小机器人。为了确保导航,机器人需要知道自己的位置。
我们的机器人也有GPS传感器,大概10米的精度,但是需要更精确的知道自己的位置。树林里有许多沟壑和悬崖。如果机器人的误差超过几英尺,就可能掉下悬崖。所以,仅仅依靠GPS进行定位是不够的。
我们也可能知道机器人是如何运动的:机器人知道发送给车轮电机的指令。如果它向一个方向运动,没有任何干扰,它可能在下一个时刻继续向同一方向运动。当然,它并不完全了解自己的运动:它可能会被风吹到,车轮可能会打滑,或者在崎岖的地形上滚动;因此,轮子旋转的次数可能无法准确地代表机器人实际走了多远,这种预测也不会完全准确。
GPS传感器告诉我们一些关于状态的信息,但这只是间接的,具有一些不确定性和不准确性。我们的预测告诉了机器人如何运动,但只是间接的,也是不确定的,不准确的。
但是如果我们使用所有可用的信息,我们能得到比这两个估计本身更好的答案吗?当然答案是肯定的,这就是卡尔曼滤波器的作用。
来看一个我们要解读的场景。让我们继续最后一个例子。机器人只包含位置和速度的简单状态。
更有趣的是下面这个例子:位置和速度是相关的。观察特定位置的可能性取决于您的速度:
这种关系非常重要,因为它给了我们更多的信息:一个度量告诉我们其他度量可能是什么。要尽可能压缩卡尔曼滤波器来自不确定目标的信息!
这种相关性称为协方差矩阵。简而言之,矩阵的每个元素
我们基于高斯分布建立状态变量,所以在时间上
接下来,我们需要某种方法来了解当前状态(时间)
以上所有数学公式,你只需要实现公式(7)、(18)、(19)。(如果忘记了上面的公式,也可以从公式(4)和(5)推导出来。)
这将允许你精确地模拟任何线性系统。对于非线性系统,需要扩展卡尔曼滤波,不同的是EKF有一个额外的预测和测量的线性化过程。