Ubuntu16.04下的ORB SLAM2环境搭建教程

最近因为项目需要配置了ORB SLAM2环境,网上找来的各种教程很多都是不全面的,各种缺失依赖项,痛苦踩坑。现在整理一份详细的环境搭建策略,供大家参考学习,有问题的话欢迎一起讨论交流。

ORB SLAM2整体框架代码下载的官方网址: https://github.com/raulmur/ORB_SLAM2
官方也提供了一些安装教程和策略,不过不太直观,比较粗略。
参考博客:
https://blog.csdn.net/RadiantJeral/article/details/82193370
https://www.cnblogs.com/liu-fa/p/5779206.html

ORB-SLAM2是一套完整的SLAM方案,它能够实现地图重用,回环检测和重新定位的功能。ORB-SLAM2在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法允许米制比例尺的轨迹精确度评估。此外,ORB-SLAM2包含一个轻量级的定位模式,该模式能够在允许零点漂移的条件下,利用视觉里程计来追踪未建图的区域并且匹配特征点。
官方提供了在KITTI数据集,TUM数据集,以及在EuRoC数据集中单目,双目和RGB-D三种接口的SLAM系统示例,同时也提供了使用ROS节点来处理实时的SLAM示例。

环境搭建目录

    • 1 、安装必要工具
    • 2 、安装与配置ROS Kinetic Kame
      • 2.1 配置Ubuntu软件中心
      • 2.2 设置sources.list(软件源)
      • 2.3 安装 ROS Kinetic
      • 2.4 设置环境
      • 2.5 测试 ROS
      • 2.6 创建 ROS 工作空间
    • 3 、安装ORB-SLAM2依赖项
      • 3.1 安装Pangolin,用于可视化和用户接口
      • 3.2 安装OpenCV
      • 3.3 安装Eigen3
    • 4 、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
sudo apt-get install git 

-y表示自动安装,不需要每项手动确认输入 Yes

2 、安装与配置ROS Kinetic Kame

ROS官网链接:http://wiki.ros.org/kinetic/Installation/Ubuntu"optional title here"
可查看ROS Kinetic Kame 安装手册。
ROS Kinetic ONLY supports Wily (Ubuntu 15.10), Xenial (Ubuntu 16.04) and Jessie (Debian 8) for debian packages.

由于实时SLAM需要配合ROS平台使用,建议先安装ROS平台,在ROS工作空间中配置ORB SLAM2。后续再搭建非实时SLAM的工程(不需ROS平台也能运行)会变得非常容易。

2.1 配置Ubuntu软件中心

配置Ubuntu要求允许接受”restricted” “universe” 和 “multiverse”的软件源,一般是系统默认设置,可以在Software & Updates 中查看。

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

2.3 安装 ROS Kinetic

首先更新Debian包索引,确保系统软件处于最新版,命令行:

sudo apt-get update

ROS Kinetic 含有多种库和工具,也有很多版本,比如工业版,基础版,高级版,豪华版,至尊豪华…
也可以依据自己的需求进行个性化安装。
我这里安装的是桌面完整版,命令行如下,安装完成后可用后可查看能使用的包:

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

2.4 设置环境

使用apt-get方式在 Ubuntu上安装 ROS,在使用前需要激活/opt/ros/kinetic/目录下的setup.bash文件来添加 ROS 环境变量,命令如下:

source /opt/ros/kinetic/setup.bash

在每次打开一个新的 shell 时,都需要使用上述命令激活setup.bash文件。这样很繁琐。
因此,可以添加 ROS 的环境变量,当打开新的shell时,bash会话中就会自动添加环境变量,命令如下:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc #(使环境变量设置立即生效)

上面两句非常非常非常重要,后续如果出现找不到 Package,找不到node的错误,很多情况下都是因为没有添加source。
之后安装几个常用的插件:

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

2.5 测试 ROS

启动ROS环境,命令行:

roscore

如果显示出started core service [/rosout] ,说明 ROS 已经成功安装并配置。

2.6 创建 ROS 工作空间

现在开始创建ROS工作空间 catkin workspaces,命令行如下:

mkdir -p ~/catkin_ws/src  #在home下新建文件夹catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make #编译工作空间
source devel/setup.bash

Tips. 如果catkin_make执行后报错:
This workspace contains non-catkin packages in it, and catkin cannot build a non-homogeneous workspace without isolation.
可以将catkin_make命令替换为catkin_make_isolated

3 、安装ORB-SLAM2依赖项

注意,这里所有依赖项的安装与配置皆在~/catkin_ws/src 目录下完成,即ROS工作空间catkin workspaces,便于管理。

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依赖包,命令行如下:

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,并将下载的OpenCV解压,命令行如下:

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的库加入到路径,从而让系统可以找到:

Tips. 如果直接双击文件进行修改,在没有权限的情况下会报错:
You do not have the permissions necessary to save the file. Please check that you typed the location correctly and try again.
此时需使用sudo gedit命令打开进行编辑。

执行以下命令行:

cd /etc/ld.so.conf.d/
touch opencv.conf  #新建文件opencv.conf
sudo gedit /etc/ld.so.conf.d/opencv.conf #编辑文件内容

在文件末尾加入/usr/local/lib,保存并退出。执行命令行使配置生效:

sudo ldconfig    #使配置生效

继续配置环境变量,编辑.bashrc文件,执行命令行:

sudo gedit /etc/bash.bashrc 

在文件末尾加入PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH,保存并退出。
执行命令行使配置立刻生效:

sudo source /etc/bash.bashrc  #使配置生效

Tips. 该步骤我运行时报错找不到命令,sudo: source: command not found 原因是source是root命令,没有权限,输入以下命令行解决问题:
su #进入root权限,输入密码
source /etc/bash.bashrc
#按键盘的Ctrl+d ,推迟root
sudo updatedb #更新database

下面可以写一个测试代码,验证OpenCV是否已经配置成功。随便找一张图像,放在某路径下,测试代码我这里起名为Rina.cpp:

#include 
#include 
using namespace cv;

int main( )
{
    Mat image;

    #将下面的路径替换为自己的图片路径
    image = imread("/home/rina/catkin_ws/src/Rina.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;
}

编译上述代码并运行:

g++ Rina.cpp -o Rina.o  `pkg-config --cflags --libs opencv`  #编辑,生成.o文件
./Rina.o  #运行

如果能够正确实现图像导入显示功能,则证明OpenCV已正确安装并配置。

3.3 安装Eigen3

Eigen3最低要求版本为3.1.0,下载并解压 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
mv eigen-eigen-b9cd8366d4e8/ eigen-3.2.10   #得到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 的安装

从官网下载ORB SLAM2安装包,执行命令行:

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,加快其编译速度,并执行build.sh:

sudo gedit build.sh
./build.sh

编译完成后,在ROS工作空间中就成功安装与配置了ORG-SLAM2项目,下一个博客会继续总结官方单目、RGB-D示例分别在C++与ROS平台上运行的具体教程。

Tips. 如果想在C++平台下运行非实时的SLAM工程(不使用ROS平台),则无需在ROS工作空间下进行ORB SLAM2的搭建,可以在任意路径下搭建ORB SLAM2,直接执行如下命令行:
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
在ROS工作空间中需要使用rosrun运行代码,如果采用C++平台下的运行方式,由于二者配置库不同会导致定位结果精度非常差的现象,吾等新手还是建议仔细按照官方说明https://github.com/raulmur/ORB_SLAM2进行例程的复现,尤其需要注意C++与ROS的区别。

每天都在努力学习新知识的乔木同学
记于2019.11.01

你可能感兴趣的:(环境搭建,ORB,SLAM2)