SLAM的功能: 直到现在我们可以知道SLAM包含:定位,导航,避障,重建,交互。
之前的都是稠密地图,不同功能要不同地图,本节看稠密地图构建。
构建地图必须要知道每个像素点到照片的距离。
立体视觉 : 单目和双目的统称,单目做三角化,双目做时差;
另一种:用RGB-D直接获得距离。
稠密地图,无法将每个像素都当做特征点。寻找新的匹配算法。
极线搜索示意图
描述的是:不同视觉下观察同一个点,相机1中的
p
1
p_1
p1 点,实际的点一定在
d
d
d 这条线上,在相机2中观察这个点就在极线
l
2
l_2
l2 上,在这条线上搜索和
p
1
p_1
p1 比较相近的点。这就是极线搜索
块匹配
深度滤波器
在搜索距离比较长的情况下,真实的对应点尽管只有一个,但在搜索极线时会有很多峰值,如下,
非凸性,对一个点我们不会用单一数值去表示深度,而是用高斯概率
P
(
d
)
=
N
(
μ
,
δ
2
)
P(d) = N(\mu, \delta ^2)
P(d)=N(μ,δ2),新的数据到来,都会观测它的深度,两个高斯分布进行融合。
分析这样做的误差(集合不确定性,这里以一个像素误差为例)
当最后的
δ
\delta
δ 收缩到一定小,认为深度数据已经收敛。
估计稠密像素深度的完整过程:
结果:大部分是正确的,但是没有得到预期效果。
总之太过于依赖环境纹理和光照,不可靠
RGB-D的结构光和飞时原理,保证了深度数据对纹理的无关性。只要能反射光就能估计深度;
当有一个深度 d d d 的像素出现:证明深度值对应的空间点观察到一个占据数据,且从光心到这个点的线段没有障碍。
一个八叉树地图如下:
前边为了使用,我们以定位为主题进行了建图,这样的建图有问题
地图的构建只能在关键帧层面,由于算力原因;
没有优化地图,只是拼接叠加,假如两帧出现同一个物体,这种叠加往往不够准确,会有两个重影—鬼影。
总而言之,地图构建的不够精确
这里将重建准确地图作为主题,定位次之,基于GPU加速。且研究方向正在往大规模,大型动态场景的重建方向发展。
RGBD实时重建方法也很多,TSDF地图等等。
单目或双目可以构建;但是RGB-D容易点,更稳定,没有讨论拓扑地图,只讨论了度量地图。