ORB_SLAM編譯運行


老規矩之甩鍋:手敲有風險,copy需謹慎!理解咯~~

環境 Ubuntu14.04,虛擬機內存 4G,核心數 2,ROS 版本 Indigo

原作者網頁

1、下載源碼

有的小伙伴要說了,要不要建工作空間呢?畢竟是用 ROS 運行的。之前查了很多資料,大部分都沒有建立工作空間,甚至都沒有提過這事兒。在這里,我以親身實踐說明一下,這個不需要建立工作空間,不用建 src,不用 catkin_make。

工作空間不用建,那總要建立個文件夾用來放源碼,對吧(如果非要把這個文件夾叫做工作空間,那,,你開心就好。。。)

我是在 Home 下建立的,文件夾名稱任意,所以

cd ~/

mkdir orb-slam_ws

cd orb-slam_ws

下載源碼

git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM

安安靜靜等完代碼下完,,雖然很慢很慢……

然后下載數據包,我用的是作者提到的 Example,在原作者網頁可以找到,這里給出下載鏈接

然后將數據包移到 ~/orb-slam_ws,實際上你可以放在任何地方,我這里為了方便就這樣了。

2、安裝依賴

sudo apt-get install libboost-all-dev

sudo apt-get install libblas-dev

sudo apt-get install liblapack-dev

sudo apt-get install libeigen3-dev

然后添加環境變量(不知道對以后的ros工程有沒有影響,這個以后出了問題再說,現在先把這個跑通。。)

sudo gedit ~/.bashrc

在最后面添加:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/orb-slam_ws

實際上,這個路徑是你下載的 ORB_SLAM 的路徑。

然后保存退出,執行:

source ~/.bashrc

說句題外話,新打開的 terminal 中才真正的更新了環境變量,這個窗口中保存的是更改前的。

3、編譯 opencv

由於這個代碼用到了opencv2.4 版本,所以我們要下載對版本。之前一直編譯不同,以為是下載的版本有問題,我下載了 2.4.9、2.4.13、2.4.13.5,最后用 2.4.13版本跑通了,當然我不是說 2.4.9、2.4.13.5 等其他 2.4 版本不能跑通。為什么這么說呢?因為我之前之所以出問題編譯出錯是因為我之前裝了 3.1.0的版本,所以不行。所以,你可以試一試,我覺得只要是 2.4. 的版本應該都可以。

這里我簡單交代一下我曲折的編譯之路。。。然后再給出正確方法。

首先說一下 opencv 版本的問題,之前跑另一個程序需要opencv3,,那時候沒玩過這,也不懂,就按默認路徑安裝了 opencv3.1.0,然后它自己就裝到了 usr/local/include、usr/local/lib,還有share什么的,好多個文件夾,導致我卸載都很麻煩,要卸載它,你就得手動刪掉它所有安裝的路徑下的相關文件,這些安裝信息在安裝時保存在了一個什么 install 文件中,具體我忘了(反正我是運行 unintall 不行,所以才手動一個一個刪的)。

就這樣,刪掉了opencv3.1.0版本,結果還是編譯出錯,說是找不到一些opencv里的程序,其實是程序找不到opencv在哪里(因為我沒有安裝到默認路徑,這個一會再說)。試了很多方法,最后發現,不光要設置環境變量,還要設置 CMakeLists 文件告訴程序 opencv 的路徑。

那我為什么要改變安裝路徑,而不是按默認安裝到 usr 呢?當然是為了方便管理。如同你在 Windows 中安裝軟件,誰會默認安裝到 C 盤啊?是吧,都是安裝到別的盤,這樣方便管理,還不會影響系統,重裝時也不會丟失。linux下也是一樣,改變了安裝路徑,就可以同時安裝多個版本的 opencv,以應對不同程序的需求。切換opencv版本有很多文檔,百度一下就行。切換時只需要改變環境變量和 CMakeLists 文件中的設置就行。我下面安裝 opencv 的方法就是這種。

好了,言歸正傳,首先到官網下載 opencv2.4.13

將下載好的壓縮包解壓到你方便的位置,這里我是專門建了一個用來放 opencv 源碼的文件夾(我把opencv2.4.9、2.4.13、3.1.0版本源碼都放在這里了):
cd ~/

mkdir opencv_src

然后建立一個用於安裝 opencv 的文件夾,這個也是自己看着辦,我同樣是在 Home 下,然后每個opencv版本各占一個文件夾:

cd ~/

mkdir opencv-2.4.13

所以最后我的格局是這樣的:

然后進入解壓后的 opencv-2.4.13,建立 build 文件夾並進入

mkdir build

cd build

執行:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=~/opencv-2.4.13 ..

注意不要丟掉最后的兩個點!它狠重要!!

