定义一个SLAM系统
- 入口:system,在其构造函数中分别初始化tracking,localmapping,loopclosing,viewer对象并启动对应线程
tracking
定义Slam对象
- 调用trackmonocular函数
- mpTracker→GrabImageMonocular函数,其中提取orb特征点,跟踪后返回位姿
- Track();完成跟踪
- PreintegrateIMU();//完成IMU预计分
- MonocularInitialization();//完成单目视觉初始化
- TrackReferenceKeyFrame();//跟踪参考关键帧,使用帧间相对约束
- TrackWithMotionModel();//使用运动模型跟踪,使用帧间相对约束
- PredictStateIMU();//IMU递推
- Relocalization();//重定位函数
- TrackLocalMap();//加入地图约束和惯性约束后,完成跟踪
- NeedNewKeyFrame();//关键帧的决策
- CreateNewKeyFrame();//关键帧的约束
- Track();完成跟踪
local mapping
- local mapping启动run函数
- ProcessNewKeyFrame();//处理列表中的关键帧
- MapPointCulling();//剔除冗余点
- CreateNewMapPoints();//三角化并产生新的地图点
- Optimizer::LocalInertialBA;//局部带惯性的BA
- Optimizer::LocalBundleAdjustment;//局部视觉BA
- InitializeIMU();//imu初始化
- KeyFrameCulling();//局部关键帧的剔除
- ScaleRefinement();//重新定义尺度
- mpLoopCloser->InsertKeyFrame(mpCurrentKeyFrame);//插入关键帧
loopclosing
- 启动run函数
- NewDetectCommonRegions();//完成回环检测(场景重识别),主要完成候选区域检测和计算sim3
- MergeLocal();//地图融合
- CorrectLoop();//开启回环矫正