摘要
在包含多种动态物体的场景中利用RGB-D相机持续建图,直接在TSDF上跟踪并且通过对齐颜色信息来估计相机的位姿。TSDF是有效地表示使用体素哈希;利用初始配准后得到的残差,以及模型中自由空间的显式建模来检测动态物体。
介绍
该方法是纯几何的方法,没有利用语义信息。本文提出了一种基于TSDF高效的SLAM算法,它可以利用纯几何的滤波器鲁棒的应对动态环境。用配准后得到的残差结合自由空间中的显式表达来检测动态物体,对所有的动态物体的检测具有普适性。

相关工作
KinectFusion展示了基于TSDF的RGB-D相机利用深度信息的建图能力,但是利用voxel grid建图的体积是容易被限制
利用八叉树地图代替了voxel grid
通过利用具有不同分辨率的层次体素块来扩展体素希哈
除了TSDF,另外一个流行的建模方法是面元(有法线和半径的圆盘)
利用面元建图
ElasticFusion用变形图扩展该方法,它允许通过闭环关闭对地图进行长期修正;
https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8421015
https://arxiv.org/pdf/1804.09194.pdf
利用几何和语义信息剔除动态物体,它们还能独立地重建和跟踪所有检测到的目标。
本文的方法
本文利用TSDF来代表环境模型(一个SDF值,一个权重值和颜色信息(RGB)),运行权重加权平均更新每个体素,提高了对异常值的鲁棒性;颜色信息支持网格的纹理化和在配准过程中使用光度信息。本文动态的利用希哈函数来索引体素(通过只分配所需的体素块来稀疏地表示世界,可以重建更大的场景)。
位姿估计
利用点隐式(point-to-implicit)的方法,本文的方法不会从模型中产生合成视图,而是直接将从传感器传入的点云对齐到SDF,因为SDF根据定义提供了点到最近表面的距离(可以直接使用SDF值作为误差函数)。利用三线性插值对SDF和相邻体素的光度进行插值,以减轻体素网格的离散化效果。
定义SDF误差函数:
N是图片中像素点的数量,r_i是第i个像素点的残差,X_i是像素点对应的3D点:
利用颜色信息来优化对齐,将相对于光度的误差函数定义为模型中当前图像像素的光度与相应体素的强度之间的光度误差:
总的误差函数为:
wc加权光度信息和深度信息的贡献。
利用LM算法对三种不同的粗到细的输入图像子采样来解决该最小二乘问题,以加快收敛速度。
动态检测
首先把当前帧和现在的模型做一个最初的配准,然后利用E_d计算每个像素点的残差,然后设置一个阈值:
第一个参数是介于0(所有都是别掩盖的)和1(没有掩盖的)的,第二个参数是用TSDF表示的截断距离。
每个超过阈值的残差都会产生一个二进制的掩模。利用腐蚀掩模初始化depth-aware flood fill algorithm:
把深度值不超过某个阈值的邻域都加到一个区域中。最后把遮盖的像素点去除再做一次配准,利用得到的新的相机位姿把删去掩盖部分的RGB-D信息整合到模型中。
模型雕刻和自由空间管理
TSDF的一个缺点就是无法保持跟踪感知到自由空间,把每个摄像机锥体外的体素标记为自由体素,这对于距离传感器太远而无法集成到TSDF中的点的测量尤其有用。我们给每个自由空间标记一个SDF值等于阶段距离。给锥体内的每个体素分配一个自由空间对于内存消耗来说不是最好的,我们可以通过八叉树表示自由空间来改进。
另外一个考虑的就是如果先前的静态物体移动了,他的体素就要从地图中移除。= 如果一个体素中本来包含一个静态物体再后来的检测中不见了,我们就应该把这个体素标记为空。这可以由TSDF自动的完成:我们更新SDF存储在体素进行加权平均的当前值和τ的截断距离之间的关系,因此一个体素如果长时间被检测出是空的,我们就可以确信的标记他为空。
处理无效的测量
对于普通的深度相机,深度图中存在不准确的值,如下图的黑点所示:
针对以上问题的解决办法:(1)直接剔除深度为0的点(整个场景都要在测量范围内)
(2)尽可能纠正不可测量的值
对于2:从n个连续帧创建一个临时模型,并从已配准的姿态生成虚拟深度。用虚拟深度的对应值替换每个零值来填充原始深度图像。通过多次观察可以减少不可测量值。其余值假设来自相机的超距测量,并替换为高固定深度值。纠正结果如下所示。然而,这个解决方案假设没有任何东西比深度传感器的最小范围更接近。如果我们在RGB-D传感器上增加一个额外的传感器,例如一个简单的声纳,它可以检测到是否有物体离相机太近,这种假设就可以消除。此外,该方法的一个缺点是实际模型的生成延迟为n帧,这对于某些机器人应用来说可能不是最优的。