滤波相关学习

滤波

为什么叫做滤波?
滤波一词来源于通信理论,它是从含有干扰的接收信号中提取有用信号的一种技术。“接收信号”相当于被观测的随机过程,“有用信号”相当于被估计的随机过程。

来自百度百科。

这个说法确实很形象,将有用的信息从一堆混在的信号中提取出来。

我们的现实世界确实充满着不确定性,没人能精准、完全的描述某种状态。对于想让机器智能的完成人类的任务的设计者来说,要重视这种不确定性,正面不确定性,并且能量化不确定性,能抓住主要矛盾,从而更精确的还原环境和自身的状态。

不确定性包含很多,如所处环境的不确定性,你不确定什么时候会冒出一个人,不确定路上是否有坑;传感器在测量的时候,由于自己的物理极限,也同样有局限,如观察不全面,观察有误差,比如摄像头,观察不了后面的,观察的东西有畸变,观察的分辨率有限等;控制机构也存在不确定性,如磨损造成的不精密,打滑等等;还有模型的不确定性,我们用于计算的物理模型,比真实的简陋,有些元素未被考虑,导致出现偏差。

我们要让机器在这么多不确定性中,可靠的完成任务,需要严谨的数学知识,来可靠的描述这种不确定性到底有多大,找到方法,来获得背后隐藏的真实状态。

在描述这些不确定性,概率、统计相关的知识就很重要了。

这下面的滤波知识,是按照《概率机器人》的顺序描述的,不是完全搬运,是自己的理解的记录。

http://www.probabilistic-robotics.org/

基本概念

状态

状态转移概率

测量概率

置信度

贝叶斯滤波

是一种递归的滤波方法:当前时刻的状态,由上一时刻的状态,结合当前的控制动作,可以推算出来一个先验的分布(因为有不确定性,所以是一个分布,而不是确切的某个量);而当前的测量仪器会给出当前观测的数据,利用这个观测的数据,来修正上面预测的分布。如此循环,一直递归下去。
上面的两个阶段,一个叫做预测,另一个叫做测量更新。其本质上是这两个数据的加权和得到最终的分布。
在这里插入图片描述
公式上描述是:
在这里插入图片描述

预测的依据是什么?
上面的p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1) 怎么解析?为什么要用条件概率来乘?

从最简单的例子来看:一个机器人沿着直线行走,其状态就是一个位置 p x p_x px,如果施加一个推力,就有90%的可能向前走1m,5%的概率,向后走1米(很诡异),5%的概率不动。如果不施加任何力量,则95%不动,5%向前0.2m,5%向后0.2m。
现在,假设机器人的位置 p x p_x px=3,这个是量出来的精确的值。此时推了它一把,现在机器人在哪里?
很明显,大家不会说它一定在 p x p_x px=4,而是会说,它90%的可能性是在4,还有5%的可能性在3.8m,还有5%的可能性是在3m处没变。
这个就是p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1)的具体表现,数学上是这样:
p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)=5%
p( x t x_t xt=3.8| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)=5%
p( x t x_t xt=4| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)=90%

所以预测的依据就是我们的状态转移的规律,也就是p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1) 这个状态转移概率。为何说概率,是因为不是一定确定性的转移到某种状态,而是有可能转移到不同状态,转到不同状态的概率不同,这个不同,就来自于我们的状态转移规律。
这个规律怎么来的?这个规律就是我们的运动方程,是我们已经研究清楚的某种运动规律。后面还会有专门的介绍运动模型的内容。

我们再看看上面的公式: ∫ \int p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1)d x t − 1 x_{t-1} xt1,这个意思是,将所有的 x t − 1 x_{t-1} xt1的状态都进行转移,然后累计。
比如,上面的 p x t − 1 px_{t-1} pxt1并不是精确的等于3,而是一个分布,比如说:
p x t − 1 px_{t-1} pxt1有90%的概率是3,5%的概率是2,5%的概率是4,这时候,我们再来计算一下,展开那个积分号(其实不严谨,这个例子是离散的 ∑ \sum ,但积分号本身就是sum的首字母的变体,本质就是求和)。
p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)
=p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)*p( x t − 1 x_{t-1} xt1=3)
+p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=2)*p( x t − 1 x_{t-1} xt1=2)
+p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=4)*p( x t − 1 x_{t-1} xt1=4)

=5%*90% (在3m处的概率,乘上推了不动的概率)
+90%*5%
+5%*5%

=9.25%

其他的t时刻的状态计算也如上所示。

上面举的例子是离散的,但实际上,我们的很多状态分布是连续的,就以上面的例子来说,位置可以取机器人所在的一维空间的任意地点的数值,实际上也是连续的。
不管离散还是连续的,求和的本质不变,贝叶斯全概率的公式不变,基本的逻辑不变。

说完了预测,那更新又是什么情况 ?
地一个问题就是:p( z t z_t zt| x t x_t xt)这个怎么来的?
这个其实就是我们的观测模型了,描述了如何从状态得到观测值的。注意,这里同样也是概率分布,是因为,真实的状态对我们是不可知的,我们所做的也只是尽量逼近真实状态而已。所以,对于某个真实状态,我们可能会观测到不同的观测值。比如,假设给了上面的机器人一个激光测距仪,让它自己测量到零点的距离。本来真实距离是1m的,由于上面说的不确定性中传感器的局限,可能会测出0.9m,0.8m,1m,1.1m,1.2m等等,所以,由真实值获取的测量值,也是一个分布,如:
p(z=0.9|x=1)=0.9
p(z=0.8|x=1)=0.1

p(z=1.2|x=1)=0.1

这个和时间一般没有关系,所以去掉了t。
在量程范围内,和具体的距离也没有关系,分布会呈现均值为真值,方差在一定范围内的情况。

所以,p( z t z_t zt| x t x_t xt) 这个是我们的先验来的,是我们预先知道的,如果用了某个厂家的设备,一般会标注出来方差。

高斯滤波

为什么叫做高斯滤波?
因为假设状态分布都是高斯分布的,单峰值的,符合我们对世界的认知。比如,当前在哪里,真值肯定只有一个,这个就是峰值,也是均值所在。
但是计算过程是否一定就是符合这种单峰的分布,却不一定。因为当你在一个完全对称的走廊的时候,你看到一扇门,你是完全估计不出来你在哪里的,这时候,就是大部分的概率平均分布在有门的地方,就不止一个峰了。(少部分在没门的地方,因为可能会看错)。

卡尔曼滤波

卡尔曼滤波,思想跟上面的贝叶斯滤波是一样的,用状态转移概率来预测,用观测数据来更新。

扩展卡尔曼滤波

UKF滤波

信息滤波

非参数滤波

直方图滤波

粒子滤波

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值