ORB-SLAM3的整体介绍及各个线程的功能(五)
ORB-SLAM3是一个多线程的系统,它主要包含以下几个线程,每个线程负责不同的功能:
-
跟踪线程(Tracking Thread):
- 作用:负责处理每一帧图像,进行相机位姿的估计和定位。它首先执行与前一帧图像的特征匹配,然后通过仅运动(motion-only)BA(Bundle Adjustment)优化位姿。如果跟踪失败,它会尝试在所有地图中进行重定位。此外,跟踪线程还负责决定何时插入新的关键帧,以及何时将关键帧从局部地图中移除。
- 详细介绍见
-
局部建图线程(Local Mapping Thread):
- 作用:管理局部地图,向活跃地图添加关键帧和点,移除多余的关键帧和点。在局部窗口内,它使用视觉或视觉惯性BA优化地图。在视觉惯性模式下,建图线程还负责IMU参数的初始化和优化。
- 详细介绍见
-
回环和地图合并线程(Loop and Map Merging Thread):
- 作用:以关键帧速率检测活跃地图和完整Atlas(多地图集合)之间的共同区域。如果共同区域属于活跃地图,则执行回环矫正;如果属于不同地图,则将两个地图无缝合并为一个,合并后的地图称为活跃地图。在回环矫正后,会在独立线程中执行完整BA以进一步优化地图,同时不影响实时性。
- 详细介绍见
-
重定位线程(Relocalization Thread):
- 作用:在追踪丢失时,重定位线程尝试在所有地图中重定位当前帧。如果成功重定位,则恢复追踪,并在必要时切换活跃地图。否则,在一段时间后,活跃地图被存储为非活跃地图,并从头初始化一个新的活跃地图。
- 详细介绍见
这些线程共同工作,使得ORB-SLAM3能够在多种传感器配置下(单目、双目、RGB-D)实现高精度的SLAM。通过多地图系统,ORB-SLAM3能够在视觉信息长期缺乏的情况下存活,并且在重新访问已建图区域时与先前地图无缝合并。这种设计提高了系统的鲁棒性和精度,尤其是在复杂和动态的环境中。