然后執行:

make

sudo make install

如果虛擬機配了雙核,為了加快速度可以 make -j2 和 sudo make install -j2

安裝后會發現在安裝文件夾 opencv-2.4.13 中的 lib、bin等文件上面有小鎖子標志,如果要消除這個小鎖子,需要更改權限:

cd ~/

sudo chmod 777 opencv-2.4.13 -R

就可以了

然后配置 opencv 變量,編輯文件 /etc/ld.so.conf.d/opencv.conf(如果沒有就會自動創建):

sudo gedit  /etc/ld.so.conf.d/opencv.conf

然后添加 opencv2.4.13 的 lib 路徑:

~/opencv-2.4.13/lib

保存退出,執行:

sudo ldconfig

編輯 ~/.bashrc ,最后添加:

#opencv-2.4.13

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:~/opencv-2.4.13/lib/pkgconfig

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:~/opencv-2.4.13/lib

保存退出,執行:

source ~/.bashrc

查看當前 opencv 版本,新開窗口執行:

pkg-config --modversion opencv

如果顯示 2.4.13,說明當前opencv版本正是剛安裝的 2.4.13

4、編譯g2o

進入 g2o 文件夾:

cd ~/orb-slam_ws/ORB_SLAM/Thirdparty/g2o

創建 build 文件夾:

mkdir build

cd build

編譯:

cmake .. -DCMAKE_BUILD_TYPE=Release

如圖:

make

如圖:

5、編譯DBoW2

前面的前面說的要在 CMakeLists 文件中添加 opencv 路徑,說的就是這里了,因為編譯 DBoW2 時需要使用 opencv 庫。還有就是如果安裝了錯誤的 opencv 版本導致編譯失敗,那么在安裝了正確的版本后,需要重新編譯 ORB_SLAM(下一步會講),並且需要重新編譯 DBoW2,這個很重要,否則即使opencv版本正確,程序仍編譯不成功!重新編譯的時候刪掉 build 里的所有東西,然后重新 cmake 加參數和 make 就好了。

進入 DBoW2 文件夾:

cd ~/orb-slam_ws/ORB_SLAM/Thirdparty/DBoW2

創建 build 文件夾:

mkdir build

編輯 Thirdparty/DBoW2 下的 CMakeLists.txt 文件,在第4行左右,添加設置(正是opencv安裝的路徑):

set(OpenCV_DIR ~/opencv-2.4.13/share/OpenCV)

保存退出

然后進入 build 文件夾開始編譯:

cd build

編譯:

cmake .. -DROS_BUILD_TYPE=Release

如圖:

make

如圖:

6、編譯 ORB_SLAM

終於要開始編譯真正的程序源碼了,之前的都是編譯了需要用到的庫。

首先,因為我的 ROS 版本是 Indigo,所以需要將 ORB_SLAM 下 manifest.xml 中的 opencv2 那一行注釋掉,右鍵用 gedit 打開 manifest.xml,12行左右修改為:

<!--    <depend package="opencv2"/>    -->

保存退出(這里我是注釋掉了,事實上可以直接刪掉這一句)

同時,由於同樣用到了 opencv,所以這里也需要在 CMakeLists 文件中添加opencv路徑:

編輯 ORB_SLAM 下的 CMakeLists.txt 文件,12行左右添加設置:

set(OpenCV_DIR ~/opencv-2.4.13/share/OpenCV)

保存退出

在 ORB_SLAM 下建立 build 文件夾,然后進入:

mkdir build

cd build

開始編譯:

cmake .. -DROS_BUILD_TYPE=Release

如圖:

make

如圖:

7、運行

然后呢,當然是開始跑程序啦~~老司機發車~~~~~~~wuwuwu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

新開窗口啟動 ROS:

roscore

新開窗口,在 ~/orb-slam_ws/ORB_SLAM 下執行:

roslaunch ExampleGroovyOrNewer.launch

這里因為是 Indigo 版本,所以運行這個程序,如果是別的版本,就需要運行不同的指令,詳見原作者網頁

這時,就會看到 Rviz 自動運行,同時出現一個黑色沒有顯示的窗口,這時因為沒有數據輸入。

然后新開窗口運行數據包(先進入數據包所在文件夾):

cd ~/orb-slam_ws

rosbag play --pause Example.bag

然后在這個窗口中通過 空格鍵 來控制數據包的運行與暫停,運行效果如下:

春節只有兩星期假,還要調程序,心里那個不情願啊aaaaa……假期算是沒跑通,各種錯誤,國內外的帖子翻了好幾遍,這不昨天剛弄出來

山重水復疑無路,柳暗花明又一村!

千萬別放棄,絕處逢生是最有成就感的!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM