在SLAM系统中,后端优化部分有两大流派:一派是基于马尔科夫性假设的滤波器方法,认为当前时刻的状态只与上一时刻的状态有关;另一派是非线性优化方法,认为当前时刻状态应该结合之前所有时刻的状态一起考虑。

如果采用滤波器方法,那一定会听到一个如雷贯耳的名字——卡尔曼滤波(Kalman Filtering)。我听到过这个名字已经很久了,可是一直没有花时间弄懂究竟是什么东西,最近看了一些资料,就来总结一下,看看卡尔曼大佬究竟滤了谁?管中窥豹,多多指教。

1 什么是滤波

在了解卡尔曼滤波之前,本科就学过一些滤波的方法,也就是从混合在一起的信号里提取出所需要的信号,就好比吃辣子鸡丁时只把鸡丁挑出来啃光,而辣椒被你抛弃掉了。

例如,在模拟电路中,我们利用低通滤波的方法,将信号中掺杂的一些频率较高的噪声滤除掉,从而提取有效的较低频信号。同样地,根据不同需要,还有高通滤波、带通滤波和带阻滤波。

再比如,在图像处理中,如果存在椒盐噪声(不能吃的!是在图像中随机出现的黑白点),我们会选择用中值滤波,将

个像素值的中值取出来以代替中心点的值,这样就能滤除椒盐噪声。

但是,卡尔曼滤波和上述说的这些滤波略显不同,它并没有很直观地从一些信号或者数据里面提取某些信号或数据,而是在有干扰的条件下,通过数据的结合得到相对更准确的估计数据。

卡尔曼滤波全程只关注两个东西,一个是估计的最佳值,另一个是该值的不确定性(此处联想一下高斯分布的两个参数)。

打个比方,假设你蒙着眼睛在屋子里走,要从客厅走到卧室,你可以通过数步数来预测你当前所在的位置,但是因为你每次迈步的幅度和方向不是精准的,所以你每多走一步所估计位置的不确定性就会越来越大,最后有可能走到浴室去了。

如果利用卡尔曼滤波,那么你对自己每一步的位置估计就会准确很多,具体怎么做呢?卖个关子,后面再讲,先解释一下什么是状态估计。

2 状态估计

在SLAM中,运用卡尔曼滤波是为了状态估计,那什么才是需要估计的状态呢?

状态可以看作是机器人或者环境中可能会对未来产生某些变化的因素,比如说机器人的位姿

、机器人的运动速度

(这个在纯视觉SLAM中是没有的)、环境中的路标点

等等,不同的SLAM系统拥有不同的状态。

我们假设

为机器人的状态,在SLAM的整个过程中,我们能获取到两种数据:控制数据和测量数据。控制数据是机器人记录自身运动的传感器获取的数据,比如IMU中的陀螺仪可以测量角速度、加速度计可以测量运动的加速度。

测量数据则是机器人记录环境信息的传感器获取的数据,比如相机可以将环境转化为二维的图像像素、激光雷达捕捉环境中的信息生成点云。

假设控制数据为

,运动噪声为

,那么机器人的运动可以用一个运动方程来表达,因为假设了马尔科夫性,所以当前时刻状态只与上一时刻有关,它表示从k-1时刻到k时刻机器人状态发生了怎样的变化。

假设测量数据为

,测量噪声为

,那么机器人的测量可以用一个观测方程来表达,它表示在k时刻所在的位置观测到路标点产生测量数据。

那么,状态估计其实就是用过去的数据来估计当前的状态。由于状态不是直接得到的,而且方程还受到噪声的影响,因此状态其实是符合某种概率分布的随机变量,而状态估计实际上是估计当前的状态分布。

我们用置信度

来表示当前时刻的状态分布,它是以控制数据和测量数据为条件的后验概率,即

而在获得当前时刻测量数据之前的状态分布可以用

来表示,它表示的后验概率为

同时,如果用概率来表达运动过程的话,则是

,这表示了从k-1时刻到k时刻机器人的状态转移概率。而用概率来表达观测过程,则是

,表示第k时刻机器人的测量概率。

所以,如下图所示,每一时刻的状态

只与前一时刻的状态

和当前时刻的控制

有关,而每一时刻的测量

只与当前时刻的状态

有关。这就是一个隐马尔可夫模型,状态不能直接得到,但是可以通过测量观察到。

3 贝叶斯滤波

有了状态分布的表达方式,还有运动方程和观测方法的概率表示,接下来就可以名正言顺地献上著名的贝叶斯公式了(前方多式警告!)

因为分母和状态没有半毛钱关系,因此可以用一个比例因子

来表示,即

根据前面说到的置信度和观测方程的概率表示(测量概率),该式还可以表示为

对于状态分布

,用边际概率公式

可以得到

