单目ORB_SLAM 实战

单目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等

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

  2. export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/&&/ 其中&&表示自己安装ORB_SALM的路径, 也可以自行在bashrc环境变量中添加,可以直接gedit ~/.bashrc 查看自己的环境变量

  3. cd Thirdparty/g2o/ 图优化
    mkdir build
    cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    make

  4. cd Thirdparty/DBoW2/ 回环检测的包
    mkdir build
    cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    make
  5. 如果是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

  1. 下载Example.bag.tar.gz
    http://webdiis.unizar.es/~raulmur/orbslam/downloads/Example.bag.tar.gz.

  2. ORB_SLAM 的根目录下提供了两个可运行的版本
    in ROS Fuerte:
    roslaunch ExampleFuerte.launch

    in ROS Groovy or newer versions:
    roslaunch ExampleGroovyHydro.launch

  3. rosbag play --pause Example.bag

现在应该可以利用已有的数据库运行ORB_SLAM了


运行ORB_SLAM代码-使用摄像头数据

  1. 配置文件 :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 换成自己标定摄像头后产生的文件

  2. roscore

  3. 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的文章,读完后并不是很了解,可能需要再深读,消化后再和大家分享。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章