ORB_SLAM运行详细过程(不能再详细了)

本文档包括单目ORB_SLAMubuntu系统和ROS环境搭建到最终测试程序,主要包含以下几部分。

运行环境:window 7下装虚拟机VMWare 10,在虚拟机里跑ubuntu14.04。参考了一些资料,在测试中也碰到很多问题,故编写这个详细ORB_SLAM运行过程,辛苦堆砌。

一、ORB SLAM简介

ORBSLAM是15年出的比较完备的单目slam算法,orb指的是一种旋转不变性特征,整个算法均是基于orb特征实现的,不同于基于稠密或半稠密地图的slam,orbslam是一个基于特征点地图的slam。最新的orbslam的进展是基于orbslam的关键帧做了半稠密场景重建,新的研究成果可持续关注下面的项目主页:http://webdiis.unizar.es/~raulmur/orbslam/

二、ubuntu系统和ROS环境搭建

1ubuntu系统安装

ubuntu系统下载镜像:http://mirrors.ustc.edu.cn/ubuntu-releases/14.04/

我是下载32位的。


虚拟机VMWare 10自己百度安装下就好了。下图是我的ubuntu配置


(2)ROS环境安装

ROS是运行在ubuntu系统下的,UbuntuROS版本对应,这里是对应安装ROS Indigo


1)首先打开“软件和更新”对话框,具体可以在Ubuntu最左上角的搜索按钮中搜索。

打开后按照下图进行配置(确保你的"restricted""universe""multiverse."前是打上勾的):


2)添加源,在终端(快捷键:Ctrl + Alt + T)命令行执行下列命令

首先,有两个工具是需要提前安装的。即cmake和git。

sudo apt-get install cmake

sudo apt-get install git

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

3)设置密钥,在终端命令行执行下列命令

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

4)安装,在终端命令行执行下列命令

sudo apt-get update

sudo apt-get install ros-indigo-desktop-full

安装完成后,可以用下面的命令来查看可使用的包:

apt-cache search ros-indigo

5)初始化ROS在终端命令行执行下列命令

sudo rosdep init

rosdep update

6)初始化环境变量,在终端命令行执行下列命令

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc

source ~/.bashrc

上面两句非常非常非常重要,很多小伙伴在日常的开发过程中,有的找不到 Package,找不到node,很多情况下都是没有添加source

sudo apt-get install python-rosinstall

7)测试ROS重新打开终端,在命令行执行下列命令,表示安装成功。

roscore -h


三、ORB_SLAM依赖库

orb-slam依赖于若干库,需要依次安装,包括:Boost/ROS/OpenCV/g2o/DBoW2,针对这些库的安装将分别进行描述。

1Boost

使用Boost库主要是用来管理多线程的,在终端命令行执行下列命令即可,

sudo apt-get install libboost-all-dev

2)ROS(见第二步、已做)
使用ROS主要是用来获取输入图像序列(可以是从摄像头直接获取,或者从已采集好的图像序列文件中获取数据,下面展示的例子属于后者)以及结果可视化。ROS的安装配置也可参考官网链接:

http://wiki.ros.org/indigo/Installation/Ubuntu完成,这里不再赘述。

3)OpenCV (先编译后安装)

这里安装的opencv版本是opencv-2.4.13,下载地址:https://www.opencv.org/releases.html安装配置的过程如下:

安装opencv之前需要事先安装一些依赖项,在终端命令行执行下列命令:

sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev

然后从opencv官网下载opencv2.4.13版本(就下window版),将其用U盘拷贝到虚拟机的ubuntu系统里并解压缩,进入解压缩后目录,创建编译文件夹build,并进入该文件夹,

cd opencv-2.4.13

mkdir build

cd build

先编译OpenCV,后安装OpenCV在终端命令行执行下列命令:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

make

sudo make install


4)g2o 依赖库

(执行图优化的一个通用求解器,这里可以简单理解位姿求解,位姿优化、地图优化)

g2o主要是用来进行优化计算的,编译g2o需要首先安装其他依赖项,在终端命令行执行下列命令:

sudo apt-get install libblas-dev

sudo apt-get install liblapack-dev

sudo apt-get install libeigen3-dev

