从零入门激光SLAM(十一)——如何求解SLAM问题

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激光SLAM,也方便想入门SLAM的同学和小白学习参考,相信看完会有一定的收获。如有不对的地方欢迎指出,欢迎各位大佬交流讨论,一起进步。博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。

目录

1.做个游戏深刻理解SLAM问题

2.基于滤波的SLAM问题

2.1 贝叶斯概率

 2.2  贝叶斯滤波

 2.3  粒子滤波

 2.3  求解SLAM问题

3. 基于图优化的SLAM

3.1 图

3.2 最小二乘算法

3.3 最小二乘求解

3.4 基于图优化的SLAM框架

1.做个游戏深刻理解SLAM问题

首先我们先来玩一个游戏,猜猜我在哪?

下图选取我们学校的地图,只给你说我在学校里,那么请你猜一猜我在哪?

你应该会说,我在学校的任何一个地方,且是等概率的。

 下面我给自己规定我开始行走了,每一步是70cm,每次转身是90° ,我给你说我开始移动了,并且给你发了一张我附近环境的照片。这时你会觉得我在操场附近周围的概率很大,但学校有三个操场,你还是不知道我具体位置。

 我走了100步给你说我看到了宿舍楼在我前方,你会认为我在下图深色区域的概率比较大,但学校有三个宿舍区,你还是不知道我具体位置。

我向左走了500m,看到了体育馆我在右边,这时你可以更精确的定位到我大概的位置,因为满足这样有体育馆和宿舍区方位的路径只能是这一条。但还是一个大概的区域,不能精确定位。

 这时我又给你说,我向右转走50步到体育馆门口了,你可以更加精确的定位我在体育馆门口的某处,并且你估计出我行走的路径如下图的右下角所示。

 但是我自己本身走路是不可能走直线的,并且转向时也不能保证自己一定是90°,所以目前你估计的路径和真实我走的路径是存在差异的。但是如果我每走一步都给你精确的周围环境信息和距离,我相信你是可以很精确的估计出我的位姿变化和路径的。

好了游戏到此结束,上述的游戏证明了两点

  • 位姿估计问题靠自己的估计是不够的,就像我设定自己每一步是70cm,但不可能每一步都走70cm一点不差。
  • 位姿估计的过程似乎和概率有点关系,上述游戏从开始的整个九龙湖为可能空间到最后的几个点。

2.基于滤波的SLAM问题

2.1 贝叶斯概率

上述游戏让我们觉得位姿估计过程好像和概率有关,那么既然说到了概率问题,我们就从最常用的抛硬币问题说起,让你预测下一次正面反面的概率是多少?你会说正反,反面各0.5呗,大家都知道,没错是这样。

下面增加难度了,我让你估计一下明天股票是涨还是跌,给你整不会了,这谁知道,这要是我知道了,我就不上学炒股了。那为什么抛硬币容易估计,估计股票就难呢?这是因为股市是一个随机过程,随机过程:研究的随机变量之间不独立,由于不独立,无法做随机实验,难度较高。

随机实验需要满足3个条件:

①相同条件下,可重复进行;

②一次试验,结果不确定,但所有结果已知(比如抛硬币,要么正要么反,所有结果已知);

③试验之前,结果未知。

换句话说,你想如果你想在相同条件下做股市实验,除非时间倒流。很多跟时间有关系的都是随机过程,比较难以估计(做重复实验),例如股市、温度、位姿估计——预测问题。

那好,你不知道怎么估计了,我们看一下股市大佬是怎么估计股票涨跌的。他们会每天看各种新闻,搜寻各种各样的外界信息来判断明天股市的涨跌情况。

比如你初始估计股票涨跌的概率是各0.5,但你看到今天特斯拉刹车失灵了,那么你肯定会觉得明天特斯拉股票大概率是跌。 

 到这里你会觉得,这个估计股市的涨跌和估计位姿咋似乎有点像呢?没错,这就是贝叶斯概率,贝叶斯概率的核心思想就是先验概率根据外部观测得到后验概率。

 2.2  贝叶斯滤波

贝叶斯公式的的推导如下所示:

 为了加深理解,再举一个测温度的小例子

 这样你知道这类概率估计问题如何求解了,主体就是自己不会,就找外界信息。下面让你估计这一天的温度,你会说这有啥难的,我每一时刻都进行一次贝叶斯公式的计算,先估计一个概率,再根据外界观测修正。但你会觉得每次估计有点麻烦吧,如果我就第一次温度的先验是估计,得到后验估计,将这个后验估计当做下一时刻的先验估计以此类推,这样我整个过程不就只需要开始自己估计一次,后续都是自动的多米诺骨牌一样。太棒了同学,你自己推出了贝叶斯滤波。

 上图就是贝叶斯滤波的过程和公式,贝叶斯滤波虽然能够解决这类问题,但大多数情况下没有解析解,因为需要做无穷积分,那怎么求解呢?

 2.3  粒子滤波

粒子滤波的核心思想就是用一堆粒子来近似概率密度,从而避免无穷积分,看下图你会觉得咋和咱们的游戏越来越有种说不出来的关系。

 粒子滤波相比于贝叶斯滤波的区别是,它需要选择粒子,并且用粒子去传播的,那么如何高效的采样粒子是一个重要的问题。

