第十二章 建图
建图(Mapping)是slam的两大目标之一。上述讨论的都是定位,讨论了特征值点的定位,直接法的定位,以及后端优化。在经典的slam模型中,所谓的地图,即所有路标点的集合。一旦确定了路标点的位置,可以说明完成了建图。只是如此,那么视觉里程计,Bundle Adjustment算完成了任务,还额外的进行了优化。
但建图的需求不同,SLAM作为一种底层技术,往往是用来为上层应用提供信息。例如扫地机器人需要完成扫地工作,希望计算一条能够覆盖整张地图的路径。或者,如果上层是一个增强现实设备,那么开发者可能将虚拟物体叠加在现实物体之中。在视觉slam看来,“建图”是服务与“定位”的; 但在应用层看来,“建图”明显还带来许多其他需求:
定位:定位是基本功能不用多说。视觉里程计讨论如何利用局部地图来实现定位。在回环检测部分,只要有全局的描述子信息,就能通过回环检测确定机器人的位置。
导航:在地图中进行路径规划,在任意两个地图间寻找路径,然后控制自己运动到目标点的过程。该过程中至少知道地图中哪些地方不可通过,而哪些地方是可以通过。这属于稀疏特征点地图的能力范围,至少得是一种稠密的地图。
避障:避障也是机器人经常碰到的一个问题,不过它更注重局部的,动态的导航物的处理。同样,仅有特征点,无法判断某个特征点是否为障碍物,所以需要稠密地图。
重建:稠密地图,利用slam获得周围环境的重建效果,并把它展示给其他人看。例如:三维的视频通话或者网上购物等。也可以构建带纹理的平面,就像电子游戏中的三维场景那样。
交互:主要指人与地图之间的互动。例如:科幻电影里面是真的,在增强现实中,我们会在房间里放置虚拟的物体,并与这些虚拟物体之间有一些互动——比如点击虚拟网页浏览器来观看视频,或者向墙面投掷物体。
1. 单目稠密重建
a. 稠密重建解决方案:
.使用单目相机,通过移动相机之后进行三角化测量像素的距离。
.使用双目相机,利用左右目的视差计算像素的距离(多目原理相同)。
.使用RGB-D相机直接获得像素距离。
但单目和双目对深度的获取往往是“费力不讨好”——花大量的计算,最后得到一些不怎么可靠的深度估计。当然,RGB-D也有一些量程,应用范围和光照的限制。
b. 深度滤波器技术:深度估计能随测量的增加从一个非常不确定的量,逐渐收敛到一个稳定值。
2. 极线搜索与块匹配
第十二章 建图
建图(Mapping)是slam的两大目标之一。上述讨论的都是定位,讨论了特征值点的定位,直接法的定位,以及后端优化。在经典的slam模型中,所谓的地图,即所有路标点的集合。一旦确定了路标点的位置,可以说明完成了建图。只是如此,那么视觉里程计,Bundle Adjustment算完成了任务,还额外的进行了优化。
但建图的需求不同,SLAM作为一种底层技术,往往是用来为上层应用提供信息。例如扫地机器人需要完成扫地工作,希望计算一条能够覆盖整张地图的路径。或者,如果上层是一个增强现实设备,那么开发者可能将虚拟物体叠加在现实物体之中。在视觉slam看来,“建图”是服务与“定位”的; 但在应用层看来,“建图”明显还带来许多其他需求:
定位:定位是基本功能不用多说。视觉里程计讨论如何利用局部地图来实现定位。在回环检测部分,只要有全局的描述子信息,就能通过回环检测确定机器人的位置。
导航:在地图中进行路径规划,在任意两个地图间寻找路径,然后控制自己运动到目标点的过程。该过程中至少知道地图中哪些地方不可通过,而哪些地方是可以通过。这属于稀疏特征点地图的能力范围,至少得是一种稠密的地图。
避障:避障也是机器人经常碰到的一个问题,不过它更注重局部的,动态的导航物的处理。同样,仅有特征点,无法判断某个特征点是否为障碍物,所以需要稠密地图。
重建:稠密地图,利用slam获得周围环境的重建效果,并把它展示给其他人看。例如:三维的视频通话或者网上购物等。也可以构建带纹理的平面,就像电子游戏中的三维场景那样。
交互:主要指人与地图之间的互动。例如:科幻电影里面是真的,在增强现实中,我们会在房间里放置虚拟的物体,并与这些虚拟物体之间有一些互动——比如点击虚拟网页浏览器来观看视频,或者向墙面投掷物体。
1. 单目稠密重建
a. 稠密重建解决方案:
.使用单目相机,通过移动相机之后进行三角化测量像素的距离。
.使用双目相机,利用左右目的视差计算像素的距离(多目原理相同)。
.使用RGB-D相机直接获得像素距离。
但单目和双目对深度的获取往往是“费力不讨好”——花大量的计算,最后得到一些不怎么可靠的深度估计。当然,RGB-D也有一些量程,应用范围和光照的限制。
b. 深度滤波器技术:深度估计能随测量的增加从一个非常不确定的量,逐渐收敛到一个稳定值。
2. 极线搜索与块匹配
上方的图主要是描述极线搜索。沿着第一幅图像中的极线的某头走到另一头,逐个比较每个像素与p1的相似程度。类似直接法中的回环检测,然而单个像素的亮度没有区分性,那就比较像素块,在p1周围取一个大小为w*w的小块,然后极线上也取很多同样大小的小块进行比较,就可以一定程度上提高区分性。取名块匹配。
a. 目前计算小块与小块间的差异有
SAD(Sum of Absolute Difference)。取2个小块的差的绝对值之和.
SSD(Sum of Squared Distance)。取2小块的差的平方和。
NCC(Normalized Cross Correlation)。归一化相关,计算的是两个小块的相关性。
3. 并行化:效率的问题
在进行极线搜索时,上一个像素计算与下一个像素没必然联系。那么就可以用多个线程,分别计算每个像素,然后将结果统一起来。
4. RGB-D稠密建图
RGB-D相机完全通过传感器中硬件测量得到,无须消耗大量的计算资源来估计。而且,RGB-D的结构光或飞时原理,保证了深度数据对纹理的无关性。故RGB-D进行稠密建图是相对
a. 建图方式
稠密建图主流方式。其中最直观,最简单的方法。根据估算的相机位姿,将RGB-D数据转化为点云(Point CLoud),然后进行拼接,最后得到一个由离散的点组成的点云地图(Point Cloud Map)。
b.八叉树地图
点云有几个明显的缺陷。一是通常规模很大,但许多时候,它的“大”并非必须,许多不必要的细节都加进来了。二是点云地图无法处理运动的物体,点云中只有“添加点”而没有“当点消失时把它移除”的做法。实际环境中将变得不够实用。
c. *TSDF地图和Fusion系列
与slam相似但又有稍许不同的研究方向:实时三维重建。前面地图模型中,以定位为主体,地图的拼接是作为后续加工步骤放在slam框架中的。
三维重建把重建准确地图作为主要目标,所以基本都需要利用GPU加速,通常需要较重的计算设备。与之相反,SLAM向轻量级,小型化方向发展,有些甚至放弃了建图和回环检测部分,只保留视觉里程计。
TSDF(截断符号距离函数),一种网格式地图,这个存储在显存而不是内存中,利用GPU的并行特性,可以并行地对每个体素进行计算和更新。
上方的图主要是描述极线搜索。沿着第一幅图像中的极线的某头走到另一头,逐个比较每个像素与p1的相似程度。类似直接法中的回环检测,然而单个像素的亮度没有区分性,那就比较像素块,在p1周围取一个大小为w*w的小块,然后极线上也取很多同样大小的小块进行比较,就可以一定程度上提高区分性。取名块匹配。
a. 目前计算小块与小块间的差异有
SAD(Sum of Absolute Difference)。取2个小块的差的绝对值之和.
SSD(Sum of Squared Distance)。取2小块的差的平方和。
NCC(Normalized Cross Correlation)。归一化相关,计算的是两个小块的相关性。
3. 并行化:效率的问题
在进行极线搜索时,上一个像素计算与下一个像素没必然联系。那么就可以用多个线程,分别计算每个像素,然后将结果统一起来。
4. RGB-D稠密建图
RGB-D相机完全通过传感器中硬件测量得到,无须消耗大量的计算资源来估计。而且,RGB-D的结构光或飞时原理,保证了深度数据对纹理的无关性。故RGB-D进行稠密建图是相对
a. 建图方式
稠密建图主流方式。其中最直观,最简单的方法。根据估算的相机位姿,将RGB-D数据转化为点云(Point CLoud),然后进行拼接,最后得到一个由离散的点组成的点云地图(Point Cloud Map)。
b.八叉树地图
点云有几个明显的缺陷。一是通常规模很大,但许多时候,它的“大”并非必须,许多不必要的细节都加进来了。二是点云地图无法处理运动的物体,点云中只有“添加点”而没有“当点消失时把它移除”的做法。实际环境中将变得不够实用。
c. *TSDF地图和Fusion系列
与slam相似但又有稍许不同的研究方向:实时三维重建。前面地图模型中,以定位为主体,地图的拼接是作为后续加工步骤放在slam框架中的。
三维重建把重建准确地图作为主要目标,所以基本都需要利用GPU加速,通常需要较重的计算设备。与之相反,SLAM向轻量级,小型化方向发展,有些甚至放弃了建图和回环检测部分,只保留视觉里程计。
TSDF(截断符号距离函数),一种网格式地图,这个存储在显存而不是内存中,利用GPU的并行特性,可以并行地对每个体素进行计算和更新。