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

本文介绍了卡尔曼滤波的基本概念、状态估计、贝叶斯滤波和其在线性高斯系统中的应用。卡尔曼滤波通过结合控制数据与测量数据,提供对状态的精确估计,常用于SLAM系统的后端优化。文中以蒙眼行走为例,生动解释了卡尔曼滤波如何减少不确定性,提高状态估计的准确性。
摘要由CSDN通过智能技术生成

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

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



1 什么是滤波

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

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

再比如,在图像处理中,如果存在椒盐噪声(不能吃的!是在图像中随机出现的黑白点),我们会选择用中值滤波,将 n × n n\times n n×n个像素值的中值取出来以代替中心点的值,这样就能滤除椒盐噪声。

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

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

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

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



2 状态估计

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

状态可以看作是机器人或者环境中可能会对未来产生某些变化的因素,比如说机器人的位姿 R \boldsymbol{R} R t \boldsymbol{t} t、机器人的运动速度 v \boldsymbol{v} v(这个在纯视觉SLAM中是没有的)、环境中的路标点 l \boldsymbol{l} l等等,不同的SLAM系统拥有不同的状态。

我们假设 x k \boldsymbol{x}_{k} xk为机器人的状态,在SLAM的整个过程中,我们能获取到两种数据:控制数据和测量数据。

  • 控制数据是机器人记录自身运动的传感器获取的数据,比如IMU中的陀螺仪可以测量角速度、加速度计可以测量运动的加速度。

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

假设控制数据为 u k \boldsymbol{u}_{k} uk,运动噪声为 ε k \boldsymbol{\varepsilon}_{k} εk,那么机器人的运动可以用一个运动方程来表达,因为假设了马尔科夫性,所以当前时刻状态只与上一时刻有关,它表示从k-1时刻到k时刻机器人状态发生了怎样的变化。
x k = f ( x k − 1 , u k ) + ε k \boldsymbol{x}_{k}=f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}\right)+\boldsymbol{\varepsilon}_{k} xk=f(xk1,uk)+εk

假设测量数据为 z k \boldsymbol{z}_{k} zk,测量噪声为 δ k \boldsymbol{\delta}_{k} δk,那么机器人的测量可以用一个观测方程来表达,它表示在k时刻所在的位置观测到路标点产生测量数据。
z k = h ( x k ) + δ k \boldsymbol{z}_{k}=h\left(\boldsymbol{x}_{k}\right)+\boldsymbol{\delta}_{k} zk=h(xk)+δk

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

我们用置信度 b e l ( x k ) bel(\boldsymbol{x}_{k}) bel(xk)来表示当前时刻的状态分布,它是以控制数据和测量数据为条件的后验概率,即
b e l ( x k ) = p ( x k ∣ z 1 : k , u 1 : k ) bel(\boldsymbol{x}_{k})=p\left(\boldsymbol{x}_{k} | \boldsymbol{z}_{1: k}, \boldsymbol{u}_{1: k}\right) bel(xk)=p(xkz1:k,u1:k)

而在获得当前时刻测量数据之前的状态分布可以用 b e l ‾ ( x k ) \overline{bel}\left(\boldsymbol{x}_{k}\right) bel(xk)来表示,它表示的后验概率为
b e l ‾ ( x k ) = p ( x k ∣ z 1 : k − 1 , u 1 : k ) \overline{bel}(\boldsymbol{x}_{k})=p\left(\boldsymbol{x}_{k} | \boldsymbol{z}_{1: k-1}, \boldsymbol{u}_{1: k}\right) bel(xk)=p(xkz1:k1,u1:k)

同时,如果用概率来表达运动过程的话,则是 p ( x k ∣ x k − 1 , u k ) p\left(\boldsymbol{x}_{k} | \boldsymbol{x}_{ k-1},\boldsymbol{u}_{k}\right) p(xkxk1,uk),这表示了从k-1时刻到k时刻机器人的状态转移概率。而用概率来表达观测过程,则是 p ( z k ∣ x k ) p\left(\boldsymbol{z}_{k} | \boldsymbol{x}_{ k}\right) p(zkxk),表示第k时刻机器人的测量概率。

所以,如下图所示,每一时刻的状态 x k \boldsymbol{x}_{k} xk只与前一时刻的状态 x k − 1 \boldsymbol{x}_{k-1} xk1和当前时刻的控制 u k \boldsymbol{u}_{k} uk有关,而每一时刻的测量 z k \boldsymbol{z}_{k} zk只与当前时刻的状态 x k \boldsymbol{x}_{k} xk有关。这就是一个隐马尔可夫模型,状态不能直接得到,但是可以通过测量观察到。



3 贝叶斯滤波

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值