前几天有个小伙伴问我卡尔曼滤波,但奈何才疏学浅,我也不会.不过在几天恶补之后,我觉得我可以跟大家来聊一聊卡尔曼滤波啦。
在网上逛了很多相关的文章,也在几本书上找到相关内容看了一下,逛了一圈之后除了个别很独到的见解之外,很多其实讲来讲去都那么点东西。文中有些地方也引用了一些别人的说法,因为说的太好了,我都注明出处了。
这篇文我们先轻松愉快简单的聊一聊卡尔曼滤波,来帮助奠定一下对它的认识,后面会连续出它的数学公式以及一个实践应用。
说起卡尔曼滤波,我先想起来的就是opencv中的均值滤波啊,高斯滤波啊,中值滤波啊等等,想来以为卡尔曼滤波也是一种滤波操作。
但后来在一套非常简短易懂的无人驾驶科普视频里,看到它说用卡尔曼滤波进行预测。身边也有视觉组的同学提到用卡尔曼滤波进行目标检测的预测。
那既然卡尔曼滤波是用来预测的,为啥不叫卡尔曼预测,非得叫卡尔曼滤波呢?其实,卡尔曼滤波就是一种降噪的滤波算法,只不过它可以起到一定的预测效果。
那卡尔曼滤波算法处理的对象是谁呢?
从最高层面上说处理的是动态模型(dynamic model),而动态模型有可以细分为:
离散状态分布模型,处理这类模型我们用的就是机器学习里我看不下去的那个隐马尔科夫模型(HMM)进行处理。
比如输入法,你输入一个字,输入法会给你推荐下一个字,这就可以用HMM机器学习来做(当然,可能还有其他复杂的东西)。
线性高斯模型,处理这类模型,我们就用大名鼎鼎的我稍微能看懂一丢丢的卡尔曼滤波算法来处理了。这类模型数据是线性的,噪声分布是高斯分布的。
再有就是非线性非高斯模型了,处理这类模型,我们可以用扩展卡尔曼滤波来做。
卡尔曼滤波问世之后,他的创作者鲁道夫.E.卡尔曼在一次访问NASA埃姆斯研究中心时,发现这种方法能帮助解决阿波罗计划的轨道预测问题,最终,飞船正确驶向月球,完成了人类历史上的第一次登月。
那我们可以想想飞行器登月这个不可思议的神话故事,飞行器飞向太空,不停的用各种传感器来测量自己的位置,希望自己在预定轨道上。
但由于传感器的噪声影响,虽然它一直在测量和调整,但仍有可能慢慢偏离预定轨道(更何况是在漫长的太空飞行中,偏离一点也会有很大区别)。
所以飞行器用传感器测量了当前Xk时刻它的当前位置(由于传感器噪声所以不准确),卡尔曼滤波算法根据上一次Xk-1时刻的传感器测量值,来预测了下一次Xk的飞行器可能的位置分布(但肯定也不准)。
再将Xk时间的模型预测值和传感器测量值进行了融合,从而滤掉传感器的噪声,进而得到更为准确的位置坐标。
说了这么多,你能理解卡尔曼滤波为啥在叫滤波的时候,又说它可以预测了吧?
但是你肯定还不能体会到卡尔曼滤波的妙处:
假设你有两个传感器甚至多个,测的是同一个信号。可是它们每次的读数都不太一样,怎么办?
—— 取平均。
再假设你知道其中贵的那个传感器应该准一些,便宜的那个应该差一些。那有比取平均更好的办法吗?
——加权平均。
假设你只有一个传感器,但是你还有一个数学模型。模型可以帮你算出一个值,但也不是那么准。怎么办?
—— 把模型算出来的值,和传感器测出的值,(就像两个传感器那样),取加权平均,也就是卡尔曼滤波。
出自知乎知友Kent Zeng
好了,下面我们看一篇文章里总结的图解:
出自链接:
【SLAM】卡尔曼滤波:究竟滤了谁?
首先通过上一时刻的状态预测得到当前时刻的状态分布(图a),然后通过传感器得到测量数据(图b加粗)。
结合测量数据调整更新,得到当前时刻最终的状态分布(图c加粗)。然后通过控制数据,接着预测下一时刻的状态分布(图d加粗)。
获取下一时刻的测量数据之后(图e加粗),综合得到下一时刻估计的状态分布(图f加粗)。
我们可以看到,测量值和预测值都是高斯分布,高斯分布到底是啥:
一个标准一维高斯钟形曲线方程如下所示:
而且预测过程是迭代的,渐进的,我们通过上一时间预测当前时间状态,再由当前状态预测下一状态。
实际中,真真正正的服从高斯分布的噪声是很少存在的,但我们将卡尔曼滤波应用到大部分噪声中是都有很好效果的。
最后呢,我在文末给大家罗列并介绍一下参看的资料,大家有兴趣可以翻看一下,也可以看我出的后续的数学以及应用方面的博文,也就是:
【opencv实践】easy卡尔曼滤波中:数学原理加简单例子
【opencv实践】easy卡尔曼滤波下:opencv实践应用
文章:
卡尔曼滤波(Kalman filtering)小结:
滤波算法(四)—— 卡尔曼滤波算法
对Kalman(卡尔曼)滤波器的理解
mpu6050姿态解算与卡尔曼滤波(2)卡尔曼滤波
高斯噪声和高斯白噪声相关介绍
图解卡尔曼滤波
【SLAM】卡尔曼滤波:究竟滤了谁?
书籍:
《统计学习方法》第十章隐马尔科夫模型
《学习opencv3》第17章跟踪
《视觉SLAM十四讲》第十讲:后端
这三本书大家没有的可以去公众号【行走的机械人】回复【卡尔曼滤波书籍】领取电子版。也可以回复【电子书资源】,里面有好几G的电子书,包括这三本。
视频教程:
徐亦达机器学习:Kalman Filter 卡尔曼滤波【2015年版-全集】
详解卡尔曼滤波
卡尔曼滤波硬核原理解析
【帅器学习/柏欣】卡尔曼滤波
如果大家觉得有帮助,就请点个赞再走叭!如果有不明白的地方或者表述错误的地方,欢迎评论区留言。