地图点、关键帧和图结构是ORB-SLAM系统的核心组成部分,它们共同构建了SLAM系统的空间表示与数据组织方式。本章将详细讨论这些模块及其在系统中的作用和实现方式。
4.1 地图点
4.1.1 什么是地图点
地图点(Map Point)是SLAM系统中用来表示环境中三维特征点的抽象概念。这些点是通过相机观测和三角测量得到的,是地图构建的基础。
-
三维位置
每个地图点存储其在世界坐标系中的三维坐标 P ( X , Y , Z ) P(X, Y, Z) P(X,Y,Z) 。 -
观测关系
地图点与多帧图像中的特征点建立关联,用于优化和重投影误差计算。 -
描述子
每个地图点还关联一个特征描述子,用于后续帧的特征匹配和跟踪。
4.1.2 地图点的创建
地图点的创建依赖于特征点匹配和三角测量。
-
特征点匹配
- 提取多帧图像的ORB特征点,并通过描述子计算匹配点对。
- 使用极线约束或RANSAC剔除误匹配点。
-
三角测量
-
从匹配点的视差信息中推算出对应的三维位置。
-
使用公式:
P = Triangulate ( K , R , t , matches ) P = \text{Triangulate}(K, R, t, \text{matches}) P=Triangulate(K,R,t,matches)
其中 K K K 为相机内参, R R R 和 t t t 为相机的相对位姿。
-
-
地图点初始化
将三角测量得到的三维点存储为地图点,并记录其被观测的帧信息。
4.1.3 地图点的更新与优化
-
观测融合
- 随着SLAM运行,地图点会被多帧图像观测。
- 通过融合不同帧的信息,更新地图点的三维位置和描述子。
-
剔除误差点
- 对无法被多帧一致观测的地图点进行剔除。
- 使用卡方检验或投影误差阈值判断点的有效性。
-
优化过程
- 使用全局Bundle Adjustment优化地图点的位置。
- 减小重投影误差,提高地图精度。
4.1.4 地图点的存储结构
-
Hash表组织
地图点通常存储在Hash表中,以便快速检索。 -
关联关键帧
每个地图点记录被哪些关键帧观测,用于后续跟踪和优化。 -
可视化与管理
- 地图点通过三维可视化工具显示,便于调试。
- 引入质量评分机制管理点的有效性。
4.2 关键帧
4.2.1 什么是关键帧
关键帧(Key Frame)是SLAM系统中具有代表性的一组帧,用来构建地图并减少计算量。
-
定义
关键帧是相机轨迹中的一帧,它包含相机的位姿、特征点、描述子等信息。 -
选取标准
- 两帧间位移或旋转超过一定阈值。
- 地图点数量显著增加。
- 当前帧跟踪失败,需要重新初始化。
4.2.2 关键帧的作用
-
地图构建
关键帧用作地图点的创建和更新的参考帧。 -
全局优化
关键帧的位姿和观测关系用于Bundle Adjustment优化。 -
闭环检测
关键帧之间的共视关系用于检测和修正闭环。
4.2.3 关键帧的存储
-
图结构组织
关键帧存储在稀疏图中,用于表示帧间的空间关系。 -
关联信息
- 每个关键帧存储其观测到的地图点。
- 记录与其他关键帧的相对位姿。
4.3 共视图、本质图、拓展树
4.3.1 共视图
共视图(Co-Visibility Graph)描述了关键帧之间的观测关系,用于优化和闭环检测。
-
节点与边
- 节点表示关键帧。
- 边的权重表示两关键帧间共享地图点的数量。
-
构建方法
- 遍历所有关键帧,统计它们共享的地图点。
- 根据共享地图点的数量设置边的权重。
-
作用
- 闭环检测:高权重边可能对应闭环。
- 优化:提供帧间几何约束。
4.3.2 本质图
本质图(Essential Graph)是共视图的简化版本,包含SLAM系统中的主要几何约束。
-
构建方法
- 从共视图中提取高权重边。
- 添加闭环检测产生的约束边。
-
用途
- 减少计算量:本质图仅保留重要约束。
- 提高鲁棒性:集中优化全局位姿和地图结构。
4.3.3 拓展树
拓展树(Spanning Tree)是本质图的一种扩展,用于表示系统的全局拓扑关系。
-
定义
拓展树是覆盖整个图结构的最小生成树,反映帧间的基本几何约束。 -
生成方法
- 使用Prim或Kruskal算法生成最小生成树。
- 确保树的连通性和最优性。
-
应用场景
- 闭环修正:通过拓展树调整关键帧的全局位姿。
- 地图融合:利用拓展树处理多地图合并问题。