深藍上高博的第一講課后題:
題目:
6 * 使用攝像頭或視頻運行 ORB-SLAM2(3 分,約 1 小時)
請注意本題為附加題。
了解⼀樣東西最快的⽅式是⾃⼰上⼿使⽤它,不要擔⼼弄壞你的筆記本,⼤部分時候它都是你可靠的
伙伴。這個作業中,我將指導你⽤⾃⼰的筆記本攝像頭讀取到的圖像,來運⾏ ORB-SLAM2,看看它能不
能實際⼯作。你也可以外接⼀個 usb 攝像頭,這會讓你的⼿更加靈活⼀些(不⽤費⼒端着筆記本到處跑)。
或者,如果你的電腦碰巧沒有攝像頭/攝像頭故障了/你正在⽤虛擬機,那我們也可以在事先錄制好的⼀段
視頻中運⾏ ORB-SLAM2(見 code/myvideo.mp4,這是我在特蕾西亞草坪散步的時候⽤⼿機拍攝的⼩視
頻)。
由於我們還沒有講過任何關於 OpenCV 或者圖像⽅⾯的問題,所以本節我給你寫好了⼀個 myslam.cpp
⽂件(如果你使⽤錄制視頻,請⽤ myvideo.cpp)。這個⽂件會打開你⾃帶的攝像頭(或視頻),讀取圖像,
並交給 ORB-SLAM2 處理。由於你現在已經了解 cmake 原理了,所以我要請你⾃⼰來思考如何將這個⽂
件與 ORB-SLAM2 結合起來。相信我,這件事並不難。 myslam.cpp 和 myvideo.cpp ⽂件見本次作業的
code/⽂件夾下。
下⾯是本題的提⽰:
1. 為了實際運⾏ ORB-SLAM2,你需要安裝它的依賴項,並通過它本⾝的編譯。它的依賴項見它⾃
⼰的 github 主頁,請按照主頁上的提⽰安裝好 ORB-SLAM2 的依賴項。具體來說,對於 pangolin
(⼀個 GUI 庫),你需要下載並安裝它,它同樣是個 cmake ⼯程,所以我不必談怎么編譯安裝的細
節了。對於 opencv 和 eigen3,你可以簡單的⽤⼀⾏命令來解決:
1 sudo apt-get install libopencv-dev libeigen3-dev libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev
libcxsparse3.1.2 libcholmod-dev
其中⼀部分是 g2o 的依賴項,現階段不⽤太在意它的具體內容。⾄此,你應該可以順利編譯 ORB
SLAM2 了,請給出它編譯完成的截圖。
2. 注意到, ORB-SLAM2 提供了若⼲數據集中的運⾏⽰例,這可以作為我們運⾏⾃⼰攝像頭程序的
參考,因為它們很相似。對於數據集上的⽰例, ORB-SLAM2 會⾸先讀取數據集中的圖像,再放到
SLAM 中處理。那么對於我們⾃⼰的攝像頭,同樣可以這樣處理。所以最⽅便的⽅案是直接將我
們的程序作為⼀個新的可執⾏程序,加⼊到 ORB-SLAM2 ⼯程中。那么請問,如何將 myslam.cpp
或 myvideo.cpp 加⼊到 ORB-SLAM2 ⼯程中?請給出你的 CMakeLists.txt 修改⽅案。
3. 現在你的程序應該可以編譯出結果了。但是我們現在還沒有談相機標定,所以你還沒辦法標定你的
攝像頭。但沒有關系,我們也可以⽤⼀個不那么好的標定參數,先來試⼀試效果(所幸 ORB-SLAM2
對標定參數不太敏感)。我為你提供了⼀個 myslam.yaml(myvideo.yaml),這個⽂件是我們假想
的標定參數。現在,⽤這個⽂件讓 ORB-SLAM2 運⾏起來,看看 ORB-SLAM2 的實際效果吧。
請給出運⾏截圖,並談談你在運⾏過程中的體會。
注意,本題只需你能運⾏ ORB-SLAM2 即可,並不是說“成功地運⾏ SLAM”。要順利運⾏ SLAM 還
需要⼀些經驗和技巧,希望你能在動⼿過程中有所體會。作為建議,請盡量在光照充⾜、紋理豐富的場合
下運⾏程序。如果默認參數不合適,你也可以嘗試換⼀換參數。
解答:
高博給了的幾個文件:slam1code:
鏈接:https://pan.baidu.com/s/1vHNZWlu7X5ex5LzMSnbtrQ
提取碼:34v2
0x01:改寫cmakelist
在原有的CMakeLists.txt最后添加:
#gaoxiang demo
add_executable(myvideo Examples/Monocular/myvideo.cpp)
target_link_libraries(myvideo ${PROJECT_NAME})
#gaoxiang demo
add_executable(myslam Examples/Monocular/myslam.cpp)
target_link_libraries(myslam ${PROJECT_NAME})
0x02:將code中的文件都拷貝到 ORB_SLAM2/Examples/Monocular 中
如圖 注意需要將Vocabulary也拷貝進去(偷懶沒有改cpp)
0x03:編譯ORB_SLAM
編譯ORB_SLAM的方法
進入ORB_SLAM當前目錄,執行命令:
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
如圖:
0x04使用生成的可執行文件:
執行 ./myvideo 效果:
執行 ./myslam 效果 :
需要找一個光照好的地方,然后移動攝像頭(因為是單目攝像頭),才可以出現效果。這里使用的是高博給的yaml文件,暫未自己標定攝像頭