LearnVIORB程式碼框架筆記

是皮皮攀呀,發表於2019-04-10

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

相關文章