运行ORB-SLAM笔记_编译篇(一)
2.打開后如下
????????????????
就好像是用一件新產品一樣,我們首先要看一下說明書“README.md”,
README.md介紹了很多關于這個工程的東西,比如作者,發表的論文,研究的人員,代碼的下載以及更新
那么我們首先從有用的信息開始操作:(備注:以下內容都是我的個人理解,都是別人的東西,我拿來學習而已)
3.解決依賴項
??? 3.1 Boost?? :用這個Boost庫在SLAM運行過程中開辟不同的線程
??? ? ? ? ? ?
3.2 ROS:使用ROS采集攝像頭或者記錄下來的視頻(rosbag)的圖像信息,進行可視化
?我的電腦安裝的是indigo版本的所以安裝教程是:wiki.ros.org/indigo/Installation/Ubuntu
安裝完成運行? roscore 出現如下界面說明安裝成功,同時也就可以學習ROS的基本教程了
??????????? wiki.ros.org/ROS/Tutorials
???????
3.3 OpenCV 使用OpenCV去處理圖像特征,ORB-SLAM的OpenCV版本是OpenCV 2.4,下載和安裝OpenCV
?? http://opencv.org/? 或者任意百度一下都有好多教程。
3.4 g20(第三方庫) 這里用的是修改后的G2O版本,那么原始代碼在 https://github.com/RainerKuemmerle/g2o ,G2O即是通用圖優化,g2o是一個算法集的C++實現,根據前人求解非線性最小二乘的理論,根據具體的問題,選用最合適的算法,
為了能夠編譯G2O,需要安裝一些東東是:BLAS, LAPACK and Eigen3,直接命令:
????????????????????????? sudo apt-get install libblas-dev
?? ? ? ? ? ? ? ? ? ? ? ?? sudo apt-get install liblapack-dev
?? ? ? ? ? ? ? ? ? ? ? ?? sudo apt-get install libeigen3-dev
3.5 DBow2(第三方庫)DBow2是一種高效的回環檢測算法,DBOW2算法的全稱為Bags of binary words for fast place recognition in image sequence,使用的特征檢測算法為Fast,描述子使用的是brief描述子,是一種離線的方法。使用了DBow2和DLib庫的一些算法,進行位置識別和特征匹配,不需要為它添加其他依賴項(代碼地址:?https://github.com/dorian3d/DBoW2)
4.安裝
? ? ? 4.1? 確認已經安裝了ROS以及他的依賴項 (boost, eigen3, opencv, blas, lapack).
????? 添加所下在的ORB-SLAM的路徑到環境變量下,比如我的ORB-SLAM的路徑為:
所以需要打開配置ubuntu環境變量的~/.bashrc文件,在文件最底處添加如圖所示的命令行:然后source ~/.bashrc.
? ? ? ?
?4.2 build g2o 安照說明一步一步來
??????? 前往 /home/salm/Monocular/ORB_SLAM/Thirdparty/g2o ; ?
? ? 依次命令為: ? ? cd? ~/Monocular/ORB_SLAM/Thirdparty/g2o
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? mkdir build
?? ??? ?????????????????????? cd build
?? ??? ? ? ? ? ? ? ? ? ? ? ?? cmake .. -DCMAKE_BUILD_TYPE=Release
?? ??? ? ? ? ? ? ? ? ? ? ? ?? make
g2o編譯成功。
4.3 Buid DB0W2? 與編譯g2o時相似命令如下
???????????? ? ? ? ? ? ? ? ?? cd?~/Monocular/ORB_SLAM/Thirdparty/DBoW2? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ?? ? ? ? ? ?? mkdir build
?? ?? ?? ? ? ? ? ? ? ? ?????? cd build
?? ??? ? ? ? ? ? ? ? ? ? ? ?? cmake .. -DROS_BUILD_TYPE=Release
?? ??? ????????????????? ???? make
4.4 Build ORB-SLAM,這里有一個提示**If you use ROS Indigo, remove the depency of opencv2 in the manifest.xml.**
(按照理解就是把manifest.xml中的opencv2注釋就好了唄),如下圖:
??????????
? 然后就按照步驟來執行,
更改之后就可以進入編譯:
????????????????????????????????? cd? ~/Monocular/ORB_SLAM
????????????????????????????????? mkdir build
?? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cd build
?? ??? ??????????????????????? ?? cmake .. -DROS_BUILD_TYPE=Release
?? ??? ???????????????????????? ? make
但是在執行到cmake .. -DROS_BUILD_TYPE=Release發現會有錯誤,
????
然后就開始百度搜索答案唄,我也是這樣想的,就會看到此博客? http://blog.csdn.net/wishchin/article/details/50468950
就會提示說路徑設置有問題,然后我就各種設置,每設置一次就編譯一次,只記得用了好長時間,都沒有成功,過了一段時間
? 想想? 我應該把這三個都注釋掉就有
??????????? <!--<depend package="opencv2"/>
??????????? <depend package="image_transport"/>
??????????? <depend package="cv_bridge"/> -->
?如下圖然后執行cmake .. -DROS_BUILD_TYPE=Release這樣雖然生成了Makefile,但是在接下來的make肯定會出錯的,因為我們把所有關于opencv的依賴項都給注釋了
所以就導致編譯出錯了(但是這里可以我也沒找到什么原因,為什么我按照說明書,卻行不通,我懷疑是我的opencv沒有安裝好,或者路徑設置不對,但是這些都不管了,我知道我已經安裝了opencv)
(注釋了三個依賴項然后make 的結果如下圖)
?可能也會出現其他錯誤,提示找不到opnecv的庫函數,或者說找不cv_bridge等函數
?
所以我就按照網上找各種方案的就結合我就只是把manifest.xml文件注釋了OPENCV2,進去到ORB_SALM文件下:
??
執行:
后面是我手動添加的opencv的鏈接庫,
??????????????????????? cmake .. && make -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect -lopencv_nonfree
如下圖,
(也就是說在我的電腦上(ubuntu14.04 32位 ros_indigo)在camke 和make 都需要添加opencv 的鏈接庫,編譯成功了)
因為創建了兩個工作空間導致我的程序又出錯誤了,之前運行
rosrun ORB_SLAM ORB_SLAM /home/salm/ORB_SLAM/Data/ORBvoc.txt /home/salm/ORB_SLAM/Data/Settings.yaml
?rosrun ORB_SLAM ORB_SLAM ~/ORB_SLAM/Data/ORBvoc.txt ~/ORB_SLAM/Data/Settings.yaml
都是可以運行的,不知道為啥又出現錯誤了
就是很不知怎么回事說我的路徑有問題
后來我運行
?rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml
(不是絕對路徑,而是在ORB_SLAM路徑下的絕對路徑)就可以運行了
?
以下是我在整理問題是所遇到的有關的網頁
askubuntu.com/questions/510606/error-adding-symbols-dso-missing-from-command-line
?blog.csdn.net/dreamer_lhs/article/details/51297432
?www.voidcn.com/blog/wishchin/article/p-4970975.html
blog.csdn.net/real_myth/article/details/51798557
blog.csdn.net/dourenyin/article/details/48055441
?
總結
以上是生活随笔為你收集整理的运行ORB-SLAM笔记_编译篇(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux ROS与嵌入式的串口通信
- 下一篇: 运行ORB-SLAM笔记_使用篇(二)