根据前一时刻的置信度和运动方程的概率表示(状态转移概率),同时状态

不相关,因此上式化简得

可以看出,这是一个递归的过程,每一时刻的状态分布根据前一时刻的状态分布计算得到,一直追溯到初始状态

于是,我们就可以得到贝叶斯滤波算法了。

首先,根据上一时刻的状态分布,机器人经过运动方程的状态转移概率进行预测,得到综合测量数据前的当前时刻状态分布。然后,通过观测方程将测量数据考虑进来,再对状态分布进行调整更新,得到当前时刻最终的状态估计。

因此,只要知道初始状态分布

、运动方程的状态转移概率

和观测方程的测量概率

,贝叶斯滤波就可以滤起来了!

4 卡尔曼滤波

呼!有了前面一堆的铺垫之后,终于迎来了重头戏卡尔曼滤波。在这里先附上大牛的照片以表敬意,要知道当年设计出的卡尔曼滤波器可是要上天的!

其实理解了贝叶斯滤波之后,卡尔曼滤波也不难明白。因为卡尔曼滤波是一种特殊的贝叶斯滤波,它假定系统是线性高斯的,也就是说卡尔曼滤波=贝叶斯滤波

线性高斯系统。

这是什么意思呢?还记得前面提及的运动方程吗,它在线性系统中的表达为

而观测方程在线性系统中的表达为

与此同时,运动噪声

和测量噪声

都是随机高斯噪声,即

因此,运动方程的状态转移概率和观测方程的测量概率都相应地满足高斯分布

由于初始状态分布也要满足高斯分布,而且高斯分布相乘依然为高斯分布,所以在整个递归的滤波过程中,状态估计始终满足高斯分布,Amazing!

还记得贝叶斯滤波一直维护更新的是状态分布

吗?在卡尔曼滤波中也是如此,只不过因为卡尔曼滤波应用在线性高斯系统中,状态分布都满足高斯分布,因此卡尔曼滤波关心的是均值

和方差

因此,卡尔曼滤波算法过程为

可以看到,卡尔曼滤波和贝叶斯滤波一样也是分为两个步骤,先是根据前一时刻状态分布的均值和方差还有控制数据预测当前时刻的均值和方差,然后再根据测量数据调整更新当前时刻最终的均值和方差,只不过卡尔曼滤波多了一个求卡尔曼增益

的过程。

卡尔曼滤波和贝叶斯滤波的对比如下图

由于篇幅原因,就不进行公式推导了。如果觉得不够直观,那么就举个栗子用图来解释一下。

5 举个栗子

下面就用图来解释一下卡尔曼滤波,能有个更直观的感受。

首先通过上一时刻的状态预测得到当前时刻的状态分布(图a),然后通过传感器得到测量数据(图b加粗)。

结合测量数据调整更新,得到当前时刻最终的状态分布(图c加粗)。然后通过控制数据,接着预测下一时刻的状态分布(图d加粗)。

获取下一时刻的测量数据之后(图e加粗),综合得到下一时刻估计的状态分布(图f加粗)。

到这,你知道卡尔曼滤波究竟滤了谁吗?在我看来,卡尔曼滤波可以看作是,通过测量数据将仅由控制数据进行状态估计而带来不断提高的噪声(不确定性)滤除掉。同时,它更像是一种数据(传感器)融合的方法。

还记得文章前面让你蒙着眼在屋子里走吗?学了卡尔曼滤波之后应该知道怎么做能让你更准确地知道当前位置了吧?很简单,那就是睁开眼走路!

眼睛看到室内环境就相当于测量数据,综合眼睛看到的对象就会让你对自己所在的位置判断更准确啦。当然,如果你的鼻子够灵,可以通过气味判断,或者有顺风耳可以听到浴室滴水从而避免掉坑也是可以的!

我在知乎上看到知友Kent Zeng对卡尔曼滤波有更入木三分的见解,在此膜拜一下大佬。想把卡尔曼滤波吃透不容易,但如果打算用滤波作为SLAM的后端部分,那还有大堆卡尔曼滤波的变体在扑向你~

看完卡尔曼滤波后,耳边不禁响起一句:

“SLAM是一道光,滤到你发慌”!

最后,祝大家滤波开心!

参考资料:

1.《视觉SLAM十四讲:从理论到实践 第2版》高翔等人著

2.《概率机器人》Sebastian Thrun等人著

