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():线性化求解器