單目ORB_SLAM 實戰
本篇是對 Zaragoza universidad 發表的ORB-SLAM a Versatile and Accurate Monocular SLAM System 中提出的ORB-SLAM 的代碼運行實戰,在GitHub上有英文的代碼運行介紹。
原作者主頁
GitHub路徑
以下是在自己電腦(dell-optiplex 9020, i7 8G )中調試成功後的,調試流程和注意事項:
這個工作只是爲了方便調試過程中遇到問題的小白,大神請直接看原鏈接。同時如有錯誤請大家指正,我只是搬運工。
ORB_SLAM安裝
首先確保安裝了ROS和依賴庫文件 eigen3,opencv,blas,lapack,boost等
git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/&&/
其中&&表示自己安裝ORB_SALM的路徑, 也可以自行在bashrc環境變量中添加,可以直接gedit ~/.bashrc
查看自己的環境變量cd Thirdparty/g2o/
圖優化
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
cd Thirdparty/DBoW2/
迴環檢測的包
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
- 如果是ROS Indigo ,去掉ORB_SLAM 文件夾中manifest.xml中關於 opencv2的依賴
如下:
<package>
<description brief="ORB_SLAM">
ORB_SLAM
</description>
<author>Raul Mur-Artal</author>
<license>GPLv3</license>
<depend package="roscpp"/>
<depend package="tf"/>
<depend package="sensor_msgs"/>
<!-- <depend package="opencv2"/> -->
<depend package="image_transport"/>
<depend package="cv_bridge"/>
</package>
然後依然運行
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
ORB_SLAM 安裝完成
運行ORB_SLAM代碼-使用Example.bag
下載Example.bag.tar.gz
http://webdiis.unizar.es/~raulmur/orbslam/downloads/Example.bag.tar.gz.ORB_SLAM 的根目錄下提供了兩個可運行的版本
in ROS Fuerte:
roslaunch ExampleFuerte.launch
in ROS Groovy or newer versions:
roslaunch ExampleGroovyHydro.launch
rosbag play --pause Example.bag
現在應該可以利用已有的數據庫運行ORB_SLAM了
運行ORB_SLAM代碼-使用攝像頭數據
配置文件 :rosrun ORB_SLAM ORB_SLAM PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
此處PATH_TO_VOCABULARY 爲ORB_SLAM/Data/ 下ORBvoc.txt.tar.gz 解壓後的ORBvoc.txt
PATH_TO_SETTINGS_FILE 爲ORB_SLAM/Data/ 下的 Settings.yaml 文件
PS:工程要求,實際要將Settings.yaml 換成自己標定攝像頭後產生的文件roscore
roslaunch rbx1_vision ORB_cam.launch
運行自己的攝像頭驅動launch文件
此處的ORB_cam.launch 文件是 我將 rbx1_vision 文件夾中的 usb_cam.launch 修改後的文件,修改地方如下將
<remap from="usb_cam/image_raw" to="/camera/rgb/image_raw" />
<remap from="usb_cam/camera_info" to="/camera/rgb/camera_info" />
修改爲:
<remap from="usb_cam/image_raw" to="/camera/image_raw" />
<remap from="usb_cam/camera_info" to="/camera/camera_info" />
因爲ORB_SLAM接受的topic名爲 /camera/image_raw,也可以自己寫remap到相應的topic
3. roslaunch mycamera.launch
此處 將ORB-SLAM 文件夾中的ExampleGroovyOrNewer.launch 複製重新命名爲mycamera.launch
將ExampleGroovyOrNewer.launch中的
<remap from="/image" to="/ORB_SLAM/Frame" />
(是讀取Example.bag的代碼)
改爲 <remap from="/camera/image_raw" to="/ORB_SLAM/Frame" />
運行之後等待幾秒鐘,單目ORB_SLAM是利用前幾幀的視差來初始化定位的,所以左右擺動攝像頭就可以出現特徵點和攝像頭的位置了。
在調試過程中也借鑑了[漫遊者1號](http://blog.csdn.net/dourenyin/article/details/48055441)的文章,自己在調試中遇到了問題,然後摸索後,分享給大家,這篇文章中已經給出了很多詳細介紹,這裏就不重複了,只將可以運行的調試過程給大家。
以上只是ORB_SLAM 單目的運行程序,原文作者也發佈了ORB_SLAM2 裏面有關於RGB-D和 stereo 的運行代碼。同時近期也看完了 ORB:an efficient alternative to SIFT or SURF 這篇文章,該文章發表於2011年 ECCV,近期會發布關於這篇文章的詳細介紹。
關於這篇ORB的文章,讀完後並不是很瞭解,可能需要再深讀,消化後再和大家分享。