Ubuntu 16.04 版本配置 ORB-SLAM 2

Ubuntu 16.04 版本配置 ORB-SLAM 2

ORB-SLAM2是用于单目,立体声和RGB-D相机的实时SLAM库,可计算相机轨迹和稀疏的3D重建(在具有真实比例的立体声和RGB-D情况下),能够实时检测环路并重新定位摄像机。
ORB-SLAM1是依赖于ROS运行的,ORB-SLAM2是不完全依赖ROS的,它有两个编译选项,对应两个脚本文件build.sh和build_ros.sh。编译前者能跑一些数据集,可以通过改源码进行跑自己的设备;编译后者则可以利用ROS很方便地接入自己的设备。ORB-SLAM2支持Monocular、Stereo、RGB-D相机。

一、搭建ROS-kinetic

在搭建ROS之前,需要进行一些前期的准备工作,有若干工具是需要提前安装的,即vim、cmake、git、gcc、g++。

sudo apt-get install vim git cmake -y
sudo apt-get install gcc g++ -y

-y 表示默认同意自动安装,不需要再次输入[Y]。一般成功安装的Ubuntu16.04 系统自带gcc和g++。

接下来进行安装ROS
具体参考ROS-kinetic安装(Ubuntu)

1、 安装

ROS Kinetic 只 支持Wily (Ubuntu 15.10), Xenial (Ubuntu 16.04) 和Jessie (Debian 8) 的debian包。

1.1 配置 Ubuntu 软件仓库

配置你的 Ubuntu 软件仓库(repositories) 以允许 “restricted”、“universe” 和 "multiverse"这三种安装模式。 你可以按照ubuntu中的配置指南来完成配置
Ubuntu默认选项在这里插入图片描述

1.2 添加 sources.list

设置你的电脑可以从 packages.ros.org 接收软件.

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

Mirrors源Debs也可用

注:强烈建议使用国内或者新加波的镜像源,这样能够大大提高安装下载速度。
清华源
URL: http://mirrors.tuna.tsinghua.edu.cn/ros/

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

1.3 添加 keys

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

如果你遇到连接到keyserver的问题,你可以在以上命令尝试替换hkp://pgp.mit.edu:80或hkp://keyserver.ubuntu.com:80。

1.4 安装

首先,确保你的Debian软件包索引是最新的:

sudo apt-get update

在ROS中,有很多不同的库和工具。我们提供了四种默认的配置来帮助你开始。你也可以单独安装ROS包。

如果以下步骤出现问题,可以使用以下存储库,而不是上面提到的那些ros-shadow-fixed

桌面完整版: (推荐) : 包含ROS、rqt、rviz、机器人通用库、2D/3D 模拟器、导航以及2D/3D感知

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

桌面版安装: 包含ROS、rqt、rviz以及通用机器人函数库。

sudo apt-get install ros-kinetic-desktop

基础版安装: (简版) 包含ROS核心软件包、构建工具以及通信相关的程序库,无GUI工具。

sudo apt-get install ros-kinetic-ros-base

单个软件包安装: 你也可以安装某个指定的ROS软件包(使用软件包名称替换掉下面的PACKAGE):

sudo apt-get install ros-kinetic-PACKAGE

例如:

sudo apt-get install ros-kinetic-slam-gmapping

要查找可用软件包,请运行:

apt-cache search ros-kinetic

1.5 初始化 rosdep

在开始使用ROS之前你还需要初始化rosdep。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。

sudo rosdep init
rosdep update

可能会因为网络问题无法更新,网上有一些方法如更换手机网络等都不太好使,可以尝试更换源码,教程见:https://blog.csdn.net/super_sean/article/details/105433250

1.6 环境配置

如果每次打开一个新的终端时ROS环境变量都能够自动配置好(即添加到bash会话中),那将会方便很多:

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

如果你安装有多个ROS版本, ~/.bashrc 必须只能 source 你当前使用版本所对应的 setup.bash。

