歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

ORB

日期:2017/3/3 13:02:48   编辑:Linux技術
最近開始接觸SLAM的東西,在初步做了一些了解之後,接觸到了ORB-SLAM,知乎上有關於這個的討論:orb-slam在眾多SLAM方法中處於怎樣的地位?。
ORB SLAM項目主頁:http://webdiis.unizar.es/~raulmur/orbslam/
現在已經有ORB SLAM2了,鑒於它提供雙目的接口,就打算去試試。
我的系統ubuntu 14.04 LTS。
源碼地址:https://github.com/raulmur/ORB_SLAM2
這個庫的編譯主要的依賴:OpenCV,Eigen3,g2o,DBoW2,另外還有一個UI庫Pangolin。其中g2o和DBoW2在它的Thirdparty文件夾中就有,作者還寫了一個腳本build.sh,依賴庫准備好後只需要到的目錄下,然後運行這個即可:
cd path
chmod +x build.sh
./build.sh
而且ORB-SLAM2並不需要依賴ROS,編譯還是很方便的。但是我在編譯Pangolin的時候遇到了很多問題,這裡記錄一下。
Pangolin源碼:https://github.com/stevenlovegrove/Pangolin
終端進入目錄,執行:
cd path
mkdir build
cd build
cmake ..
make
然後在make的時候就出現了:
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
網上查了很多,給的解決方法都是這些:
找到configure 文件,在類似這個位置修改echo make CC=$GCCPATCH/bin/gcc -fPIC
.
(1)在makefile文件裡的CFLAGS裡加上 -fPIC選項,這樣可以一勞永逸
(2)如果你的makefile很大,CFLAGS也不明確,那就在配置時手動加上:CFLAGS=”-fPIC” ./configure …………..如果這樣還不行,你需要試一下sudo:$sudo CFLAGS=”-fPIC” ./configure …………..
.
在configure的時候加上 –enable-shared和–enable-pic這兩個選項
下面這個沒怎麼看懂,也不知道該怎麼嘗試,不過挺有趣的
Linux共享對象之編譯參數fPIC
但是Pangolin源碼沒有Configure文件,無從修改,然後我對MakeFile也不了解,改了半天只是越改越糟糕。之後在Stackoverflow看到了這個:http://stackoverflow.com/questions/25539034/opencv-make-fails-recompile-with-fpic,因為之前倒騰FFmpeg的時候弄得很亂,所以很有可能就是FFmpeg的問題。
重下了FFmpeg:http://ffmpeg.org/download.html#releases
用下面的方法重新編譯了FFmpeg,就沒有上面的問題了,然後ORB-SLAM2的編譯就很順利了。
./configure –enable-nonfree –enable-pic –enable-shared
make
make install
這裡提一下一個問題,FFmpeg別裝3.0.2的,因為API都變更了,編譯的時候會找不到。
這裡有一些別人整理出來的變更記錄:/content/518208.html
由於雙目測試數據集還沒有,等之後熟悉一些我再寫點關於這個庫的理解。
Copyright © Linux教程網 All Rights Reserved