ORB SLAM2 定位模式

2021-09-09 05:35:19 字數 2280 閱讀 6605

void load(const string &filename,systemsetting* mysystemsetting, keyframedatabase* mpkeyframedatabase);
別忘了新增標頭檔案和命名空間中的類宣告。

同樣,需要在map.cc檔案中修改load()函式。laod()函式中只有一處需要修改,將從地**件中讀到的關鍵幀新增到關鍵幀資料庫中。即:

// then read keyframes one after another, and add them into the map

vectorkf_by_order;

for( unsigned int i = 0; i < nkeyframes; i ++ )

為了開啟定位模式,需要在system.cc檔案中系統建構函式中進行相應設定並匯入地圖。為了方便起見,我加入了乙個判斷。**如下:

//設定定位模式(包括地圖載入)

char ispurelocalization;

cout << "是否開啟純定位模式?(y/n)"<> ispurelocalization;

if(ispurelocalization == 'y' || ispurelocalization == 'y')

該部分**放在建構函式中的建立地圖部分之後即可。

**中的activatelocalizationmode()函式用來啟用定位模式,從其函式體中可以發現,它將mbactivatelocalizationmode變數設定為了真值。

void system::activatelocalizationmode()

接下來將system.cc檔案中trackstereo()函式中的內容進行修改。trackstereo()函式的原始碼為:

cv::mat system::trackstereo(const cv::mat &imleft, const cv::mat &imright, const double ×tamp)

// check mode change

mptracker->informonlytracking(true);

mbactivatelocalizationmode = false;

}if(mbdeactivatelocalizationmode)

}// check reset

}cv::mat tcw = mptracker->grabimagestereo(imleft,imright,timestamp);

unique_locklock2(mmutexstate);

mtrackingstate = mptracker->mstate;

mtrackedkeypointsun = mptracker->mcurrentframe.mvkeysun;

return tcw;

}

可以看到,該函式在判斷mbactivatelocalizationmode是否為真之後就將其置為false。為了使讀入系統的每一幀影象都進行定位模式,我們將該語句注釋掉。即為:

cv::mat system::trackstereo(const cv::mat &imleft, const cv::mat &imright, const double ×tamp)

// check mode change

mptracker->informonlytracking(true);

//mbactivatelocalizationmode = false;

}if(mbdeactivatelocalizationmode)

}// check reset

}cv::mat tcw = mptracker->grabimagestereo(imleft,imright,timestamp);

unique_locklock2(mmutexstate);

mtrackingstate = mptracker->mstate;

mtrackedkeypointsun = mptracker->mcurrentframe.mvkeysun;

return tcw;

}

為了測試效果,我將構建地圖時的資料進行了抽樣(抽樣間隔為一張影象),並用抽樣後的資料進行了定位實驗。下過如下圖所示。

ORBSLAM2之LocalMapping執行緒

一 處理新關鍵幀processnewkeyframe 五 區域性ba 六 刪除冗餘關鍵幀keyframeculling 七 將當前關鍵幀插入閉環檢測佇列 更新當前關鍵幀的共檢視updateconnections a 遍歷當前關鍵幀的mp,更新共檢視 b 更新當前關鍵幀的子關鍵幀與父關鍵幀 i.與當前...

ORB SLAM2詳解(四)跟蹤

這一部分是orb slam系統中最基本的一步,會對每一幀影象進行跟蹤計算。tracking執行緒執行在主線程中,主要思路是在當前幀和 區域性 地圖之間尋找盡可能多的對應關係,來優化當前幀的位姿。每次新採集到一幀影象,就是用下列介面將影象傳入slam系統就行處理。該 位於主程式中 pass the i...

ORBSLAM2 載入資料集

ifstream是操作檔案的輸入流類。建立乙個讀取檔案的fassociation物件。ifstream open的宣告為 void open const char filename,ios base openmode mode ios base in 需要乙個char 型的指標,strassocia...