如果你只想改变当前终端下的环境变量,可以执行以下命令:

source /opt/ros/kinetic/setup.bash

如果你使用 zsh,替换其中的 bash, 你可以用以下命令来设置你的shell:

echo "source /opt/ros/kinetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc

1.7 构建依赖

到目前为止,你已经安装了运行核心ROS包所需的内容。为了创建和管理自己的ROS工作区,有各种各样的工具和需求分别分布。例如:rosinstall是一个经常使用的命令行工具,它使你能够轻松地从一个命令下载许多ROS包的源树。

要安装这个工具和其他构建ROS包的依赖项,请运行:

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

1.8 构建工厂状态

你安装的软件包是由ROS 构建工厂构建的。你可以在这里检查单个包的状态。

1.9 测试 ROS

在终端输入roscore
启动ROS环境,如果显示出started core service [/rosout] ,即为安装成功,如下图:
说明 ROS 已经成功安装并配置。
现在要想测试安装是否成功请进入ROS 教程

检验是否成功方法
(1)启动ROS MASTER:

roscore

显示 started core service [/rosout]
(2)重新打开一个终端,我们要启动小海龟仿真器

rosrun turtlesim turtlesim_node

(3)重新打开一个终端哦,开启控制节点,小海龟要动起来

rosrun turtlesim turtle_teleop_key

在上面的终端窗口,按方向键就可以指挥小海龟了。

如果在第三步时小海龟在键盘下不能移动时,可以尝试在第三步之前

source /opt/ros/kinetic/setup.sh

问题应该是环境变量没有配置好,运行之后小海龟可以移动
二、 创建ROS工作空间SLAM

mkdir -p ~/SLAM/src
cd ~/SLAM/src
catkin_init_workspace
cd ..
catkin_make
echo "source ~/SLAM/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

如果出现编译报警情况(如下图):

This workspace contains non-catkin packages in it

CMake Error at /opt/ros/indigo/share/catkin/cmake/catkin_workspace.cmake:95 (message):
  This workspace contains non-catkin packages in it, and catkin cannot build
  a non-homogeneous workspace without isolation.  Try the
  'catkin_make_isolated' command instead.
Call Stack (most recent call first):
  CMakeLists.txt:63 (catkin_workspace)

根据报警提示:

This workspace contains non-catkin packages in it, and catkin cannot build a non-homogeneous workspace without isolation.

该工作空间包含了非catkin类型的package,并且catkin不能编译一个“非同步的工作空间” without isolation
解决方案:

catkin_make_isolated

使用‘catkin_make_isolated’代替‘catkin_make’进行编译,将多余package进行隔离。

出现这个问题是因为我先安装了pangolin,按顺序安装则不会出错。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3 ORB-SLAM2依赖项的安装

所有依赖项放在~/SLAM/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

进入~/SLAM/src
下载Pangolin并配置环境

cd ~/SLAM/src

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

编译并安装Pangolin

cd Pangolin

mkdir build

cd build

cmake ..

make -j4

sudo make install

3.2 安装OpenCV
点击OpenCV Installation查看官方安装指南
我安装的版本为OpenCV 3.2.0版本,支持ORB_SLAM2
最低的OpenCV版本为2.4.3,建议采用OpenCV 2.4.3或者OpenCV 3.2.0。
从OpenCV官网或者Git下载OpenCV2.4.13。
然后安装依赖项:
安装编译工具安装依赖
安装OpenGL

  1. 安装opengl Library
sudo apt-get install libgl1-mesa-dev
  1. 安装opengl utility
sudo apt-get install libglu1-mesa-dev
  1. 安装opengl utility toolkit
sudo apt-get install freeglut3-dev

安装GLEW

sudo apt-get install libglew-dev

安装boost

sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
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

进入~/SLAM/src

cd ~/SLAM/src

OPENCV安装可选,因为ros系统自带OPENCV

