机器人运动估计系列(番外篇)——从贝叶斯滤波到卡尔曼(上)

滤波理论在机器人状态估计里的重要性不言而喻,因此对滤波理论进行系统的了解非常有必要。本篇文章目的是从贝叶斯滤波(BF)的角度来串联现在流行的几种滤波方法:卡尔曼(KF)、扩展卡尔曼(EKF)、无迹卡尔曼(UKF)、粒子滤波(PF)等。

本篇文章主要参考文献为:
《贝叶斯滤波与平滑》,作者:希莫·萨日伽,译者:程建华等。
英文原版:《Bayesian Filtering and Smoothing》

为了简便起见,下文中用英文缩写来代表各种滤波器。
贝叶斯滤波:Bayes Filter:BF
卡尔曼滤波:Kalman Filter:KF
扩展卡尔曼:Extend Kalman Filter:EKF
无迹卡尔曼:Unscent Kalman Filter:UKF

1 为什么是BF?

首先,BF是什么?BF是依据机器人传感器获取的观测数据,利用Bayes公式(概率论)去估计机器人的状态的一种手段。这里的关键点在于,BF假设了机器人当前的状态服从某一个概率分布,将机器人状态估计问题建模为一个概率分布的估计问题,从而利用概率论的数学工具来解决机器人的状态估计。

那么为什么要用BF呢?这是因为,机器人的运动模型以及传感器的观测模型常常受到噪声干扰,而这种噪声都是随机性的。这样建模就可以有利于我们把噪声的分布、统计特性给估计出来,从而去除噪声,得到真实观测以及真实状态。

那么,BF具体是怎么对机器人状态估计问题建模的呢?

举一个例子,我做了一只小狗机器人,它身上装了GPS,可以时刻返回小狗机器人的位置。为了遥控它,我还给它装了一个遥控接收装置(根据小狗之前在的位置加上遥控量,也能算出小狗的位置)。但是,我遇到两个问题。一是,我花的钱太少了,买到GPS不太准,本来小狗应该在(5,3)的位置,但是测量的结果却是(5.1,2.8)。二是,小狗机器人接收到指令是前进1米,但是实际走的却可能是0.98米。小狗机器人的观测过程和运动过程中都存在噪声的干扰,这使得我想要知道我的小狗跑到哪里变得很困难,需要借助滤波手段来估计小狗位置。

基于这个例子,由于受到噪声污染,小狗机器人位置和GPS的观测可以被建模为概率分布,以表征其不确定性,即:

xk∼p(xk|x1:k−1,y1:k−1)

x_k \sim p(x_k|x_{1:k-1},y_{1:k-1})

yk∼p(yk|x1:k,y1:k−1)

y_k \sim p(y_k|x_{1:k},y_{1:k-1})
其中, x,yx,y分别代表小狗机器人的位置,以及GPS测量到的小狗机器人的位置。下标代表的是时间。这两个式子分别可以称为小狗机器人系统的动态模型(通常用状态方程描述,即从一个状态如何变化到另一个状态)和观测模型(通常用观测方程描述,即当前状态下能够获取到怎么样的观测),表达的意思是:k时刻小狗的位置服从以1到k-1时刻的小狗位置以及1到k-1时刻的GPS测量值为条件的一个概率分布;另外,k时刻GPS的测量值服从以1到k时刻的小狗位置以及1到k-1时刻的GPS测量值为条件的一个概率分布。

当然,上面这种建模方式是比较一般化的情况,而有些情况下(例如本例),k时刻的状态和观测未必和很久以前的状态与观测有关系,这时可以对这种建模方式进行一定简化。

简化一:状态量的马尔科夫性
假设k时刻小狗的位置只与k-1时刻的小狗的位置有关,由此:

xk∼p(xk|xk−1)

x_k \sim p(x_k|x_{k-1})
简化二:观测量的条件独立性
假设k时刻GPS的位置的值只与k时刻小狗的位置有关,由此:

