LearnVIORB代码框架笔记

Viewer.h/.cc

其中包含主线程中的函数viewer,画、点、关键帧、当前相机位姿、最后处理的帧(使用pangolin)。可以设置可视化的部分。

还有Run(),RequestFinish(),isFinished(),这一类的程序命令操作函数。

 

Converter.h/.cc

其中包含转化为矩阵、3D向量、四元数。

更新navstate:假设预积分值是偏置更新后重计算的结果,故,更新时忽略了偏置项。updateNS()

 

ORBmatcher.h/.cc

【点的匹配】过投影找匹配关键点与地图点之间。也有单目初始化时需要的匹配,以及回环重定位需要的。

SearchByProjection(),SearchForInitialization(),SearchForTriangulation()

 

ORBextractor.h/.cc

【ORB特征和描述子的计算,ORB在图像中使用八叉树表示】

 

PnPsolver.h/.cc

【pnp求解】

 

Sim3Solver.h/.cc

【sim3求解】

 

Frame.h/.cc

(感觉较多的是基本参数的初始化)

定义了Frame类,及状态或pose的更新和取值,bias的初始化等。重定位词典。里面也有对单、双目、RGBD相机有不同操作。

函数有:对单目VI的Frame()、ComputeIMUPreIntSinceLastFrame()、ComputeIMUPreIntSinceLastFrame()、UpdatePoseFromNS()、SetInitialNavStateAndBias()、UpdateNavState()、GetNavState()、SetNavState()、SetNavStateBiasGyr()、SetNavStateBiasAcc()、ExtractORB()、ComputeBoW()、GetRotationInverse()、

关键点的数目、参考关键帧。

 

FrameDrawer.h/.cc

从上一个处理的帧更新信息,画上一个处理的帧。draw matched points.(又一个可视化需要增加的地方)

 

KeyFrame.h/.cc

设置和更新量和Frame中的类似。(和预计的不一样)

获取、设置上一个和下一个关键帧。增加了共视图中的一些函数(parent.child)。含有回环。

SetPrevKeyFrame(),SetNextKeyFrame(),SetInitialNavStateAndBias(),SetNavStateVel(),UpdateNavStatePVRFromTcw(),

AddConnection(),EraseConnection(),UpdateBestCovisibles(),GetCovisiblesByWeight(),

 

KeyFrameDatabase.h/.cc

此关键帧数据库主要是增加、删除、清除关键帧的,以及为回环检测和重定位找候选关键帧。

里面回环检测的部分找共视,很清楚。

add(),erase(),clear(),DetectLoopCandidates(),DetectRelocalizationCandidates().

 

Initializer.h/.cc

专门针对单目SLAM的初始化,双目和RGBD不用。

并行计算F矩阵和H矩阵,再选择一个模型来恢复运动。整个过程较完整。

FindHomography(),FindFundamental(),ComputeH21(),ComputeF21(),CheckHomography(),CheckFundamental(),ReconstructF(),ReconstructH(),Triangulate(),CheckRT(),DecomposeE(),

 

Tracking.h/.cc

【内容相当丰富。】

重定位之后用20帧来计算偏置。

PredictNavStateByIMU(),TrackLocalMapWithIMU(),通过IMU预测当前帧状态、

TrackWithIMU(),通过IMU预测状态和位姿

 Tracking(),包含从设置文件中装载相机参数,scale levels???

GrabImageMonocular(),

RecomputeIMUBiasAndCurrentNavstate(),

MonocularInitialization();

CreateInitialMapMonocular():创建关键帧,清除IMU数据缓存,地图中插入关键帧,创建地图点且与关键帧融合,更新连接,BA,

UpdateLastFrame():根据参考关键帧更新位姿。

TrackWithMotionModel():

CreateNewKeyFrame();

UpdateLocalPoints();

UpdateLocalKeyFrames();

Relocalization();当跟踪失败时,进行重定位。

 

MapPoint.h/.cc

在Tracking和LocalMapping中都能创建地图点,故需要线程锁来避免id冲突。

PredictScale()???

AddObservation(),EraseObservation(),SetBadFlag(),isBad(),GetMinDistanceInvariance(),GetMaxDistanceInvariance(),

 

Optimizer.h/.cc

g2o线性优化,

GlobalBundleAdjustmentNavState(),里面有构建g2o中PVR和偏置的顶点及边。

PoseOptimization(),详细地构建帧、关键帧、地图点的顶点和边。【】【】【】

LocalBundleAdjustmentNavState(),优化局部窗口中的所有关键帧,

OptimizeInitialGyroBias();

LocalBundleAdjustment(),虽然定义了但是在代码中并没有使用,

BundleAdjustment(),

GlobalBundleAdjustemnt(),

OptimizeEssentialGraph();设置回环边

OptimizeSim3();

 

Map.h/.cc

UpdateScale(),在获得绝对尺度之后更新,

AddKeyFrame();   AddMapPoint();   EraseMapPoint();   EraseKeyFrame()删除都是指删除指针,不实际删除;  SetReferenceMapPoints();

 

MapDrawer.h/.cc

画图: 长宽etc.

DrawMapPoints(),DrawKeyFrames(),DrawCurrentCamera(),SetReferenceKeyFrame()

 

System.h/.cc

System():初始化SLAM系统,触发tracking、localmapping、loopclosing和viewer线程。且输出程序运行最开始时,对话框中的基本信息

TrackMonocular(),处理输入的单目图像,RGB或是grayscale,RGB也会转为grayscale处理,返回相机位姿,跟踪失败时,返回为空。

ActivateLocalizationMode():停止局部建图线程,只进行相机跟踪

DeactivateLocalizationMode():进行SLAM

Reset():重置系统

Shutdown():停止所有的线程,在保存轨迹前调用

SaveKeyFrameTrajectoryTUM(),其余两个保存函数都是面向双目和RGBD相机的。

 

LocalMapping/.cc

AddToLocalWindow();

AcceptKeyFrames();

SetAcceptKeyFrames();

TryInitVIO():

ProcessNewKeyFrame();

CreateNewMapPoints():

 

LoopClosing.h/.cc

InsertKeyFrame();

isRunningGBA();

isFinishedGBA();

DetectLoop();

 

IMU/

 

SO3.h/.cpp

NavState.h/.cpp

一系列的获取和设置函数,如:Get_R(),Get_RotMatrix()等等

IMUPreintegrator.h/.cpp

计算IMU预积分

 

IMUData.h/.cpp

定义imu数据,加速度计值和陀螺仪值,以及测量值和偏置的协方差。

 

g2otypes.h/.cpp

包含g2o的边和顶点的定义

VertexNavStatePVR class,EdgeNavStatePrior class,VertexNavState class,VertexGravityW class,

EdgeNavStatePVR::computeError():计算误差

EdgeNavStatePVR::linearizeOplus():线性化求解器

你可能感兴趣的:(SLAM)