SVO即“Fast Semi-Direct Monocular Visual Odometry”視覺slam算法
編譯環境:Ubuntu14.04-LTS(64位)、ROS Indigo
不得不說,這個代碼是我目前為止編譯最為順利的一個,沒有遇到之前各種奇奇怪怪的問題。雖然完全按照原作者的方法來編譯應該不會出現問題,但還是決定寫一篇關於svo編譯的。一是關於這個編譯的文章少,我百度的時候沒出來幾個(可能是因為這個編譯太簡單了吧,,hehe……);二是原作者沒有給出關於 OpenCV 的說明,如果自己之前自定義安裝了 OpenCV 的小朋友,在編譯的時候可能會出現找不到 OpenCV 的問題。
下面是具體步驟:
1、下載源碼
先交代一下,我們是要建兩個並列的文件夾,一個(workspace)用於存放所要用到的庫,一個(src)用於存放 SVO 代碼。我是先把所有需要的東西都下載完,然后再編譯的。
首先創建一個文件夾用於放置代碼,我的是在 Home 目錄下:
mkdir ~/svo_ws
cd ~/svo_ws
mkdir workspace
cd workspace
git clone https://github.com/strasdat/Sophus.git
git clone https://github.com/uzh-rpg/fast.git
git clone https://github.com/RainerKuemmerle/g2o.git
這樣三個庫 Sophus、fast、g2o 就分別下載完了,然后在 svo_ws 下創建 src:
cd ..
mkdir src
cd src
git clone https://github.com/uzh-rpg/rpg_vikit.git
git clone https://github.com/uzh-rpg/rpg_svo.git
這里下載的兩個一個是工具庫,一個是源碼。
然后下載一會要用到的數據包,這是下載鏈接,然后把下載的包移到 svo_ws 下備用。
2、編譯
然后開始編譯,編譯要用到的三個庫,最后編譯程序代碼。
先編譯 Sophus,進入 Sophus 文件夾:
cd ~/svo_ws/workspace/Sophus
然后切換分支:
git checkout a621ff
如圖:
然后創建 build 文件夾並編譯:
mkdir build
cd build
cmake ..
make
結果如圖:
然后編譯fast:
cd ~/svo_ws/workspace/fast
mkdir build
cd build
cmake ..
我在這里編譯出錯了,因為我 OpenCV 安裝時沒有裝到系統路徑,而是自定義的,我之前的文章里也多次提到了。
編輯 fast 下的 CMakeLists.txt,在 20行左右添加自己的安裝路徑:
set(OpenCV_DIR ~/opencv-2.4.9/share/OpenCV)
保存退出。這里我是沿用上篇文章的 OpenCV2.4.9 版本,路徑設置及版本切換參考我之前的文章。刪掉 build 下的所有文件(這點狠重要!!),然后重新編譯:
cmake ..
make
到這里應該會沒問題,如圖:
這里提一下,如果你出現了 “unrecognized command line option '-mfpu=neon' ”的錯誤:
那么自己給自己一巴掌。如果按我的步驟來,不會出現這個錯誤,出現這個錯誤的原因是添加了環境變量 ARM_ARCHITECTURE=True。其實作者已經說得狠清楚了,ARM平台才需要添加這個,我們是 PC端編譯,所以不要添加這個。
然后編譯 g2o,由於我之前編譯別的代碼時已經將g2o安裝到了系統路徑,所以這次我沒有再次安裝。不過這里還是給出安裝過程(這是安裝到系統路徑,如果想自定義路徑,請自行參考原作者網頁):
cd ~/svo_ws/workspace/g2o
mkdir build
cd build
cmake ..
make
sudo make install
至此需要用到的庫已經完都編譯或安裝完畢,然后就該編譯主程序了。再編譯之前,原作者也友情提示了一下檢查是否安裝了 cmake-modules,其實一般來說都是安上了的,我的是 Indigo 版本,所以:
sudo apt-get install ros-indigo-cmake-modules
如果之前編譯 fast 時出現了找不到 OpenCV 的問題,那么編譯主程序時還會遇到這個問題,別問我怎么知道的[僵屍臉]~~!出錯截圖:不給你看咩~~!
所以我們一次性修改所有的文件,分別是 src/rpg_vikit/vikit_common/、src/rpg_vikit/vikit_ros/ 、src/rpg_svo/svo/ 、src/rpg_svo/svo_ros/ 下的 4 個CMakeLists.txt 文件,在里面合適位置添加(路徑改成你的):
set(OpenCV_DIR ~/opencv-2.4.9/share/OpenCV)
保存退出。然后在 ~/svo_ws 下編譯(如果之前已經編譯過了,就刪除 build 下的所有文件,重新回到 ~/svo_ws 編譯):
catkin_make
編譯成功如圖:
3、運行
新開窗口進入 ~/svo_ws 並運行:
source devel/setup.bash
roslaunch svo_ros test_rig3.launch
然后新開窗口進入 ~/svo_ws 並運行:
rosrun rviz rviz -d src/rpg_svo/svo_ros/rviz_config.rviz
最后運行數據包:
cd ~/svo_ws
rosbag play airground_rig_s3_2013-03-18_21-38-48.bag
效果如圖:
最后,,這次沒什么感慨,就祝大家湯圓節快樂吧(*^__^*) ……