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():線性化求解器
相關文章
- IP Adapter程式碼筆記APT筆記
- Laravel 原始碼筆記 框架介面類之 ContainerContractLaravel原始碼筆記框架AI
- Laravel 原始碼筆記 框架介面類之 ApplicationContractLaravel原始碼筆記框架APP
- Python學習筆記—程式碼Python筆記
- pytorch程式碼示例筆記 -- AutogradPyTorch筆記
- Laravel 原始碼筆記 框架契約類之 ContainerContractLaravel原始碼筆記框架AI
- Laravel 原始碼筆記 框架契約類之 ApplicationContractLaravel原始碼筆記框架APP
- 20240505記錄《程式碼隨想錄》筆記筆記
- ssm框架整合筆記SSM框架筆記
- shell指令碼程式設計筆記指令碼程式設計筆記
- 讀書筆記-乾淨程式碼筆記
- 程式碼大全2閱讀筆記筆記
- [例項分割]Condinst程式碼筆記筆記
- Laravel 原始碼筆記 框架目錄命名的含義Laravel原始碼筆記框架
- C++程式碼閱讀筆記(一)筆記
- Laravel 原始碼筆記 應用程式 ApplicationLaravel原始碼筆記APP
- 《程式碼大全》閱讀筆記1(2024.10.4)筆記
- 05夢斷程式碼閱讀筆記筆記
- 03夢斷程式碼閱讀筆記筆記
- 04夢斷程式碼閱讀筆記筆記
- 《夢斷程式碼》讀書筆記(二)筆記
- 夢斷程式碼讀書筆記(一)筆記
- 《程式碼大全2》閱讀筆記01筆記
- 程式碼整潔之道Clean Code筆記筆記
- Bootstrap框架:學習筆記boot框架筆記
- 執行LearnVIORB及VINS_monoORBMono
- jQuery 學習筆記:jQuery 程式碼結構jQuery筆記
- 夢斷程式碼閱讀筆記之六筆記
- Python入門筆記(程式碼中成長)Python筆記
- 《程式碼整潔之道》總結和筆記筆記
- 程式碼整潔之道--讀書筆記(7)筆記
- 程式碼整潔之道--讀書筆記(1)筆記
- 程式碼整潔之道--讀書筆記(2)筆記
- 程式碼整潔之道--讀書筆記(13)筆記
- 程式碼整潔之道--讀書筆記(14)筆記
- 程式碼整潔之道--讀書筆記(12)筆記
- 程式碼整潔之道--讀書筆記(10)筆記
- 程式碼整潔之道--讀書筆記(6)筆記