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 两个实验对比结果:

EuRoCORB MonoORB StereoVIORB MonoVIORB StereoVIORB Mono Paper
 RMSERMSERMSERMSERMSE
V1_01_easy0.0150.0870.0940.090.023
V1_02_medium0.0200.0650.1180.0670.027
V1_03_difficultx0.085x0.075x
V2_01_easy0.0150.0640.2420.070.018
V2_02_medium0.0170.060.1040.1180.024
V2_03_difficultxxxx0.047
MH_01_easy0.0700.0380.0920.0720.068
MH_02_easy0.0660.0480.0890.0540.073
MH_03_medium0.0710.0380.0910.0530.071
MH_04_difficult0.0810.1030.7730.150.087
MH_05_difficult0.0600.0560.2860.0990.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 两个实验对比结果:

EuRoCVIORB MonoVIORB StereoVIORB Mono PaperVINS Mono
 RMSERMSERMSERMSE
MH_01_easy0.0920.0720.0680.06
MH_02_easy0.0890.0540.0730.066
MH_03_medium0.0910.0530.0710.135
MH_04_difficult0.7730.150.0870.056
MH_05_difficult0.2860.0990.0600.058
V1_01_easy0.0940.090.0230.098
V1_02_medium0.1180.0670.0270.061
V1_03_difficultx0.075x0.064
V2_01_easy0.2420.070.0180.052
V2_02_medium0.1040.1180.0240.174
V2_03_difficultxx0.0470.140

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

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

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

EuRoCVIORB Mono PaperVIORB StereoVINS Mono
No LoopLoopNo LoopLoopNo LoopLoop
RMSERMSERMSERMSERMSERMSE
V1_02_medium0.0280.0270.070.0650.1050.066
V2_02_medium0.0410.0240.0920.1020.1030.058
MH_04_difficult0.2170.0870.2880.2430.3000.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实现差别等),因此造成性能差异的原因很复杂,水平所限无法进行更深入分析。如有大神进行过研究,还望批评指教。

41 Comments

Add a Comment

Your email address will not be published.