ORB-SLAM跑通注意事項


ORB-SLAM跑通注意事項

系統版本:Ubuntu 14.04
ROS版本:ROS indigo

ORB-SLAM項目主頁
ORB-SLAM源碼
源碼中的README,已經將源碼怎樣編譯,怎樣運行都講的很仔細明白了。另,已經有博主漫游者1號的博文ORB-SLAM(1) — 讓程序飛起來也有詳細的講解,我就不再寫在這里了。不過,編譯運行的過程中,我還遇到了一些問題,記錄如下:

  • 如果ROS使用的版本是Indigo,那么就不需要OpenCV2依賴了,將manifest.xml中的<depend package="opencv2"/>注釋掉或刪掉就可以了。
  • 編譯安裝之前,將ORB-SLAM的路徑加到環境變量ROS_PACKAGE_PATH中。
vim ~/.bashrc
# 在末尾添加上如下語句
# 其中PATH_TO_PARENT_OF_ORB_SLAM是ORB_SLAM工程項目文件夾的絕對路徑
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH_TO_PARENT_OF_ORB_SLAM
# bashrc修改后
source ~/.bashrc
  • 在終端運行ORB_SLAM時,要先執行roscore,然后執行下面這條語句rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.txt Data/Settings.yaml參數使用的是相對路徑。至於為什么使用相對路徑,是因為源碼中是如下方式載入設置文件與ORB詞匯文件的(當然,你可以自己修改代碼):
...
// Load Settings and Check
string strSettingsFile = ros::package::getPath("ORB_SLAM")+"/"+argv[2];
...
string strVocFile = ros::package::getPath("ORB_SLAM")+"/"+argv[1];
ORB_SLAM::ORBVocabulary Vocabulary;
bool bVocLoad = Vocabulary.loadFromTextFile(strVocFile);
...
  • ROS打開攝像頭,需要安裝和攝像頭相對應的驅動,如uvc攝像頭sudo apt-get install ros-indigo-uvc-camera,usb攝像頭sudo apt-get install ros-indigo-usb-cam。然后,執行source /opt/ros/indigo/setup.bash。不知道攝像是什么型號的,可以使用命令lsusb查看一下。
    安裝完相應的驅動后,就可以使用如下命令打開攝像頭了:
# usb攝像頭
rosrun usb_camera usb_camera_node
rosrun image_view image_view image:=/image _autosize:=true

# uvc攝像頭
rosrun uvc_camera uvc_camera_node
rosrun image_view image_view image:=/image_raw _autosize:=true

# image:=/topic 后面的topic可以使用如下命令查看,換成你的環境中的topic
rostopic list
  • 但是,以上打開的總是筆記本本地的攝像頭,始終無法啟動usb攝像頭。解決方法是,寫一個open_usbcam.launch文件,其中video_device的value指定為usb攝像頭的掛載路徑及文件名(我的是/dev/video1,ls /dev查看以下即可)。
<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video1" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

然后,按照如下的步驟運行ORB_SLAM:

# 運行ros
roscore
# 打開攝像頭
roslaunch open_usbcam.launch
# 運行ORB_SLAM
rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.txt Data/Settings.yaml
# 顯示跟蹤畫面
rosrun image_view image_view iamge:=/ORB_SLAM/Frame _autosize:=true
# 顯示建圖畫面(ros indigo)
rosrun rviz rviz -d Data/rviz.rviz
  • 結果發現rviz的image畫面總是沒有圖像出現,README中提到ORB_SLAM是從主題/camera/image_view中獲取圖像的。修改open_usbcam.launch,將圖像重新映射到該主題下顯示,結果還是沒有圖像出現(不知道是不是因為沒有修改對,我得去看看ROS的使用教程了,之前都是照着例子和感覺改的)。github中ORB_SLAM項目下的Issuses中有人提到了該問題rosrun image_view #42,其中jwcrawley給出的方法,解決了我的問題。修改ExampleGroovyOrNewer.launch如下:
<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
   <param name="video_device" value="/dev/video1" />
   <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="camera" />
    <param name="io_method" value="mmap"/>
    <remap from="/usb_cam/image_raw" to="/camera/image_raw" />
  </node>

   <node pkg="image_view" type="image_view" name="image_view" respawn="false" output="log">
    <remap from="/image" to="/ORB_SLAM/Frame" />
    <param name="autosize" value="true"/>
    </node>

    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find ORB_SLAM)/Data/rviz.rviz" output="log">
   </node>

    <node pkg="ORB_SLAM" type="ORB_SLAM" name="ORB_SLAM" args="Data/ORBvoc.txt Data/Settings.yaml" cwd="node" output="screen">
   </node>

</launch>

以后直接運行roslaunch ExampleGroovyOrNewer.launch即可。


免責聲明!

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



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