激光SLAM算法之一:Gmapping原理分析

概念:

      1、Gmapping是基于滤波SLAM框架的常用的开源SLAM算法。

      2、Gmapping基于RBpf粒子滤波算法,即将定位和建图过程分离,先进行定位再进行建图。

      3、Gmapping在RBpf算法上做了两个主要的改进:改进提议分布选择性重采样

优缺点:

     优点:Gmapping可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高,对激光雷达频率要求低。

     缺点:随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图。并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。 

问题:

 我希望读者可以带着问题去阅读论文,这样才可以真正理解Gmapping中的很多概念。这里问题主要有:

  1. 为什么RBpf可以将定位和建图分离;
  2. Gmapping是如何在RBpf的基础改进提议分布的;
  3. 为什么要执行选择性重采样;
  4. 什么是粒子退化及如何防止粒子退化;
  5. 为什么Gmapping严重依赖里程计;
  6. 什么是提议分布;
  7. 什么是目标分布;
  8. 为什么需要提议分布和目标分布;
  9. 算法中是如何计算权重;

我相信读者如果可以很好地回答这些问题的话就可以明白Gmapping的算法了。    

论文:

       我先带着读者捋顺论文的结构,在解析论文的过程中回答上面的几个问题。

     摘要:

       这部分简单解释了Gmapping是基于RBpf。RBpf是一种有效解决同时定位和建图的算法,它将定位和建图分离;并且每一个粒子都携带一幅地图(这也是粒子滤波不适合构建大地图的原因之一)。但PBpf也存在缺点:所用粒子数多频繁执行重采样粒子数多会造成计算量和内存消耗大;频繁执行重采样会造成粒子退化。因此Gmapping在RBpf的基础上改进提议分布选择性重采样,从而减少粒子个数防止粒子退化。改进的提议不但考虑运动(里程计)信息还考虑最近的一次观测 这样就可以使提议分布的更加精确从而更加接近目标分布。选择性重采样通过设定阈值,只有在权重变化超过阈值时才执行重采样从而大大减少重采样的次数。

这里可以回答第一个问题了:为什么Gmapping可以先定位后建图?

       这里我们用公式来描述一下SLAM的过程:,这是一个条件联合分布概率,我们有观测和运动控制的数据来同时推测位姿和地图。由概率论可知联合概率可以转换成条件概率即:P(x,y) = p(y|x)p(x)。 通俗点解释就是我们在同时求两个变量的联合分布不好求时可以先求其中一个变量再将这个变量当做条件求解另一个变量。这就是解释了Gmapping为什么要先定位再建图:同时定位和建图是比较困难的,因此我们可以先求解位姿,已知位姿的建图是一件很容易的事情。

      第一章 简介:

         SLAM是一个鸡生蛋、蛋生鸡的 问题。定位需要建图,建图需要先定位,这就造成SLAM问题的困难所在。因此RBpf被引入解决SLAM问题。即先定位再建图。RBpf的主要问题在于其复杂度高,因为需要较多的粒子来构建地图。我们已知粒子数和计算量内存消耗息息相关,粒子数目较大会造成算法复杂度增高。因此减少粒子数是RBpf算法改进的方向之一;同时由于RBpf频繁执行重采样会造成粒子退化。

