接下来,就是完成初始化过程的最后一步:地图的初始化,是由CreateInitialMapMonocular函数完成的,本文基于该函数的流程出发,目的是为了结合代码流程,把单目初始化的上下两篇的知识点和ORB-SLAM3整个系统的知识点串联起来,系统化零碎的知识,告诉你平时学到的各个小知识应用在SLAM系统中的什么位置,达到快速高效学习的效果。
因为知识有限,因此先记录初始化过程中的重要节点,并非全部细节,如果需要看代码的话,建议直接去看作者的源代码ORB_SLAM3(https://github.com/UZ-SLAMLab/ORB_SLAM3)。这是我自己稍微做了点修改,可以跑数据集的版本,可以参考一下。https://github.com/shanpenghui/ORB_SLAM3_Fixed TrackMonocular是ORBSLAM单...
ORB-SLAM3的Tracking部分作用论文已提及,包含输入当前帧、初始化、相机位姿跟踪、局部地图跟踪、关键帧处理、姿态更新与保存等,如图。 2 两个主要函数 单目地图初始化函数是Tracking::MonocularInitialization,其主要是调用以下两个函数完成了初始化过程,ORBmatcher::SearchForInitialization和KannalaBrandt8::ReconstructWithTw...
根据ORB-SLAM3的论文介绍, IMU的初始化基于以下观察: Pure monocular SLAM can provide very accurate initial maps, whose main problem is that scale is unknown.Solving first the vision-only problem will enhance IMU initialization. 纯视觉SLAM可以提供很好的位姿估计,所以可以用纯视觉的结果来改善IMU的估计; ...
ORB-SLAM3中IMU初始化由LocalMapping线程中的InitializeIMU函数完成。 主要是完成重力方向RwgRwg和尺度scale的估算,总共进行三次。 InitializeIMU函数包含两部分:InertialOptimization 和 FullInertialBA InertialOptimization函数 纯IMU的优化,固定关键帧位姿,优化重力方向、尺度、关键帧速度和偏置 ...
(2)创建SLAM系统,system会初始化所有的系统进程,并且准备好生成帧,此处会调用system的构造函数System::System(),具体见System.cc // Create SLAM system. It initializes all system threads and gets ready to process frames. ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::IMU_MONOCULAR,true); ...
此时情况为:1.还未获得初始帧 2.已经获得初始帧,但还未初始化成功 执行单目初始化MonocularInitialization() 判断mState!=OK 是 执行return 此时情况为:1.刚获得初始帧,初始化未完成 2.已经获得初始帧,但当前帧不符合条件,重新寻找初始帧 3.当前帧不满足初始帧,重新寻找初始帧 ...
源码:https://github.com/UZ-SLAMLab/ORB_SLAM3 处理完第0帧后,类似地,第1帧和0到1帧之间所有时刻的IMU测量值都会被系统读取,在TrackMonocular()函数中进行处理,从而完成系统的单目初始化。我们来看看这一过程都经过了哪些函数。 1. GrabImageMonocular() ...
当摄像机数据准备就绪后,就可以开始初始化orbslam3系统。这通常包括加载相机参数文件和初始化系统内部的数据结构。之后,系统将自动开始跟踪摄像头拍摄的图像序列,并随着时间的推移计算相机的运动轨迹。在这个过程中,系统还将不断地更新地图并优化相机姿态,以提高定位的准确性和鲁棒性。 Finally, once the orbslam3 sys...
1、ORB-SLAM纯单目已经可以初始化得到精确的地图,尺度信息可以通过IMU得到;双目图像输入下则尺度客观,可以不考虑尺度信息的问题; 2、如果将尺度单独作为优化变量进行表示和优化,效果比在BA中的隐式表达收敛更快; 3、IMU初始化过程中必须考虑传感器的不确定性,否则会产生难以预测的巨大误差。