Ubuntu 16.04 ORB_SLAM2+ROS+ORB-SLAM配置

ORB-SLAM2是不完全依赖ROS的,它有两个编译选项,对应两个脚本文件build.sh和build_ros.sh。编译前者你只能跑一些数据集,当然有能力的改改源码也是可以跑自己的设备的;编译后者则可以利用ROS很方便地接入自己的设备。ORB-SLAM2支持Monocular、Stereo、RGB-D相机。ORB-SLAM1是依赖于ROS运行的,
安装可以遵循https://github.com/raulmur/ORB_SLAM2和https://github.com/raulmur/ORB_SLAM。
具体安装过程结合许多博客的经验,避免了一些莫名其妙的错误。
过程分几步进行:
1.先搭建ROS-kinetic
2.然后创建ROS工作空间
3. 修改部分文件内容
4. 在ROS工作空间里安装ORB-SLAM和ORB-SLAM2的依赖项,如pangonglin,opencv,Eigen3
g2o,DBoW2。
5. 开始编译
6.运行测试

一、搭建ROS-kinetic
1 准备工作

在开始配置ORB-SLAM2之前,有若干工具是需要提前安装的,即vim、cmake、git、gcc、g++。
sudo apt-get install vim git cmake -y
sudo apt-get install gcc g++ -y12
-y表示自动安装,不需要每项手动确认输入 Yes
一般地,完整版的Ubuntu都带有gcc和g++
接下来将安装 ROS Kinetic Kame
2 ROS Kinetic Kame 的安装和配置
下面我将给出 ROS Kinetic Kame 在 Xenial (Ubuntu 16.04) 上的安装和测试过程。
2.1 配置Ubuntu软件中心
配置Ubuntu要求允许接受”restricted,” “universe,” and “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.
一般地,这是系统默认设置,如下图所示:
Ubuntu 16.04 ORB_SLAM2+ROS+ORB-SLAM配置

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 0xB01FA11612
如果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’

2.3 设置的**
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA1161
如果你在连接秘钥服务器时遇到问题,你可以在上面的命令中替换链接为hkp://pgp.mit.edu:80或者hkp://keyserver.ubuntu.com:80
2.4 安装
首先,更新Debian包索引
sudo apt-get update1
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 的包依赖关系。修复包依赖关系即可解决该问题。
2.5初始化rosdep
在开始使用ROS之前你还需要初始化rosdep。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。
sudo rosdep init
rosdep update

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 #(使环境变量设置立即生效)
2.7 安装 rosinstall
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential -y
2.8 测试 ROS
终端输入roscore
启动ROS环境,如果显示出started core service [/rosout] ,即为安装成功,如下图:
说明 ROS 已经成功安装并配置.
Ubuntu 16.04 ORB_SLAM2+ROS+ORB-SLAM配置
报错:
Ubuntu 16.04 ORB_SLAM2+ROS+ORB-SLAM配置
解决办法:

在打开的文档最后加上
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
保存即可
检验是否成功方法
(1)启动ROS MASTER:
roscore

显示 started core service [/rosout]
(2)重新打开一个终端,我们要启动小海龟仿真器
rosrun turtlesim turtlesim_node
(3)重新打开一个终端哦,开启控制节点,小海龟要动起来
rosrun turtlesim turtle_teleop_key
在上面的终端窗口,按方向键就可以指挥小海龟了。
二、 创建ROS工作空间SLAM
mkdir -p ~/SLAM/src
cd ~/SLAM/src
catkin_init_workspace
cd …
catkin_make
echo “source ~/SLAM/devel/setup.bash” >> ~/.bashrc
source ~/.bashrc
三、 下载源码及 修改部分文件内容
cd ~/SLAM/src
git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM1
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2123

虽然我们前面按照README安装了ORB-SLAM所有的依赖库,但编译过程中难免还是会遇到各种各样的问题,接下来根据编译过程中遇到过的问题列出以下修改意见:
(1)在ORB_SLAM1文件夹下有个manifest.xml文件,将里面的这一行删掉或注释掉。
(2)打开ORB_SLAM1/src文件夹下的ORBextractor.cc文件,添加两个头文件:
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/imgproc/imgproc.hpp>12
修改以上两条的原因是ROS-kinetic版本自带OpenCV3 。
(3)打开ORB_SLAM1/Thirdparty/g2o/g2o/solvers文件夹下的linear_solver_eigen.h文件,找到typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;,将其改为typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> PermutationMatrix;,原因是Ubuntu16.04安装的Eigen库与源码自带的g2o库产生了一些不兼容的问题。
(4)打开ORB_SLAM1文件夹下的CMakeLists.txt,在target_link_libraries()中后面添加两个库文件:
/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so12

(5)打开ORB_SLAM2/Examples/ROS/ORB_SLAM2文件夹下的CMakeLists.txt,在set(LIBS …)中后面同样添加上述的两个库文件。
修改以上两条的原因是编译过程中可能会遇到cmake找不到libboost_system.so和libboost_filesystem.so的情况,也许你不会遇到。当然,上面两个库的路径要根据自己的实际情况进行适当修改,可以通过$ locate libboost_system.so来进行定位。

四、ORB-SLAM2依赖项的安装
所有依赖项放在~/SLAM/src目录下,便于管理。
4.1 安装Pangolin,用于可视化和用户接口
安装依赖库
sudo apt-get install libglew-dev libpython2.7-dev libboost-dev libboost-thread-dev libboost-filesystem-dev -y1

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

cd ~/SLAM/src

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

cd Pangolin

mkdir build

cd build

cmake …

make

sudo make install

4.2安装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.bz212
得到eigen-eigen-b9cd8366d4e8目录,重命名eigen-3.2.10
mv eigen-eigen-b9cd8366d4e8/ eigen-3.2.101
编译安装eigen3.2.10
cd eigen-3.2.10/
mkdir build
cd build
cmake …
sudo make install
五、 开始编译
(1)编译ORB-SLAM1
cd ~/SLAM/src/ORB_SLAM1/Thirdparty/DBoW2/
mkdir build
cd build
cmake … -DCMAKE_BUILD_TYPE=Release
make

cd ~/SLAM/src/ORB_SLAM1/Thirdparty/g2o/
mkdir build
cd build
cmake … -DCMAKE_BUILD_TYPE=Release
make

cd ~/SLAM/src/ORB_SLAM1/
mkdir build
cd build
cmake … -DROS_BUILD_TYPE=Release
make
(2)编译ORB-SLAM2(由于电脑问题,将x build.sh和x buildros.sh的make -j改为make,否则会死机)
cd ~/SLAM/src/ORB_SLAM2/
chmod +x build.sh
./build.sh

chmod +x build_ros.sh
./build_ros.sh
编译ROS选项的时候均不需要设置ROS_PACKAGE_PATH,因为源码就在ROS的工作空间里。不出意外的话,编译可顺利通过!
六、 运行单目SLAM实例
EuRoC Dataset
Download a sequence (ASL format) from http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
我下载了MH_04_difficult.zip数据集,解压后得到mav0。
在终端输入
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt 运行。