这里回答一下什么是粒子退化:

       粒子退化主要指正确的粒子被丢弃粒子多样性减小,而频繁重采样则加剧了正确的粒子被丢弃的可能性粒子多样性减小速率。这里先涉及一下重采样的知识,我们知道在执行重采样之前会计算每个粒子数的权重,有时会因为环境相似度高或是由于噪声的影响会使接近正确状态的粒子数权重较小而错误状态的粒子的权重反而会大。重采样是依据粒子权重来重新采粒子的,这样正确的粒子就很有可能会被丢弃,频繁的重采样更加剧了正确但权重较小粒子被丢弃的可能性。这也就是粒子退化原因之一。

       另外一个原因就是频繁重采样导致的粒子多样性减小速率加大,什么是粒子多样性呢?就是粒子的不同,就像最开始有十个粒子,如果发生重采样后其中有两个粒子共享一个父亲,而上一次十个粒子中,其中一个粒子没有孩子则说明粒子多样性减小。再通俗点解释,比如兔子生兔子这个问题。我们的笼子只能装十个兔子,所以在任意时刻我们只能有十只兔子,但兔子是会繁殖的,那么怎么办呢?索性把长的不好看的兔子干掉(这里的好看就是粒子权重,好看的权重就高不好看的权重就低,哈哈作者就是这么任性)。让好看的兔子多生一只补充干掉的兔子。我们假设兔子一月繁殖一回,这样的话在多年后这些兔子可能就都是一个兔子的后代。就是说兔子们的DNA都是一样的了,也就是兔子DNA的多样性减小。为什么频繁执行重采样会使粒子多样性减小呢,这就好比我兔子一月繁殖一会我可能五年后这些兔子的才会共有一个祖先。但如果让兔子一天繁殖一会呢?可能一个月后这些兔子就全是最开始一只兔子的后代了,兔子们的DNA就成一样了。因此为了防止粒子退化就要减少重采样的次数。

       回到论文,这里就轮到我们Gmapping闪亮登场了,为了减小粒子数Gmapping提出了改进提议分布,为了减少重采样的次数Gmapping提出了选择性重采样。现在问题到了如何改进提议分布了,先简单说一下后面会有详细介绍。就以下图为例,图中虚线为p(x|x’,u)的概率分布也就是我们里程计采样的高斯分布,这里只是一维的情况。实线是p(z|x)的概率分布是使用激光进行观测后获得真实状态的高斯分布。由图可知观测提供的信息的准确度(方差小)相比控制的准确度要高的很多。这就是Gmapping改进提议分布的动因。但问题是我们无法对观测建模,这就造成了我们想用观测但是呢观测的模型有无法直接获得,后面论文中改进提议分布就是围绕如何利用观测来模拟目标分布。 

       第二章 使用RBpf建图:

          这节主要讲RBpf建图的过程,首先RBpf是个什么东西?SALM要解决的问题就是有控制数据u1:t和观测数据z1:t来求位姿和 地图的联合分布。问题是这两个东西在一起并不太好求,怎么办使用条件概率把它俩给拆开先来求解位姿,我们知道有了位姿后建图是一件很容易的事情。这就是RB要做的事情:先进行定位在进行建图。公式就变成了下面的形式:

        为了估计位姿,RBpf使用粒子滤波来估计机器人位姿,而粒子滤波中最常用的是重要性重采样算法。这个算法通过不断迭代来估计每一时刻机器人的位姿。算法总共包括四个步骤:采样- 计算权重-重采样-地图估计。这些没什么好讲的看论文就会明白。

         这里读者可能对论文中的权重计算的迭代公式清楚,这里我贴一张我注释过的公式图片

         下面会用到提议分布和目标分布的知识,这里我先介绍一下什么是提议分布目标分布

目标分布:什么是目标分布,就是我根据机器人携带的所有传感器的数据能确定机器人状态置信度的最大极限。我们知道机器人是不能直接进行测量的,它是靠自身携带的传感器来获得对自身状态的估计。比如说我们想要估计机器人的位姿,而我的机器人只有车轮编码器和激光雷达,两者的数据结合就会形成机器人位姿估计,由于传感器是有噪声的,所以估计的机器人位姿就会有一个不确定度,而这个不确定度是我机器人对当前位姿最大缺点性的最大极限,因为我没有数据信息来对机器人的状态进行约束了。机器人位姿变量通常由高斯函数来表示,不确定度就对应变量的方差。

提议分布:为什么要有提议分布?有人会说有了目标分布为什么还要有提议分布进行采样来获取下一时刻机器人位姿信息。答案是目标分布没有办法直接进行采样。知道里程计模型的都明白里程计模型是假设里程计三个参数是服从高斯分布的,因此我们可以从高斯分布中采样出下一时刻即日起的位姿。但对于激光观测是无法进行高斯建模的,这样是激光SLAM使用粒子滤波而不用扩展卡尔曼滤波的原因之一。为什么呢?我们知道基于特征的SLAM算法经常会用扩展卡尔曼,因为基于特征的地图进行观测会返回机器人距离特征的 一个距离和角度值,这是很容易进行高斯建模然后使用扩展卡尔曼进行滤波。而激光的返回的数据是360点的位置信息,每个位置信息都包括一个距离和角度信息,要是对360个点进行高斯建模计算量不言而喻。 但问题是我们希望从一个分布中进行采样来获取对下一时刻机器人位姿的估计,而在计算机中能模拟出的分布也就是高斯分布、三角分布等有限的分布。因此提议分布被提出来代替目标分布来提取下一时刻机器人位姿信息。而提议分布毕竟不是目标分布因此使用计算粒子权重来表征提议分布和目标分布的不一致性。

     第三章 在RBpf的基础上改进提议分布和选择性重采样

        主要是围绕如何改进提议分布和选择性重采样展开的。

       我们知道我们需要从提议分布中采样得到下一时刻机器人的位姿。那么提议分布与目标分布越接近的话我们用的粒子越少,如果粒子是直接从目标分布采样的话只需要一个粒子就可以获得机器人的位姿估计了。因此我们要做的是改进提议分布,如果我们只从里程计中采样的话粒子的权重迭代公式就成了:

         但是由第一幅图片我们可知里程计提供位姿信息的不确定度要比激光小的多,我们知道激光的分布相比里程计分布更接近真正的目标分布,因此如果可以把激光的信息融入到提议分布中的话那样提议分布就会 更接近目标分布。

未完待续。。。。

猜你喜欢

转载自blog.csdn.net/liuyanpeng12333/article/details/81946841