卡尔曼滤波以后再经过低通滤波器_卡尔曼滤波:究竟滤了谁?相关推荐

  1. 卡尔曼滤波对gps轨迹数据清洗_卡尔曼滤波:从入门到精通

    最早接触卡尔曼滤波是在卫星导航课中,GPS 和IMU 结合时常会用到卡尔曼滤波.但学完了也只明白了数学推导,不过是"会做题的机器".最近在学习SLAM 时想要重新好好温习一下卡尔曼 ...

  2. SLAM中的卡尔曼滤波:究竟滤了谁?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在SLAM系统中,后端优化部分有两大流派. 一派是基于马尔科夫性假 ...

  3. 【SLAM】卡尔曼滤波:究竟滤了谁?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在SLAM系统中,后端优化部分有两大流派. 一派是基于马尔科夫性假 ...

  4. 卡尔曼滤波:究竟滤了谁?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|AI算法与图像处理 在SLAM系统中,后端优化部分有两大 ...

  5. 滤波算法_标准卡尔曼滤波(SKF, Standard Kalman filter)_①基础铺垫

    学习卡尔曼滤波不能一蹴而就,特别是对于基础薄弱者而言,需要一步一步来,在推导kalman滤波算法之前,需要学习一些基础知识作为铺垫. 1.递归算法 卡尔曼滤波,它本质上是一种最优的递归的数字处理算法. ...

  6. 卡尔曼滤波与组合导航原理_卫星知识科普:一种基于卫星共视的卡尔曼滤波算法!...

    如果看到第二次了,该关注我们了,点击上面关注,分享IT技术知识. 1 ,概述 共视法是利用2个不同地点观测站的卫星接收机同时跟踪同一颗卫星,从而降低2站间共同误差,提高时间同步精度的方法.高精度的共视 ...

  7. 卡尔曼滤波系列——(一)标准卡尔曼滤波

    更新日志: 2020.03.20:修改了部分内容的表述方式,重做了实验并给出相应结果,补充了矩阵迹的求导公式: 2020.09.24:修改了推导中第四个公式的符号错误,第k时刻预测值应由上一时刻的估计 ...

  8. 初学卡尔曼滤波(KF)、扩展卡尔曼滤波(EKF)以及无迹卡尔曼滤波(UKF)

    由于研究需要,最近在看卡尔曼滤波,做个小总结. 最佳线性滤波理论起源于40年代美国科学家Wiener和前苏联科学家Kолмогоров等人的研究工作,后人统称为维纳滤波理论.从理论上说,维纳滤波的最大 ...

  9. 卡尔曼滤波算法_GPS定位笔记3 (卡尔曼滤波定位算法)

    之前的笔记介绍了传统的最小二乘解法和DOP的概念,这一节介绍卡尔曼滤波的定位解法.需要的先修基础知识: 卡尔曼滤波原理,尤其是拓展卡尔曼滤波(EKF) 卡尔曼滤波回顾与复习 标准线性卡尔曼滤波 一个线 ...

最新文章

  1. 粒子滤波在图像跟踪领域的实践
  2. 5G 时代的 Android App 开发入门与项目实战
  3. 1.8 Remove
  4. Linux 设置core dump
  5. jsp快到截止日期字体颜色变色_jsp页面中字体变色问题 - Java / Web 开发
  6. RabbitMQ 示例-生产者-消费者-direct-topic-fanout
  7. POJ 1182 食物链(并查集+偏移向量)题解
  8. 信号与系统 matlab实验报告,信号与系统 MATLAB实验报告
  9. 前端 鼠标一次移动半个像素_小猿圈分享2019年前端JavaScript面试题(三)
  10. ThinkPHP框架 _ 学习11
  11. 剑指Offer(java版):字符串的排列
  12. 30岁的我们,生活数据有了哪些改变
  13. C语言半框,如何挑选适合自己的镜框(镜片)?
  14. 计算机要重启电脑才能检测出u盘启动,u盘要电脑重启才能用
  15. Mac下Brew 卸载MySql以及安装Mysql 阿星小栈
  16. 未来十年: 机器编程会取代程序员吗?
  17. android 工具 Draw 9-patch 和去黑边
  18. MySQL数据库——MySQL数据表添加字段(三种方式)
  19. 【Microsoft Azure 的1024种玩法】五十. 通过Azure文件共享将Azure File 挂载到本地机器实现文件实时共享
  20. (论文笔记07.Survivalism: Systematic Analysis of Windows Malware Living-Off-The-Land(CCF A)2021)

热门文章

  1. Git 版本/分支/提测 常识流程梳理
  2. 2008年北京奥运会赛程表—— 08-23
  3. 掌优腾讯云喇叭收款好帮手
  4. QMutex 的使用
  5. c语言getdate,C语言 getdate()、setdate()用法及代码示例
  6. 磁盘IOPS测试指南
  7. Python和sendfile
  8. 环洋分析报告-2021年全球无糖饼干和饼干行业调研及趋势分析报告
  9. moran指数 r语言_白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(2):不同空间关系对莫兰指数的影响...
  10. PAT A 1007. Maximum Subsequence Sum (25)