最近本身決定動手寫一個視覺slam程序,html
寫代碼不只僅加深對slam實現原理的理解,同時提高使用cmake、kdevelop等工具的python
熟練度,這些是編譯大型項目的基礎;git
一個成熟完整的程序展示的是bin lib include src等文件夾,可是不可能將整個構造過程通通展示出來,對於小白來講,很難理解整個項目的搭建過程是怎樣的,本身寫代碼,搭建項目的的時候可能還是一頭霧水,所以能夠借寫代碼熟悉整個編譯過程;github
之後作改進,或者但願作框架的拓展時,也會更加駕輕就熟;算法
話很少說,這一篇便是本身搭建slam程序遇到的第一個暗坑所作的總結;ubuntu
作slam的第一步是從IO圖片或者視頻開始,咱們很天然的要用到OpenCV,可是若是想要在opencv中使用sift算子,咱們須要安裝extra_modules(Opencv_contrib)組件,框架
由於sift和surf是須要專利付費的算法,專利權隸屬於哥倫比亞大學,所以opencv3將一些不穩定的或須要專利付費的算法整理出了一個模塊,因此若是工業界的同窗們須要用這兩個算法的時候(竟然不用ORB?),要謹慎呀。工具
安裝Opencv和Opencv_contrib的時候要注意版本匹配,下面給出網址你們能夠從裏面挑選對應的版本:網站
舒適提示:點擊opencv(or opencv_contrib)
點擊release,選擇你想要的版本:
選擇須要的版本和文件(ubuntu下選擇源碼安裝)。
OpenCV contrib組件的下載一樣,兩者版本要匹配!
切記不要直接在opencv界面上選擇Clone and download,版本會是最新版本,和opencv_contrib不匹配;
卸載OpenCV
接下來咱們進去ubuntu;首先咱們須要先卸載安裝的opencv版本(也能夠選擇不卸載,這裏提供給你們卸載的方法,畢竟我還不清楚如何在ubuntu下實現opencv多版本共存):
1.徹底卸載opencv2
1.1.From repository,從軟件倉庫中安裝的opencv2
sudo apt-get purge libopencv*
1.2.From source,使用cmake自行編譯安裝的opencv你
首進入原先編譯opencv2的build目錄,在該目錄下打開終端;再執行如下代碼。
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
這一步可能有error,忽略之。最後執行以下操做:
sudo apt-get -purge remove opencv-doc opencv-data python-opencv
對一些error能夠無視,實現上述步驟,可進入/usr/local/include/下查看是否仍是有opencv文檔,若是沒有,說明已經卸載成功;
安裝OpenCV依賴項:
接下來咱們安裝opencv的依賴項;在ubuntu下的好處就是對於任何操做幾行指令就能夠完成,很是方便:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get update
至此,依賴項安裝完畢;
安裝OpenCV以及Opencv_contribe組件
下面咱們開始安裝opencv以及opencv_contrib組件:
首先將兩者解壓,若是選擇的是zip文檔解壓代碼爲
unzip opencv-3.4.1.zip
unzip opencv_contrib-3.4.1.zip
解壓後將opencv_contrib-3.4.1移動道opencv-3.4.1文檔目錄下;
進入opencv-3.4.1文檔,採用外部編譯的方式,輸入下列代碼:
mkdir build;
cd build;
關鍵是cmake的代碼,由於各位ubuntu的系統配置不盡相同,所以可使用下列比較通用的代碼:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local/ \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DINSTALL_C_EXAMPLES=ON \
-DPYTHON_EXCUTABLE=/usr/bin/python \
-DOPENCV_EXTRA_MODULES_PATH=/home/lxy/opencv/opencv-3.4.1/opencv_contrib-3.4.1/modules \
-DWITH_CUDA=OFF \
-DWITH_CUFFT=OFF \
-DWITH_CUBLAS=OFF \
-DWITH_TBB=ON \
-DWITH_V4L=ON \
-DWITH_QT=ON \
-DWITH_GTK=ON \
-DWITH_OPENGL=ON \
-DBUILD_EXAMPLES=ON ..
標紅行意味着是各位須要根據本身的opencv解壓後的文件目錄以及opencv_contrib文件目錄(你已經把它移動道opencv目錄下了)作更改;
注意最後兩個點不能省略(懂的天然懂,不懂的記得google呦),若是某些文檔沒有安裝,可本身選擇on 或者off選項,此處也有人採用cmake-gui來設置,可是實現懶的學,就先採用這種方式吧。
正常的話,便可進入編譯,此時輸入
make –j8
-j8的意思是8核同時編譯,也意味着8個進程同時編譯(給非IT的我一點見識-、-)
這個時候就會遇到各類各樣的問題了:
除了下面這個blog
http://www.cnblogs.com/klchang/p/7510526.html
可能遇到這種問題
問題1
這個時候很簡單,將contrib/modules/中的相關hpp文件移動到/usr/local/include下便可(花了我1-2個小時才明白這個道理),若是沒有opencv2 創建對應的文件夾,記得在/usr/local/include目錄下全部的操做都須要加sudo 權限
如創建opencv2文件夾:
sudo mkdir opencv2
如上述問題可採用
sudo cp –r <source-directory> <goal-directory>
相信這樣的操做你們必定能夠摸索成功
問題2
linemod問題,下面github上的一個哥們即把這個問題提出來,放在了網上,記得不須要加cv::只須要把#include <opencv2/rgbd/linemod.hpp>加到報錯的hpp中便可,若是出現如問題1的 no such file or directory,採起問題1的解決方式便可。因此說,認真分析bug信息,堅持google,咱們會不斷進步的(小N:師兄加油!!! )
https://github.com/opencv/opencv/issues/10844
問題3
若是出現關於build opencv_contribute fatal error boostdesc_bgm.i and vgg;
這個問題遇到的時候極爲難受,由於根本毫無頭緒,然而老是由大神給出答案,可參考opencv網站上的questions
我這裏直接也給出解決方式:
圖片中標藍的網址爲:
https://github.com/opencv/opencv_3rdparty/branches/stale
這是遇到的全部問題,若是你們遇到了其餘問題,歡迎一塊兒討論;