卡尔曼滤波算法原理

本文深入解析卡尔曼滤波算法,从基本概念到实际应用,探讨如何在动态系统中利用该算法进行预测和校正。卡尔曼滤波适用于含有不确定信息的系统,通过结合预测和测量值,减少不确定性,提高定位等任务的精度。文章通过实例解释了如何处理外部控制量和传感器噪声,以及如何用矩阵形式描述和解决此类问题。
摘要由CSDN通过智能技术生成

原文链接:深度分析卡尔曼滤波算法原理

说到卡尔曼滤波,想必很多读者都用过,或者听说过,是一种应用非常广泛的滤波算法。

在网上看了不少与卡尔曼滤波相关的博客、论文,要么是只谈理论、缺乏感性,或者有感性认识,缺乏理论推导。能兼顾二者的少之又少,直到看到了国外的一篇博文,讲的非常详细,今天跟大家分享一下。

以下是原博文翻译内容:

一、什么是卡尔曼滤波?

你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。

在连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。

在Google上找到的大多数关于实现卡尔曼滤波的数学公式看起来有点晦涩难懂,这个状况有点糟糕。实际上,如果以正确的方式看待它,卡尔曼滤波是非常简单和容易理解的,下面我将用漂亮的图片和色彩清晰的阐述它,你只需要懂一些基本的概率和矩阵的知识就可以了。

二、我们能用卡尔曼滤波做什么?

用玩具举例:你开发了一个可以在树林里到处跑的小机器人,这个机器人需要知道它所在的确切位置才能导航。

在这里插入图片描述
注意这个状态只是关于这个系统基本属性的一堆数字,它可以是任何其它的东西。在这个例子中是位置和速度,它也可以是一个容器中液体的总量,汽车发动机的温度,用户手指在触摸板上的位置坐标,或者任何你需要跟踪的信号。

这个机器人带有GPS,精度大约为10米,还算不错,但是,它需要将自己的位置精确到10米以内。树林里有很多沟壑和悬崖,如果机器人走错了一步,就有可能掉下悬崖,所以只有GPS是不够的。

在这里插入图片描述

或许我们知道一些机器人如何运动的信息:例如,机器人知道发送给电机的指令,知道自己是否在朝一个方向移动并且没有人干预,在下一个状态,机器人很可能朝着相同的方向移动。当然,机器人对自己的运动是一无所知的:它可能受到风吹的影响,轮子方向偏了一点,或者遇到不平的地面而翻倒。所以,轮子转过的长度并不能精确表示机器人实际行走的距离,预测也不是很完美。

GPS 传感器告诉了我们一些状态信息,我们的预测告诉了我们机器人会怎样运动,但都只是间接的,并且伴随着一些不确定和不准确性。但是,如果使用所有对我们可用的信息,我们能得到一个比任何依据自身估计更好的结果吗?回答当然是YES,这就是卡尔曼滤波的用处。

三、卡尔曼滤波是如何看到你问题的

下面我们继续以只有位置和速度这两个状态的简单例子做解释。

在这里插入图片描述

我们并不知道实际的位置和速度,它们之间有很多种可能正确的组合,但其中一些的可能性要大于其它部分:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在上图中,位置和速度是不相关的,这意味着由其中一个变量的状态无法推测出另一个变量可能的值。下面的例子更有趣:位置和速度是相关的,观测特定位置的可能性取决于当前的速度:
在这里插入图片描述

这种情况是有可能发生的,例如,我们基于旧的位置来估计新位置。如果速度过高,我们可能已经移动很远了。如果缓慢移动,则距离不会很远。跟踪这种关系是非常重要的,因为它带给我们更多的信息:其中一个测量值告诉了我们其它变量可能的值,这就是卡尔曼滤波的目的,尽可能地在包含不确定性的测量数据中提取更多信息!

在这里插入图片描述
在这里插入图片描述

四、使用矩阵来描述问题

在这里插入图片描述

在这里插入图片描述

