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...