【由于韶光、园地等缘故原由,整合古人测试结果,在此附上链接,感激大神的分享!
】
开源SLAM方案选型:
数据集:
一、ORB-SLAM2
检测流程:Kinect天生舆图【舆图紧张可见的有关键帧(包括相机的pose,相机的内参,ORB特色),3D的舆图点( 空间中3D位置,法线方向,ORB的描述子),词袋向量,共视图等】 → 保存舆图 → 加载舆图和重定位
缺陷:1、不能办理实际问题。它基于特色点法,建的图是稀疏的,只能知足定位需求,而无法供应导航、避障、交互等诸多功能。而且目前还没有开放存储和读取舆图后重新定位的功能。
2、受光照和车辆、行人等动态物体的影响太大
后续事情:对前端数据进行轨迹的优化和回环,稠密建图
【自我备注:1、保存稀疏舆图的MapPoint和KeyFrame成.bin格式 ;2、如果保存成pcd格式,那么关键帧与关键点之间的关系没有办法保存。。。即pcd保存的舆图信息并不完全】
二、VINS MONO
参考博文:https://blog.csdn.net/Darlingqiang/article/details/80689123
实现事理:用紧耦合方法实现的,通过单目+IMU规复出尺度
目标:AR
整体框架:
1、Measurement Preprocessing:不雅观测值数据预处理,包含图像数据跟踪IMU数据预积分;
2、Initialization:初始化,包含纯挚的视觉初始化和视觉惯性联合初始化;
3、Local Visual-Inertia BA and Relocalization:局部BA联合优化和重定位,包含一个基于滑动窗口的BA优化模型;
4、 Loop detection and Global Pose Graph Optimization:回环检测;全局图优化,只对全局的位姿进行优化;
代码解读:
VINS代码紧张包含在两个文件中:
1、feature_tracker 吸收图像,利用KLT光流算法跟踪
2、vins_estimate 包含相机和IMU数据的前端预处理(也便是预积分过程)、单目惯性联合初始化(在线的标定过程)、基于滑动窗口的BA联合优化、全局的图优化和回环检测
vins紧张便是两个节点:
1、一个节点算前端,为feature_tracker_node.cpp
2、另一个节点算后端,为estimator_node.cpp
三、ORB_SLAM2、VI ORB SLAM2 、 VINS Mono比拟实验
参考链接:http://www.liuxiao.org/2018/02/vi-orb-slam2-与-vins-比拟实验/
紧张指标:均方根偏差
实验结果:
1、ORB 与 VI ORB 比拟
由表可以看出:
1)双目 VIO 比单目 VIO 效果要更好也更稳定;
2)原始 VO 的优化已经比较彻底,IMU 偏差项的加入给优化结果造成了更多的不稳定性,加入 IMU 的版本均不如原始双目版本的精度。
2、VI ORB 与 VINS Mono 比拟(开启闭环)
由表可以看出:
1)VINS Mono 精度与VIORB Mono/Stereo比,精度要高一些;
2)VI ORB 是不能完备跑过所有测试集的,特殊是快速运动的 V2_03_difficult 测试集结尾阶段会跟丢;而vins mono采取的光流跟踪,不易跟丢。
3、VI ORB 与 VINS Mono 比拟(关闭闭环)
由表可以看出:
VINS Mono 对闭环依赖较大,在关闭闭环后,VINS Mono 的性能低落较多。
4、实验小结
1)在没有闭环情形下,VINS Mono 精度略低于 VIORB;而在有闭环情形下,二者精度差距不大。
2)由于开源 VIORB 版本并非官方实现,与官方版本有很多不同之处,没有办法测试真实官方 VIORB 的性能;但基本可以看出对付VI ORB SLAM2 框架,IMU 的引入紧张是在快速运动时能够减少一些丢失,而精度上与 VO 附近或略有低落;
3)以光流作为前真个 VINS Mono 比描述子作为前真个 VIORB 具有更好的鲁棒性,在快速运动时更不随意马虎丢失。因此在类似于无人机这样的场景,VINS 该当是比 VIORB 更好的选择;而对付精度哀求较高、场景更大而运动较慢的场景,VIORB /ORB仍旧更得当;
4)不论是否引入 IMU,双目对付精度和鲁棒性都会有一定的提升,VINS Fusion比较于vins mono,性能有所提升;{精度——慢速,双目;鲁棒——快速}
5)除前端差别较大外(比如光流与ORB、滑窗与局部舆图),虽然都是预积分,二者后端算法与实现亦有较大不同(李代数与四元数参数化不同、积分办法不同、g2o与ceres实现差别等),因此造成性能差异的缘故原由较繁芜。
5、 VI ORB-SLAM初始化与VINS初始化比拟(将vi orb-slam初始化方法移植到vins中)
四、VIO:翱翔机器人单目VIO算法测评
参考链接:https://blog.csdn.net/u012348774/article/details/81414264
核心思想:
全面的比较了各种公开的单目VIO算法(MSCKF、OKVIS、ROVIO、VINS-Mono、SVO+MSF和SVO+GTSAM);
在多个嵌入式平台上(Laptop,Intel NUC,UP Board,ODROID)测试了各种单目VIO算法,并剖析了算法的表现;
3.选用EuRoC MAV数据集。
结论:SVO+MSF是打算效率最高的算法,而VINS-Mono是状态估计精度最高的算法,ROVIO则处于两者之间
五、VINS FUSION
推举链接:https://blog.csdn.net/huanghaihui_123/article/details/86518880
发布信息:港科大 2019年1月12号
版本:
(1)单目+imu
(2)纯双目
(3)双目+imu
(4)双目+imu+GPS
和vins mono比较:
比拟于VINS Mono,紧张增加了global_fusion包,用来领悟GPS以及视觉IMU定位的结果。代码构造,之前的pose_graph节点更名为loop_fusion,之前的feature_track节点领悟进vins_estimator内部。vins_estimator中的factor残差项增加了很多,紧张是视觉的残差项增加。
上风:可以静止进行初始化;尺度信息不一定完备依赖IMU(有双目),不会造成尺度不可关的情形;鲁棒性上,双目明显优于单目;
劣势:由于视觉误匹配等各种缘故原由,双目的精度会比单目差一点。
【自我备注:利用vinsfusion闭环跑KITTI的纯双目数据集,跑出来的output结果有vio.txt位姿文件,但这个没有闭环,闭环的数据在单独的vio_loop.csv文件里,这个文件里的数据只有闭环帧,而且数据格式和真实轨迹不一样,不是12列。如何将闭环的vio_loop.csv数据领悟到未闭环的vio.txt数据里,然后画出闭环后的整体轨迹估计?】
六、RTAB-MAP
概述:与其他视觉slam方案不同在于供应了一个与韶光和尺度无关的基于外不雅观的定位与构图办理方案,优化了大型环境的在线闭环检测问题,紧张是利用打算权重使得只利用有限数量的定位点参与闭环检测,但是若须要也可以访问全局的定位点。
流程:开始->特色提取和匹配->求两两帧的视觉里程计->优化php的结果->局部舆图->运动状态估计->运动状态估计->位姿图->词袋模型->相似度打算->结束
特色点:利用词袋法创建图像的署名,基于opencv从图像中提取SURF特色来得到视觉单词。
建图办法:1.Octomap(3d占用栅格舆图)
2.稠密点云舆图
3.2d占用栅格舆图
ROS节点:输入:1.TF(传感器相对付机器人底座的位置)
2.里程计
3.相机输入以及带有校准的信息
输出:1.Map Data和Graph
优点:1.适用于长期和大规模环境在线建图的哀求
2.里程计鲁棒性较好好且低漂移
3.定位鲁棒性较好
4.舆图天生开拓实用且简便
5.供应软件包
缺陷:1.方案倾向于商品化,二次开拓难
参考:https://blog.51cto.com/remyspot/1784914
七、RGBD-SLAM V2
概述:系统前端为视觉里程计,从每一帧的RGB提取特色,打算描述符,RANSAC+ICP打算两帧之间的运动估计,并提出了一个EMM(环境丈量模型)判断运动估计是否可以接管,后端回环检测基于G2O的位姿图优化
特色点:1.SIFT by GPU(综合表现最好)
2.SURF by CPU(OPENCV)
3.ORB by CPU (OPENCV)(准确率,实时性更加好)
建图办法:八叉树舆图octomap(利于导航 ; 易于更新 ;存储办法比较省空间)
优点:1.二次开拓较随意马虎,可以在其根本上连续开拓
缺陷:1.实时性相对较差,相机要慢速运动
参考:http://www.cnblogs.com/voyagee/p/7027076.html
八、RTAB-MAP和RGBD-SLAM V2的比拟
系统构建:
1、RGBD_SLAM V2是一个非常全面精良的系统,将SLAM领域的图像特色、优化、闭环检测、点云、octomap等技能融为一体,
2、RTAB-Map是当前最精良的RGBD SLAM
开拓:RGBD_SLAM2适宜RGBD SLAM初学者,也可以在其根本上连续开拓。
RTAB-MAP二次开拓难度较高(著名的Google Tango(见如何评价Google 的 Project Tango和Google Project Tango 有哪些黑科技)便是利用RTAB-Map做SLAM,)
实时性:RGBD_SLAM2的缺陷是其算法实时性不好,相机必须慢速运动,
RTABMAP 通过STM/WM/LTM的内存管理机制,减少图优化和闭环检测中须要用到的结点数,担保实时性以及闭环检测的准确性,能够在超大场景中运行。
回环检测:RGBDSLAMV2:相机较快乐动时,会涌现很大的舆图重叠。
RTABMAP:稳定性相对较好,但是也不稳定。
个人:实际运行中RGBD SLAM V2用点云表达,点云表达办法耗费内存,韶光较长后,三维空间中的点云数量增多,画面涌现明显的卡顿,但采集得结果细节表现得很好
RTAB-MAP实际运行过程中,画面比较流畅,但是是利用3d栅格占用舆图表现的,细节表现得也不错。
九、RTAB-MAP和ORB-SLAM的比拟
系统构建:RTAB-MAP:框架较全面,支持联合建图,建立的舆图包括三维稠密点云和二维栅格舆图(可以直接从ros获取二进制程序)
ORB-SLAM:只知足了定位的需求,无法供应导航,避障,交互等诸多功能 。
代码可读性:RTAB-MAP:差,基本上封装了。
ORB-SLAM:可读性好。
运用:RTAB-MAP:适宜作为slam运用
ORB-SLAM:适宜研究利用
打算量:RTAB-MAP:内存管理方法打算量相对较小
ORB-SLAM:三线程构造,必须对每幅图像打算一遍orb特色,耗时和打算量大
回环检测:RTAB-MAP:回环检测只访问有限数量的定位点
ORB-SLAM:精良的回环检测算法担保了ORB-SLAM2有效地防止累积偏差,并且在丢失之后还能迅速找回,这一点许多现有的SLAM系统都不足完善。为此,ORB-SLAM2在运行之前必须加载一个很大的ORB字典 。
十、SLAM算法比拟:
一:视觉和IMU前端数据处理
对付视觉前端做法基本分为三种:
①特色点提取(feature detection)+根据描述子匹配特色点
orbslam, okvis
优点:由于有描述子,因此对舆图的掩护很方便(包括重定位,闭环,全局优化)
尤其是对室底细况,当视觉上共视关系较多的时候,这种方法能很大提高定位精度和局部的稳定性。室内移动机器人建议利用这种方法
缺陷:每帧图像都要提取特色点数量的描述子,摧残浪费蹂躏韶光;在tracking过程中,如果运动过快(图像涌现模糊)比较随意马虎tracking failed,而光流要好一些
②特色点提取+光流跟踪
vins,svo的初始化
优点:大略高效,tracking要鲁棒一些
缺陷:不随意马虎构建全局map,视觉约束只靠滑窗里面的关键帧。
比如vins的闭环和重定位是须要其余再提取特色点和描述子的;但后端做得好
③直接法
lsdslam,dso
优点:在弱纹理下,鲁棒性好
缺陷:不随意马虎掩护全局舆图,对光照影响较大,高精度舆图中无法利用等。
对付IMU前端:
IMU前端基本都是利用预积分的办法,和积分的差异(预积分把重力考虑进去了)。imu预积分紧张是在两帧图像之间更新imu的5个状态变量(p, v, q, ba, bg)的Jacobian和covariance。
PS:为了使得非线性优化中,不用每次改变位姿后,积分须要重新打算的问题。
现在改变位姿(速率,位移,旋转四元数关于天下坐标系的),预积分内的项保持不变。
改变ba,bg(加速度和陀螺仪偏移)后,预积分的项可以通过泰勒一阶展开来进行更新。
jacobian是单位矩阵,紧张是为了求一阶近似的p, v,q;covariance是零矩阵,紧张是为了求imu偏差项的权重
IMU初值确定:一样平常结合vins mono 等的视觉信息来求
二:后端优化
滤波:不须要做边缘化,重定位难。由于不须要迭代,速率略快。
优化:须要边缘化(比较耗韶光),重定位随意马虎。迭代优化,速率略慢。
VINS-Mono与OKVIS类似,是基于非线性优化器优化一个滑窗内的关键帧,帧间通过鲁棒的角点关联。在系统初始化阶段,通过松耦合的办法领悟多种传感器;在重定位阶段,则通过紧耦合的办法领悟传感器。在优化之前,也通过IMU预积分减少打算量。除此至外,VINS还供应了基于4DoF的位姿图优化和回环检测。
十一、实体测试
十二、方案选型(个人不雅观点,不喜勿喷)
通过上述调研,出于资源等的考虑,初步将ORB_SLAM2、 VINS FUSION、RTAB MAP 和LSD SLAM列入后期调研中,拟再花两周进行相机选型和实体场景测试,先给涌现阶段调研结果,希望大家相互学习,共同进步!
作者为CSDN博主「lark_ying」
原文链接:https://blog.csdn.net/hly453/java/article/details/88983123
本文仅作学术分享,著作权归作者所有,如有侵权,请联系后台作删文处理。