ORB-SLAM:文献阅读笔记
ORB-SLAM贡献:
- 所有任务均采用ORB特征,在标准CPU上可实现实时运行且无需GPU加速;该方法具有视点与光照不变性,并展现出较高的可靠性和效率。
 - 通过构建covisibility图实现局部区域的跟踪与建模,在复杂环境下仍能保持良好的实时性能。
 - 基于位姿图优化构建essential图以实现回环检测。
 - 基于对视点与光照的不变性设计的实时相机重定位技术。
 - 自动化的模型初始化方法用于创建平面与非平面场景的基础地图。
 - 采用优胜劣汰策略选择关键帧以提升定位精度与跟踪稳定性。
 
系统综述

特征提取:ORB 基于256位描述符的定向多尺度快速角点提取方法具有高效的计算能力和精确的匹配性能,并且展现出优异的抗光照变化性能。
- 三个线程:tracking、local mapping、loop closing
- 
tracking:负责从特征中提取信息,并对每帧进行初始化位姿估计及局部地图追踪;同时判断何时引入新的关键帧。
 - 
local mapping:处理新增的关键帧并执行本地BA优化;更新地图点及关键帧坐标;实现相机姿态在局部范围内的最佳重建。
 - 
loop closing:对新关键帧周围进行循环搜索;检测到循环时计算相似变换以修正累计漂移;实现回环两侧点对齐并进行融合;最后优化姿态图以保证全局一致性。
 - 
地图点、关键帧及其选择
- map point:pi
 
 
 - 
 
在全局坐标系中的位置Xw,i。
观察方向ni是由所有 observation directions 的 averaged unit vector 表示。
closest orb description Di与该关键帧中的 feature point descriptors 的汉明距离是最小。
基于 orb features' scale-invariant limit, 我们能够计算出观测点的最大 dmax 和最小 dmin 距离。
注意: keyframe: Ki.
它的相机姿态Tiw属于刚性变换类型,在将该变换应用于从世界坐标系转换至相机坐标系的过程中完成。
该相机系统具有内部参数设置。
在每一帧中提取的所有ORB特征点,并带有或不带地图标记。
- Covisibility Graph and Essential Graph
 
- covisibility graph 被表示为无向加权图:其节点代表关键帧,在边上共享相同的地图点数量即为权重。
 - 为了避免包含由 covisibility graph 提供的所有边(这些边非常密集),构建一个只保留所有节点(这些节点即关键帧)但边很少的 essential graph,并且仍然保持强大的网络结构。
 
基于初始关键帧逐步构建生成树;由具有高度隐蔽性的covisibility graph所决定的边缘子集
- Bag of Words (BoW)
基于提取的大图像中的ORB描述符构建词汇表。
更新采用增加与剔除两种方式。
将具有视觉重叠的关键帧连接至covisibility图中。
筛选出分数超过75%的最佳匹配关键帧集合。 
Automatic map initialization
- 地图初始化目标是估算两帧间的相对姿态关系,并用于精确定位初始的地图特征点。
 - 该方法不受场景类型影响(无论是平移还是复杂曲面),无需人工干预即可自动选取优质双目构型。
 - 该算法基于两种并行计算的方法论:基于平面假设的单应矩阵模型和基于非平面假设的基本矩阵模型。
 - 当检测到满足安全标准的情况时(如出现显著的小基线配置或出现双重平面模糊现象),则采取措施防止初始化损坏的地图数据从而实现本算法的有效运行。
 - 算法步骤:
 
确定最初的对应关系:首先,在当前帧中提取ORB特征向量,并将其与前一帧建立特征对应关系。当无法建立足够的特征对应关系时,则重置参考帧。
两种模型并行计算:在两个独立的计算流中分别采用归一化直接线性变换法(NDLT)求解单应矩阵H,并通过八点算法求解基础矩阵F。
为了使两者的优化过程趋于一致,在统一设定两者的迭代次数(因为单应矩阵具有8个自由度,因此仅需四对特征点即可确定单应矩阵H;而构建基础矩阵F则需要至少八个对应点对)。在每次迭代过程中,分别评估两个模型当前的状态(其中M代表的是H或F中的某一个):

3. 模型选择:单应矩阵处理平面模型。如果   
        
的值<0.45则选择单应矩阵模型。
从运动中恢复结构:
针对单应矩阵模型,在Faugeras与Lustman的研究基础上实施8种可能的运动模式搜索。
通过校准过程将本质矩阵E转换为基础矩阵F,并运用奇异值分解法(SVD)计算出4组潜在的运动参数。
5. 全局BA:改进初始重建。
        Tracking
- 基于ORB的方法提取特征描述子
- 利用前一帧数据进行初始位姿估计
如果在最终帧上实现了稳定且连续的特征跟踪,则通过恒定速度运动模型推导出相机的姿态,并以这些观测到的地图点为基础展开定位搜索。
当出现严重失配情况时(即运动模型受到明显破坏),则将在此处周围区域进行扩展式的搜索,并根据所获得的最佳匹配结果重新计算姿态。 
 - 利用前一帧数据进行初始位姿估计
 
