本文记录了 ORB-SLAM2 在Ubuntu16.04下的安装过程.
安装环境:
- Xenial (Ubuntu 16.04) amd64
- ROS Kinetic Kame
- ORB-SLAM2
文章目录
-
- 1 准备工作
- 2 ROS Kinetic Kame 的安装和配置
-
- 2.1 配置Ubuntu软件中心
- 2.2 设置sources.list(软件源)
- 2.3 设置的密钥
- 2.4 安装
- 2.6 设置环境
- 2.7 安装 rosinstall
- 2.8 测试 ROS
- 2.9 创建 ROS 工作空间
- 3 ORB-SLAM2依赖项的安装
-
- 3.1 安装Pangolin,用于可视化和用户接口
- 3.2 安装OpenCV
- 3.3 安装Eigen3
- 4 ORB SLAM2 的安装
- 5 运行单目SLAM实例
- 6 usb_cam安装
- 7 运行实时SLAM
1 准备工作
在开始配置ORB-SLAM2之前,有若干工具是需要提前安装的,即vim、cmake、git、gcc、g++。
sudo apt-get install vim git cmake -y
sudo apt-get install gcc g++ -y
-y
表示自动安装,不需要每项手动确认输入Yes
一般地,完整版的Ubuntu都带有gcc
和g++
接下来将安装 ROS Kinetic Kame
2 ROS Kinetic Kame 的安装和配置
下面我将给出 ROS Kinetic Kame 在 Xenial (Ubuntu 16.04) 上的安装和测试过程。
点击这里,查看 ROS 官网的 ROS Kinetic Kame 安装手册。
2.1 配置Ubuntu软件中心
配置 Ubuntu 要求允许接受 restricted
,universe
和 multiverse
的软件源,可以根据链接配置:https://help.ubuntu.com/community/Repositories/Ubuntu
ROS Kinetic ONLY supports Wily (Ubuntu 15.10), Xenial (Ubuntu 16.04) and Jessie (Debian 8) for debian packages.
一般地,这是系统默认设置,如下图所示:
2.2 设置sources.list(软件源)
设置你的计算机从packages.ros.org
接收软件包。
添加ROS官方软件源:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116
一般地,ROS官方源速度很慢或者连接不上,推荐使用清华 TUNA Mirror 。
设置清华大学TUNA源:
Tsinghua TUNA Mirror
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
所有 Mirrors.
2.3 设置的密钥
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
如果你在连接秘钥服务器时遇到问题,你可以在上面的命令中替换链接为hkp://pgp.mit.edu:80
或者hkp://keyserver.ubuntu.com:80
2.4 安装
首先,更新Debian包索引
sudo apt-get update
ROS含有多种库和工具。官网提供了4种默认配置的安装供你选择。你也可以依据自己需求进行个性化安装。
- (1) 桌面完整版
Desktop-Full Install: (Recommended) : ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators and 2D/3D perception
sudo apt-get install ros-kinetic-desktop-full
- (2) 桌面版
Desktop Install: ROS, rqt, rviz, and robot-generic libraries
sudo apt-get install ros-kinetic-desktop
- (3) 基础版
ROS-Base: (Bare Bones) ROS package, build, and communication libraries. No GUI tools.
sudo apt-get install ros-kinetic-ros-base
- (4) 个性化安装
Individual Package: You can also install a specific ROS package (replace underscores with dashes of the package name):
sudo apt-get install ros-kinetic-PACKAGE
PACKAGE
指包的名称
e.g.
sudo apt-get install ros-kinetic-slam-gmapping
搜索可用包:
apt-cache search ros-kinetic
我们使用 Desktop-Full Install
sudo apt-get install ros-kinetic-desktop-full
安装ROS完整版后可能会导致 X server 损坏,在重新启动Ubuntu后出现
The system is running in low-graphics mode
的错误,导致无法进入Ubuntu桌面。
这是由于使用 apt-get 的安装方式破坏了 X server 的包依赖关系。修复包依赖关系即可解决该问题。
如果出现上述问题,请尝试点击 answers.ros.org thread 或者 launchpad issue 解决问题。
2.6 设置环境
使用apt-get
方式在 Ubuntu上安装 ROS,在使用前需要激活/opt/ros/kinetic/
目录下的setup.bash
文件来添加 ROS 环境变量。
ROS Kinetic Kame,命令如下:
source /opt/ros/kinetic/setup.bash
在每次打开一个新的 shell 时,我们都需要使用上述命令激活setup.bash
文件。这样很繁琐。
因此,可以添加 ROS 的环境变量,这样,当我们打开新的shell时,我们的bash会话中会自动添加环境变量。
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrcsource ~/.bashrc #(使环境变量设置立即生效)
Tips:
使用下面命令可以在不同的 ROS distribution (ROS 发行版)间切换$ source /opt/ros/<distro>/setup.bash
使用 ROS distribution 的短名称替换
<distro>
如果我们想切换到 ROS Indigo Igloo :
$ source /opt/ros/indigo/setup.bash
2.7 安装 rosinstall
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential -y
之后注意在安装其他ROS插件时记得把ros-×××中的×××
替换成kinetic,如下:
sudo apt-get install ros-kinetic-...
2.8 测试 ROS
启动ROS环境,如果显示出started core service [/rosout]
,即为安装成功,如下图:
说明 ROS 已经成功安装并配置
2.9 创建 ROS 工作空间
我们开始创建 catkin workspaces
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
$ echo $ROS_PACKAGE_PATH/home/slam2/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/kinetic/stacks
出现上述结果,说明我们的 catkin workspaces
已经创建好了,并且 ROS_PACKAGE_PATH
也已经配置好了。
接下来的所有工作都在
~/catkin_ws/src
目录下完成,即在catkin workspaces
。
3 ORB-SLAM2依赖项的安装
所有依赖项放在
~/catkin_ws/src
目录下,便于管理。
3.1 安装Pangolin,用于可视化和用户接口
安装依赖库
libglew-dev
libpython2.7-dev
libboost-dev
、libboost-thread-dev
libboost-filesystem-dev
sudo apt-get install libglew-dev libpython2.7-dev libboost-dev libboost-thread-dev libboost-filesystem-dev -y
进入~/catkin_ws/src
下载Pangolin并配置环境
cd ~/catkin_ws/srcgit clone https://github.com/stevenlovegrove/Pangolincd ..catkin_makesource ~/catkin-ws/devel/setup.bash
编译并安装Pangolin
cd Pangolinmkdir buildcd buildcmake ..make -j4sudo make install
3.2 安装OpenCV
点击OpenCV Installation查看官方安装指南
最低的OpenCV版本为2.4.3,建议采用OpenCV 2.4.13或者OpenCV 3.2.0。
从OpenCV官网或者Git下载OpenCV2.4.13。
然后安装依赖项:
安装编译工具
sudo apt-get install build-essential -y
安装依赖包
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
安装可选包
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev -ysudo apt-get install libgtk2.0-dev -ysudo apt-get install pkg-config -y
进入~/catkin_ws/src
从GitHub下载opencv2.4.13,这不是一个 git repository,使用wget。
将下载的OpenCV解压~/catkin_ws/src
目录下。
wget https://github.com/Itseez/opencv/archive/2.4.13.zipunzip 2.4.13.zip
进入OpenCV的目录下。
编译安装OpenCV 2.4.13 源码。
cd opencv-2.4.13/mkdir buildcd buildcmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. makesudo make install
配置OpenCV环境变量
将opencv的库加入到路径,从而让系统可以找到. 编辑文件 /etc/ld.so.conf.d/opencv.conf
:
sudo vim /etc/ld.so.conf.d/opencv.conf
末尾加入/usr/local/lib
,保存退出
sudo ldconfig
使配置生效. 编辑 /etc/bash.bashrc
:
sudo gedit /etc/bash.bashrc
末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出
source /etc/bash.bashrc #使配置生效
测试实例
//文件名字lena.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;int main( )
{
Mat image;//按照自己的目录,或者将image = imread("/home/slam2/catkin_ws/src/lena.png", 1 );if ( !image.data ){
printf("No image data \n");return -1;}namedWindow("Display Image", WINDOW_AUTOSIZE );imshow("Display Image", image);waitKey(0);return 0;
}
Lena.png
如下
编译
g++ lena.cpp -o lena.o `pkg-config --cflags --libs opencv`
运行
./lena.o
效果如下
3.3 安装Eigen3
最低要求版本为3.1.0。在http://eigen.tuxfamily.org 下载 Eigen3.2.10 压缩文件,并解压。
下载并解压 Eigen3.2.10 到~/catkin_ws/src
wget https://bitbucket.org/eigen/eigen/get/3.2.10.tar.bz2
tar -xjf 3.2.10.tar.bz2
得到eigen-eigen-b9cd8366d4e8
目录,重命名eigen-3.2.10
mv eigen-eigen-b9cd8366d4e8/ eigen-3.2.10
编译安装eigen3.2.10
cd eigen-3.2.10/mkdir buildcd buildcmake ..makesudo make install
4 ORB SLAM2 的安装
注意:要安装在工作区的
~/catkin_ws/src
文件夹下。
cd catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
打开build.sh
文件,将最后一行编译连接ORB-SLAM2
的make -j
改为make -j4
vim build.sh
执行build.sh
./build.sh
待编译完成,在ROS工作空间中就成功安装配置好了ORG-SLAM2项目。下面使用**非实时单目SLAM实例(不需要ROS平台也能运行)**测试ORB-SLAM2是否正确安装。
5 运行单目SLAM实例
在http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载一个序列,并解压。转到ORBSLAM2文件夹下,执行下面的命令。根据下载的视频序列freiburg1, freiburg2 和 freiburg3将TUMX.yaml分别转换为TUM1.yaml,TUM2.yaml,TUM3.yaml。将PATH_TO_SEQUENCE_FOLDER更改为解压的视频序列文件夹。
GitHub上给出的命令执行格式:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txtExamples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
在我的虚拟机里命令样例如下:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/slam2/Downloads/rgbd_dataset_freiburg1_xyz
因为我使用的是
rgbd_dataset_freiburg1_xyz
序列,所以将TUMX.yaml
改为TUM1.yaml
。
我的序列存储路径为:
PATH_TO_SEQUENCE_FOLDER =/home/slam2/Downloads/rgbd_dataset_freiburg1_xyz
运行结果如下:
6 usb_cam安装
同样地,注意:要安装在工作区的
~/catkin_ws/src
文件夹下。
1.下载usb_cam源码并配置环境
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make
source ~/catkin-ws/devel/setup.bash
2.编译usb_cam
cd usb_cam
mkdir build
cd build
cmake ..
make
3.测试usb摄像头
(1)打开新的终端,运行roscore
roscore
(2)回到原终端,先进入launch文件夹,再运行usb_cam中的launch文件,如果可以成功运行看到图像则安装成功。
cd launch
roslaunch usb_cam usb_cam-test.launch
图像显示如下
该usb_cam-test.launch是usb_cam中自带的launch文件,打开之后内容如下:
<launch><node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" ><param name="video_device" value="/dev/video0" /><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>
其中video_device的默认设备为video0,可以根据情况更改。
如果不了解自己的usb摄像头为video几,可以运行如下命令查看:
ls /dev/video*
usb_cam用于实时SLAM,配合ROS平台使用
7 运行实时SLAM
稍后给出