解读《视觉SLAM十四讲》,带你一步一步入门视觉SLAM—— 第 2 讲 初识SLAM (上)

近来,实习下班比较早,再加上天气冷,不用陪女朋友逛街,所以早早回到寝室,继续写博客!

在上一篇博客中,我解读了《视觉SLAM十四讲》第1讲的内容。在第一讲中,书中并没有什么技术性的问题,主要是作者介绍了一些预备知识。

这篇博客,我要带你解读第2讲——初识SLAM。我相信如果你运行了我在上一篇博客中介绍的ORB-SLAM2,那么你对SLAM已经有一个很好的认识了。

一、初识SLAM

在这一讲中,作者主要介绍了以下内容:

  • 首先通过一个小机器人作为引入,讲解了SLAM中最为常用的三种视觉传感器:单目相机、双目相机、深度相机;
  • 然后介绍了经典的SLAM框架包含哪些过程,并介绍了每一个过程实现的意义;
  • 又引入了通用的运动方程和观测方程来通过数学的方式表述了SLAM问题
  • 最后作者介绍了一些实践行的工作,包括安装一款Linux系统,如何在Linux系统上编写一小段代码、还介绍了管理代码之间依赖关系的工具CMake,同时也介绍了链接库,最后介绍了一款IDE。

在这一讲中,作者从多个方面,对SLAM做了认识性的介绍,我相信对于初学者来说,这里面一定有很多的专业术语让你措手不及,但是这个是不可避免的,任何一门学科为了表述和交流的方便,都形成了自己的一套术语,可能一开始你不习惯,但是很快它就会印在你的脑海里,请你多一些耐心。这一讲你不用每一个字都理解,但是你要做到对大部分内容心中有数。对每一个术语即使不能用专业的语言解释它,但是要大概知道它是啥。

二、解读

下面我对书中的难于理解的内容,进行一些解读,你一定要在阅读过书中对应章节的内容之后再往下看,只有那样你才会有共鸣。

SLAM的传感器

在书中作者介绍了SLAM常用的传感器。我在前面说过,只要是完成同时建图和定位的任务,那么我们就把它叫做SLAM,我们可以想到能满足这个要求的传感器很多,比方说激光雷达,相机,轮式里程计惯性测量单元,我想这其中你最熟悉的传感器一定是:相机。别的传感器可能你听说过,可能没有听说过,你不必在他们上面多花时间去了解,因为《视觉SLAM十四讲》这本书只针对相机。
  
单目相机
  作者在书中介绍了单目相机,由于现在是初识阶段,所以没有介绍单目相机的原理,作者不断地在强调一个问题,那就是单目相机的尺度问题。
  
  我不知道你对单目相机的尺度是否理解,如果你不理解,下面请你跟我一起做一个实验,闭上你的一只眼睛,然后将你的双手掌心朝向你,两个手掌之间前后方向稍微有一些距离,这个时候你会发现,你根本不可能通过一只眼睛分清楚两个手掌谁在前谁在后。但是你可能会说,我明明知道他们的前后啊,对不起那并不是你的眼睛观察出来的,而是你通过近大远小的规律判断出来的,你知道两只手一样大,看着小的离我们就远,但是相机不知道啊!你能得到距离感那是因为你通过后天不断地学习获得的知识,并不是你的眼睛直接看出来的。
  
  单目相机就相当于我们在用一只眼睛观察世界,尽管它看到了这一切,但是它并不知道它所看到的东西,具有多大的真实尺寸。由于还没有学到单目相机的模型,所以只能通过一个感性的方法,帮你理解一下单目的尺度问题。
  
  由于没有尺度,也就是说没有真实的空间距离,那么我们后续产生的一切轨迹或者点,都没有真实单位信息,有的只是它们之间的相对关系,也许你还不能理解这句话,但是你可以记住它,留下一个疑问,日后你自会理解。

