局部地图模块负责维护和优化局部地图,包括添加新的关键帧和地图点,以及进行局部BA(Bundle Adjustment)优化。 // src/LocalMapping.ccvoidLocalMapping::Run(){while(true) {// 插入新的关键帧if(CheckNewKeyFrames()) {ProcessNewKeyFrame(); }// 局部BA优化if(!CheckNewKeyFrames()) {OptimizeLocalMap(); }/...
在LocalMapping.cc这个文件中主要做了两件事,一是局部关键帧和地图点的优化,二是imu的初始化。 根据ORB-SLAM3论文和代码,imu的初始化一共有三个阶段: 纯视觉的MAP估计。系统运行2s,地图中大概有10个关键帧和几百个地图点时,进行一次纯视觉的局部BA,优化关键帧位姿和地图点。 仅imu的MAP估计。估计imu的速度、...
1 LocalMapping 线程的创建 mpLocalMapper = new LocalMapping(this, mpAtlas, mSensor==MONOCULAR || mSensor==IMU_MONOCULAR,mSensor==IMU_MONOCULAR || mSensor==IMU_STEREO || mSensor==IMU_RGBD, strSequence); 在System类的构造函数中创建了LocalMapping类的mpLocalMapper这样一个对象,现...
1.2 Local mapping 模块加入关键帧和地图点到当前激活地图,删除冗余帧,并通过对当前帧的附近关键帧操作,利用视觉 BA 或视觉-惯性 BA 技术来优化地图。此外,在惯性模式下,mapping 线程会利用最大后验估计(MAP)技术来初始化和优化 IMU 参数。1.3 Loop and map merging 模块 每当加入一个新的关键帧,该线程在激活...
3Local mapping thread(局部建图线程) 将关键帧和地图点添加到活动地图, 删除redundant(多余关键帧),并使用视觉或视觉惯性BA优化地图. 另外此线程也包括惯性情况下, 利用MAP估计初始化和优化IMU参数. 4Loop and map merging thread(回环和地图融合线程)
Local mapping thread 往active map 中添加 keyframes 和 points,移走 outliers,在一个local window 中通过 visual 和 visual-inertial bundle adjustment 来 refine maps。IMU 的参数初始化也通过这个 mapping thread 进行 refine。 Loop and map merging thread ...
scale refinement 在localmapping中,如果慢速运动无法提供对IMU参数的充分观测的话,初始化在最初的15秒内并不能收敛到准确解。 在这里作者提出了新颖的尺度优化方案,参见作者paper中的tracking and mapping部分,该部分基于改进后的inertial-only optimization,只估计所有关...
在文章ORB-SLAM3 单目地图初始化(终结篇)、ORB_SLAM3原理源码解读系列(3)——创建单目初始化地图和ORB-SLAM3源码阅读笔记1:Tracking、LocalMapping和LoopClosing三线程之间的关系里面有着详细的解释,这里作者建议参照着代码注释与文章来进行解析。 6. System完成多地图以及闭环检测 ...
而Localmapping 线程只发生在当下active的map中; 3.新增最大后验概率,用于初始化并且refine IMU数据; 4. loop and map merging 线程:因为有了很多琐碎的地图,因此新增了map merging的部分,如果两个地图有重合部分,且重合处属于当前Active的Map,则对其进行LoopCorrection,类似于之前的检测到回环。如果两个地图重合的...
• LocalMapping::SearchInNeighbors() 2.2.3 闭环检测、重定位检测 • LoopClosing::DetectLoop()、LoopClosing::CorrectLoop() • KeyFrameDatabase::DetectLoopCandidates • KeyFrameDatabase::DetectRelocalizationCandidates 2.2.4 优化 • Optimizer::OptimizeEssentialGraph ...