5)DBoW2(主要用于place recognition,场景识别,在ORB SLAM中主要用于闭环检测

DBoW2不需要其他依赖库,直接进行下一步的编译即可。

四、ORB_SLAM源码及编译

(1)ORB_SLAM源码下载

ORB-SLAM的github主页下载ORB-SLAM项目至目录ORB_SLAM下,在终端命令行执行下列命令:

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

也可以在window系统里下载好用U盘拷贝到ubuntu系统里。

(2)设置环境变量

如果ORB-SLAM源码的绝对路径为:/home/wzh/ORB_SLAM,那么设置环境变量ROS_PACKAGE_PATH为,在终端命令行执行下列命令:

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH::/home/wzh/ORB_SLAM


3)第三方库g2o编译

进入目录ORB_SLAM/Thirdparty/g2o/,并在命令行中执行命令,

mkdir build

cd build

cmake .. -DCMAKE_BUILD_TYPE=Release

make

4)第三方库DBoW2编译

进入目录ORB_SLAM/Thirdparty/DBoW2/,并在命令行中执行命令,

mkdir build

cd build

cmake .. -DCMAKE_BUILD_TYPE=Release

Make

(5)ORB_SLAM源码编译

进入目录ORB_SLAM/,并在命令行中执行命令,

mkdir build

cd build

cmake .. -DROS_BUILD_TYPE=Release

make

特别需要注意的是,如果ROS安装的版本是ROS Indigo,需要将ORB_SLAM根目录下的manifest.xml文件中的opencv2依赖一行的代码去掉! 

完成ORB-SLAM的编译过程。


五、测试程序、运行程序

前提:ORB_SLAM源码已下载,ros已正确安装,依赖库的安装第三方库的编译(g2oDBoW2),ORB_SLAM已编译。

说到运行程序,orbslam是基于ros的,因此首先必须得运行roscore,启动ros服务。随后逐一运行图片显示,地图显示,orb slam主体程序,rosbag图片发布程序。

关于启动各个程序,无论是ORB本体程序还是可视化程序还是图片发布程序,大致有两种方法:

一、逐一手动启动各个程序

(1) 开启新的终端,执行

roscore   #启动ros服务

(2) 开启新的终端,执行

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:(你的ORB_SLAM文件夹绝对路径)    #添加环境变量,如果ORB_SLAM位于ROS工作空间的话,则忽略

我的是:export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/wzh/ORB_SLAM

这一步是可以省掉的,只需在前面第四步下载ORB_SLAM源码及编译时,设置好环境变量就可以。

设置环境变量

如果ORB-SLAM项目的绝对路径为/home/wzh/ORB_SLAM,那么设置环境变量ROS_PACKAGE_PATH为,

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/wzh/ORB_SLAM

(3) 打开新的终端,执行

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:(你的ORB_SLAM文件夹绝对路径)     #添加环境变量,如果ORB_SLAM位于ROS工作空间的话,则忽略

我的是:export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/wzh/ORB_SLAM

rosrun rviz rviz -d Data/rviz.rviz   #启动地图视图窗口,显示轨迹及特征点地图

(4) 打开新的终端,执行

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:(你的ORB_SLAM文件夹绝对路径)     #添加环境变量,如果ORB_SLAM位于ROS工作空间的话,则忽略

rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.txt  Data/Settings.yaml             #运行ORB_SLAM, 其中ORBvoc.txt需要先解压

(5) 打开新的终端执行,进入Example.bag所在文件夹,执行    

rosbag play --pause Example.bag             

#执行图片发布程序,执行后,按空格键开始

二、使用launch文件启动程序

使用launch文件就比较简单了,ORB_SLAM包中包含两个launch文件,对应不同的ROS版本

 

根据你的ROS版本,选择对应的launch文件即可,launch文件相当于将上一小节的2,3,4步集成在一块:

(1) 开启新的终端,执行

roscore   #启动ros服务,#符合表示注释的意思。

(2) 开启新的终端,执行

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:(你的ORB_SLAM文件夹绝对路径)  #添加环境变量,如果ORB_SLAM位于ROS工作空间的话,则忽略.

我的ORB_SLAM源码文件夹在:/home/wzh

先在终端输入命令:

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/wzh/ORB_SLAM

再进入ORB_SLAM目录下

输入命令:roslaunch ExampleGroovyOrNewer.launch

(3) 打开新的终端执行,进入Example.bag所在文件夹,执行     

rosbag play --pause Example.bag  #执行图片发布程序,执行后,按空格键开始。也可以不按空格键,按s键可以单步查看运行结果。

下面左图展示的是相机姿态的可视化结果,右图展示的是对应时刻的追踪特征点可视化结果。

测试结果:


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