The website uses cookies. By using this site, you agree to our use of cookies as described in the Privacy Policy.
I Agree

如何通俗并尽可能详细地解释卡尔曼滤波? - 知乎

只写易懂教程/立志只讲本质/SLAM/AI/编程/算法
牛逼的算法往往都是来源于一个很简单的思想所演化而来,如果你不了解这个思想和演化过程那就谈不上了解那个牛逼的算法 —— @司南牧

兄弟姐妹们不要只收藏嘛,有赞才有动力鸭

直观理解

首先卡尔曼滤波要解决的问题是什么?我以机器人估计自己离障碍物距离为例

答:首先机器人已知“传感器测量的机器人离障碍物的距离(我们称它为观测值,比如雷达直接测量机器人离障碍物距离7m)”,“上个时刻机器人离障碍物距离”和“自己当前时刻的速度”这三个数据。而根据“上个时刻机器人离障碍物距离”和“自己当前时刻的速度”可以估算出当前机器人离障碍物的距离(我们称它为估计值)。比如:上一秒离障碍物10m,速度是4m/s,那么现在这秒估计就离障碍物距离是6m。(其实这个叫做机器人移动建模想了解更多移动模型与滤波算法的联系细节的童鞋可以看看《机器人移动模型:根据控制命令预测机器人位置》这篇文章)

那么问题来了,机器人离障碍物的距离现在既有个观测值7m,又有个估计值6m。到底相信哪个?单纯相信观测值万一那传感器坏了呢?单纯相信估计值那么万一上个时刻的距离估计值或者速度不准呢?所以,我们要根据观测值和估计值的准确度来得到最终机器人离障碍物的距离估计值。准确度高的就最终结果比重高,准确度低就占比低。如果雷达测量的那个7m准确度是90%,根据速度估计出的那个6m准确度是80%,那么最终的距离估计结果就是 result=(1-\frac{0.9}{0.8+0.9})*6 + \frac{0.9}{0.8+0.9}*7=6.52 米.

事实上 这个就是所谓的卡尔曼增益,它就是表示这个传感器数据相对于根据速度计算出的估计值的靠谱程度。(每个传感器在使用前都可以对它的噪声的方差进行测量,可以搜下Allen方差,我们测量出每个传感器的噪声方差不就知道每个传感器靠谱程度了?)

直观理解讲完了,以上。如果你想进一步了解卡尔曼滤波在实际应用中怎么计算的可以看看这篇文章《司南牧:[易懂]如何理解那个把嫦娥送上天的卡尔曼滤波算法Kalman filter?》。接下来我会介绍卡尔曼滤波推导的理论知识。

但是上面的90%与80%这两个准确度是怎么计算的?卡尔曼这个人到底是怎么发明卡尔曼滤波算法的?卡尔曼发明算法的思路历程是什么?卡尔曼滤波算法到底与贝叶斯滤波算法有什么联系?我想这些肯定是你脑海中挥之不去的阴影,仅仅从直观理解无法解答这些问题

卡尔曼滤波Python代码实践@司南牧已经在下面这个专栏文章末尾更新啦。下面这个代码可以帮助大家更好的理解卡尔曼滤波。司南牧:[易懂]如何理解那个把嫦娥送上天的卡尔曼滤波算法Kalman filter

我就从算法发明的角度来挑战一下。

我希望在学本文前你能对贝叶斯滤波有了解。如果你还不清楚贝叶斯滤波怎么做的?可以看看这篇文章【易懂教程】我是如何十分钟理解与推导贝叶斯滤波(Bayes Filter)算法?

首先卡尔曼滤波算法是对贝叶斯滤波的一种具体实现。那么贝叶斯滤波又是什么?贝叶斯滤波是一种思想,它告诉了我们怎么在知道观测值与根据控制命令所计算的估计值这两种值的可信度时如何计算最终估计出的值的可信度。但是贝叶斯滤波并没有告诉我们怎么计算观测值与估计值的可信度而卡尔曼滤波算法就是对贝叶斯滤波算法的一个具体实现。卡尔曼滤波认为观测值可信度模型是一个正态分布,控制模型是一个正态分布。然后信号是线性变化的。也就是说卡尔曼假设上文中的机器人一定是匀速直线运动,机器人离障碍物距离变化肯定是随时间线性变化(这就是卡尔曼算法的局限,你设计一种新的假设那就发明了新的算法)

知乎打公式太麻烦了我公式多的地方就弄图片了。

关于怎么代入化简推导得到很简洁的机器人状态估计迭代计算表达式和卡尔曼增益。我最近将会在知乎专栏《适合初学者的机器学习神经网络理论到实践》下一篇文章Ai酱:如何理解那个能造导弹军舰还把嫦娥送上天的卡尔曼滤波算法Kalman filter?介绍。欢迎关注与点赞

卡尔曼滤波Python代码实践 @司南牧 已经在下面这个专栏文章末尾更新啦。下面这个代码可以帮助大家更好的理解卡尔曼滤波。司南牧:[易懂]如何理解那个把嫦娥送上天的卡尔曼滤波算法Kalman filter

推荐阅读:

司南牧:{高中生能看懂的}梯度下降是个啥?

司南牧:易懂的神经网络理论到实践(1):单个神经元+随机梯度下降学习逻辑与规则

司南牧:[漫谈]高中的消元法解方程与线性代数及LU分解之间的联系

简单的SLAM实践教程与代码开源项目-github

司南牧著: 易懂的机器学习与实践教程

Measure
Measure
Summary | 4 Annotations
卡尔曼滤波算法是对贝叶斯滤波的一种具体实现
2021/01/14 17:05
贝叶斯滤波并没有告诉我们怎么计算观测值与估计值的可信度
2021/01/14 17:05
卡尔曼滤波算法就是对贝叶斯滤波算法的一个具体实现
2021/01/14 17:05
卡尔曼假设上文中的机器人一定是匀速直线运动
2021/01/14 17:06