yk∼p(yk|xk)

y_k \sim p(y_k|x_k)
上述两个简化的含义非常直观,通常的机器人状态估计问题基本能进行这样的简化。

当然,机器人状态估计不一定只能用求解概率分布的方法。最小二乘(观测与状态误差最小)也是常用的方法,卡尔曼滤波最早实际上是从最小二乘法的基础上推导出来的。

2 BF的基本框架

由于将机器人的状态估计问题考虑为了估计机器人状态的概率分布问题,那么就可以引入Bayes公式来进行计算了。这部分首先介绍Bayes公式,然后介绍利用Bayes公式估计状态概率分布的方法。

2.1 Bayes公式

这个公式是接下去一切讨论的前题,罗列如下,不多做解释,其中a、b、c是不同的随机变量。
Bayes公式:

p(a|b)=p(b|a)p(a)p(b)

p(a|b)=\frac{p(b|a)p(a)}{p(b)}
此外,由此公式延伸出的公式还有:

p(a,b)=p(a|b)p(b)=p(b|a)p(a)

p(a,b)=p(a|b)p(b)=p(b|a)p(a)

p(a|b)=p(b|a)p(a)∫p(b|a)p(a) da

p(a|b)=\frac{p(b|a)p(a)}{\int{p(b|a)p(a)\ da}}

p(a|b)p(b|c)=p(a,b|c)

p(a|b)p(b|c)=p(a,b|c)
以上公式非常重要,在下文中会陆续用到。读者要是不理解可以先将其接受,之后再去查阅资料。

2.2 BF基本方程

首先,我们需要明确BF的目标是什么?
估计机器人状态的概率分布。在小狗的例子中,就是通过手头信息估计出k时刻小狗位置的概率分布p(xk|y1:k)p(x_k|y_{1:k})。而我们手头的信息就包括,1到k-1时刻小狗的位置x1:k−1x_{1:k-1}以及1到k时刻 GPS的测量值y1:ky_{1:k}。

2.2.1 批处理方法

因此,我们首先想到的方法大概是:

p(xk|y1:k)=p(y1:k|xk)p(xk)p(y1:k)

p(x_{k}|y_{1:k})=\frac{p(y_{1:k}|x_{k})p(x_{k})}{p(y_{1:k})}
这种方法也就是所谓的批处理贝叶斯方法。但是这种方法每次都要拿所有的测量值来重新计算概率分布,对于计算机是个沉重的负担。因此,有了改进的基于递归的贝叶斯滤波方法。

2.2.2 递归方法

事实上,在k时刻,我们除了GPS的测量值y1:ky_{1:k}以外,还有k-1时刻对小狗位置的估计p(xk−1|y1:k−1)p(x_{k-1}|y_{1:k-1})。(需要注意,当k=1时,由于k-1=0时刻没有观测值,小狗位置的概率分布p(x0)p(x_0)比较特殊,与观测无关。这个分布由人为给定,被当做小狗位置的先验分布。)

因此,我们根据k-1时刻的小狗位置分布和k时刻的GPS观测可以利用递归的方法得到k时刻的位置分布,这也就是BF的核心。估计k时刻小狗位置的计算过程包括两步,如下:

1-Step:预测
这一步是用p(xk−1|y1:k−1)p(x_{k-1}|y_{1:k-1})去得到p(xk|y1:k−1)p(x_{k}|y_{1:k-1}),注意这里并没有用到k时刻的观测值。

p(xk|y1:k−1)=∫p(xk|xk−1)p(xk−1|y1:k−1) dxk−1

p(x_k|y_{1:k-1})=\int{p(x_k|x_{k-1})p(x_{k-1}|y_{1:k-1})}\ dx_{k-1}
其中, p(xk|xk−1)p(x_k|x_{k-1})代表了状态由k-1时刻到k时刻的转移概率,也就是上文中介绍了简化了的小狗动态模型,这里的不确定性是由小狗运动过程中的噪声引入的。

