专栏名称: 泡泡机器人SLAM
SLAM的最新资讯,干货内容。
目录
相关文章推荐
51好读  ›  专栏  ›  泡泡机器人SLAM

【泡泡机器人翻译专栏】ORB-SLAM:精确多功能单目SLAM系统(一)

泡泡机器人SLAM  · 公众号  · 机器人  · 2017-07-31 09:00

正文

请到「今天看啥」查看全文


Williams等人在综述[13]中比较了几种基于景象的位置识别方法,即图像到图像的匹配,这种方法在大环境下比地图到地图或图像到地图的方法更准确。在景象匹配方法中,bags of words(词袋)[14]的使用以其效率很高而脱颖而出,比如概率方法FAB-MAP[15]算法,。DBoW2方法[5]则首次使用了BRIEF描述子[16]生成的二进制词袋和非常高效的FAST特征检测算法[17]与SURF和SIFT相比,FAST算法的运时间减小了至少一个数量级。 然而,尽管系统运行效率高、鲁棒性好,采用BRIEF描述子不具有旋转不变性和尺度不变性,系统只能运行在同一平面内(否则会造成尺度变化) ,闭环检测也只能从相似的视角中进行。在我们之前的工作[11]中, 我们提出了一个使用ORB特征检测子的DBoW2位置识别器。ORB特征是具有旋转不变和尺度不变特性的二进制特征,因此,用它生成的快速识别器具有较好的视角不变性。 我们在4组不同的数据集上演示了位置识别功能,从10K图像数据库中提取一个候选闭合回路的运算时间少于39毫秒。 在本文的工作中,我们提出了一种改进版本的位置识别方法,采用covisibility信息,在检索数据库时返回几个假设情况而不是最好的匹配。


B、地图初始化

单目SLAM系统需要设计专门的策略来生成初始化地图,因为单幅图像不具备深度信息 。解决这个问题的一种方法是一开始跟踪一个已知结构的对象,正如文献[20]。另一个方法是用一个具有高不确定度的逆深度参数[21]来初始化点的深度信息,理想情况下,该参数会在后期逐渐收敛到真值。最近Engel提出的半稠密方法[10]中就采用类似的方法将像素的深度信息初始化为一个随机数值。


如果是从两个视角来初始化特征,就可以采用以下方法: 一种是假设局部场景在同一平面内[4],[22],然后利用Faugeras等人论文[23]中的单应性来重构摄像头相对位姿。第二种是将场景建模为通用情况(不一定为平面),通过Nister提出的五点算法[26]来计算本征矩阵[24],[25],但该方法存在多解的问题。 这两种摄像头位姿重构方法在低视差下都没有很好的约束,如果平面场景内的所有点都靠近摄像机的中心,则结果会出现双重歧义[27]。另一方面,非平面场景可以通过线性8点算法[2]来计算基础矩阵,相机的相对位姿就可以无歧义的重构出来。


针对这一问题,我们在本文的第四部分提出了一个新的 基于模型选择的自动初始化方法 ,对平面场景算法选择单应性矩阵,而对于非平面场景,算法选择基础矩阵。 模型选择的综述方法可参见Torr等人的论文[28]。基于类似的理论,我们设计了一种启发式初始化算法,算法考虑到在接近退化情况(比如:平面,近平面,或是低视差)下选择基础矩阵进行位姿估计可能存在的问题,则选择单应性计算。在平面的情况下,为了保险起见,如果最终存在双重歧义,则算法避免进行初始化,因为可能会因为错误选择而导致算法崩溃。因此,我们会延迟初始化过程,直到所选的模型在明显的视差下产生唯一的解。


C、单目SLAM

单目SLAM最初采用滤波框架[20],[21],[29],[30]来建模。在该类方法中,每一帧都通过滤波器联合估计地图特征位置和相机位姿。这样做带来的问题是在处理连续帧图像上对计算资源的浪费和线性误差的累积。而另外一种SLAM框架是基于 关键帧 的,即采用少数筛选过的图像(关键帧)来构建地图,因为构图不再与帧率相关联,因此基于关键帧的SLAM方法不但节省了计算资源,还可以进行高精度的BA优化。Strasdar等人在论文[31]中证明了基于关键帧的单目SLAM方法比滤波器方法在相同的运算代价上定位结果更精确。


