一、前言
视觉同步定位和映射 (vSLAM) 是指计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。该过程仅使用来自相机的视觉输入。vSLAM 的应用包括增强现实、机器人和自动驾驶。
此示例演示如何处理来自单眼摄像机的图像数据,以构建室内环境地图并估计摄像机的轨迹。该示例使用 ORB-SLAM,这是一种基于功能的 vSLAM 算法。
二、词汇表
此示例中经常使用以下术语:
-
关键帧:包含本地化和跟踪提示的视频帧子集。两个连续的关键帧通常涉及足够的视觉变化。
-
地图点: 表示从关键帧重建的环境地图的三维点列表。
-
协同可见性图:由关键帧作为节点组成的图。如果两个关键帧共享公共地图点,则它们通过边连接。边的权重是共享地图点的数量。
-
基本图表:共可见性图的子图仅包含具有高权重的边,即更多共享地图点。
-
地点识别数据库: 用于识别过去是否访问过某个地点的数据库。数据库根据特征的输入包存储视觉单词到图像的映射。它用于搜索视觉上与查询图像相似的图像。
三、ORB-SLAM 概述
ORB-SLAM 管道包括:
-
地图初始化:ORB-SLAM 首先初始化来自两个视频帧的 3D 点地图。3-D 点和相对相机姿势是使用基于 2-D ORB 特征对应关系的三角测量计算的。
-
跟踪:初始化地图后,对于每个新帧,通过将当前帧中的要素与最后一个关键帧中的要素进行匹配来估计相机姿势。通过跟踪本地地图来优化估计的相机姿势。
-
局部映射:如果当前帧被标识为关键帧,则用于创建新的三维地图点。在此阶段,使用束调整通过调整相机姿势和 3D 点来最小化重投影错误。
-
闭环:通过使用功能袋方法将每个关键帧与所有先前的关键帧进行比较来检测每个关键帧的循环。一旦检测到闭环,就会优化姿势图以优化所有关键帧的相机姿势。
四、下载并浏览输入图像序列
此示例中使用的数据来自 TUM RGB-D 基准测试 [2]。您可以使用 Web 浏览器或运行以下代码将数据下载到临时目录。创建映像数据存储对象以检查 RGB 映像。
五、地图初始化
ORB-SLAM 管道首先初始化包含三维世界点的地图。此步骤至关重要,对最终 SLAM 结果的准确性有重大影响。初始 ORB 特征点对应关系是使用一对图像之间的匹配特征
找到的。找到对应关系后,使用两种几何变换模型建立映射初始化:
-
同调:如果场景是平面的,则单调投影变换是描述特征点对应关系的更好选择。
-
基本矩阵:如果场景是非平面的,则必须改用基本矩阵。
单应性和基本矩阵可以分别使用estgeotform2d
和estimateFundamentalMatrix
进行计算。选择导致较小重投影误差的模型来估计使用estrelpose
的两个帧之间的相对旋转和平移。由于RGB图像是由不提供深度信息的单目相机拍摄的,因此相对平移只能恢复到特定的比例因子。
给定两个图像中的相对相机姿势和匹配的特征点,使用三角测量
函数确定匹配点的三维位置。如果三角化地图点位于两个摄像机的前方、其重投影误差较低以及该点的两个视图的视差足够大,则该点有效。
六、存储初始关键帧和地图点
使用两个帧初始化地图后,可以使用图像视图集和世界点集来存储两个关键帧和相应的地图点。
七、初始化地点识别数据库
循环检测是使用词袋方法执行的imds 闭环过程以增量方式构建一个数据库,表示为倒置 ImageIndex 对象,该数据库存储基于 ORB 特征包的可视单词到图像映射。
八、优化和可视化初始重建
使用 bundleAdjust 优化初始重建,优化摄像机姿势和世界点,以最大程度地减少整体重投影误差。优化后,将更新地图点的属性,包括三维位置、视图方向和深度范围。您可以使用帮助程序可视化运动和结构来可视化地图点和照相机位置。
九、跟踪
跟踪过程使用每一帧执行,并确定何时插入新关键帧。为了简化此示例,一旦找到循环闭包,我们将终止跟踪过程。
十、本地映射
对每个关键帧执行本地映射。确定新关键帧后,将其添加到关键帧并更新新关键帧观察到的地图点的属性。为确保包含尽可能少的异常值,必须在至少 3 个关键帧中观察到有效的地图点。
新地图点是通过对当前关键帧及其连接的关键帧中的 ORB 要素点进行三角测量来创建的。
十一、闭环
闭环检测步骤采用本地映射进程处理的当前关键帧,并尝试检测并闭合循环。
最后,对基本图进行相似性姿态优化,以校正相机姿态的漂移。基本图是通过删除共可见性图中少于匹配项的连接在内部创建的。相似姿势图优化后,使用优化的姿势和相关比例更新地图点的三维位置。
十二、与地面真相比较
您可以将优化的摄像机轨迹与地面实况进行比较,以评估 ORB-SLAM 的精度。下载的数据包含一个文件,该文件存储了每帧相机姿势的基本事实。数据已以MAT文件的形式保存。您还可以计算轨迹估计值的均方根误差 (RMSE)。
以上总结了如何使用 ORB-SLAM 构建室内环境地图并估计摄像机轨迹的概述。可以通过调整以下参数,使用不同的数据集测试视觉 SLAM 管道:
-
将 480x640 像素的图像分辨率设置为 1000。对于更高的分辨率(如 720 × 1280),请将其设置为 2000。值越大,特征提取需要更多时间。
-
帧速率为 30fps 时,设置为 20。对于较慢的帧速率,请将其设置为较小的值。增加可提高跟踪速度,但在摄像机快速移动时可能会导致跟踪丢失。
十三、程序
使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)
打开下面的“example.mlx”文件,点击运行,就可以看到上述效果。
程序下载:基于matlab使用单眼摄像机图像数据构建室内环境地图并估计摄像机的轨迹资源-CSDN文库