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} \sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}}
其中:
y_{i} 代表真值,\hat{y}_{i} 代表估计值。

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实现差别等),因此造成性能差异的原因很复杂,水平所限无法进行更深入分析。如有大神进行过研究,还望批评指教。

49 Comments

回复 Reid 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注