VI ORB SLAM2 与 VINS 对比实验

一、实验说明

之前做了一些 VI ORB SLAM2 与 VINS Mono 性能的对比试验,由于 VI ORB SLAM2 并没有官方的版本,我们主要使用王京实现的一个版本(https://github.com/jingpang/LearnVIORB)来做测试(我们加入了双目 VIO 部分,但不论单目还是双目该版本实现与官方版本性能有较大差距)。VINS Mono (https://github.com/HKUST-Aerial-Robotics/VINS-Mono)是港科大开源的一个单目 VIO 算法,速度快而且性能不错,同样受到很大关注。本篇博客我们对二者进行了一些粗浅的实验对比。

说明如下:
1、实验主要指标为 RMSE:
\(RMSE = \sqrt{\frac{1}{n}\Sigma_{i=1}^{n}{\Big(\frac{d_i -f_i}{\sigma_i}\Big)^2}}\)

2、实验采用 EuRoC 测试集(https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets)。以下是一些初步的实验结果,做一记录。因为没有深入研究和调试,试验次数也比较有限,不一定具有代表性。如大家有任何改进建议或者疑问欢迎留言。

二、实验结果

1、ORB 与 VI ORB 对比
以下表格是 ORB 与 VI ORB 两个实验对比结果:

EuRoC ORB Mono ORB Stereo VIORB Mono VIORB Stereo VIORB Mono Paper
  RMSE RMSE RMSE RMSE RMSE
V1_01_easy 0.015 0.087 0.094 0.09 0.023
V1_02_medium 0.020 0.065 0.118 0.067 0.027
V1_03_difficult x 0.085 x 0.075 x
V2_01_easy 0.015 0.064 0.242 0.07 0.018
V2_02_medium 0.017 0.06 0.104 0.118 0.024
V2_03_difficult x x x x 0.047
MH_01_easy 0.070 0.038 0.092 0.072 0.068
MH_02_easy 0.066 0.048 0.089 0.054 0.073
MH_03_medium 0.071 0.038 0.091 0.053 0.071
MH_04_difficult 0.081 0.103 0.773 0.15 0.087
MH_05_difficult 0.060 0.056 0.286 0.099 0.060

在以上表格中,均使用 RMSE 均方根误差作为评测指标,其中 ORB Mono 和 ORB Stereo 是原始 VO 版本的单目和双目 SLAM 算法;VIORB Mono 和 VIORB Stereo 是王京和我们修改后的 VIO 版本的单目和双目 SLAM 算法;最后 VI ORB Mono Paper 是作者论文中的算法。

从中可以看出,相对于作者论文中的算法效果,在我们所使用的开源版本中并没有完全达到。而王京的代码是基本实现了作者论文中的主要思想的,因此猜测差距主要来自于调参和一些论文中没有公布的细节。

双目 VIO 比单目 VIO 效果要更好也更稳定,不过加入 IMU 的版本均不如原始双目版本的精度。应该是原始 VO 的优化已经比较彻底,IMU 误差项的加入给优化结果造成了更多的不稳定性。这一点在作者论文中也能看到,加入 IMU 的版本并没有比原始单目精度更高。

2、VI ORB 与 VINS Mono 对比(开启闭环)
以下表格是 VI ORB 与 VINS Mono 两个实验对比结果:

EuRoC VIORB Mono VIORB Stereo VIORB Mono Paper VINS Mono
  RMSE RMSE RMSE RMSE
MH_01_easy 0.092 0.072 0.068 0.06
MH_02_easy 0.089 0.054 0.073 0.066
MH_03_medium 0.091 0.053 0.071 0.135
MH_04_difficult 0.773 0.15 0.087 0.056
MH_05_difficult 0.286 0.099 0.060 0.058
V1_01_easy 0.094 0.09 0.023 0.098
V1_02_medium 0.118 0.067 0.027 0.061
V1_03_difficult x 0.075 x 0.064
V2_01_easy 0.242 0.07 0.018 0.052
V2_02_medium 0.104 0.118 0.024 0.174
V2_03_difficult x x 0.047 0.140

从中可以看出 VINS Mono 精度与 ORB 作者论文中的单目精度比是明显不如的,但是与开源版本比精度要高一些,比我们修改的双目版本略低。

VI ORB 是不能完全跑过全部测试集的,特别是快速运动的 V2_03_difficult 测试集结尾阶段会跟丢(原作者不丢),这一点不难理解,因为光流是比较简单的像素级别跟踪,是不容易丢失的,而 ORB 虽然是很弱的描述子依然比类似光流、模板匹配要严格很多,相对来说光流还是很易丢失的(我们简单地用二者的纯前端来实验了下,VINS的光流跟踪在所有测试集未发生跟丢的情况,ORB有跟丢)。

3、VI ORB 与 VINS Mono 对比(关闭闭环)
以上 2 小节中的测试均开启了闭环。虽然 VINS Mono 看起来也实现了比较好的精度,但是其本身对于闭环依赖较大,在关闭闭环后,VINS Mono 的性能是下降较多的:

EuRoC VIORB Mono Paper VIORB Stereo VINS Mono
No Loop Loop No Loop Loop No Loop Loop
RMSE RMSE RMSE RMSE RMSE RMSE
V1_02_medium 0.028 0.027 0.07 0.065 0.105 0.066
V2_02_medium 0.041 0.024 0.092 0.102 0.103 0.058
MH_04_difficult 0.217 0.087 0.288 0.243 0.300 0.174

三、实验小结

由于水平精力所限并未对实验结果进行详细分析,初步小结如下:

1、在没有闭环情况下,VINS Mono 精度应该略低于 VIORB,而在有闭环情况下,二者精度差距并不大。

2、由于开源 VIORB 版本并非官方实现,与作者版本肯定有很多不同之处,因此没有办法测试真实官方 VIORB 的性能,但基本可以看出对于 ORB SLAM2 这一框架来说,IMU 的引入主要是在快速运动时能够减少一些丢失,而精度上与 VO 相近或略有下降;

3、以光流做为前端的 VINS Mono 比描述子作为前端的 VIORB 具有更好的鲁棒性,在快速运动时更不容易丢失。因此在类似于无人机这样的场景,VINS 应该是比 VIORB 更好的选择;而对于精度要求较高、场景更大而运动较慢的场景,VIORB 仍然更合适;

4、不论是否引入 IMU,双目对于精度和鲁棒性都会有一定的提升,但目前 VINS 并没有提供双目的版本,精力所限也没有进行实现,相信如有同学用双目改造下 VINS 会有不错的效果;

5、除前端差别较大外(比如光流与ORB、滑窗与局部地图),虽然都是预积分二者后端算法与实现亦有较大不同(李代数与四元数参数化不同、积分方式不同、g2o与ceres实现差别等),因此造成性能差异的原因很复杂,水平所限无法进行更深入分析。如有大神进行过研究,还望批评指教。

  • 该日志由 于2018年02月26日发表在 SLAM 分类下, 通告目前不可用,你可以至底部留下评论。
  • 本文链接: VI ORB SLAM2 与 VINS 对比实验 | 技术刘
  • 版权所有: 技术刘-转载请标明出处
  • 40 thoughts on “VI ORB SLAM2 与 VINS 对比实验

    1. xk说道:

      您好,感谢您做所的工作.
      不过在您分享的第一个实验表格"ORB 与 VI ORB 对比"中,从实验数据看,ORB单目的数据要优于ORB双目的,但为什么您得出的结论是"不论是否引入 IMU,双目对于精度和鲁棒性都会有一定的提升"呢?是这两个数据写反了吗?

      1. 说道:

        是这样的,这个数据没有错误均是出自ORB作者的论文。这里能看出的明显改善是指跟踪成功的数量,单目有2个跟不到,双目有1个。没有IMU的单目是没有尺度的,这个尺度本身就是根据真值拟合的,所以肯定是最接近真值的,与双目本身可以计算绝对尺度是不能对比的。

    2. haosu说道:

      您好,感谢您的分享。我最近也在测试王京大神的VIORB,请问为什么我测的euroc的数据,单目VIORB也没有尺度信息呢,用evo工具查看明显不能对齐

    3. XK说道:

      您好!
      非常感谢您的工作,请问您的实验平台是怎样的呢?比如处理器CPU和内存的大小?
      谢谢!

    4. 匿名说道:

      您好,EuRoC的Ground Truth世界坐标系与VINS的世界坐标系转换,你是怎样做的?RMSE公式中的delta_i 是什么?

    5. 匿名说道:

      二、2和3中V202数据与MH04 RMSE = 0.174,作者的数据是不是搞错了 RMSE=0.058这个数据又对应了上表MH05和下表V202。
      得到的数据和我测出来差好多。

      1. 说道:

        之前的数据的确对应错了,因为作者和我的顺序不一样,我核对了下论文改了一下,现在是不是一样?另外,paper里面的数据我这边也无法复现,估计作者单目和双目参数是不一样的。

        1. Reid说道:

          好的,谢谢您的回复,我现在已经有跑的轨迹,现在还没想好用什么办法获取真值,还有一个问题想请教下,比如数据vicon room 101 easy,这个数据的真值是从哪里获取?谢谢

          1. 说道:

            我下载的 EuRoC 数据集里面有 state_groundtruth_estimate0 和 vicon0 文件夹,印象中这两个里面的 data.csv 数据都可以当做真值来用。

            1. Reid说道:

              大佬,我现在使用orbslam2-Mono,在ROS环境里跑了MH_04_difficult这个数据,保存了运行的轨迹是TXT格式,真值是data.csv,能否使用官网给的脚本进行测评?或者其他的方式

    6. Reid说道:

      大佬,请教个问题,我现在是使用的官网给的脚本文件,进行Groundtruth测试,大佬使用EVO的原因是什么?

    7. Reid说道:

      大佬,问题解决了,我现在用orb mono 跑的MH04difficult,发现误差很大,最大是11多,不知道问题出在哪里,大佬用的是rpe吗?我用ape测试误差较小

    8. Reid说道:

      大佬,请教个问题啊,VINS_MONO 运行后保存的轨迹信息在哪里?如何做groundtruth,期待回复,谢谢

        1. Reid说道:

          大佬我又来了,你是不是都烦了啊?哈哈 ,问个问题,我在测试orb_mono时,测试的结果不太理想,MH_01:1.072,MH_04:4.879,MH_05:6.08,V1_01:0.751,V2_01:1.421,V2_02:1.423,暂时测试的是这些数据集,都是RMSE值,感觉偏差有些大,是不是scale的原因?麻烦大佬指教,谢谢

          1. 说道:

            你好,单目的话应该开启 –align –correct_scale 选项使用 Sim(3) 拟合轨迹,不知你是否开启了?我之前测试感觉在MH数据集上开源代码基本和Paper一致,V数据集上则有所偏差。具体用法参见:https://github.com/MichaelGrupp/evo/wiki/evo_traj

            1. Reid说道:

              刚看到大佬的回复,检查了一下,的确没有开启这个选项,感谢大佬指导,祝大佬工作顺心!

    9. 匿名说道:

      指出一下,我核对了一下,你第一个表格最后一列VIORB Mono Paper的数据顺序抄错了,也就是跟数据集的对应关系不对。

    发表评论

    电子邮件地址不会被公开。