捆绑调整 (BA) 可以提供相机定位的准确估计以及稀疏几何重建,前提是提供了强大的匹配网络和良好的初始猜测。实时 SLAM 算法必须为 BA 提供以下功能
Bundle Adjustment(捆绑调整)是计算机视觉和摄影测量学领域中的一种优化技术,用于同时优化三维场景的结构和相机的姿态参数。这个技术主要用于多视图立体重建、结构从运动(Structure from Motion,SfM)和摄影测量学等应用中。
在多视图系统中,一组相机拍摄了同一场景的不同视图,生成了一系列的图像。Bundle Adjustment的目标是通过调整相机的姿态(旋转和平移)以及三维场景中的点的位置,使得投影到图像平面上的这些点与实际观测到的图像点之间的误差最小化
一些前期工作的不足之处:缺乏循环闭合和对遮挡的充分处理、重定位视角的低不变性以及需要人为干预来进行地图引导
本文的贡献:
A. 地点识别
B. 地图初始化
单目 SLAM 需要一个过程来创建初始地图,因为无法从单个图像中恢复深度
两种重建方法在低视差下都没有得到很好的约束,并且如果平面场景的所有点都更接近相机中心之一,会出现双重歧义的解决方案问题。另一方面,如果看到有视差的非平面场景,则可以使用八点算法计算唯一的基本矩阵,并且可以毫无歧义地恢复相对相机位姿。
C. 单目同步定位与建图
最具代表性的基于关键帧的 SLAM 系统可能是PTAM。PTAM 不会检测大循环,并且重新定位基于关键帧的低分辨率缩略图的相关性,从而产生较低的视点不变性
A. 特性选择
主要设计思想:映射和跟踪所使用的相同特征用于位置识别,以执行帧速率重新定位和循环检测
B. 三个线程:跟踪、本地映射和闭环
Fig. 1 ORB-SLAM 系统概述,显示跟踪、本地映射和闭环线程执行的所有步骤。还显示了地点识别模块和地图的主要组件
跟踪负责用每一帧定位摄像机并决定何时插入新的关键帧
局部映射处理新的关键帧并执行局部BA以实现相机位姿周围的最佳重建
循环闭合会在每个新关键帧中搜索循环
C. 地图点、关键帧及其选择
对于地图点 p i p_i pi? 存储一下内容:
其在世界坐标系中的 3D 位置 X w , i X_{w,i} Xw,i?
观察方向 n i n_i ni?,它是所有观察方向的平均单位向量(将点与观察它的关键帧的光学中心连接起来的光线)
代表性 ORB 描述符 D i \mathbf{D}_i Di?,它是关联的 ORB 描述符,其汉明距离相对于观察点的关键帧中的所有其他关联描述符来说是最小的
汉明距离(Hamming Distance)是用来衡量两个等长字符串在相应位置上不同字符的个数。在计算机科学和信息理论中,汉明距离通常用于比较两个等长的二进制串,但它的概念也可以扩展到其他类型的序列
根据 ORB 特征的尺度不变性限制,可以观察到该点的最大 d m a x d_{max} dmax? 和最小 d m i n d_{min} dmin? 距离
每个关键帧 K i K_i Ki? 存储以下内容
地图点和关键帧是通过宽泛的策略创建的,而后来非常严格的剔除机制负责检测冗余关键帧和错误匹配或不可跟踪的地图点
D. 共视图和本质图
Fig. 2 来自 TUM RGB-D 基准的办公室家庭序列 fr3_long_office_household 的重建和图表。 (a) 关键帧(蓝色)、当前相机(绿色)、地图点(黑色、红色)、当前本地地图点(红色)。 (b) 可见性图。 ? 生成树(绿色)和闭环(红色)。 (d) 基本图表
E. 词袋地点识别
“Bag of Words”(BoW)是一种用于文本数据处理的技术,主要用于文本特征提取和表示。它将文本文档表示为一个无序词集合,忽略文本中单词的顺序和语法,仅考虑单词的出现频率。这种方法的核心思想是将文本看作是一个“袋子”(bag),其中包含了所有词汇的信息,但忽略了它们的顺序
这里,在 Bags of Words Place Recognition 中,场景或地点被表示为单词的集合,忽略了它们的空间或顺序关系
该系统嵌入了基于DBoW2 2 ^2 2 的词袋位置识别模块,以执行循环检测和重新定位。视觉词只是描述符空间的离散化,称为视觉词汇
地图初始化的目标是计算两个帧之间的相对姿态,以对一组初始地图点进行三角测量
算法的步骤如下:
查找初始对应:在当前帧 F c F_c Fc? 中提取 ORB 特征(仅在最精细的尺度上),并在参考帧 F r F_r Fr? 中搜索匹配 x c ? x r \mathrm{x}_c ? \mathrm{x}_r xc??xr? 。如果没有找到足够的匹配项,则重置参考系
两个模型的并行计算:在并行线程中计算单应性
H
c
r
\mathbf{H}_{cr}
Hcr? 和基本矩阵
F
c
r
\mathbf{F}_{cr}
Fcr? 为
x
c
=
H
c
r
x
r
,
????
x
c
T
F
c
r
x
r
=
0
(1)
\mathrm{x}_c=\mathbf{H}_{cr}\mathrm{x}_r,\ \ \ \ \mathrm{x}^T_c\mathbf{F}_{cr}\mathrm{x}_r=0\tag{1}
xc?=Hcr?xr?,????xcT?Fcr?xr?=0(1)
分别使用归一化 DLT 和八点算法。为了使两个模型的过程均匀,两个模型的迭代次数都是相同的,以及每次迭代要使用的点:八个用于基本矩阵,其中四个用于单应矩阵。。在每次迭代中,我们计算每个模型
M
M
M 的分数
S
M
S_M
SM?(
H
H
H 表示单应性,
F
F
F 表示基本矩阵)
S
M
=
∑
i
(
ρ
M
(
d
c
r
2
(
x
c
i
,
x
r
i
,
M
)
)
+
ρ
M
(
d
r
c
2
(
x
c
i
,
x
r
i
,
M
)
)
)
ρ
M
(
d
2
)
=
{
Γ
?
d
2
,
???
i
f
???
d
2
<
T
M
0
,
i
f
???
d
2
≥
T
M
(2)
S_M=\sum\limits_i(\rho_M(d^2_{cr}(\mathrm{x}^i_c,\mathrm{x}^i_r,M))+\rho_M(d^2_{rc}(\mathrm{x}^i_c,\mathrm{x}^i_r,M)))\\ \rho_M(d^2)=\left\{ \begin{aligned} &\Gamma-d^2,\ \ \ &if\ \ \ &d^2<T_M\\ &0, &if\ \ \ &d^2\geq T_M \end{aligned} \right.\tag{2}
SM?=i∑?(ρM?(dcr2?(xci?,xri?,M))+ρM?(drc2?(xci?,xri?,M)))ρM?(d2)={?Γ?d2,???0,?if???if????d2<TM?d2≥TM??(2)
其中 d c r 2 d^2_{cr} dcr2? 和 d r c 2 d^2_{rc} drc2? 是从一帧到另一帧的对称传输误差。 T M T_M TM? 是基于 95% 的 X 2 \mathcal{X}^2 X2 检验的异常值拒绝阈值。 Γ \Gamma Γ 被定义为等于 T H T_H TH?,以便两个模型在其内点区域中对于相同的 d 得分相同,再次使过程均匀
模型选择:如果场景是平面、接近平面或存在低视差,则可以用单应性来解释。我们应该选择单应性,因为重建方法将从平面正确初始化,否则它将检测低视差情况并拒绝初始化。另一方面,具有足够视差的非平面场景只能由基本矩阵来解释,但如果匹配位于平面上或视差较低(距离较远),也可以找到单应性来解释匹配的子集。一个稳健的启发式方法如下
R
H
=
S
H
S
H
+
S
F
(3)
R_H=\frac{S_H}{S_H+S_F}\tag{3}
RH?=SH?+SF?SH??(3)
如果
R
H
>
0.45
R_H > 0.45
RH?>0.45,则选择单应性,这足以捕获平面和低视差情况。否则选择基本矩阵
运动和运动恢复结构:一旦选择了一个模型,检索与之关联的运动假设。如果视差较低,点很容易进入相机的前面或后面,这可能会导致选择错误的解决方案。如果没有明确的获胜解决方案,不会初始化并从步骤 1 继续。这种消除解决方案歧义的技术使我们的初始化在低视差和双重模糊配置下具有鲁棒性,可以被认为是我们方法鲁棒性的关键。对于基本矩阵,我们使用校准矩阵
K
\mathbf{K}
K 将其转换为基本矩阵:
E
r
c
=
K
T
F
r
c
K
(4)
\mathbf{E}_{rc}=\mathbf{K}^T\mathbf{F}_{rc}\mathbf{K}\tag{4}
Erc?=KTFrc?K(4)
捆绑调整:最后,执行完整的 BA(详细信息请参阅附录)以细化初始重建
Fig. 3 顶部:PTAM,中间:LSD-SLAM,底部:ORB-SLAM,NewCollege 序列初始化后的一段时间。 PTAM 和 LSD-SLAM 初始化损坏的平面解决方案,而我们的方法在检测到足够的视差时会自动从基本矩阵进行初始化。根据手动选择的关键帧,PTAM 也能够很好地初始化。
A. ORB 提取
B. 前一帧的初始姿态估计
C. 通过全局重定位进行初始姿态估计
D. 跟踪本地地图
一旦有了相机姿态的估计和一组初始特征匹配,就可以将地图投影到框架中并搜索更多地图点对应关系。为了限制大地图的复杂性,只投影局部地图
E. 新关键帧决策
最后一步是确定当前帧是否生成为新关键帧。由于局部映射中有一种机制可以剔除冗余关键帧,因此尝试尽快插入关键帧。要插入新的关键帧,必须满足以下所有条件
A. 关键帧插入
B. 最近的地图点剔除
地图点必须在创建后的前三个关键帧期间通过限制性测试,这确保它们是可跟踪的并且不会由于虚假数据关联而被错误地三角测量
一旦地图点通过了此测试,只有在任何时候从少于三个关键帧观察到它时才能将其删除
C. 新地图点创建
D. 局部捆绑调整
E. 局部关键帧剔除
为了保持紧凑的重建,局部地图构建尝试检测冗余关键帧并将其删除
随着关键帧数量的增加,BA的复杂性也会增长,而且这样做还能够在相同环境中进行长期运行,因为关键帧的数量不会无限增长,除非场景中的视觉内容发生变化
循环关闭线程采用本地映射处理的最后一个关键帧 K i K_i Ki?,并尝试检测和关闭循环
A. 循环候选检测
为了接受循环候选,必须连续检测三个一致的循环候选(在共视图中连接的关键帧)。如果有几个地方与 K i K_i Ki? 的外观相似,则可以有多个循环候选者
B. 计算相似度变换
在单目 SLAM 中,地图可以在七个自由度中漂移:三个平移、三个旋转和一个比例因子。
为了关闭循环,我们需要计算从当前关键帧 K i K_i Ki? 到循环关键帧 K l K_l Kl? 的相似变换,以告知我们循环中累积的误差
C. 循环融合
融合中涉及的所有关键帧都将更新其在共视图中的边缘,从而有效地创建附加循环闭合的边缘
D. 基本图优化
在 NewCollege 的大型机器人序列中对我们的系统进行了广泛的实验验证,评估了系统的总体性能,在 TUM RGB-D 基准的 16 个手持式室内序列中评估了定位精度,重新定位和终身能力,并在 KITTI 数据集的 10 个汽车户外序列中,评估实时大规模操作、定位精度和位姿图优化的效率
A. NewCollege 数据集中的系统性能
作为循环闭合过程的一个示例,在图 4 中展示了对具有支持相似性变换的内点的循环的检测。图5显示了环路闭合之前和之后的重建。红色表示局部地图,在环路闭合之后,局部地图沿着环路闭合的两侧延伸
Fig. 4 在 NewCollege 序列中检测到的循环示例。我们绘制支持相似变换的内部对应关系
Fig. 5 地图在 NewCollege 序列中循环闭合之前和之后的情况。回环匹配用蓝色绘制,轨迹用绿色绘制,当时跟踪的局部地图用红色绘制。闭合后局部地图沿环路两侧延伸
Fig. 6 ORB-SLAM重建NewCollege全序列。右侧较大的环路以相反方向遍历,未发现视觉环路闭合;因此,它们并不完全对齐
在局部映射线程中,要求最高的任务是本地BA。如果机器人正在探索或处于地图绘制良好的区域,则本地 BA 时间会有所不同,因为在探索过程中,如果跟踪插入新的关键帧,BA 就会中断。如果不需要新的关键帧,本地 BA 会执行大量的前缀迭代
Tab. 1 表 I 显示了跟踪和局部映射的结果。跟踪工作的帧速率约为 25-30 Hz,这是跟踪局部地图的最苛刻的任务。如果需要,可以减少该时间,限制局部地图中包含的关键帧的数量
Tab. 2 表 II 显示了所发现的六个环路闭合中每一个的结果
可以看出循环检测如何随着关键帧的数量呈次线性增加。这是由于数据库的高效查询仅将图像子集与共同的单词进行比较,这证明了词袋在地点识别方面的潜力
B. TUM RGB-D 基准中的定位精度
TUM RGB-D 基准是评估相机定位准确性的优秀数据集,因为它提供了多个序列,以及通过外部运动捕捉系统获得的准确地面实况
为了进行比较,在基准测试中执行了新颖的、直接的、半密集的 LSD-SLAM 和 PTAM,还与 RGBDSLAM 生成的轨迹进行比较,这些轨迹是为基准网站中的一些序列提供的
Tab. 3 ORB-SLAM、PTAM 和 LSD-SLAM 的结果是每个序列中五次执行的中值。轨迹已与 7 个自由度与地面实况对齐。 RGBD-SLAM 的轨迹取自基准网站,仅适用于 fr1 和 fr2 序列,并且已与 6 DoF 和 7 DoF 对齐(括号内的结果)。 X 表示跟踪在某个点丢失,并且序列的很大一部分未被系统处理
可以看出,ORB-SLAM能够处理除 fr3_nostruct_texture_far(fr3_nstr_tex_far)之外的所有序列。这是一个平面场景,因为相机相对于平面的轨迹有两种可能的解释,即双重模糊性。
C. TUM RGB-D 基准中的重新定位
在 TUM RGBD 基准测试中进行了两次重定位实验。
在第一个实验中,使用序列 fr2_xyz 的前 30 秒构建地图,并对每个连续帧执行全局重定位,并评估恢复姿势的准确性。用 PTAM 进行相同的实验进行比较。图 7 显示了用于创建初始地图的关键帧、重新定位帧的姿势以及这些帧的地面实况
Fig. 7 fr2_xyz 中的重定位实验。地图最初是在序列 (KF) 的前 30 秒内创建的。目标是重新定位后续帧。显示了我们的系统和 PTAM 的成功重新定位 ?。仅针对要重新定位的帧显示真实值 (GT)
可以看出,PTAM由于其重定位方法的不变性很小,只能对靠近关键帧的帧进行重定位。
Fig. 4 表 IV 显示了相对于真实情况的召回率和误差。 ORB-SLAM 比 PTAM 准确地重新定位了两倍以上的帧
在第二个实验中,我们使用序列 fr3_sitting_xyz 创建初始地图,并尝试重新定位 fr3_walking_xyz 中的所有帧。
因为场景中的人移动会产生很大的遮挡。在这里,PTAM 没有发现重新定位,而我们的系统重新定位了 78% 的帧
Fig. 8 我们的系统在重定位实验中成功发现了具有挑战性的重定位示例(严重的尺度变化、动态对象)
D. TUM RGB-D 基准的长期实验
之前的重定位实验表明,我们的系统能够从非常不同的角度在地图中进行定位,并且在适度的动态变化下能够稳健地进行定位
Fig. 9 在静态环境中进行长期实验,其中相机始终从不同的角度观察同一个地方。 PTAM 始终插入关键帧,而 ORB-SLAM 能够修剪冗余关键帧并维护有界大小的地图
Fig. 10 根据 TUM RGB-D 基准在动态环境中进行长期实验。 (a) 地图中关键帧数量的演变。 (b) 关键帧创建和销毁。每条水平线对应一个关键帧,从其创建帧直到其销毁。 ? 所有生成关键帧的生存时间相对于实验剩余时间的直方图
在这些长期的实验中,可以证明我们的地图随着场景的内容而不是随着时间而增长,并且能够存储场景的动态变化,这对于通过积累环境中的经验来执行一些场景理解是有用的
E. KITTI 数据集中的大规模和大闭环
Fig. 11 来自 KITTI 数据集里程计基准的序列 00、05 和 07。 (左)点和关键帧轨迹。 (中)轨迹和地面实况。 (右)完整 BA 迭代 20 次后的轨迹。我们系统的输出相当准确,但可以通过 BA 的一些迭代来稍微改进
Fig. 12 来自 KITTI 数据集里程计基准的序列 02、03、04、06、08、09 和 10 中的 ORB-SLAM 关键帧轨迹。序列 08 不包含循环,并且漂移(尤其是比例)未校正。 (a)序列02。(b)序列03。?序列04。(d)序列06。(e)序列08。(f)序列09。(g)序列10
与 TUM RGB-D 基准一样,我们通过相似变换将系统的关键帧轨迹与地面实况对齐。可以定性地比较图 1 和 2 的结果。 ORB-SLAM 为所有这些序列生成了明显更准确的轨迹,但序列 08 除外,其中它们似乎受到的漂移较小
Tab. 5 表 V 显示了每个序列中五次执行的关键帧轨迹的中值 RMSE 误差
在这个实验中,还检查了通过在每个序列末尾执行 20 次完整 BA 迭代可以改善重建多少。全 BA 的一些迭代稍微提高了带循环的轨迹的精度,但在开放轨迹中的影响可以忽略不计
最后,展示我们的闭环方法的有效性以及用于在基本图中包含边的 θ m i n θ_{min} θmin? 的影响。我们选择了序列09(一个非常长的序列,末尾有一个循环闭合),并且在同一次执行中,我们评估了不同的循环闭合策略
Tab. 6 第一行显示没有循环关闭的结果。 BA 括号内的数字表示 Levenberg-Marquardt (LM) 迭代次数,而对于 EG(本质图),则表示构建本质图的 θ m θ_m θm?。所有 EG 优化均执行十次 LM 迭代
A. 结论
B. 稀疏/基于特征的方法与密集/直接方法
C. 后期工作
我们的系统的准确性仍然可以通过在跟踪中加入无穷远点来提高。这些点在足够的视差下看不到,并且我们的系统未包含在地图中,但它们对于相机的旋转提供了非常丰富的信息
另一种开放的方式是将我们系统的稀疏地图升级为更密集、更有用的重建