ORB-SLAM
一、introduction
PTAM
- 缺少闭环检测
- 缺少对于闭塞(occlusion)的处理
- 重定位时对视角的不变性低
- 自启动(bootstrapping)时需要人工干涉
ORB SLAM
以PTAM为基础
contributions:
- 使用ORB features在tracking、mapping、relocalization、loop closing任务中,保证在视点和光照变化时的不变性。
- 使用covisibility graph,使得能在大规模环境中实时运行。
- 基于essential graph的实时闭环检测。
- 实时相机重定位
- 提出基于模型选择的自动地图初始化方法,能够在平面和非平面环境下创建初始地图。
- 使用
宽进严出,”宽进严留“ (generous in the spawning but very restrictive in the culling)的survival of the fittest方法,选取关键帧和地图点。
二、system overview
总结一下就是,tracking、local mapping、loop closing三个线程并行,这三个部分都使用ORB特征。mapping部分的关键帧和地图点存储宽进快出,数据结构比较常规。loop closing部分使用DBoW2进行匹配以检测闭环。构造了两图一树,表示关键帧之间的临近关系,这个两图一树暂时不知道是用在哪儿的。
1. feature choice
特征的选择要求:
- 每张图片的提取时间小于33ms
- 具有旋转不变性
选取ORB特征。 并在tracking、mapping、place recognition(用于重定位和闭环检测)中都使用ORB特征。
2. 线程
分为三个并行线程:tracking、local mapping、loop closing
2.1. tracking
功能:每一帧相机位姿的估计以及关键帧的检测。
步骤:
- 当前帧特征抽取,与上一帧特征匹配,得到当前位姿的初始估计。
- 若匹配失败(由于遮挡或两帧差距过大),则使用place recognition模块进行全局的重定位,得到初始位姿。
- 使用motion-only BA进行位姿估计的优化。
- 从局部地图模块得到当前视角的局部地图(由全局关键字的convisibility graph维护),根据重投影,搜索当前帧特征点和局部地图点的匹配。
- 根据得到的匹配结果,再次优化位姿估计。
- 决定当前帧是否作为关键帧插入。
2.2. local mapping
功能:处理新进入的关键帧,执行局部BA,以达到当前相机位姿附近的最优的局部重建。维护地图,加入新的点,去除低质量的点和关键帧。
步骤:
- 插入新的关键帧
- 使用exigent point culling policy去除低质量的点。
- 若当前帧的特征点和局部地图中的点不匹配,则covisibility graph的连接关键帧中搜索对应关系,三角化出新的点,插入。
- 执行局部BA。
- 去除低质量的局部关键帧。
2.3. loop closing
功能:在每个新关键帧执行闭环检测,若检测到闭环,则做调整。
步骤:
- 对新进入的关键帧执行闭环检测。
- 若检测到闭环,计算相似性转换,得到累积误差。
- 将闭环的两侧对齐,融合重复点。
- 在essential graph上,根据相似性限制,执行位姿图优化,以达到全局一致性。
3. 地图点、关键帧的描述及选取
3.1. 地图点pip_ipi
包含:
- 世界坐标系中的三维坐标Xw,iX_{w,i}Xw,i
- 观测方向nin_ini。是所有观测到这个点的关键帧的中心视角的平均单位向量。(是只有一个吗??)
- ORB描述子DiD_iDi。 是所有观测到它的关键帧的描述子中,汉明距离最小的一个。
- dmax,dmind_{max},d_{min}dmax,dmin。(不知道是啥的距离??)
3.2. 关键帧KiK_iKi
包含:
- 相机位姿TiwT_{iw}Tiw,从世界坐标系到相机坐标系。
- 相机内参,包含焦距和焦点。
- 此帧的所有ORB特征,无论是否与地图点关联。未扰动的。
3.3. 选取方式
宽容选取,紧急去除。去除冗余关键帧、误匹配地图点、漏匹配地图点。能够提高地图探索时的鲁棒性,外点少。
4. covisibility graph and essential graph
essential graph的权重阈值是多少?比spaaning tree小?
好像这不是三个图,而是两个图。
spanning tree指的就是essential graph,essential graph是covisibility graph的最小生成树(MST)。
4.1. covisibility graph
无向有权图。表示关键帧之间的相邻关系。
- 点:关键帧
- 边:若两个关键帧之间共同观测到的地图点大于15,则连一条边
- 权重:两个关键帧之间共同观测到的地图点数量
4.2. essential graph
保留covisibility graph中的全节点,保留很少量的边。
4.3. spanning tree
从最初关键帧开始持续维护的树,是covisibility graph的子图。
当新关键帧插入:此节点连接到与他有最多共同观测的节点上
当关键帧删除:更新受影响的其他节点的连接关系
essential graph包含spanning tree,这个树的权重阈值很高(100)。