下图就用咱们之前的游戏很简单的说明了一下如何选择高效的例子,初始采样,权重评估和重采样。假设游戏只让你选择81个点去猜我所在的位置,一开始你只能平均选择位置点,在我发来一张操场照片后,让你再选择81个点,你肯定会在操场周围选择。

总结一下选粒子的过程:

初始在一定区域平均选 50 个粒子
随后根据观测数据,该区域每个地点权重不同
根据权重把地点做成转盘,转动转盘 50 次重新选择 50 个粒子
进行下次迭代

 2.3  求解SLAM问题

好了,现在我们知道位姿变换问题要用到贝叶斯滤波迭代,并且引入了粒子滤波来方便求解,这下子我们终于可以求解SLAM问题了。

以惯性测量作为初始的先验估计,用激光雷达的观测信息来修正得到后验位姿,这就是最初的SLAM系统——Fast-SLAM。后续大名鼎鼎的Gmapping算法在Fast-SLAM的基础上,进行了内存爆炸优化和粒子耗散优化,具体什么操作大家搜一下,我写累了hhh。

 Gmapping是一个基于2D激光雷达使用RBPFRao-Blackwellized Particle Filters)算法完成二维栅格地图构建的SLAM算法,适用于室内小范围SLAM

优点:gmapping可以实时构建室内环境地图,在小场景计算量少,且地图精度较高,对激光雷达扫描频率要求较低。

缺点:随着环境的增大,构建地图所需的内存和计算量就会变得巨大,所以gmapping不适合大场景构图。一个直观的感受是,对于200x200米的范围,如果栅格分辨率是5cm,每个栅格占用一个字节内存,那么每个粒子携带的地图都要16M的内存,如果是100粒子就是1.6G内存。

但由于用滤波去求解永远都无法消除上述的三个红色问题,SLAM就进入了图优化时代。

3. 基于图优化的SLAM

3.1 图

首先介绍什么是图,用一个图(Graph)来表示SLAM问题,图中的节点来表示机器人的位姿,两个节点之间的边表示两个位姿的空间约束。

Graph-based SLAM:构建图,并且找到一个最优的配置(各节点的位姿),让预测与观测的误差最小。

 图优化的过程就像是织一个好看的蜘蛛网。图优化核心思想:误差不是突然来的,而是和整个过程都有关系,需要整体调整一下找到全局最优,保证总误差最小。

全局最优这个词是不是有点熟悉,这不就是我们的最小二乘算法所解决的问题吗?没错图优化SLAM的求解思想还真是用的最小二乘算法,只不过是非线性的。 

3.2 最小二乘算法

我们最早应该在高中接触过最小二乘算法,用于直线拟合。如果将每个点看成位置,曲线看成路径,这不就SLAM位姿估计了嘛。

说起来简单做起来难啊,线性的我会求解,那非线性的最小二乘问题咋求解嘞。

3.3 最小二乘求解

3.4 基于图优化的SLAM框架

总结一下基于图优化:考虑了移动载体历程中全部的位姿状态和环境观测信息,用节点和边形成的图来表示一系列的移动机器人位姿和约束,建立和维护关联数据,可独立出前端实现并行计算,是一种更为高效和普适的优化方法。一般分为扫描匹配、闭环检测、后端优化、点云地图存储。

 我自己根据理解,画了一下现在广泛使用的激光SLAM系统,如有不对请指正。

到此,你了解了SLAM的前世今生了,下一节我将针对SLAM系统的每一块进行讲解,之后再结合Lego-loam源码进行讲解。如果内容对你有用的话,请订阅本专栏吧,免费哦~

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
以下是从开始的三维激光雷达SLAM教程的步骤: 1. 搭建激光SLAM的运行环境:确保你的计算机上已经安装了ROS(Robot Operating System)和Gazebo仿真环境。如果没有安装,你可以从ROS官方网站下载并按照官方文档进行安装。 2. 运行数据集在Gazebo中构建仿真地图并添加动态障碍物:使用Gazebo仿真环境创建一个虚拟的三维地图,并添加动态障碍物模拟真实环境。你可以使用ROS提供的相应软件包和插件来实现这一步骤。 3. 采集激光数据:使用仿真小车或者真实的激光雷达设备采集激光数据。你可以使用ROS提供的激光雷达驱动程序来接收和处理激光数据。 4. A-LOAM详解,算法和代码:深入了解A-LOAM算法的原理和实现细节,并查看相应的代码。A-LOAM是一种常用的三维激光SLAM算法,它可以用于在实时环境中建立地图并进行定位和导航。 5. Lego-LOAM详解,算法和代码:除了A-LOAM,你还可以了解Lego-LOAM算法的原理和实现细节,并查看相应的代码。Lego-LOAM是另一种常用的三维激光SLAM算法,它也可以用于实时建图和定位导航。 在进行教程中的实践时,请确保按照每个步骤的指导执行操作,并逐步完成搭建、仿真、数据采集、算法理解和代码实现的过程。你可以参考教程中提供的代码,也可以自己编写代码进行实践。 请注意,这仅是一个从开始的三维激光雷达SLAM教程的简要概述。对于每一步的具体细节和更多深入的解释,请参考教程中提供的引用资料和相关文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桦树无泪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值