采用基于全局重定位的初始化方法来确定位姿。
当跟踪丢失时,则将当前帧转换为词袋表示,并检索数据库中的关键帧进行匹配。
首先,在每个关键帧中计算与地图点相关的ORB特征对应的匹配关系。
接着,在每个关键帧上实施替代RANSAC迭代过程,并尝试利用PnP算法求解摄像机的姿态。
如果获得足够的inliers支持,则优化相机位姿参数,并通过引导搜索进一步匹配候选关键帧的地图点。
- 对局部地图进行定位
通过优化相机姿态来提升精度
关键帧集 K₁ 与当前框架共享地图点的位置;关键帧集 K₂ 位于基于 covisibility graph 的邻近区域;参考框架 K_ref 属于集合 K₁ 的一部分
所有被关键帧集 K₁ 和相邻的关键帧集 K₂ 观测到的地图点均需遵循以下规定: 
- 移除在当前帧中投影落在图像边界外的地图坐标。
 - 排除那些在当前观测视线v与其对应的平均视线方向n之间夹角大于60度的地图坐标。
 - 排除位于相机中心距离d不在预设尺度不变性范围内的地图坐标。
 - 计算当前帧与参考框架的比例尺缩放因子d/dmin。
 - 通过对比各地图子描述子与其对应未匹配ORBF区域特征值,在最佳匹配的基础上建立对应关系。
 
- 新关键帧提取
 
- 当帧数超过20时,则需要执行全局重定位操作(以确保良好的定位效果)。
 - 在局部建模过程中出现闲置的情况时,则应在超出20帧时插入关键帧以避免延迟。
 - 建议在每帧中追踪至少50个跟踪点以保证追踪的稳定性和连续性。
 - 若当前处理的帧与参考基准帧之间的匹配点不足90%,则可能导致较大的视觉差异。
 
Local mapping
关键帧的新增。
在更新covisibility graph时(增加新的节点Ki,并对与其他帧共享地图点的边进行更新)。
将链接Ki与关键帧的生成树重新配置为由大量普通点构成。
计算词袋模型用于表示关键帧。
*删除近期的地图数据,在建立三帧关键帧后进行约束测试。
- 跟踪需要在其覆盖范围内的四分之一帧中定位该点。
 - 当从地图生成的初始点经过多个帧时,则需要至少观察三个关键帧。
 
通过测试的点,只有在少于三个关键帧观察时才会被去除。
- 
新地图点的生成
基于covisibility graph关联的关键帧对,在ORB三角测距过程中新增地图点的生成。在这些特征点对经过三角化后,只有当正向景深、视差、反投影误差及尺度一致性均满足一定条件时(即这些参数都在可接受范围内),才会生成这些地图点。 - 
local BA optimization
optimize the keyframes Ki involved in the current processing, along with all keyframes connected to Ki in the covisibility graph Kc and all map points visible by these keyframes.
all additional keyframes observing these map points, whether or not they are connected to Ki, are also optimized.
any observations marked as outliers are discarded during or after optimization. 
通过局部关键帧筛选, 我们可以将 covisibility graph Kc 中的地物点筛选掉. 这些地物点能够在至少另外三个不同的关键帧中被检测到.
Loop closing
- 回环条件检测
测试local mapping过程的最后一帧Ki。 
通过计算Ki在covisibility graph中的词袋向量与其所有相邻帧的相似性,并返回最小的评分s。
从识别数据库中筛选出分数高于等于s的关键帧。
*计算相似变换   通过计算当前帧Ki与候选回环帧Kl之间的相似变换来评估回环过程中的累积误差。
计算当前关键帧与候选回环关键帧地图点之间的ORB相关一致性。
采用Horn方法对每个候选回环关键帧进行交替RANSAC迭代以获得相似变换。
若发现包含足够inliers的一个相似变换矩阵Sil,则对其执行优化以促进更多对应关系搜索。
在继续优化过程中若Sil支持足够的inliers则确定对应的回环帧Kl。
在covisibility图中新增一条边连接这对地图点并将该边加入图中完成回环融合操作。
1. 当前帧的位姿Tiw通过相似变换Sil矫正,并且将这个矫正传播到所有相邻Ki中。
2. 对齐环的两侧。
3. 回环关键帧及其相邻帧所看到的所有地图点都投影到Ki中,并在投影周围的狭窄区域中搜索其邻近和匹配项。
4. 所有匹配的地图点和在Sil估算出的inliers融合。
5. 融合中涉及的所有关键帧将更新其covisibility graph中的边缘,有效地创建附加环闭合的边。
        - essential graph优化
为了有效关闭回环,执行essential graph的位姿图优化,分散图中的闭环误差。
通过相似变换矫正尺度漂移。
优化后,根据观察它的关键帧之一的校正来转换每个地图点。 
