使用 evo 工具评测 VI ORB SLAM2 在 EuRoC 上的结果

screen-shot-2017-11-02-at-16-56-19
最近把 ORB SLAM2 作者融合 IMU 版本的算法 《Visual-Inertial Monocular SLAM with Map Reuse》 论文读了一遍,作者没有开放源代码,所以我是使用王京实现的一版开源代码(https://github.com/jingpang/LearnVIORB)进行了一些实验。LearnVIORB 代码有一些崩溃的 bug,在 Mac 上面编译有问题,不过实现了作者文中的基本思想,是非常好的一份实现。

由于只有 EuRoC 测试集有 VIO 的数据,我使用了 EuRoC 测试集进行测试,不过在实际运行中遇到了几个问题。

0、系统环境
macOS Sierra v10.12.6

1、evo 安装
以下 1) 或 2)任选一种方式即可:

1)使用 pip3 安装
执行如下命令:

2)使用源代码安装:
执行如下命令:

2、修改 System 保存 TUM 观测值
由于 ORB SLAM2 并没有提供单目相机或者 VIO 保存 EuRoC 形式数据的方式,这里我们仍然使用 SaveTrajectoryTUM 方法保存观测值。
不过需要注意的是,由于 SaveTrajectoryTUM 不允许保存单目相机数据,我们修改一下创建一个新的函数 SaveTrajectory 用来保存单目 VIO 数据。

1)在 System.h 中添加函数头:

2)在 System.cc 中添加函数体:

3、修改 VIO 测试代码 EuRoC 时间戳 (可选)
在我们运行时由于 EuRoC 时间戳超过了 int64 的位数,所以如果你不是 ROS 环境而是使用自己写的 main 函数来读取 imu 时间戳会有问题。
这里面我的处理方式是将时间戳的前五位舍弃,保留后面的内容,然后再乘以 1e-9 转换成以s为单位的数据。相关代码参考:

以及:

最后在 VIO 运行完毕后使用这一函数保存数据到 Data/EuRoC/CameraTrajectory.txt。

4、修改 EuRoC 真值的时间戳(可选)
如果你像我一样为了防止数据溢出范围做了步骤3中的操作,则你同样需要对 EuRoC 的真值进行相应的修改,我这里提供了一个简单的代码进行这一操作。
下载地址:convert_euroc_csv-py

代码如下:

然后只要运行这一转换脚本即可:

5、使用 evo 进行评估
按照步骤3 中操作,我们得到了运行的结果 Data/EuRoC/CameraTrajectory.txt,按照步骤4 中操作,我们得到了转换时间戳后的真值 Data/EuRoC/V1_01_easy/state_groundtruth_estimate0/data2.csv。

使用以下命令来运行 evo_ape 评估 Average Pose Error:

其中 evo_ape 是评估工具,euroc 表示后面输入参数是 euroc 的真值格式。我们输入的就是类似 TUM 的形式即可。
更详细的使用说明可以参见 evo 的官方说明:
https://github.com/MichaelGrupp/evo

运行后得到如下结果:
screen-shot-2017-11-02-at-16-44-28

并且生成了如下两幅图:
wechatimg431
wechatimg432

可以看出我们的 VIO 曲线拟合基本正确,但是最大误差大约在 0.3m 左右,平均误差 0.14m 左右。这一误差还是不小的,与作者论文中的结论还有一些差距,应该还需要一些细致的优化工作。

可能有同学会疑惑,EuRoC 数据集不是坐标系为 IMU/Body 坐标系嘛?为什么我们没有输入 T_{CB} 的标定参数呢?原来,在 evo 框架中,并不关心标定问题,它使用了 Umeyama 算法对两个轨迹做拟合,用拟合的结果来进行评估。

好了,evo 评估 VI ORB SLAM 的真值方法就到这里,总体感觉这一工具还是非常实用的,对于做 VSLAM 研究的人来说会有很大帮助。

常见问题:
1、错误:You are using pip version 9.0.3, however version 10.0.1 is available.
如果在安装 evo 时遇到如下问题:
You are using pip version 9.0.3, however version 10.0.1 is available.
并且无法使用 pip(比如网络差)升级命令:

或者:

进行升级。请尝试以下步骤

1)在官网下载 pip:
https://pypi.org/project/pip/#files

下载其中的 tar.gz 包,或者下载 pip-10-0-1-tar

2)解压后进入 pip 所在目录运行:

参考文献:
https://michaelgrupp.github.io/evo/

9 Comments

回复 匿名 取消回复

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