基于关键帧的SLAM系统最具代表性可能是由Klein和Murray等人提出的 PTAM算法 [4]。 它第一次将相机追踪和地图构建拆分成两个并行的线程运行 ,并成功用于小环境的实时增强现实中。后来文献[32]引入边缘特征对PTAM算法进行了改进,在跟踪过程中增加了旋转估计步骤,实现了更好的重定位效果。由于PTAM中的地图云点通过图像区块与FAST角点匹配,因此仅适合于特征跟踪并不适合用于后期的位置识别。而实际上,PTAM算法并没有进行大闭环检测,其重定位也仅是基于关键帧低分辨率缩略图的相关性进行的,因此视角不变性较差。


Strasdat等人在文献[6]中提出了一个基于GPU实现的大尺度单目SLAM系统,该系统前端采用光流算法,其次用FAST特征匹配和运动BA;后端是基于滑动窗口的BA。闭环检测通过具有相似性约束(7自由度)的位姿图优化来进行,该方法可以矫正在单目SLAM系统中出现的尺度偏移问题。在本文中,我们也将采用这种7自由度的位姿图优化方法,并将其应用到我们的Essential Graph中,更多细节将在第三部分D节里面描述。


Strasdat等人在文献[7]中采用了PTAM的前端,但其跟踪部分仅在一个从covisibility graph提取的局部图中进行。他们提出了一个双窗口 优化后端,在内部窗口中连续进行BA,在有限大小的外部窗口中构建位姿图 。然而, 只有当外部窗口尺寸足够大到可以包含整个闭环回路的情况下,闭环检测才能起作用。在我们的算法中,我们利用了Strasdat等人提出的 基于covisibility的局部地图的优势,并且通过covisibility map来构建位姿图,同时重新设计前端和后端。 另一个区别是,我们并没有用特别的特征提取方法做闭合回路检测(比如SURF方法),而是 基于相同的追踪 和建图的特征进行位置识别,获得具有鲁棒性的重定位和闭环检测。


在Pirker等人的论文[33]中作者提出了CD-SLAM方法,一个非常复杂的系统,包括闭环检测,重定位,大尺度操作以及对算法在动态环境运行所做的改进。但文中并没有提及地图初始化。因此不利于后期读者对算法的复现,也致使我们没法对其进行精确性、鲁棒性和大场景下的测试对比。


Song等人在论文[34]提出的视觉里程计方法中使用了ORB特征做追踪和处理BA后端滑动窗口。相比之下,我们的方法更加全面,因为他们的算法中没有涉及全局重定位,闭环回路检测,而且地图也不能重用。他们也使用了相机到地面的真实距离来限制单目SLAM算法的尺度漂移。Lim等人在我们提交本文最初的版本[12]之后发表了论文[25],他们也采用相同的特征进行跟踪,地图构建和闭环检测。但是,由于Lim等人的算法选择的BRIEF描述子不具备尺度不变性,因此其算法运行受限在平面轨迹上。他们的算法仅从上一帧关键帧开始跟踪特征点,因此访问过的地图不能重用,这样的处理方式与视觉里程计很像,存在系统无限增长的问题。我们在第三部分E小节里面与该算法进行了定性比较。


Engel等人在最近的论文[10]里提出了LSD-SLAM算法,其可以构建大场景的半稠密地图。算法并没有采用特征提取和BA方法,而是选择直接法(优化也是直接通过图像像素灰度进行)。算法的结果让人印象深刻,其在没有GPU加速的情况下实时构建了一个半稠密地图,相比基于特征的稀疏地图SLAM系统而言,LSD-SLAM方法在机器人领域有更大的应用潜力。然而,该算法的运行仍然需要基于特征做闭环检测,且相机定位的精度也明显低于PTAM和我们的算法,相关实验结果我们将在第8部分的B小节中展示,对该结果的讨论在文章IX部分B小节进行。


Forster等人在论文[22]中提出了介于直接方式和基于特征的方法之间的半直接视觉里程计算法SVO方法。该方法不需要对每帧图像都提取特征点,且可以以很高的帧率运行,在四轴飞行器上取得了令人惊叹的定位效果。然而,SVO算法没有进行闭环检测,且目前主要基于下视摄像头运行。







请到「今天看啥」查看全文