ORB_SLAM3::SystemSLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR,false); 该语句是主函数中最关键的一句代码,目的是创建SLAM系统,初始化系统所有线程,准备开始处理数据,其中SLAM()中第一个参数argv[1]表示的是输入的ORBvoc.txt即ORB词袋模型数据,第二个参数argv[2]表示的相机参数的yaml文件,显...
ORBSLAM2:采用双目去畸变后的图像,去畸变的remap过程发生在进入system之前,ComputeStereoMatches() 所采用的双目匹配方法是在极线上搜索,是一个很小的带状区域;搜索到匹配点之后直接根据视差d计算深度z; ORBSLAM3:采用暴力匹配的方式,在全局使用knn搜索,只查找与当前左目描述子距离最近和次近的右目描述子,只要满足L...
SLAM.TrackMonocular(im,tframe);// im表示图像,tframe表示时间戳 进入Tracking类中查看其成员函数TrackMonocular()中具体发生了什么。首先,该成员函数的完整函数形式如下: Sophus::SE3fTrackMonocular(constcv::Mat&im,constdouble×tamp,constvector<IMU::Point>& vImuMeas = vector<IMU::Point>(),stringfile...
CheckNewKeyFrames()函数 对于CheckNewKeyFrames()函数,它的作用就是检查是否有新的关键帧输入进来(关键帧列表是否为空,因为LocalMapping每次处理完一个关键帧就会将其从列表中删除)。 ↓ ProcessNewKeyFrame()函数 ProcessNewKeyFrame()函数首先会将容器中的新的关键帧删除,接着计算关键帧的词袋模型并进行匹配,如果匹...
这里我们先将没有关键帧的情况进行分析,队列中没有关键帧那么就会进入下一条函数ResetIfRequested(),这个函数其实就是一个重置函数,将队列中的所有关键帧都清除,相当于重新开始建图和定位(当然前提是重置请求已经收到)如果是收到地图激活那么就会从当前开始利用已有的关键帧建立起局部的小地图,这也是ORB_SLAM3算法...