这一步之所以称为预测步,可以理解为,在已知k-1时刻机器人位置的情况下,根据机器人本身运动学模型(通常是状态方程),去预测k时刻机器人的位置。p(xk−1|y1:k−1)p(x_{k-1}|y_{1:k-1})在这里被作为先验分布,p(xk|y1:k−1)p(x_{k}|y_{1:k-1})是由机器人运动学模型预测得到的预测分布。

2-Step:更新
这一步是用观测值yky_k去更新预测分布p(xk|y1:k−1)p(x_{k}|y_{1:k-1}),从而得到k时刻机器人位置的后验分布p(xk|y1:k)p(x_k|y_{1:k})。

p(xk|y1:k)=p(yk|xk)p(xk|y1:k−1)∫p(yk|xk)p(xk|y1:k−1) dxk

p(x_k|y_{1:k})=\frac{p(y_k|x_k)p(x_k|y_{1:k-1})}{\int{p(y_k|x_k)p(x_k|y_{1:k-1})} \ dx_k}
其中, p(yk|xk)p(y_k|x_k)代表了依据k时刻状态 xkx_k观测到 yky_k的概率,也就是小狗机器人GPS的观测模型,这里的不确定性是由GPS观测过程中的噪声引入的。

这一步之所以称为更新是因为这步中用到了k时刻的观测量,从而将原本的预测分布p(xk|y1:k−1)p(x_{k}|y_{1:k-1})更新为了后验分布p(xk|y1:k)p(x_k|y_{1:k})。而这个后验分布,将作为估计k+1时刻小狗机器人位置的先验分布,从而开始下一轮的递归解算。

总结
BF的整个过程可以描述为,首先选定一个最初状态的先验分布p(x0)p(x_0),进行预测步,得到k=1的预测分布,再用k=1的观测去更新预测分布得到k=1的后验分布,然后将这个后验分布作为先验分布,去预测k=2的预测分布,然后以此类推。。。

虽然BF的过程看着很简单,但是实际应用起来却并没有这么容易。首先,初始的先验分布不好猜测,动态模型以及观测模型的概率分布也不容易确定,只能去假设其形式,常见的比如高斯分布。另外,公式里的积分同样是个非常头疼的问题,只有再状态模型、观测模型很特殊的情况下才比较好求闭型解。因此,想要实际应用BF还需要做更多的假设,使得问题得到简化。而不同的假设方案,就由此引出了不同的滤波器。接下来,我就将进一步介绍KF、EKF、UKF是如何在BF的框架下被推导出来的!!!!!!请马上走开,不要回来!!!!!!

