ORB-SLAM2源码系列--局部建线程(MapPointCulling和KeyFrameCulling)
ORB-SLAM2源码系列--局部建图线程详解
MapPointCulling模块负责筛选新加入的地图点,确保地图质量。码解在ProcessNewKeyFrame函数中,码解新点被暂存于mlpRecentAddedMapPoints。码解筛选过程包括:根据相机类型设定不同的码解观测阈值
遍历新点,若点已标记为坏点则直接从队列中移除
若点的码解android 微博 源码观察帧数少于预期值的%,或者观察相机数量少于阈值cnThObs,码解即使过了两个关键帧也会被删除
只有经过三个关键帧且未被剔除的码解点,才会被认定为高质量点,码解仅从队列移除
另一方面,码解KeyFrameCulling则针对共视图中的码解关键帧进行冗余检测。步骤如下:提取当前关键帧的码解共视关键帧,并遍历它们
对于每个共视关键帧,码解检查其地图点:若至少有3个其他关键帧观测到,码解被认为是码解冗余点
对于双目或RGB-D,仅考虑近距离且深度值大于零的地图点
若关键帧%以上的有效地图点被判断为冗余,该关键帧将被标记为冗余并删除
这样的筛选机制确保了地图数据的准确性和效率。视觉SLAMORB-SLAM:让人Orz的SLAM
ORB-SLAM,在视觉SLAM领域享有盛誉,其源码在GitHub上已有4.4K+Star,充分彰显了西班牙小哥的出色贡献。近期深入研究其论文并结合源码,体验了一番酸爽,发现它在SLAM领域确实有着独特的魅力与贡献。
ORB-SLAM的核心框架由三个并发进程组成:跟踪、局部建图和回环检测,系统结构清晰,功能分明。跟踪是主进程,负责定位和跟踪相机运动,通过特征匹配实现定位与优化。2020借贷源码局部建图则负责关键帧与地图点的插入、删除及局部优化。回环检测则通过搜索回环关键帧,实现位姿图优化,确保系统鲁棒性。
特征提取是ORB-SLAM的关键之一,它采用ORB特征,兼顾性能与效率。与SURF、SIFT等相比,ORB提取速度快,每张仅需.3ms,适用于实时操作。ORB在FAST角点基础上加入方向信息,使BRIEF描述子旋转不变,同时利用图像金字塔和灰度质心法提取特征,实现尺度不变性。此外,通过网格划分与四叉树结构,ORB-SLAM确保特征点分布均匀,即使特征点不足,也可通过调整FAST阈值增加。
单目初始化是ORB-SLAM的另一大亮点,它通过特征点匹配计算基础矩阵和单应矩阵,自动判断场景类型,无需人工设定模型。共视图与本质图结构则加强了关键帧间的联系,实现高效回环检测。相机重定位策略确保了系统在跟踪失败时能快速恢复,关键帧与地图点的LibreSpeed测速源码删增策略则优化了系统性能。
ORB-SLAM提供多样化的Bundle Adjustment方式,包括初始化阶段的全BA、跟踪过程的运动BA及局部建图阶段的局部BA,适应不同场景需求。整个系统庞大复杂,通过总结主要特性,虽有其精髓,但仍需深入研究,以充分理解其工作原理与优化策略。
总之,ORB-SLAM在视觉SLAM领域展现出了其独特魅力与贡献,从其高效的特征提取到灵活的系统框架,再到多样化的优化策略,无不体现其在SLAM技术中的卓越地位。向所有SLAM领域的先驱者致以崇高的敬意。
ORB-SLAM3-同步阅读及实践(二):高屋建瓴弄懂跟踪线程
前言:本文旨在对ORB-SLAM3跟踪线程的核心功能进行概述,以构建对整个模块工作原理的宏观理解,然后逐步深入至代码细节。研究过程中,常因代码的复杂性和细节深入而迷失,因此本文旨在先理清模块的整体逻辑,再探讨其实现细节,以保持思路的清晰。代码逻辑同样遵循这一思路,从整体流程出发,再深入至具体函数的实现。
论文描述:跟踪线程负责对每帧图像进行相机定位,并判断何时插入新的关键帧。首先,执行与前一帧图像的滴滴助力源码初始特征匹配,然后进行仅运动的BA优化来确定位姿。在跟踪丢失(如因遮挡或突然运动导致)的情况下,由位置识别模块进行全局重定位。一旦获得最初的相机位姿估计和特征匹配,使用系统维护的关键帧的共视图提取局部可视化地图。接着,通过重投影方法搜索当前帧与局部地图点的匹配,并利用所有匹配点优化当前相机位姿。最后,决定是否插入新的关键帧。
代码概述:在系统初始化后,mState状态置位。下一帧到来时,首先检查上一帧的地图点是否需要替换。由于刚初始化,相机无速度,使用参考关键帧进行跟踪。重定位后也需使用参考关键帧。在正常情况下,系统采用恒速模型进行跟踪。若恒速模型失败,则使用参考关键帧,若参考关键帧也失败,则系统进行重定位。关键帧数量过少时,系统重新初始化,从头开始。
跟踪模式主要处理当前帧和上一关键帧的特征点和地图点信息,不涉及共视图等概念。
代码实现流程:
2. 对于初始化成功的源码编译iperf系统,进行跟踪有三种模式选择(由mbOnlyTracking判断):
(1) 仅进行跟踪不建图
(2) 同时跟踪和建图:初始化后ORB-SLAM有三种跟踪模型可供选择进行跟踪计算位姿。
步骤如下:
TrackReferenceKeyFrame(); - 使用参考关键帧进行跟踪
关键帧模型:BoW搜索当前帧与参考帧匹配点,将上一帧位姿作为当前帧初始值,优化3D-2D重投影误差获得位姿。
使用参考关键帧跟踪当前帧情况:将当前普通帧描述子转化为BoW向量,使用词袋加速匹配。若匹配特征点少于个,认为跟踪失败。若大于个,将上一帧位姿作为当前帧初始值,优化位姿。去除外点,统计内点数量。判断匹配超过个,认为跟踪成功。
计算位姿为当前帧相对于世界坐标系的Tcw。
SearchByBoW - 搜索匹配过程
步骤2.1.1 - 2.1.5 - 关键帧地图点、词袋特征向量等声明与匹配搜索。
TrackWithMotionModel(); - 运动模型跟踪
使用恒速模型估计位姿,根据运动模型对地图点跟踪,优化位姿。
重定位跟踪 - 计算BoW向量,检测候选关键帧,通过BoW匹配进行PnP位姿估计,优化。
局部地图跟踪 - 在得到初始位姿后,搜索局部关键帧、地图点,进行投影匹配,优化位姿。
后面涉及过程包括更新图像、特征点、地图点等信息,根据条件判断是否插入关键帧,并记录位姿信息。
知识星球链接:免费提供相关资料供学习讨论
参考资料:
ORB-SLAM3 源码剖析:IMU 预积分
IMU的数据结构在ORB-SLAM3中用于表示机体坐标系中的测量值。在特定时刻,加速度计测量线加速度和陀螺仪测量角速度。假设这些测量值包含高斯白噪声,且偏置建模为随机游走,其导数也是高斯白噪声。将重力转换到机体坐标系后,得到连续视觉帧间的IMU预积分结果。这些预积分包括旋转、速度和位置测量,以及整个测量向量的协方差矩阵。
在ORB-SLAM3中,每帧的IMU预积分在tracking线程中计算,具体由Tracking::PreintegrateIMU()函数执行。每帧间的IMU测量通过src/ImuTypes.cc中的Preintegrated::IntegrateNewMeasurement()进行积分。主要步骤如下:首先进行偏置校正,然后计算位置、速度的增量,接着计算旋转的增量。旋转变化量以李代数中的旋转向量表示,并通过指数映射转换为旋转矩阵。旋转矩阵按旋转顺序右乘。最后,更新协方差矩阵,并调整与偏置修正相关的位置、速度和旋转雅可比。
IMU的偏置校正、测量、标定和预积分类定义在include/ImuTypes.h文件中。
值得注意的是,对于初学者,了解GDB调试方法是提高ORB-SLAM3源码理解效率的重要步骤。GDB提供了一系列功能,允许开发者在运行程序时设置断点、查看变量值、追踪程序执行流程等,从而深入分析代码行为和潜在问题。
ORBSLAM系列|ORB-SLAM论文带读(一)(划重点)
本文介绍了一种名为ORB-SLAM的新型单目SLAM系统,该系统在各种环境条件下都能实时运行。ORB-SLAM具有鲁棒性,支持宽基线回环和重定位,并且提供全自动初始化。系统的核心设计是基于相同的特征用于跟踪、建图、重定位和回环,这使得系统高效、简单且可靠。ORB特征因其对视角和光照变化的鲁棒性而被采用,允许在不依赖GPU的情况下实现实时性能。系统在大环境下的实时运行能力归功于共视图的使用,跟踪和建图着重于局部共视区域,与全局地图尺寸无关。实时回环检测通过基于位姿图(本质图)的优化实现,而实时重定位则支持从跟踪失败中恢复位姿,并增强地图重用性。系统还引入了一种新的基于模型选择的自动且鲁棒的初始化过程,允许创建平面和非平面场景的初始化地图。一种针对地图点和关键帧选择的适者生存策略提高了跟踪的鲁棒性,并且减少了冗余关键帧,增强了长时间运行的能力。
ORB-SLAM在广泛评估中证明了其优越性,特别是在室内和室外环境的主流公开数据集上的评估。与最先进的单目SLAM方法相比,ORB-SLAM实现了前所未有的性能。系统被设计为完整且可靠,提供了一种最高效、精确且易于实施的解决方案。出于造福SLAM社区的目的,源代码已公开,以便其他研究者和开发者能够利用和改进这一系统。演示视频和代码可以在项目网页上找到。
ORB_SLAM灰度质心法学习笔记
灰度质心法,其核心原理是基于像素灰度值来确定关键点的位置。公式[公式]描绘了像素坐标与灰度值之间的关系,其中[公式]代表像素坐标,[公式]则表示该像素的灰度值。
在编程实现中,以图像块[公式]为例进行解释。这个块由像素值[公式]组成,关键点的灰度值位于块的中心,记作[公式]。为了保证关键点的旋转不变性,我们通常选择圆形区域而非矩形。圆形块不论以圆心为中心如何旋转,其内部像素分布保持不变,从而确保了方向角计算的准确性。
编程思路如下:通过公式[公式]计算像素的x坐标,公式[公式]处理y坐标,采用双重循环结构。外层循环遍历整个图像块,内层循环逐个像素处理。通过这些计算,我们可以得到[公式]和[公式],进而利用公式[公式]求得关键点的方向角[公式]。在此过程中,需要注意的是像素坐标[公式]与行、列的顺序相反。
深度科普:ORB-SLAM3论文重点导读及整体算法流程梳理
本文将深入解读ORB-SLAM3的关键特点和整体算法流程,它革新了视觉和视觉惯性SLAM系统。首先,ORB-SLAM3作为首个实现短期、中期、长期数据关联的单目和双目系统,显著优于同类技术,尤其在实时性和准确性方面,其性能是其他方法的2-倍。通过几何和局部一致性检查,召回率提高,地图准确性增强。
使用Atlas结构表示断开地图,实现位置识别、相机重定位等操作时的无缝拼合。
抽象的相机表示允许灵活支持不同相机模型,只需提供投影、非投影和雅可比函数。
ORB-SLAM3系统由几个核心组件组成,包括活跃地图的跟踪线程、局部建图线程以及回环和地图合并线程。系统利用ORB-SLAM2和ORB-SLAM-VI作为基础,通过IMU初始化技术,支持单目和立体惯性SLAM。跟踪线程负责实时定位和建图,利用视觉和惯性信息进行优化。
局部建图线程在关键帧区域进行地图构建和优化,利用IMU参数进行最大后验估计。
回环和地图合并线程通过因子图处理地图的融合和回环检测,确保地图的精度和一致性。
在视觉-惯导SLAM中,系统不仅估计相机位姿,还涉及速度、惯性传感器偏置等。通过将视觉和惯性信息结合,形成一个最小化问题,通过因子图表示优化过程。 ORB-SLAM3的源码解析和实际应用将随后进行,对视觉惯性导航和多地图SLAM有兴趣的读者不容错过。2024-12-24 00:17
2024-12-23 23:55
2024-12-23 22:29
2024-12-23 22:24
2024-12-23 21:52