论文地址:https://arxiv.org/pdf/1610.07336.pdf
代码:GitHub - urbste/MultiCol-SLAM: This repository contains a multi-fisheye camera SLAM. The underlying SLAM system is based on ORB-SLAM.参考文档:【算法】跑MultiCol-SLAM遇到的效果展示(环境:Ubuntu18.04+ROS melodic)_BigHandsome2020的博客-CSDN博客
论文贡献
1. 介绍了multi-keyframes(MKFs), multi-camera-system(MCS)
2. A hyper-graph formulation of MultiCol (MultiCol的混合图模型)
3. 多相机回环检测
4. Minimal non-central absolute pose estimation methods forre-localization 重定位使用了最小化去中心点的位姿估计
5. 基于本质图的不同的初始化方法
6. several performance improvements
系统框架
下图红字表示为multicol新增部分。而其中可以看到,我们对于BA,位姿估计,地图点三角化和相对反向计算都提供了创新。
其具体细节包括:
* 每一个图像集合的特征被提取,用于匹配。利用hash map加速特征点到地图的匹配。
* 局部地图点被投影到多相机系统和当前帧的地图点匹配。
* 如果初始位姿估计失败,GP3P和RANSAC会被用于执行重定位。(orb slam2中通过epnp执行此操作)
* 因为一个地图点可以同时被多个相机观测,因此,我们使用hyper graph 而不是 graph去进行优化。
MultiCol 模型
上式表达一点经过从world -> body -> camera的坐标转换
Map entities 地图主体
map points
* 在世界坐标系的三维坐标
* 用d_{max} 和d_{min}来表示点被观察的距离范围
* 视线方向 ni = [n_x, n_y, n_z]
Multi-Keyframes
因为每个关键帧包含多张图片,因此被称为Multi-Keyframe, MCS包含相机外参和内参
- pose
- 每一个相机提取的特征点存储它的图像坐标系的位置(用于BA和位置估计),以及3D bearing vector(用于本质矩阵估计以及GP3P)。
Co-Visibility Graph
Map Initialization
地图初始化包括相机位姿和初始地图点的建立,初始化的精确程度关系到整个系统的效果。
The accuracy and robustness of the initial reconstruction has asignificant impact on the overall performance of the system.
在orb slam中,初始化基于足够的视差,所以在纯旋转和只对于一个平面观察时,初始化会失败。
作者尝试了基于多相机多位姿的几种方法,但是效果不理想,而Ventura et al在2015的作品值得进一步关注。
我们提出了一种相对实际的方法,我们通过Ransac估计矩阵E,然后选择有最大inliners和旋转尺度的位姿,然后寻找在多个相机中的共视点。最后,我们针对所有相机位姿使用BA。
Tracking线程
tracking线程最重要的是保证实时性。
所有的优化都采用基于LM的iterative re-weighted least squares(IRPLS)
特征点
FAST特征在新环境下通常需要训练,因此,我们使用AGAST角点作为取代。我们对于每个AGAST特征提取ORB描述子。
基于上一时刻的跟踪
基于固定的地图点,我们进行跟踪,然后对于位姿进行优化,然后基于优化后的位姿接着寻找匹配点。
重定位
在跟踪失败后,我们会进行重定位,在ORB SLAM2中,初始位姿估计是通过EPnP和RANSAC实现的。而我们替换掉它有两点原因。
1. EPnP在点数较少的时候,估计非常不准确。
2. 我们多相机的场景不适用。
我们使用UPnP,GP3P的方法。