机器人运动估计系列(番外篇)——从贝叶斯滤波到卡尔曼(上)相关推荐

  1. 机器学习番外篇—朴素贝叶斯三种模型(多项式,高斯,伯努利)

    朴素贝叶斯三种模型(多项式,高斯,伯努利) 高斯 有些特征可能是连续型变量,比如说人的身高,物体的长度,这些特征可以转换成离散型的值,比如如果身高在160cm以下,特征值为1:在160cm和170cm ...

  2. Airtest的UI自动化番外篇、安卓手机密码键盘在AirTest上黑屏

    Airtest的UI自动化番外篇.安卓手机密码键盘在AirTest上黑屏 在使用AirTest测试的过程中,涉及到密码的时候,会出现airtest监控的手机页面黑屏(手机没黑屏,只是电脑监控的页面黑屏 ...

  3. 骨龄预测系列---番外篇

    索引 前言 一.DataGenerator是什么? 二.使用步骤 总结 前言 在跑这个系列的代码的时候,发现数据太大了,9G呢~~~,所以引入数据生成器来减轻一下负担 一.DataGenerator是 ...

  4. 【功能安全(ISO 26262)系列】番外篇 第一话 戏说汽车安全是个什么鬼

    更多汽车专业精彩内容尽在微信公众号: AUTO世代 写在前面的话 最近开了个汽车功能安全专题系列: 功能安全(ISO 26262)系列 主要阐述汽车功能安全(ISO 26262)关键专业内容及个人学习 ...

  5. python爬虫进程和线程_python爬虫番外篇(一)进程,线程的初步了解-阿里云开发者社区...

    整理这番外篇的原因是希望能够让爬虫的朋友更加理解这块内容,因为爬虫爬取数据可能很简单,但是如何高效持久的爬,利用进程,线程,以及异步IO,其实很多人和我一样,故整理此系列番外篇 一.进程 程序并不能单 ...

  6. NLP系列(5)_从朴素贝叶斯到N-gram语言模型

    作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处:http://blog.csdn.net/longxinchen_ml/article/details/50646528 h ...

  7. 滤波估计理论(一)——贝叶斯滤波

    滤波估计理论(一)--贝叶斯滤波(Bayesian Filtering) 估计问题的建模 状态空间模型 概率模型 贝叶斯估计方法 批处理贝叶斯估计 预测,滤波还是平滑? 贝叶斯滤波 状态预测 量测更新 ...

  8. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法

    数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...

  9. 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏

    为什么80%的码农都做不了架构师?>>>    转自:http://blog.csdn.net/pongba/archive/2008/09/21/2958094.aspx 数学之美 ...

  10. 机器人鸣人是哪一集_火影忍者596集剧情介绍番外篇九尾抢夺指令_鸣人VS机器人版鸣人...

    亲爱的火影迷们,没想到火影忍者本周竟然更新了两集,终于可以一饱眼福了,在火影忍者596集中,不仅是晓,就连大蛇丸都加入了九尾的抢夺中,袭击木叶,看鸣人等木叶的伙伴们如何迎敌,下面本网为您介绍一下火影忍 ...

最新文章

  1. Tessellation (曲面细分) Displacement Mapping (贴图置换)
  2. 铲屎官福音:汪星人和喵星人的小情绪,AI 可以识别了
  3. Releases 31 Authoritative Schedule,等10月29日发布了~~~
  4. asp向不同的用户发送信息_ASP.NET Core 中的那些认证中间件及一些重要知识点
  5. 【收藏】解决关闭Hadoop时no namenode to stop异常
  6. java extends原则_Java泛型extends及super区别实例解析
  7. 数组----数组的拷贝、排序、遍历、引用,console交互
  8. OpenCV-python学习笔记(五)——shreshoding阈值化
  9. 《C程序员从校园到职场》一1.2 C语言的主要特点
  10. C++ 过去的这一年
  11. 系统集成项目管理工程师(软考中级)—— 第七章 知识产权 笔记分享
  12. matlab数组输出字符,Matlab字符型数组的输入输出
  13. webgl漫反射公式物理原理猜测
  14. QScrollArea的简单使用
  15. 正点原子stm32视频教程第7~10节知识总结
  16. PHP调用wsdl接口实例化SoapClient抛出异常
  17. 基于PHP的酒店住宿管理系统毕业设计源码261455
  18. JdbcTemplate Query.getResultList致列名无效
  19. 没有未桥接的主机网络适配器
  20. android 股票 开发,Android版的股票行情K线图开发

热门文章

  1. 象棋军师app已经上线
  2. 伺服电机和步进电机的区别
  3. python模拟微信登录公众号_python通过手机抓取微信公众号
  4. windows动态库和静态库
  5. Roson的Qt之旅 #117 QTcpSocket和QUdpSocket详细介绍
  6. MySQL安装步骤(ZIP版)
  7. mysql 1031_MySQL5.6数据导入MySQL5.7报错:ERROR 1031 (HY000)
  8. 粒子群算法几个适应度评价函数
  9. 龙格库塔方法在实际生活中的应用(数值计算Java)
  10. Evernote推出实体笔记本Evernote Business Notebook,支持搜索手写笔记,用实体便签将笔记同步到Evernote上的相应分类