已經安裝好opencv2.7版本以上的ubuntu系統(之前寫過類似的文章)
安裝pangolin 作為視覺化和使用者介面
sudo apt-get install libglew-dev
git clone
(在pangolin目錄下)mkdir build
cd build
cmake ..
make -j4
(以下跟隨slam14講練習的可以跳過)安裝eigen3
git clone
mkdir build
cd build
cmake ..
sudo make install
sudo cp -r /usr/local/include/eigen3 /usr/include
安裝第三方庫的依賴環境(指dbow2和g2o,orb-slam2裡面包含了這兩個,因此只需要安裝依賴環境就好):
sudo apt-get install libboost-dev
sudo apt-get install libeigen3-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev
git clone
之所以把安裝orb-slam這部分單獨提出來,是因為我在這個地方遇到了一點小問題,正常的安裝其實很簡單,我在台式電腦就是這樣做的:
chmod +x build.sh
sh build.sh
c++: internal compiler error: 已殺死 (program cc1plus)please submit a full …………這種情況的原因在於記憶體不夠了,我當時選擇的是2gb的記憶體和1g的交換空間,我本來覺得夠了,但是很遺憾,它實際上是不夠的。所以我用sublime或者文字編輯器開啟build.s**件。將命令分開操作,這次g2o這部分順利的過去了,但是又卡在了orb-slam的編譯上。
無奈之下,我擴大了記憶體,當時40g的情況下記憶體最大是3g,還是不行,我有點懵,後來想了一下,擴大一下交換空間行不?
交換空間的擴大詳見文章:
所以我現在是3g記憶體+3g交換;這次……因為交換空間的速度明顯慢於記憶體,所以我一點點看著它從0.6%用了一兩分鐘爬到100%,所以還是不行。
我本來想繼續擴大記憶體或者交換的,但是突然想起了之前我對g2o那裡的做法,乙個處理不了可以把它分開進行處理嗎!當時預設的命令(build.sh裡面)的是 make -j,一開始我以為是只用乙個核心進行處理的意思,後來看了下記憶體和cpu,感覺不太對,四個cpu都在100%。我上網查了一下,並沒有查到,所以我用了 make -j2,這個倒是很明確,用兩個處理器進行操作,兩個一批進行編譯,結果這次居然順利的通過了。
因為非專業,這個原理還真是不太懂,如果大家知道麻煩告訴我一聲。
一般測試orb-salm都是單目和rgb-d比較多一點,雙目的話,因為kitti還是比較難下,太大了。所以優先單目和rgbd吧。
首先是資料集,tum和kitti兩個暫時就夠用了:
tum:這個主要是室內,單目和rgb-d
kitti:這個主要是室外,雙目
然後是分別測試:
單目在orb-slam下新建資料夾data,要測試的資料解壓在這裡就好。
tum資料集分為相機fr1,fr2,fr3,對應tum1-3.yaml;
一般第一次測試用fr1/xyz這個資料集,這個就是x,y,z方向來回動,很簡單,用來檢測一下系統出沒出什麼問題。
其他的資料看名字就知道,比如desk就是在桌子附近來迴轉,room就是在房間裡面掃來掃去。
值得注意的是,執行其他資料集的時候,單目不一定能追蹤成功,在台式電腦上能成功的在虛擬機器上也不一定能成功,這就需要我們進行一些調整,比如調整初始化需求數量啊什麼的,這個關係到對slam系統的理解,就不在多嘴了。
,以room為例,執行命令是:
./examples/monocular/mono_tum vocabulary/orbvoc.txt examples/monocular/tum1.yaml data/rgbd_dataset_freiburg1_room
python2 data/associate.py data/rgbd_dataset_freiburg1_room/rgb.txt data/rgbd_dataset_freiburg1_room/depth.txt >data/rgbd_dataset_freiburg1_room/associate.txt
在data/rgbd_dataset_freiburg1_room位置生成associate.txt檔案;
然後執行rgb-slam命令:
./examples/rgb-d/rgbd_tum vocabulary/orbvoc.txt examples/rgb-d/tum1.yaml data/rgbd_dataset_freiburg1_room data/rgbd_dataset_freiburg1_room/associate.txt
不得不說rgb-d比單目效果要好的不少,至少在room這個資料集上表現得不錯,但是在小部分資料集如fr2/pioneer_slam上面跑還是有丟追蹤的情況。
剩下的,關於orb-slam的改進還沒有弄完,等做完再記錄一下吧。
ORB SLAM2 定位模式
void load const string filename,systemsetting mysystemsetting,keyframedatabase mpkeyframedatabase 別忘了新增標頭檔案和命名空間中的類宣告。同樣,需要在map.cc檔案中修改load 函式。laod 函式...
ORBSLAM2之LocalMapping執行緒
一 處理新關鍵幀processnewkeyframe 五 區域性ba 六 刪除冗餘關鍵幀keyframeculling 七 將當前關鍵幀插入閉環檢測佇列 更新當前關鍵幀的共檢視updateconnections a 遍歷當前關鍵幀的mp,更新共檢視 b 更新當前關鍵幀的子關鍵幀與父關鍵幀 i.與當前...
ORB SLAM2詳解(四)跟蹤
這一部分是orb slam系統中最基本的一步,會對每一幀影象進行跟蹤計算。tracking執行緒執行在主線程中,主要思路是在當前幀和 區域性 地圖之間尋找盡可能多的對應關係,來優化當前幀的位姿。每次新採集到一幀影象,就是用下列介面將影象傳入slam系統就行處理。該 位於主程式中 pass the i...