在 SLAM 中,非常强调未知环境
在理论上,没法限制“小萝卜”的使用环境,这意味着没法假设像 GPS 这些外部传感器都能顺利工作
因此,使用携带式的传感器来完成 SLAM 是重点关心的问题
特别地,当谈论视觉 SLAM 时,主要是指如何用相机解决定位和建图问题
SLAM中使用的相机与平时见到的单反摄像头并不是同一个东西
它往往更加简单,不携带昂贵的镜头,以一定速率拍摄周围的环境,形成一个连续的视频流
普通的摄像头能以每秒钟 30 张图片的速度采集图像,高速相机则更快一些
按照相机的工作方式,把相机分为三个大类:
直观看来,单目相机只有一个摄像头,双目有两个
而 RGB-D 原理较复杂,除了能够采集到彩色图片之外,还能读出每个像素离相机的距离
它通常携带多个摄像头,工作原理和普通相机不尽相同
此外, SLAM 中还有全景相机、 Event相机等特殊或新兴的种类
虽然偶尔能看到它们在 SLAM 中的应用,不过到目前为止还没有成为主流
只使用一个摄像头进行 SLAM 的做法称为单目 SLAM(Monocular SLAM)
这种传感器结构特别的简单、成本特别的低
所以单目 SLAM 非常受研究者关注
单目相机的数据:照片
照片,本质上是拍照时的场景(Scene),在相机的成像平面上留下的一个投影
它以二维的形式反映了三维的世界
显然,这个过程丢掉了场景的一个维度:也就是所谓的深度(或距离)
在单目相机中,无法通过单个图片来计算场景中物体的距离(远近)
但之后会看到,这个距离将是 SLAM 中非常关键的信息
由于人类见过大量的图像,养成了一种天生的直觉,对大部分场景都有一个直观的距离感(空间感)
它能帮助判断图像中物体的远近关系
比如说,能够辨认出图像中的物体,并且知道它们大致的大小
比如说,近处的物体会挡住远处的物体,而太阳、月亮等天体一般在很远的地方;
再如物体受光照后会留下影子等等
这些信息可以都帮助判断物体的远近,但也存在一些情况
这个距离感会失效,这时无法判断物体的远近以及它们的真实大小
在这张图像中,无法仅通过它来判断后面那些小人是真实的人,还是小型模型
除非转动视角,观察场景的三维结构
换言之,在单张图像里,无法确定一个物体的真实大小
由于近大远小的原因,它们可能在图像中变成同样大小的样子
由于单目相机只是三维空间的二维投影
所以,如果真想恢复三维结构,必须移动相机的视角
在单目 SLAM 中也是同样的原理
必须移动相机之后,才能估计它的运动(Motion)
同时估计场景中物体的远近和大小,不妨称之为结构(Structure)
从生活经验中知道,如果相机往右移动,那么图像里的东西就会往左边移动
这就给我们推测运动带来了信息
另一方面,还知道近处的物体移动快,远处的物体则运动缓慢
于是,当相机移动时,这些物体在图像上的运动,形成了视差
通过视差,就能定量地判断哪些物体离得远,哪些物体离的近
然而,即使知道了物体远近,它们仍然只是一个相对的值
想象在看电影时候,虽然能够知道电影场景中哪些物体比另一些大
但我们无法确定电影里那些物体的“真实尺度”
直观地说,如果把相机的运动和场景大小同时放大两倍,单目所看到的像是一样的
同样的,把这个大小乘以任意倍数,都将看到一样的景象
这说明了单目 SLAM 估计的轨迹和地图,将与真实的轨迹、地图,相差一个因子
也就是所谓的尺度(Scale)
由于单目 SLAM 无法仅凭图像确定这个真实尺度,所以又称为尺度不确定性
平移之后才能计算深度,以及无法确定真实尺度,这两件事情给单目 SLAM 的应用造成了很大的麻烦
它们的本质原因是通过单张图像无法确定深度
所以,为了得到这个深度,人们又开始使用双目和深度相机
双目相机(Stereo)目的,在于 通过某种手段测量物体的距离,克服单目无法知道距离的缺点
双目相机的数据:左眼图像,右眼图像。通过左右眼的差异,能够判断场景中物体离相机距离
如果知道了距离,场景的三维结构就可以通过单个图像恢复出来,也就消除了尺度不确定性
双目相机由两个单目相机组成,但这两个相机之间的距离(称为基线(Baseline))是已知的
通过这个基线来估计每个像素的空间位置——这和人眼非常相似
人类可以通过左右眼图像的差异,判断物体的远近,在计算机上也是同样的道理
如果对双目相机进行拓展,也可以搭建多目相机,不过本质上并没有什么不同
计算机上的双目相机需要大量的计算才能(不太可靠地)估计每一个像素点的深度
相比于人类真是非常的笨拙
双目相机测量到的深度范围与基线相关
基线距离越大,能够测量到的就越远
所以无人车上搭载的双目通常会是个很大的家伙
双目相机的距离估计是比较左右眼的图像获得的,并不依赖其他传感设备
所以它既可以应用在室内,亦可应用于室外
双目或多目相机的缺点:
因此在现有的条件下,计算量是双目的主要问题之一
尽管都是为测量距离,但双目相机与深度相机测量深度的原理是不一样的
深度相机(又称 RGB-D 相机)是 2010 年左右开始兴起的一种相机
可以直接测量物体的图像和距离,从而恢复三维结构
它最大的特点是可以通过 红外结构光 或 Time-of-Flight(ToF)原理,像激光传感器那样
通过 主动向物体发射光并接收返回的光,测出物体离相机的距离
这部分并不像双目那样通过软件计算来解决,而是通过物理的测量手段
所以相比于双目可节省大量的计算量
目前常用的 RGB-D 相机包括 Kinect/Kinect V2、 Xtion live pro、Realsense 等
不过,现在多数 RGB-D 相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题
在 SLAM 方面,主要用于室内 SLAM,室外则较难应用
参考:
《视觉SLAM十四讲》
相关推荐:
视觉SLAM笔记(1) 初识SLAM
谢谢!