论文笔记
名词解释
关键帧
关键帧是ORB-SLAM中的核心概念之一,因为它们提供了不同视角下的图像信息和相机位姿。ORB-SLAM使用关键帧来建立地图,同时也使用关键帧来进行位姿估计和优化。
在ORB-SLAM中,当相机移动足够远或足够旋转时,系统将当前帧设为关键帧,并将其用于地图的建立和位姿估计。在ORB-SLAM中,关键帧不仅包含了图像信息和相机位姿,还包含了其他信息,例如关键点的描述子和与其对应的地图点等。这些信息可以用于后续的地图更新和位姿优化。
地图点
地图点是3D空间中的一个点,它代表在图像中被匹配的2D像素点在相机坐标系下的对应的3D点。ORB-SLAM中的地图点也称为路标点,它们是由ORB特征提取器和匹配器计算出来的,用于定位相机和构建地图。
在ORB-SLAM中,地图点不仅仅代表一个3D点,还包含了其他信息,例如该地图点被观测到的次数、被哪些相机观测到、每次观测时的像素坐标等等。这些信息可以用于后续的位姿优化和地图点筛选。
共视图
共视图是ORB-SLAM中用于管理关键帧之间可见性关系的数据结构。共视图是一个无向图,其中节点表示关键帧,边表示两个关键帧之间有足够的共同地图点,即它们可以相互观测到一些地图点。共视图用于ORB-SLAM中的回环检测和关键帧筛选。
在ORB-SLAM中,共视图的构建是通过计算每对关键帧之间的共视关系来实现的。具体地,当两个关键帧之间有足够的共同地图点时,系统会在共视图中添加一条边,表示这两个关键帧之间存在可见性关系。
共视图的构建和维护对于ORB-SLAM中的回环检测和关键帧筛选非常重要。通过共视图,ORB-SLAM可以在地图构建过程中避免重复的关键帧,提高系统的效率和精度。同时,共视图也可以用于回环检测,即在之前已经访问过的区域重新定位相机,从而提高系统的鲁棒性和可靠性。
本征图
共视图的简化版;
只保留权值大于阈值的边;
通过减少边的数量, 使用高效约束减少计算压力。
最小生成树
最小生成树是一个图论概念,它是一个无向连通图的生成树,并且边的权值之和最小。在ORB-SLAM2中,最小生成树被用来表示特征点之间的关系。ORB-SLAM2将视觉特征点作为图的节点,将它们之间的距离作为边的权值。然后,使用最小生成树算法来计算这个图的最小生成树,从而得到一个最小成本的连接特征点的方式。这种连接方式有助于优化相机姿态估计和地图重建的精度。
具体来说,ORB-SLAM2使用最小生成树来执行以下两个操作:
-
特征点匹配:ORB-SLAM2使用最小生成树来确定哪些特征点应该被匹配。最小生成树算法确保了被匹配的特征点对之间的连接具有最小的代价。
-
位姿优化:ORB-SLAM2使用最小生成树来优化相机姿态估计。当ORB-SLAM2估计相机的姿态时,它会使用RANSAC算法从特征点中选择一组内点,并使用这些内点来计算相机的姿态。然后,ORB-SLAM2使用最小生成树来将内点之间的连接权值最小化,从而进一步提高姿态估计的精度。
因此,最小生成树在ORB-SLAM2中具有重要的作用,能够帮助提高相机姿态估计和地图重建的精度。
单目初始化
初始化原因
- ORB-SLAM使用EPnP算法求解帧-帧间相机位姿(3D-2D)
- 需要知道上一帧特征点深度信息,一般情况下通过Local Map获取
- 第零帧和第一帧需要构建初始的地图,单目输入时可以通过三角化的方式计算
- 三角化又需要两个关键帧之间的位姿变换
先进性特征匹配,根据对极约束求出H矩阵或F矩阵,通过选择求得的H矩阵和F矩阵恢复出位姿变换,再三角化计算创建初始地图点,最后进行全BA优化关键帧和地图点的位姿。(第0帧定义了ORB-SLAM的世界坐标系,该帧的位姿不参与优化)
双目和RGB-D
线程1:追踪
通过ORB+DBoW2的特征提取匹配算法检索两帧画面对应的匹配点。
如果上一帧是追踪成功的,则使用恒速运动模型加速匹配,用估计的𝑇𝑏𝑐,将地图点投影到𝐾𝐹𝑏进行匹配,只在一个邻域内尝试匹配,邻域半径和地图点有关,如果没有足够匹配点数,先尝试降低阈值;否则放弃,尝试将当前帧特征点和上一帧观测到的地图点进行匹配,最后仅优化相机位姿使得重投影误差最小。
如果上一帧追踪失败,则进行相机重定位,通过词袋模型的数据库,寻找和当前帧具有最多共视单词的关键帧,进行词袋模型加速的特征匹配,根据上述匹配点计算相机的初步位姿;如果内点过少则放弃此次重定位,如果内点数足够,则优化相机位姿,并将关键帧观测到的地图点投影到当前帧,计算更多的匹配 使用新的约束进一步优化相机位姿,如果内点数足够则重定位成功。
计算局部地图在当前帧上的投影点、观测方向、地图点到光心的距离和最优秀的描述子。最后生成关键帧。
关键帧生成条件
- 从上次重定位经过了至少20帧
- 距离上次插入关键帧经过了至少20帧
—— 避免关键帧插入过密
- 当前帧至少跟踪到了50个点
—— 当前帧具有良好的跟踪状态
- 当前帧中观测到的地图点中,参考关键帧也观测到的地图点所占的比例小于90%
—— 确保新的关键帧观测到了足够多的新环境
线程2:局部建图
当新的关键帧生成触发局部建图线程,将新的关键帧插入关键帧序列,并剔除冗余的地图点为了避免误匹配和错误的
剔除条件
- 地图点被追踪到的次数/预计被看到的次数 < 25%
- 如果地图点被创建后有不止一个关键帧产生,那么久要求至少在三个关键帧中能够观测到这个地图点
之后针对新插入帧中没被匹配到的特征点进行尝试在其他共视关键帧中寻找匹配点,新产生的匹配点将通过极线约束,尝试进行三角化、正深度检验、视差检验、重投影误差检验等检查后生成的新地图点可被添加到地图中。新生成的地图点还将会根据共视图,向其他的相连的关键帧作投影。对生成的局部地图点进行BA优化(新插入的关键帧、有公式关系的关键帧、这些关键帧对应的地图点)。
最后进行局部关键帧剔除。
线程3:回环检测
计算当前关键帧和其所有共视关键帧的最低相似度S𝑚𝑖𝑛,查询KeyFrameDatabase,获取和当前关键帧相似度大于S𝑚𝑖𝑛的关键帧(不考虑与当前关键帧有共识关系的关键帧),和当前关键帧产生闭环的关键帧应该有这样的特点(连续的三个关键帧,并且这三个关键帧之间相似 度评分也多)。通过Sim3算法进行尺度恢复以将当前关键帧“纠正”到正确的位置。将闭环关键帧𝐾𝑙及其共视关键帧观测到的地图点投影到当前关键帧𝐾𝑐上进行匹配,找到关联特征点进行地图融合。最后使用本征图(简化版公式图)中的共视约束信息,对所有关键帧执行位姿图优化 地图点的位置本身并不进行优化 但当地图点的参考关键帧的位置进行调整的时候,地图点会“跟着”进行调整,保持相对位姿不变。
线程4:全局优化(ORB-slam3新增线程)
在本征图完成优化之后,GBA将对所有的关键帧和地图点进行Full BA,Full BA的过程将会在单独的线程中进行,优化完成之后所有的关键帧和地图点的位姿会更新。
实验部分
实验数据
提取到的描述点
生成点云图
生成关键帧
<
生成图
实验结论
从数据当中可以得知单目的ORB-slam可以在室内形成一个很好的回环,但在实验过程中,会因为关照或者太过于空旷导致特征点丢失。