您的位置:首页 > 其它

单目ORB_SLAM 实战

2016-06-10 10:32 411 查看

单目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的文章,读完后并不是很了解,可能需要再深读,消化后再和大家分享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ORB-SLAM实战