(可选)下载 OpenCV 3.2:网址:http://opencv.org/releases.html
从GitHub下载opencv3.2.0,这不是一个 git repository,使用wget。
将下载的OpenCV解压
1、将opencv-3.2.0.zip 文件解压到任意目录(我解压到根目录 ~)

unzip opencv-3.2.0.zip -d ~/ 

2、切换到 OpenCV 3.2 目录下:

cd ~/opencv-3.2.0/

3、建立编译文件目录,并切换到该目录下:

mkdir build
cd build

4、开始编译(… 为上层目录,不可缺少):

cmake ..

如果遇到这样的错误:–

ICV: Downloading ippicv_linux_20151201.tgz... CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file): file DOWNLOAD HASH mismatch

这里(https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20151201/ippicv)下载ippicv_linux_20151201.tgz 并粘贴(替换)到目录opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/
5、make -j4 (-j4表示开启4个线程编译,取决于CPU的速度,比如我make -j7)
make -j4
6、安装:默认安装到 /usr/local 下

sudo make install

配置OpenCV环境变量
配置环境
将opencv的库加入到路径,从而让系统可以找到

sudo vim /etc/ld.so.conf.d/opencv.conf

末尾加入/usr/local/lib,保存退出

sudo ldconfig  

使配置生效

sudo gedit /etc/bash.bashrc 

环境配置添加库路径(方式一):

sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

环境配置添加库路径(方式二):

sudo gedit /etc/ld.so.conf.d/opencv.conf 

//打开后可能是空文件,在文件内容最后添加

/usr/local/lib

更新系统库:

sudo ldconfig

配置bash,执行如下命令

sudo gedit /etc/bash.bashrc  

在末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH

保存退出,然后执行如下命令使得配置生效

sudo source /etc/bash.bashrc

激活配置然后更新database

sudo updatedb  

3.3 安装Eigen3
最低要求版本为3.1.0。在 http://eigen.tuxfamily.org 下载 Eigen 压缩文件,并解压。

下载并解压 Eigen3.3.7 到~/SLAM/src

wget https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.bz2
tar -xjf 3.3.7.tar.bz2

编译安装eigen3.3.7

cd eigen-3.3.7
mkdir build
cd build
cmake ..
make
sudo make install

4 ORB SLAM2 的安装

注意:要安装在工作区的~/SLAM/src文件夹下。

cd ~/SLAM/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

出现问题:usleep未定义:

错误信息:

/home/lwj/SLAM/src/ORB_SLAM2/src/Viewer.cc:159:28: error: ‘usleep’ was not declared in this scope
usleep(3000);
^
CMakeFiles/ORB_SLAM2.dir/build.make:494: recipe for target ‘CMakeFiles/ORB_SLAM2.dir/src/Viewer.cc.o‘ failed
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/Viewer.cc.o] Error 1
CMakeFiles/Makefile2:178: recipe for target ‘CMakeFiles/ORB_SLAM2.dir/all‘ failed
make[1]: *** [CMakeFiles/ORB_SLAM2.dir/all] Error 2
Makefile:83: recipe for target ‘all‘ failed
make: *** [all] Error 2

跟据提示,在ORB_SLAM2中加入头文件 #include<unistd.h>需要在文件中添加

 #include <unistd.h>  

需要增加unistd.h的文件有:

Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc

待编译完成,在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

因为我使用的是rgbd_dataset_freiburg1_xyz序列,所以将TUMX.yaml改为 TUM1.yaml。
我的序列存储路径为:
PATH_TO_SEQUENCE_FOLDER = /home/slam2/Downloads/rgbd_dataset_freiburg1_xyz

例如,我自己的电脑上,该命令变为:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/lwj/SLAM/src/ORB_SLAM2/downloads/rgbd_dataset_freiburg1_xyz

每一项的意思如下
Usage: ./mono_tum path_to_vocabulary path_to_settings path_to_sequence
运行结果如下:

在这里插入图片描述


版权声明:本文为dragunovV原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。