通过一段时间的工作,对SLAM的相关理论进行了学习,且对当前的一些开源SLAM算法项目进行了部署和测试,故对相关工作进行总结,以归并为文档,便于后续同学分析及讨论。限于个人该领域知识积累有限,不妥之处或心存疑惑,望各位读者不吝沟通和指教。
1.相关知识
SLAM项目涉及的内容较多,在进行SLAM项目开发前(特别是基于视觉方法的SLAM),你最好具备以下知识和技术储备:(1)会C和C++,最好了解标准的C++;(2)会用linux,会用cmake,vim/emacs或一些编程工具(推荐Qt);(3)会用OpenCV,PCL, Eigen等第三方库;(4)要跑实际机器人,还要会ROS;(5)需要了解立体视觉相关的数学知识;(6)需要掌握一些非线性优化的算法库和其他库(比如g2o,ceres, BoW).
同时目前所开源的SLAM项目,一般规模较大,你最好具备一定的大中型软件开发经验或从事过较多的软件开发工作。
目前SLAM方向,按其所采用的传感器来分,主要可分为摄像机SLAM(包括单目摄像机,立体摄像机,又称VSLAM)和非摄像机SLAM两类(包括激光,雷达,声纳等)。目前,非摄像机SLAM算法较为成熟,应用得较为广泛。但因为其传感器较为昂贵,且可视化程度较低(或可视化方式不自然),限制了其进一步发展。VSLAM因为其成本较为便宜,且具备天然的可视化优势,在无人车和无人机,VR,AR等方向具有极大潜力,近来受到越来越多的重视,是当前的研究重点。
2.分析评测内容
2.1.各算法项目介绍
我们的分析和评测工作,主要集中于以下4个开源算法:ORB-SLAM,LSD-SLAM, CoSLAM, Cartographer,之所以选择这几个算法,在于:
除Cartographer之外,其他三个算法均为视觉SLAM算法,且各自在自己领域内是目前公认最好的。ORB-SLAM采用稀疏特征点的方法来定位和构建地图,速度快,精度较高,鲁邦性较强;LSD-SLAM采用直接法来定位和构建,生成半稠密的地图,可视效果好,能在纹理较少的情况下使用;CoSLAM能利用多个机器人来协作,可克服单相机的视角问题,生成融合的地图,并更好地定位。
而之所以另外考虑雷达SLAM项目cartographer来评测,因为该项目产品化程度高,运行速度快,精度高,对我们以后的SLAM研发具有很强的参考性。
2.2.分析评测内容
表1各SLAM算法的分析和评测结果
| ORB-SLAM | CoSLAM | LSD-SLAM | Cartographer |
输入数据 | RGB图像 | RGB视频 | RGB图像 | 雷达数据+IMU数据 |
传感器 | 单目和立体摄像机均支持 | 单目摄像机,但支持多个摄像机协作 | 单目和立体摄像机均支持 | 雷达和IMU |
采用方法 | 基于特征的方法 | 基于特征的方法 | 直接方法 | 多传感器融合方法 |
前端检测 | ORB特征,词袋模型 | 每帧均采用KTL检测和跟踪特征点 | 对全图光度进行求解 | -------- |
后端优化 | 用g2o库进行优化 | 用Levenberg-Marquart算法来解非线性最小二乘问题 | 用g2o库进行优化 | 用Ceres库进行problem优化,4个线程进行后端优化 |
闭环检测 | 采用关键帧的方式,利用BoW来加速,对ORB特征匹配来进行闭环检测 | 文中并未提及,代码中未看到相关代码(未太仔细看) | 用openFabMap(也即视觉字典)进行闭环检测(在编译时可选是否打开) | 依据多分辨绿多层的树型结构,单枝生长方式和及时剪枝操作,深度优先搜索确定闭环 |
运动预测和观测 | 相机变换(通过最小化特征匹配误差值),3D特征点位置 | 采用KTLtracker和SfM进行 | 相机变换(通过最小化整图的光度值误差),逆深度map(通过像素级的kalman滤波) | 利用imu构建预测模型 |
地图类型 | ORB特征的点云,关键帧图 | 3D点云 | 图(顶点为关键帧—包含图像和深度map,边为约束关系--主要为尺度转换) | 网格占有形式的地图 |
适应场景 | 可适应大尺度场景(ORB-SLAM2中可对自动驾驶场景进行测试) | 能适应较大场景(测试视频场景约为数百平方米以上) | 能适应较大场景 | 可适应大场景(数万平米) |
实测运行速度 | ORB-SLAM2:测试包271帧,耗时为28s,fps约为10,CPU:127%左右,MEM:1.9% | 测试视频6000帧左右,耗时接近15分钟,fps约为7,CPU:130%-180%,MEM:7.8% | -------(该代码部署起来了,但因为一直没有跑出论文中的效果(未显示图像和depth图),故没有给出该项测试结果) | 测试包运行了40多分钟,从运行上看为实时。CPU:50%-400%之间不稳定地跳动,MEM:1.8% |
他人评测运行速度 | 快(100)
| ------------ | 较快(300) | -------- |
他人评测定位误差 | 较小(100)
| ----------- | 较大(500-1000) | -------- |
优点 | 运行速度快,定位较为准确,鲁棒性较强 | 能适应较高程度的动态环境 | 能生成半稠密可视地图,在特征缺失、图像模糊等情况下有更好的鲁棒性 | 运行速度快,精度高 |
缺点 | 对环境特征的的丰富程度和图像质量十分敏感,点云地图较为稀疏,不利于后续的重建和导航 | 相对其他算法,运算速度较慢,多台相机会造成成本高昂 | 相对其他算法,运算速度较慢,且定位效果要差些 | 需要用雷达作为感应器,成本高,且无法生成带颜色的可视化结果。 |
其中,在他人评测运行速度和他人评测定位误差这两栏:运行速度越快,值越大,该值以ORB-SLAM为参考(100);定位误差越大,值越大,该值以ORB-SLAM为参考(100)。
另外,本文实验是在ubuntu14.04 LTS 64-bit下进行的,其Memory为23.5GiB, Precessor为8核的Inteli7-6700k CPU @ 4.0GHk。
2.3.实验结果
2.3.1.ORB-SLAM
图2.3.1.1 刚启动时,跟踪良好
图2.3.1.2 刚启动不久时,跟踪良好
图2.3.1.3 跟踪一段时间,跟踪较为良好
图2.3.1.4 相机转到一个角落,跟踪失败
图2.3.1.5 在相机再转回来后,可以继续跟踪上
2.3.2.ORB-SLAM2
图2.3.2.1 刚启动时,跟踪较好
图2.3.2.2 运行一段时间后,车速较快,跟踪较好
图2.3.2.3运行数百米后,车速较快,跟踪较好
2.3.3.LSD-SLAM
图2.3.3.1生成半稠密的点云图像(惭愧,自己没跑成功,这是别人的截图)
2.3.4.Cartograpgher
图2.3.4.1刚启动时结果
图2.3.4.2后期结果
图2.3.4.3最终结果
图2.3.4.4细节结果
2.3.5.CoSLAM
图2.3.5.2中期结果
图2.3.5.3最终结果
3.总结
VSLAM则已经慢慢走向了低功耗/实时/单RGB相机的运行模式。目前并无一种VSLAM算法,可较较为精确和鲁棒地适应较为复杂的环境。不过从测试结果来看,ORB-SLAM在众算法中性能较为突出。如果我们能想法解决其在低纹理情况下的相机位姿估计,且想法得到较为稠密的地图结果,其应该可较好地应用于我们手机上的VR和AR应用。
4.建议阅读文献
4.1.最新综叙
[1] Arthur Huletski, DmitriyKartashov, Kirill Krinkin. Evaluation of the Modern Visual SLAMmethods(强烈推荐)
[2] 刘浩敏,章国锋,鲍虎军.基于单目视觉的同时定位与地图构建方法综述[j].计算机辅助设计与图形学学报,2016.6, 28(6):855-868 (强烈推荐)
[3] Davide Dardari, Pau Closas,Petar M. Djuric. Indoor Tracking: Theory, Methods, and Technologies
[4] Emilio Garcia-Fidalgo, AlbertoOrtiz. vision-based topological mapping and localization methods: Asurvey
[5] Jianjun Gui, Dongbing Gu, SenWang, Huosheng Hu. A review of visual inertial odometry fromfiltering and optimisation perspectives
4.2.关于ORB-SLAM
[1] Raúl Mur-Artal and Juan D.Tardós, ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereoand RGB-D Cameras. ArXiv:1610.06475v1.
[2] Raúl Mur-Artal, J. M. M.Montiel and Juan D. Tardós. ORB-SLAM: A Versatile and AccurateMonocular SLAM System. IEEE Transactions on Robotics, vol. 31, no. 5,pp. 1147-1163, 2015.
[3] Dorian Gálvez-López and JuanD. Tardós. Bags of Binary Words for Fast Place Recognition in ImageSequences. IEEE Transactions on Robotics, vol. 28, no. 5, pp. 1188-1197, 2012.
4.3.关于LSD-SLAM
[1] LSD-SLAM: Large-Scale DirectMonocular SLAM, J. Engel, T. Schöps, D. Cremers, ECCV14
[2] Semi-Dense Visual Odometry fora Monocular Camera, J. Engel, J. Sturm, D. Cremers, ICCV13
4.4.关于CoSLAM
[1] Zou Danping, Tan Ping.Coslam:Collaborative visual slam in dynamic environments. IEEE Trans.on Pattern Analysis and Machine Intelligence, 2013.
4.5.关于cartographer
[1] Wolfgang Hess, Damon Kohler,Holger Rapp, Daniel Andor. Real-Time Loop Closure in 2D LIDAR SLAM.IEEE International Conference on Robotics & Automation 2016.
5.其他的参考资料
5.1.博客
[1]OpenSLAM:这个网站中含有很多slam方面的资料,编写的程序也各有不同,很权威
https://openslam.org/(强烈推荐)
[2] 2D激光SLAM的比较,可参考博客
http://blog.csdn.NET/zyh821351004/article/details/47381135#comments
[3] 知乎上关于”学习SLAM需要哪些预备知识”的讨论https://www.zhihu.com/question/35186064
[4] OpenCV中关于相机标定和三维重建的教程
http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
[5]关于SLAM的前世今生
http://www.leiphone.com/news/201605/5etiwlnkWnx7x0zb.html
[6] SLAM研究者交流QQ群:254787961(强烈推荐)
[7]http://www.cnblogs.com/gaoxiang12/半闲居士关于SLAM的博客(强烈推荐)
[8] http://www.fengbing.Net/关于SLAM项目实现的博客
[9]http://chuansong.me/n/383533742999 ICCV研讨会:实时SLAM的未来以及深度学习与SLAM的比较(强烈推荐)
5.2软件
[1]https://en.wikipedia.org/wiki/Bundle_adjustment wiki:求解BA的软件包
-
顶
- 0
-
踩
- 0