这篇文章将向大家总体介绍一下ORB-SLAM3系统的设计和实现,其中每个模块的实现逻辑和思路已经在主题文章中向大家做了介绍。
ORB-SLAM3实现了多种传感器配置下的同步定位(相机位姿的实时跟踪定位)和建图(基于稀疏三维地图点的三维地图构建)功能,且通过Atlas类实现了多地图集(跟踪失效时会重新创新新地图)的管理,以及包括地图的回环检测和矫正以及地图的合并。整个系统大体由单帧实时跟踪模块(Tracking.cc),局部建图模块(LocalMapping.cc)和回环检测和矫正(LoopClosing.cc)模块以及可视化模块(View.cc)等构成。其中各种传感器配置场景在代码实现时是耦合在一起的,根据配置的条件的不同对其逻辑的差异性分别按条件进行处理。
Tracking模块需要处理频率较高的视频帧,采用参考关键帧或基于上一帧的运动跟踪模式对特征点进行匹配和相机位姿进行优化等。一般如果处理一帧的tracking较为耗时,可能要降低帧率或丢弃部分帧,一般来说,tracking一帧的耗时可以在帧率的一半,而仅有部分帧将作为关键帧来加入到地图中,关键帧帧率大概在0.5-2秒左右,因此关键帧占总帧数的比率较低,即使在tracking的全过程中使用地图更新访问加锁,其他模块如局部建图和回环检测和矫正模块都会有较为充裕的时间来调度执行。
这里对于模块涉及地图更新的操作的地方做一下说明。首先在Tracking过程中涉及地图更新的操作的地方有:(1)单目初始化函数MonocularInitialization里调用了初始地图的创建,将当前帧和初始帧作为两个关键帧插入了初始地图里;(2)TrackReferenceKeyFrame或TrackWithMotionModel函数里对相机位姿进行了优化(也更新了地图点的信息);(3)重定位时从候选的关键帧中计算匹配点并优化位姿;(4)、TrackLocalMap利用了关键帧邻近关键帧的更多的匹配地图点进行位姿优化;(5)最后判断是否将当前帧作为关键帧插入,如果插入关键帧,同样也需要更新地图。
问题:ORBSLAM3中的LocalMapping的函数SetAcceptKeyFrames(false);只限制了Tracking模块不能插入新的关键帧,但如果在LocalMapping的过程中如实现冗余关键帧剔除(KeyFrameCulling)或者地图点的剔除操作的同时,有没有可能和Tracking的访问地图操作存在着数据访问竞争的问题,因为在LocalMapping的处理过程中好像没有加锁访问地图更新?
回答:在局部建图的处理过程中虽然没有使用当前地图的互斥量mMutexMapUpdate进行加锁,但是在地图的细粒度的访问中都加了细粒度的互斥量的定义,同时ORB-SLAM3不追求严格的实时一致性,而是通过以下设计实现最终一致性:(1)闭环校正的全局同步:当检测到闭环时,系统通过全局BA或位姿图优化对所有关键帧和地图点进行全局调整,此时所有线程暂停,确保全局状态的一致性。(2)高频跟踪,低频优化:如Tracking线程以相机帧率(30Hz)运行,而LocalMapping和LoopClosing线程以更低频率(约10Hz)执行优化。优化结果对Tracking的影响是“延迟生效”的,但系统通过BA和闭环校正逐步收敛到全局一致状态,如在Tracking的高频计算过程中,低频的局部建图和回环检测运行的数据是基于时间线上靠前面的数据,从而也减少了冲突访问的可能性。(3)、采用一些鲁棒的核函数和优化算法,即使存在着临时的量的不一致性,也能足够健壮得出较为理想的优化结果。(4)、局部BA等优化过程更新相机位姿和地图点时采用了地图更新互斥量这种粒度较大的锁,实现了和tracking过程的互斥访问。
关于ORB-SLAM3系统中可能存在的bug问题,可以参考文献[7]中作者给出的修正。ORB-SLAM3系统主要的功能是定位和建图,在机器人无人机等系统中作为感知的大模块的一部分,也需要和PNC(Planning and Control)等模块集成形成一个完整的自主导航系统。
References
- [1]、SLAM系列之ORB-SLAM3开源系统代码解析-基本数据结构简介
- [2]、SLAM系列之ORB-SLAM3开源系统代码解析-mono(+imu)tracking
- [3]、SLAM系列之ORB-SLAM3开源系统代码解析-局部建图器(LocalMapping)
- [4]、SLAM系列之ORB-SLAM3开源系统代码解析-地图回环及合并检测
- [5]、SLAM系列之ORB-SLAM3开源系统代码解析-地图回环矫正和地图合并及矫正
- [6]、SLAM系列之ORB-SLAM3开源系统代码解析-相关优化算法简介
- [7]、https://github.com/fishmarch/ORB_SLAM3_Fixed
Leave a Reply