【SLAM】Ubuntu16.04下配置ORB-SLAM2

本文记录了 ORB-SLAM2 在Ubuntu16.04下的安装过程.

安装环境:

  1. Xenial (Ubuntu 16.04) amd64
  2. ROS Kinetic Kame
  3. ORB-SLAM2

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都带有gccg++

接下来将安装 ROS Kinetic Kame

2 ROS Kinetic Kame 的安装和配置

下面我将给出 ROS Kinetic Kame 在 Xenial (Ubuntu 16.04) 上的安装和测试过程。
点击这里,查看 ROS 官网的 ROS Kinetic Kame 安装手册。

2.1 配置Ubuntu软件中心

配置 Ubuntu 要求允许接受 restricteduniversemultiverse 的软件源,可以根据链接配置: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" >> ~/.bashrc

source ~/.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安装成功
说明 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/src

git clone https://github.com/stevenlovegrove/Pangolin

cd ..

catkin_make

source ~/catkin-ws/devel/setup.bash

编译并安装Pangolin

cd Pangolin

mkdir build

cd build

cmake ..

make -j4

sudo 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 -y

sudo apt-get install libgtk2.0-dev -y

sudo 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.zip

unzip 2.4.13.zip

进入OpenCV的目录下。
编译安装OpenCV 2.4.13 源码。

cd opencv-2.4.13/

mkdir build

cd build

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

make

sudo 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 如下
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 build

cd build

cmake ..

make

sudo 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-SLAM2make -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

稍后给出



  • 19
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值