VIO:飞行机器人单目VIO算法测评

泡泡图灵智库,带你精读机器人顶级会议文章
标题:A Benchmark Comparison of Monocular Visual-Inertial Odometry Algorithms for Flying Robots
作者:Jeffrey Delmerico, Davide Scaramuzza
来源:ICRA 2018
编译:博主
欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权


摘要

大家好,今天为大家带来的文章是——飞行机器人单目VIO算法测评。该文章发表于ICRA2018。
飞行机器人为保证飞行的稳定性,状态估计需要在更低的延迟下能有更高的精度。同时由于飞行平台电源、负载和计算能力有限,状态估计的算法必须在有限的资源下运行。相机和IMU组合能够满足上述苛刻的要求,能在没有其他传感器辅助的情况下进行状态估计,是目前飞行机器人状态估计中最常用的传感器。
然而,目前我们仍对各种VIO算法在飞行机器人上利用有限资源进行在线状态估计的表现不清楚,包括精度、延迟和计算复杂度等。
本文针对此问题,比较了各种公开的单目VIO算法,包括MSCKF,OKVIS,ROVIO,VINS-Mono,SVO+MSF,SVO+GTSAM等。本文在飞行机器人常用的各种硬件上测试了各种算法,评估的内容包括位姿估计精度、单帧处理时间、CPU和内存占用率,评估的数据集是EuRoC。


介绍

VIO算法目前已经得到了非常广泛的应用,包括自动驾驶、VR/AR和飞行机器人等等。同时随着研究的深入,大量的VIO算法涌现出来。然而由于条件限制,大部分的算法仅仅在PC平台下进行过性能测评。为满足飞行机器人的使用,测评各种VIO算法在嵌入式平台下的表现势在必行。
主要贡献有:
1. 全面的比较了各种公开的单目VIO算法;
2. 在多个嵌入式平台上测试了各种单目VIO算法,并分析了算法的表现。


算法流程

这里写图片描述
图1 展示算法性能的散点图,纵轴从上到下依次是CPU占用率、内存占用率和单帧处理时间,横轴都是状态估计的精度。每种算法用单独的颜色表示;每种计算平台用单独的形状表示,形状的大小反应了误差的大小

本文的主要内容是评价一些公开的单目VIO算法,并评价其在各种嵌入式平台上的性能。上图1综合展示了各种算法的性能。下文简要介绍一下本文所评估的单目VIO算法。

MSCKF

MSCKF是VIO算法中的元老级算法,但是目前仍旧没有可靠的公开的算法实现。Mourikis于2007年提出了MSCKF算法,其核心思路在于利用帧间的几何多视约束,并且不需要保存3D点的状态信息。Zhu在2017年将MSCKF的算法思路扩展到Event Camera中,但也同时引入了特征点策略。目前MSCKF的公开代码来自https://github.com/daniilidis-group/msckf_mono

OKVIS

OKVIS利用非线性优化一个滑窗内的关键帧,其损失函数包括带权重的投影差和带权重的惯导误差。OKVIS的前端是利用多尺度Harris提取特征点,并用BRISK作为描述子。OKVIS的后端是利用Google Ceres完成的,通过非线性优化完成状态估计。值得注意的是,OKVIS并没有专门针对单目VIO进行优化,Leutenegger的实验表明在双目情况下其表现更好。目前,OKVIS的公开代码来自https://github.com/ethz-asl/okvis_ros

ROVIO

ROVIO利用扩展卡尔曼滤波进行状态估计。ROVIO中许多非常吸引人的特性。首先,ROVIO使用速度更快的FAST来提取角点,其三维坐标用向量和距离表示;其次,所有角点是通过图像块进行描述,并通过视频流获取了多层次表达;最后利用IMU估计的位姿来计算特征投影后的光度误差,并将其用于后续优化。与OKVIS不同,ROVIO是基于单目开发的VIO系统,目前公开代码来自:https://github.com/ethz-asl/rovio

VINS-Mono

VINS-Mono于OKVIS类似,是基于非线性优化器优化一个滑窗内的关键帧,帧间通过鲁邦的角点关联。VINS的主要估计框架(estimation framework)。在系统初始化阶段,通过松耦合的方式融合多种传感器;在重定位阶段,则通过紧耦合的方式融合传感器。在优化之前,也通过IMU预积分减少计算量。除此至外,VINS还提供了基于4DoF的位姿图优化和回环检测。本文分别测试了不使用回环和使用回环两种情况下VINS的表现。目前VINS的开源代码来自:https://github.com/HKUST-Aerial-Robotics/VINS-Mono

SVO+MSF

MSF是基于扩展卡尔曼滤波的多传感器融合算法。SVO是一个轻量的直接法VO。SVO的前端是利用FAST提取角点,并通过最小化照度误差进行状态优化。MSF将SVO提供的状态信息与IMU进行融合,从而得到更优的状态估计结果。但是由于VO和IMU是松耦合在一起需要额外的方式来提供和估计尺度。单独的SVO和IMU都已经开源了代码,本文通过ROS将两者合并在一起。

SVO+GTSAM

SVO+GTSAM与SVO+MSF类似,但是其后段是通过因子图优化iSAM2的方式融合在一起。目前SVO和GTSAM也分别有开源代码,但是并没有公开的整合系统(作者可能是让我们找他要~)。


主要结果

本文在EuRoC MAV数据集上,分别用Laptop,Intel NUC,UP Board,ODROID四个嵌入式平台测试了上文提到的MSCKF、OKVIS、ROVIO、VINS-Mono、SVO+MSF和SVO+GTSAM。

硬件平台

本文中总共使用了四种平台,下文将简要介绍一下。
Laptop
Lenovo Thinkpad W540,拥有Intel Core i7-4810MQ 2.8GHz,32G RAM。Laptop在此处只是用于作为其他硬件平台做参考。
Intel NUC
处理器为Intel Core i7-5557U 3.10GHz,16G RAM,运行功率为28W,大小为10×10cm。
UP Board
处理器为Intel Atom x5-Z8350 1.44GHz,4G RAM,功率为12W,大小为8.5×8.6cm。
ODROID
处理器为一个ARM A7 1.5GHz和一个ARM 15 2.0GHz,2G RAM,大小为8.3×5.8cm。

评价结果

由于评测结果较多,此处只展示了部分结果,更多结果可以通过阅读原论文了解。一些大致的结论是SVO+MSF是计算效率最高的算法,而VINS-Mono是状态估计精度最高的算法,ROVIO则处于两者之间。不过在本次测试中发现ROVIO不能在Up Board上正常运行。
*这里写图片描述*
表1 充分展示了各种算法在各种平台下在EuRoC下的表现,主要通过状态估计的轨迹与真实轨迹的差异来比较。其中蓝色加粗表示VINS-Mono带回环检测的轨迹的精度最高,黑色加粗表示其他不带回环的算法精度最高。

这里写图片描述
图2 展示了各种算法的CPU占用率

这里写图片描述
图3 展示了各种算法的内存占用率

这里写图片描述
图4 展示了各种算法的单帧处理时间


结论

本文系统全面的测试了6种VIO算法在4种平台下的性能与表现。评估的结论也表明天下没有免费的午餐,要想提高精度和鲁棒性就只能提供更多的计算资源。
最后也希望本文的结果能帮助各位SLAM爱好者,也期望有朝一日此问题能被妥善解决。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012348774/article/details/81414264