双目相机
双目相机,你就可以理解成像我们的眼睛一样,两个眼睛之间的距离,叫做基线。这个是双目相机出厂就知道的信息,然后我们想过两个双目之间三角关系和相似三角形关系,就可以知道照片上一个点,对应到空间上的真实位置。也许你觉得很神奇,或者匪夷所思,但是当你在后续文章中了解双目相机模型之后,你就会发现它的测距原理是如此的简单。

深度相机
深度相机由叫RGB-D相机,其中R、G、B表示的是图片的三个通道,D表示的是深度,说明RGB-D相机获得是一张,彩色的图片,并且每一个像素还额外获得了深度信息。作为我们对SLAM的应用,你对RGB-D相机的了解到此就足够了,没有必要再去深挖它的原理。

经典SLAM的视觉框架

作者介绍了目前视觉SLAM最为常见的流程,初看你一定对这每一部分都没有什么认识,也许根据“传感器数据”、“回环检测”、“建图”的字面意思,你能推断一些信息,但是这离完全理解框架的流程还很远。
  
  我觉得没有什么比举例子,然后带着你感受一遍这个流程来的直接。所以我下面采用一个例子,但是感受一下这个过程:

  • 下面请你把自己想象成一个机器人,你的两个眼睛就是一个双目摄像头,假设你的眼睛不转,头也不转,眼睛的视角只能通过脚步移动去控制。
  • 现在你在一个超市里面,你的双脚开始移动,你一边走一边通过眼睛观察你前方的场景,你每走一步,你就会更深入走进你眼前的场景,而你就能通过眼前场景的变化推断出你行进的轨迹,然后你就在这个超市里面不停地走动,那么你的轨迹越来越长,但是由于你的眼睛观察有误差,所以就会导致你大脑在形成轨迹时产生的误差越来越大。
  • 走着走着,忽然,你发现自己好像来过这个地方,这时你马上发现了一个问题,我的脑海中推断的轨迹是我现在在水产区,实际上我现在在蔬果区,于是你可以断定自己前面的轨迹产生了多大的误差,于是你就想采用了一个不算太好,但是也只能这样的方法,你将你推断导致的误差,平均分给你前面走过每一步,这样的话虽然总体误差没有降低,但是你最后所在的位置会更接近你真实的位置,这样做会让我们看起来更加接近真实的运动轨迹。
  • 最后,你走了很多的路,你也修正了自己在超市运动的轨迹,而超市的整个环境的样貌也就在你的脑海里,留下了印象。

其实上面的这一个过程就是一个经典的SLAM框架:

  • 眼睛看到的东西,就对应于框架中的传感器数据;
  • 我们通过前后两步看到的场景变换,推断出轨迹的过程,就是前端,也叫作视觉里程计;
  • 忽然我们发现自己回到了走过的地方,就对应于回环检测;
  • 上面例子中我们发现自己实际在蔬果区,但是根据累计的观察,我们觉得自己是在水产区,然后我们就优化整个误差,这个就对应于后端,常常采用的方法就是非线性优化;
  • 最后我们记住了整个超市的环境样貌,这就是建图。

关于视觉里程计,我要多说一句:在我们的印象中“XX计”,例如温度计,都是一种实际的物件,但是视觉里程计它并不是你可以摸得到的物件,它就是通过代码完成相邻时刻运动的计算,由于它的这个效果和我们实际的里程计一样,所以把它叫做:视觉里程计。

我相信你仔细阅读过上面的例子,亲身体会一下,你一定能理解SLAM的整个流程,如果你对上面流程更为细致的东西有疑惑,也请你不要着急,后面的所有内容都是围绕着上面的流程进行的,待你学完之后,一定迎刃而解。

出于对内容质量的考虑(主要是我不想熬夜),每篇内容尽量不要太长,所以这一讲,我就分成两部分解读。下篇博客解读这一讲的SLAM通用数学模型和一些实践的内容。

要从容地着手去做一件事,一旦开始,就要坚持到底。——比阿斯【美】

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值