ORB-SLAM提出一种自动初始化流程,能够根据场景自动的选择模型(Homography or Fundamental),当初始化质量不好的时候则延迟初始化。 本文对初始化过程中的诸多细节进行了总结。 本文属于个人记录,比较乱。 1. 初始化流程 Step 0. 选定一个参考帧,提取ORB特征 选择标准:提取到的ORB特征数量足够多>100个 Step 1. 匹...
|—— CreateInitialMapMonocular(); // 初始化地图点 (1)关键帧的生成:单目初始化时,将初始帧和当前帧分别构建关键帧 |—— CreateInitialMapMonocular(); // 初始化地图点 |—— KeyFrame* pKFini = new KeyFrame(mInitialFrame,mpMap,mpKeyFrameDB); // 第一帧 KeyFrame* pKFcur = new KeyFrame(m...
第三阶段:三角化测量初始的特征点云深度,进而获得点云地图。 一旦恢复出两帧之间位姿(单目无尺度),就可以求解匹配点对的深度(无尺度),求解时可以以任意一帧为基坐标系,由于这里是要以做SLAM,所以以第一帧为世界坐标系。代码中采用多视图几何书中11.2线性三角形法中的齐次方法(DLT)进行三角测量恢复匹配点对应的三...
对于任何一个单目 SLAM 系统来说,在系统运行之初都要进行初始化,其目的在于,要计算出某两帧的相对位姿,以此来通过三角化得到一些初始 MapPoints,从而得到一个初始的 Map,这样之后的跟踪也好优化也好都在这个基础上进行。在 ORB-SLAM 之前的单目 SLAM 系统的初始化,往往需要依赖真实场景中某样确定的物体(eg. MonoSLA...
地图初始化 01 图像帧筛选 ORBSLAM2使用连续两帧图像进行系统初始化,得到F或H矩阵,从而恢复相机姿态R和t,进而计算得到初始地图点;因此,对初始化所用连续两帧图像具有较高要求; mpInitializer:初始化器,根据满足要求的连续两帧图像计算F或H矩阵,重建相机姿态,计算地图点深度; ...
因为单目初始化的两帧是连续的,且初始化的两帧的速度一般不快,两帧差距不大,因此这里的候选关键帧采用最简单的紧邻搜索。如图所示: 假设特征点在Frame1中的位置为A(x,y)。那么Frame2中的候选特征点就在对应坐标的一个半径为r(默认r=100)的圆中查找...
ORB-SLAM3的Tracking部分作用论文已提及,包含输入当前帧、初始化、相机位姿跟踪、局部地图跟踪、关键帧处理、姿态更新与保存等,如图。 2 两个主要函数 单目地图初始化函数是Tracking::MonocularInitialization,其主要是调用以下两个函数完成了初始化过程,ORBmatcher::SearchForInitialization和KannalaBrandt8::ReconstructWithTw...
单目ORB-SLAM 刚刚完成高博《视觉SLAM十四讲》的第一遍学习,读了单目SLAM比较有代表性的ORB-SLAM的文章,结合B站泡泡机器人冯兵老师的分享,对单目ORB-SLAM的流程做了一个简单的梳理。 1.流程 这三部分是并行执行的。 输入:摄像头(图像 + 时间码) 输出:轨迹(每帧图像对应相机位姿) + 地图(关键帧 + Map point...
地图初始化 01 图像帧筛选 ORBSLAM2使用连续两帧图像进行系统初始化,得到F或H矩阵,从而恢复相机姿态R和t,进而计算得到初始地图点;因此,对初始化所用连续两帧图像具有较高要求; mpInitializer:初始化器,根据满足要求的连续两帧图像计算F或H矩阵,重建相机姿态,计算地图点深度; ...
ORB_SLAM3原理源码解读系列(2)——单目初始化 @[toc] 一、初始化特征匹配 1.1 查找候选特征点: 因为单目初始化的两帧是连续的,且初始化的两帧的速度一般不快,两帧差距不大,因此这里的候选关键帧采用最简单的紧邻搜索。如图所示: 假设特征点在Frame1中的位置为A(x,y)。那么Frame2中的候选特征点就在对应...