(当然,在这里我们只用到了位置和速度,实际上这个状态可以包含多个变量,代表任何你想表示的信息)。接下来,我们需要根据当前状态(k-1 时刻)来预测下一状态(k 时刻)。记住,我们并不知道对下一状态的所有预测中哪个是“真实”的,但我们的预测函数并不在乎。它对所有的可能性进行预测,并给出新的高斯分布。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
它将我们原始估计中的每个点都移动到了一个新的预测位置,如果原始估计是正确的话,这个新的预测位置就是系统下一步会移动到的位置。那我们又如何用矩阵来预测下一个时刻的位置和速度呢?下面用一个基本的运动学公式来表示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、外部控制量

我们并没有捕捉到一切信息,可能存在外部因素会对系统进行控制,带来一些与系统自身状态没有相关性的改变。
在这里插入图片描述

在这里插入图片描述

以矩阵的形式表示就是:

在这里插入图片描述

在这里插入图片描述

外部干扰

如果这些状态量是基于系统自身的属性或者已知的外部控制作用来变化的,则不会出现什么问题。

但是,如果存在未知的干扰呢?例如,假设我们跟踪一个四旋翼飞行器,它可能会受到风的干扰,如果我们跟踪一个轮式机器人,轮子可能会打滑,或者路面上的小坡会让它减速。这样的话我们就不能继续对这些状态进行跟踪,如果没有把这些外部干扰考虑在内,我们的预测就会出现偏差。

在每次预测之后,我们可以添加一些新的不确定性来建立这种与“外界”(即我们没有跟踪的干扰)之间的不确定性模型:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这产生了具有不同协方差(但是具有相同的均值)的新的高斯分布。

在这里插入图片描述
在这里插入图片描述

由上式可知,新的最优估计是根据上一最优估计预测得到的,并加上已知外部控制量的修正。

而新的不确定性由上一不确定性预测得到,并加上外部环境的干扰。

在这里插入图片描述

六、用测量值来修正估计值

我们可能会有多个传感器来测量系统当前的状态,哪个传感器具体测量的是哪个状态变量并不重要,也许一个是测量位置,一个是测量速度,每个传感器间接地告诉了我们一些状态信息。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们可以计算出传感器读数的分布,用之前的表示方法如下式所示:

在这里插入图片描述

卡尔曼滤波的一大优点就是能处理传感器噪声,换句话说,我们的传感器或多或少都有点不可靠,并且原始估计中的每个状态可以和一定范围内的传感器读数对应起来。

在这里插入图片描述

从测量到的传感器数据中,我们大致能猜到系统当前处于什么状态。但是由于存在不确定性,某些状态可能比我们得到的读数更接近真实状态。

在这里插入图片描述
在这里插入图片描述
现在我们有了两个高斯分布,一个是在预测值附近,一个是在传感器读数附近。

在这里插入图片描述

我们必须在预测值(粉红色)和传感器测量值(绿色)之间找到最优解。

在这里插入图片描述

在这里插入图片描述
剩下的就是重叠部分了,这个重叠部分的均值就是两个估计最可能的值,也就是给定的所有信息中的最优估计。

瞧!这个重叠的区域看起来像另一个高斯分布。

在这里插入图片描述

如你所见,把两个具有不同均值和方差的高斯分布相乘,你会得到一个新的具有独立均值和方差的高斯分布!下面用公式讲解。

七、融合高斯分布

在这里插入图片描述
如果把两个服从高斯分布的函数相乘会得到什么呢?

在这里插入图片描述

将式(9)代入到式(10)中(注意重新归一化,使总概率为1)可以得到:

在这里插入图片描述

将式(11)中的两个式子相同的部分用 k 表示:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

八、将所有公式整合起来

在这里插入图片描述
在这里插入图片描述

由式(14)可得卡尔曼增益为:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

九、总结

以上所有公式中,你只需要用到式(7)、(18)、(19)。(如果忘了的话,你可以根据式(4)和(15)重新推导一下)

我们可以用这些公式对任何线性系统建立精确的模型,对于非线性系统来说,我们使用扩展卡尔曼滤波,区别在于EKF多了一个把预测和测量部分进行线性化的过程。

版权归原作者所有,如有侵权,请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值