OpenVSLAM
Sumikura 2019 · 论文
一句话总结 — 一个模块化、开源的视觉SLAM框架,被设计为一个可调用的库,采用基于ORB的间接流水线,支持透视、鱼眼和等距柱状投影(360度全景)相机模型,并支持地图的保存/加载与定位。
问题
视觉SLAM对AR设备、自动驾驶机器人、无人机和UAV至关重要,但”传统的开源视觉SLAM框架并没有被恰当地设计为可供第三方程序调用的库”。ORB-SLAM、LSD-SLAM和DSO——事实上的标准——都是面向研究的应用程序:难以嵌入、难以扩展、局限于透视相机,而且(根据论文的对比表)大多不支持地图的存储/加载。像OpenMVG和OpenSfM这样的SfM软件包已经能够处理鱼眼和等距柱状投影图像;但当时没有任何实时视觉SLAM框架做到这一点。
方法与架构
OpenVSLAM(MM ‘19)是一个用C++实现的单目/双目/RGB-D系统(基于Eigen、OpenCV、g2o),其贡献主要在架构层面而非算法层面——将已经广为人知的SLAM方法封装为具有清晰API、并附有大量文档化示例代码的独立组件。
- 三个模块:跟踪模块通过ORB关键点匹配和位姿优化为每一帧估计相机位姿,并决定是否插入关键帧;建图模块从已插入的关键帧中三角化新的3D点,并运行窗口化的局部光束法平差;全局优化模块执行回环检测、位姿图优化(g2o)和全局BA。位姿图优化能够消除轨迹漂移,对于单目输入也能同时消除尺度漂移——这是ORB-SLAM/ProSLAM那种基于图的间接方法的形式。
- 设计上采用间接法:选择ORB特征(FAST关键点+二进制描述子)而非直接法,是因为直接法更容易受光照变化影响,且在卷帘快门传感器上表现更差——也就是说,正是OpenVSLAM所面向的智能手机和消费级相机的典型场景。
- 相机模型抽象:透视、鱼眼和等距柱状投影相机可以在一个基类
camera::base背后互换使用;用户可以通过从该基类派生来添加新模型(双鱼眼、折反射式相机)。透视和鱼眼模型支持单目、双目和RGB-D三种配置。作者声称这是首个支持等距柱状投影图像的开源视觉SLAM框架——全方位视野使跟踪不再依赖相机朝向。 - 地图I/O与定位:地图以MessagePack格式存储/加载(可供第三方应用复用),新的帧可以针对预先构建的地图进行定位。一个跨平台的查看器可以在网页浏览器中运行。
- 评测协议:经Umeyama对齐后的绝对轨迹误差——单目(尺度未知的轨迹)用 ,双目用 。
实验结果
在一台Core i7-7820HK笔记本电脑上,与ORB-SLAM2对比:
- EuRoC MAV(单目,11个序列):跟踪精度总体上与ORB-SLAM相当;在较暗的序列MH_04和MH_05上,OpenVSLAM的轨迹更精确,这得益于其额外的鲁棒匹配帧跟踪方法。
- 跟踪耗时,EuRoC MH_02:平均23.84毫秒/帧,而ORB-SLAM为27.96毫秒(中位数23.38对比24.97)——更快的ORB特征提取,以及一个不会随全局地图扩张而无限增长的局部地图。
- KITTI Odometry(双目,11个序列):ATE相当;在序列05上,平均56.32毫秒/帧,而ORB-SLAM为68.78毫秒(中位数54.45对比66.78),差距更大是因为图像更大,且双目匹配实现更优化。
- 定性结果:在室外(约6400帧,含高度变化和高动态范围场景)和室内(约6700帧)都成功完成鱼眼建图;使用等距柱状投影的THETA V相机在一段15000帧的室外序列上成功完成建图并实现回环闭合,并借助全方位观测在室内无纹理区域中依然保持跟踪。
对SLAM的意义
OpenVSLAM是最早为可用性和可集成性(而非仅仅为基准精度)而设计的SLAM代码库之一,它作为可嵌入组件被研究界和产业界广泛采用——尤其适用于其他开源系统都不支持的全景采集设备。它的历史也带来了一个教训:由于担心其代码衍生自采用GPL许可的ORB-SLAM2,原始仓库被下架,社区则以Stella-VSLAM之名继续开发。它仍然是研究一个组织良好的基于特征的SLAM架构的很好的入门起点。