点“计算机视觉life”关注,置顶更快接收消息!
本文图片都是动态图,但公众号限制图片尺寸以及外链,建议点阅读原文查看,更方便点击链接和查看动态图。
公众号后台回复:RGBD,进入交流群(限100人),一起交流RGBD SLAM相关技术。
背景:
RGB-D SLAM主要用于稠密三维重建。
在消费级深度相机出现之前,想要采用普通相机实现实时稠密三维重建比较困难。微软2010年发布了Kinect之后,基于深度相机的稠密三维重建掀起了研究热潮。早期比较有代表性的工作是2011年微软的Newcombe(单目稠密重建算法DTAM 的作者)、Davison等大牛发表在SIGGRAPH上的KinectFusion算法,算是该领域的开山之作。KinectFusion算法首次实现了基于廉价消费类相机的实时刚体重建,在当时是非常有影响力的工作,它极大的推动了实时稠密三维重建的商业化进程。下图所示是几款消费级深度相机。
KinectFusion之后,陆续出现了Kintinuous,ElasticFusion,InfiniTAM,BundleFusion等非常优秀的工作。本文主要列举几个例子进行简介,更全更好的阅读体验请点击文末阅读原文查看本文GitHub地址
https://github.com/electech6/owesome-RGBD-SLAM
Bundle Fusion
基本信息
项目官网
http://graphics.stanford.edu/projects/bundlefusion/
论文
https://arxiv.org/pdf/1604.01093.pdf
代码
https://github.com/niessner/BundleFusion
算法详细解读
Bundle fusion算法具体流程图如下:
输入:RGB-D相机采集的对齐好的color+depth的数据流,作者使用的是structure sensor+iPad输出的30Hz,分辨率为640x480的序列图像。
输出:重建好的三维场景。
重建重建效果在所有RGB-D SLAM中 top 3.
使用持续的local to global分层优化,去除了时域跟踪的依赖。
不需要任何显示的loop closure检测。因为每一帧都和历史帧相关,所以其实包含了持续的隐式的loop closure。
支持在GPU上实时鲁棒跟踪,可以在跟踪失败时移动到重建成功的地方进行relocalization,匹配上后继续跟踪。
由于成像传感器存在噪音,稀疏关键点匹配可能产生小的局部误匹配。这些误匹配可能会在全局优化中传播,导致误差累积。
上述效果图片都是在作者提供的公开数据集上的效果,该数据集采集的场景纹理比较丰富,光照也比较适中。而实际重建时效果和所使用深度相机的性能、待重建场景的纹理丰富程度关系很大。对于办公室这种简洁风格的场景效果会下降很多,还有很多可改进的地方。
目前算法需要两块GPU才能实时运行。
官网
http://www.robots.ox.ac.uk/~victor/infinitam/
代码
https://github.com/victorprad/InfiniTAM
提供Linux,iOS,Android平台版本
CPU可以实时重建
重建效果还不错
loop closure 不是很稳定,loop closure后经常无法消除累计漂移
没有提供带color的重建结果,需要自己写
官网
http://introlab.github.io/rtabmap/
代码
https://github.com/introlab/rtabmap
RTAB-Map( Real-Time Appearance-Based Mapping)用于基于外观的实时建图, 是一个通过内存管理方法实现回环检测的开源库。它限制地图的大小以使得回环检测始终在固定的时间限制内处理,从而满足长期和大规模环境在线建图要求。
从2013年开始并于2013年作为开源库发布,RTAB-Map已经扩展到完整的基于图的SLAM方法,目前RTAB-Map已经发展成为一个跨平台的独立C ++库和一个ROS包,允许用户使用不同的机器人和传感器实现和比较各种3D和2D对于各种应用的解决方案。
本文介绍了RTAB-Map的扩展版本及其在大量流行的真实数据集进行定量和定性的比较,(例如KITTI, EuRoC, TUM RGB-D, MIT Stata Center)。从自主导航应用的实用角度概述视觉和激光雷达SLAM配置的优势和局限性。
RTAB-Map ROS节点的框图。所需输入是:TF,用于定义传感器相对于机器人底座的位置; 来自任何来源的里程计(可以是3DoF或6DoF); 其中一种相机输入(一个或多个RGB-D图像,或双目立体图像),且带有相应的校准消息。可选输入:2D激光的雷达扫描,或3D激光的点云。然后,来自这些输入的所有消息被同步并传递给graph-SLAM算法。输出的是:Map Data,包含最新添加的节点(带有压缩传感器数据)和Graph; Map Graph,没有任何数据的纯图;TF,矫正过的里程计; 可选的OctoMap(3D占用栅格地图); 可选的稠密点云地图; 可选的2D占用栅格地图。
RGBD里程计和双目立体视里程计的ROS节点框图。TF定义相机相对于机器人基座的位置,并作为输出来发布机器人基座的里程计变换。对于RGB-D相机或立体相机,管道是相同的,除了多计算一步相应的立体深度信息,以便稍后确定检测到的特征的深度。可以有两种里程计的方法:绿色的帧到帧(F2F)方法,红色的帧到地图(F2M)方法。
ICP里程计ROS节点框图。TF定义激光雷达相对于机器人基座的位置,并作为输出以发布机器人基座的里程计变换。可以有两种里程计的方法:绿色的扫描到扫描(S2S)方法,红色的扫描到地图(S2M)方法。 这些方法还可以选择使用恒速模型(粉红色)或其他里程计(蓝色)进行运动预测。 对于后者,输入测距的校正发布在TF上。
STM的局部占用栅格地图创建。 依赖的参数(由椭圆显示),可选用激光扫描和点云输入(由棱形显示),局部占用栅格地图可以是2D或3D。
全局地图集成。依赖于局部地图创建地图的类型(见上图)。当只有3D局部占用栅格地图可用于生成3D占用栅格地图(OctoMap)及其2D地图。
定位精度很准
支持视觉、激光传感器
支持跨平台、ROS
在线处理
鲁棒性不是很好,如果建图时间和重定位时间间隔得比较久,或者光线变化都很明显的话,重定位会失败
点云网格化用possion重建,不是主流的TSDF,速度会慢
重建效果不如 bundle fusion,但是也还不错
官网
http://irc.cs.sdu.edu.cn/SLAMRecon/
代码
https://github.com/HaoLi-China/SLAMRecon
代码
https://github.com/mp3guy/Kintinuous
论文
http://thomaswhelan.ie/Whelan14ijrr.pdf
代码
https://github.com/mp3guy/ElasticFusion
论文
http://www.thomaswhelan.ie/Whelan16ijrr.pdf
代码
https://github.com/felixendres/rgbdslam_v2
论文
http://www2.informatik.uni-freiburg.de/~endres/files/publications/felix-endres-phd-thesis.pdf
本文图片都是动态图,但公众号限制图片尺寸以及外链,建议点阅读原文查看,更方便点击链接和查看动态图。
公众号后台回复:RGBD,进入交流群(限100人),一起交流RGBD SLAM相关技术。
关注:计算机视觉life,一起探索计算机视觉新世界~
觉得有用,给个在看啦~