前沿
SLAM(Simultaneous Localization and Mapping),其中文翻译为同步定位与地图构建,即可以在未知环境中通过传感器的信息来定位自身的位姿,并同时构建环境的三维地图,因其在AR/VR、自动驾驶、机器人领域的巨大应用价值,得到了学术界和工业界的广泛关注。
SLAM示意图
SLAM技术主要提供两方面的能力:即空间定位(Localization)和环境重建(Mapping)。而这两方面的能力也是AR/VR的关键基础技术。环境重建(Mapping)能力可以识别真实物理世界的几何结构,提供了AR/VR虚拟场景与真实物理世界叠加的载体。而空间定位(Localization)能力,或者我们称之为6DoF运动跟踪,则能够保证虚拟场景与真实世界的融合能够在不同视角下的一致性。
No.2
XRSLAM特性介绍
XRSLAM[4]是OpenXRLab空间计算平台中基于C++语言实现的SLAM算法库,算法基于单目视觉和IMU实现了轻量级的VIO,同时支持桌面平台和移动平台,算法在EuRoC[3]等公开数据集上达到SOTA级别的精度,支持普通手机终端30fps的实时处理帧率。
1
模块化的设计
XRSLAM的整个框架如下图所示,算法支持多种不同传感器数据作为输入,经过XRSLAM算法内部的融合优化算法得到实时相机位姿。在当前开源的版本中,XRSLAM的核心是一个轻量级的VIO算法,其中包括对IMU数据的预积分,对图像数据的特征匹配,基于视觉、IMU的线性对齐初始化以及完整的划窗优化等。其中特征匹配采用了OpenCV[5]的光流来实现。
OpenXRLab-XRSLAM框架
算法内部根据核心模块、状态估计、多视图几何、视觉定位、地图结构、AR展示、实用工具等不同类别,模块化了不同的函数和类,方便开发者上手和拓展更多功能。
XRSLAM设计了灵活易拓展的多传感器支持,当前发布的版本以单目相机和IMU作为传感器输入,在此基础上,我们会进一步拓展到多目相机、深度相机以及广角相机等更多配置。
2
跨平台的开发
算法库核心部分只依赖Eigen[6]、OpenCV[5]、Ceres Solver[7]等常用基础库,而且这些基础库都已经包含在我们的XRPrimer基础库中。XRSLAM支持Linux、Mac、Android、iOS等多个平台的编译运行,当前发布的版本中,我们也提供了Linux/Mac和iOS的完整的编译流程和可以方便运行的demo。
3
完善的文档说明
为了让用户能快速上手XRSLAM,我们提供了详尽的文档和教程供使用者参考,其中包含了:
VIO能够正常稳定的运行,依赖对多传感器参数进行提前标定,我们提前对近几年的iOS设备进行了参数标定,使得开发者随手可以快速运行起来我们的AR demo。
最后,考虑到配置系统环境容易出现各种问题,XRSLAM还提供了完整的docker镜像,帮助开发者快速地基于统一的系统环境上手开发SLAM。
在我们的XRSLAM的官方github页面,我们将及时回答大家在使用XRSLAM的问题并尽力处理各类issue,欢迎大家踊跃参与讨论!
No.3
XRSLAM性能指标
XRSLAM在EuRoC上进行了精度评测,并与目前SOTA算法VINS-Mono进行了对比(其中VINS-Mono的结果是基于开源代码本地复现的结果)。从结果看,XRSLAM的精度具备显著的领先性。另外,XRSLAM也可以在移动端实时运行,算法处理效率可以支持30Fps以上的数据处理帧率。
效果指标对比结果(注意这里的精度指标都不包含回路闭合的功能)
EuRoC V101算法运行可视化效果
移动端AR效果(视频2倍速播放)
No.4
总结
SLAM是一个既古老又充满活力的研究领域,在这个方向仍有很多值得研究的热点问题。XRSLAM提供一个开放的平台,以简洁高效、跨平台、易拓展的形式,欢迎大家在此平台上进行二次开发,共同探索SLAM方向的新的研究课题和技术突破。