Ubuntu16.04下安装ORB SLAM2

本文主要参考https://blog.csdn.net/radiantjeral/article/details/82193370,对代码中的细节进行了一些修改,同时完善了实时单目SLAM的内容。本文主要针对的是通过usb摄像头实时运行单目ORB SLAM2的情况。

1 准备工作

在安装ORB-SLAM2之前,首先安装必要的工具,vim、cmake、git、gcc、g++

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

2 安装ROS

根据github中的说明https://github.com/raulmur/ORB_SLAM2,ORB SLAM2通常运行于Ubuntu16.04,因此我们安装的是ROS Kinetic Kame。可以根据ROS官网的安装教程http://wiki.ros.org/kinetic/Installation进行安装。本文对官网教程进行了简化,如有需要,请自行查看官网。

2.1 配置Ubuntu存储库

配置Ubuntu存储库,以允许“restricted”,“ Universe”和“ Multiverse”。可以通过“系统设置”->“软件和更新”进行查看。
Ubuntu16.04下安装ORB SLAM2_第1张图片

2.2 设置sources.list

设置计算机以接受来自package.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'

同时也可以使用镜像,ROS网站提供了三个国内的镜像:
1.清华大学(亲测可用)

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'

2.中国科学技术大学

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

3.北京外国语大学

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

2.3 设置密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

如果在连接到密钥服务器时遇到问题,可以尝试用在该命令中用hkp://pgp.mit.edu:80hkp://keyserver.ubuntu.com:80替换。

2.4 安装

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

sudo apt-get update

ROS中有许多不同的库和工具。官方提供了四种默认配置来帮助入门。我们也可以单独安装ROS软件包。这里只列出了桌面完整版(Desktop-Full)安装代码,如果需要安装其他版本,请参考官网或上述的参考博客。

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

2.5 环境设置

为了方便,每次启动新的shell时,将ROS环境变量自动添加到bash会话中

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

2.6 构建软件包的依赖关系

到目前为止,您已经安装了运行核心ROS软件包所需的软件。为了创建和管理您自己的ROS工作区,有各种工具和要求分别分发。例如,rosinstall是一个常用的命令行工具,使您可以通过一个命令轻松下载ROS软件包的许多源代码树。要安装此工具和其他依赖关系以构建ROS软件包,请运行

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

在使用许多ROS工具之前,您需要初始化rosdep。rosdep使您可以轻松地为要编译的源安装系统依赖性,并且需要运行ROS中的某些核心组件。使用以下命令,可以初始化rosdep

sudo rosdep init
rosdep update

2.7 测试ROS

roscore

如果出现started core service [/rosout],说明ROS安装成功。
Ubuntu16.04下安装ORB SLAM2_第2张图片
可按ctrl+c退出。

2.8 创建ROS工作空间

可以根据官网教程http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment创建catkin workspace。

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

此时,会在“src”文件夹中创建一个CMakeLists.txt,同时,在“catkin_ws”文件夹中还有一个“build”文件夹和“devel”文件夹。随后执行

source devel/setup.bash

要确保安装脚本正确覆盖了您的工作区,请确保ROS_PACKAGE_PATH环境变量包含您所在的目录

echo $ROS_PACKAGE_PATH

当返回/home/youruser/catkin_ws/src:/opt/ros/kinetic/share时,说明ROS_PACKAGE_PATH已经配置好了。注意,这里的youruser指的是你的用户名。

3 ORB SLAM2依赖项安装

根据github中的说明https://github.com/raulmur/ORB_SLAM2,ORB SLAM2需要Pangolin,OpenCV,Eigen3,DBoW2和g2o。本文将所有依赖项均安装在~catkin_ws/src中

cd ~/catkin_ws/src

3.1 安装Pangolin

Pangolin网址为https://github.com/stevenlovegrove/Pangolin,根据其上的安装教程进行安装。

sudo apt-get install libglew-dev libpython2.7-dev libboost-dev libboost-thread-dev libboost-filesystem-dev

下载Pangolin并配置环境

git clone https://github.com/stevenlovegrove/Pangolin
cd ..
catkin_make_isolated
source ~/catkin_ws/devel/setup.bash

参考博客中使用的是catkin_make,不过我在使用的时候报错,改为catkin_make_isolated
下面编译并安装Pangolin

cd ~/catkin_ws/src/Pangolin
mkdir build
cd build
cmake ..
make -j4
sudo make install

3.2 安装OpenCV

OpenCV网址为 http://opencv.org,ORB SLAM2要求最低为2.4.3,测试过的为2.4.11和3.2。参考博客中安装的是2.4.13,因此本文也安装了2.4.13。
首先安装依赖项

cd ~/catkin_ws/src
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

下载opencv

wget https://github.com/Itseez/opencv/archive/2.4.13.zip
unzip 2.4.13.zip

编译并安装opencv

cd opencv-2.4.13
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 
make -j4
sudo make install

配置环境,将opencv的库加入路径

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

此时在打开的文件中加入/usr/loacl/lib,保存退出

sudo ldconfig
sudo gedit /etc/bash.bashrc

此时在打开的文件末尾加入PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH,保存退出

cd ~/catkin_ws/src
sudo source /etc/bash.bashrc

如果失败,可以尝试

su
source /etc/bash.bashrc
Ctrl+d
sudo updatedb

如果su命令失败,可以再自行百度。参考博客中有opencv的测试,可以参考。这里给出我所用的程序和图片。Ubuntu16.04下安装ORB SLAM2_第3张图片
C++代码为

#include  
#include  
using namespace cv;
int main( ) {
Mat image; 
//youruser按照自己的目录
image = imread("/home/youruser/catkin_ws/1.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; 
}

CMakeList.txt为

cmake_minimum_required(VERSION 2.8)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "-std=c++14 -O3")

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(1 1.cpp)
target_link_libraries(1 ${OpenCV_LIBS})

3.3 安装Eigen3

Eigen网址为http://eigen.tuxfamily.org,ORB SLAM2要求最低为3.1.0。参考博客中使用的是3.2.10,本文也使用3.2.10。下载并解压Eigen

cd ~/catkin_ws/src
wget https://bitbucket.org/eigen/eigen/get/3.2.10.tar.bz2
tar -xjf 3.2.10.tar.bz2

解压后的文件名称较长,将其重命名为eigen-3.2.10

mv eigen-eigen-b9cd8366d4e8/ eigen-3.2.10

编译并安装Eigen

cd eigen-3.2.10
mkdir build
cd build
cmake ..
make -j4
sudo make install

由于DBoW2和g2o包含在ORB SLAM2的Thirdparty中,因此不需要我们手动安装。

4 安装ORB SLAM2

cd ~/catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

打开build.sh文件

cd ORB_SLAM2
gedit build.sh

将所有的make -j改为make -j4

chmod +x build.sh
./build.sh

5 运行ORB SLAM2

至此,已经可以在电脑上运行ORB SLAM2了。作者提供了TUM Dataset,KITTI Dataset,EuRoC Dataset上的数据集以供验证。您可以根据github上提供的信息https://github.com/raulmur/ORB_SLAM2运行ORB SLAM2,这里只说明单目数据TUM Dataset中freiburg1的运行情况。
首先,从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载序列freiburg1并解压缩,建议将其移动至~/catkin_ws/src
其次,执行下面的命令。针对freiburg1,freiburg2和freiburg3序列分别将TUMX.yaml更改为TUM1.yaml,TUM2.yaml或TUM3.yaml。将PATH_TO_SEQUENCE_FOLDER更改为未压缩的序列文件夹路径。

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

freiburg1对应的代码为

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ~/catkin_ws/src/rgbd_dataset_freiburg1_xyz

6 安装ROS实例

根据github网站上的说明https://github.com/raulmur/ORB_SLAM2,首先要将包括Examples / ROS / ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量。打开.bashrc文件,并在末尾添加以下行。用ORB_SLAM2的文件夹路径替换PATH

cd ~
gedit .bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

这里的路径PATH建议是/home/youruser/catkin_ws...而不是~/catkin_ws...,不然会报错,现在也不知道是为什么,等搞懂了再补充原因
由于后续会使用usb_cam,该节点发布的话题为/usb_cam/image_raw,而ORB SLAM2默认订阅的话题是/camera/image_raw,因此我们首先对其进行修改

cd ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/orb_slam2/src
gedit ros_mono.cc

对第64行的/camera/image_raw修改为/usb_cam/image_raw

然后执行build_ros.sh,这里也可以将build_ros.sh里的make -j改为make -j4

cd ~/catkin_ws/src/ORB_SLAM2
gedit build_ros.sh
chmod +x build_ros.sh
./build_ros.sh

7 安装usb_cam

由于要使用usb摄像头作为输入,因此使用ROS的usb_cam,其网址为https://github.com/bosch-ros-pkg/usb_cam。下载usb_cam并配置环境

cd ~/catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make_isolated
source ~/catkin_ws/devel/setup.bash

编译usb_cam

cd src/usb_cam
mkdir build
cd build
cmake ..
make

下面测试一下usb摄像头
1.打开新的终端,运行roscore

roscore

2.打开launch文件,根据摄像头编号对文件进行修改。一般笔记本自身的摄像头是video0,usb摄像头是video1。

cd ~/catkin_ws/src/usb_cam/launch
gedit launch

3.运行测试。

cd ~/catkin_ws/src/usb_cam/launch
roslaunch usb_cam usb_cam-test.launch

若成功显示图像,说明运行正确。可以使用ctrl+c中断程序。
在我测试时,出现了报错,因此需要多加一行代码

source /home/youruser/catkin_ws/devel/setup.bash
cd ~/catkin_ws/src/usb_cam/launch
roslaunch usb_cam usb_cam-test.launch

为了不必每次均输入source命令,将该行代码写入.bashrc

cd ~
gedit .bashrc

在最后一行添加source /home/youruser/catkin_ws/devel/setup.bash,此后就不必每次输入该行代码了。

8 相机校准

如果已知相机内参,可直接对Asus.yaml进行修改。如果不知道内参,可以通过matlab、opencv等多种方式计算内参。这里提供一种ROS提供的单目相机校准,http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration。
当完成内参计算后,进入/tmp,将标定的压缩包calibrationdata.tar.gz解压,打开ost.yaml,根据相机内参对~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml进行修改。

9 实时运行ORB SLAM2

根据github网站上的说明https://github.com/raulmur/ORB_SLAM2,可以通过以下代码实时运行SLAM

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

根据我们所安装的路径,代码为

cd ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2
rosrun ORB_SLAM2 Mono ~/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

10 总结

本文主要针对的是实时单目ORB SLAM2的安装和运行。通过以上步骤,便可实时/离线运行ORB SLAM2。当您重新打开电脑时,使用已有数据集运行ORB SLAM2的代码是:

cd ~/catkin_ws/src/ORB_SLAM2
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/wangyifan/catkin_ws/src/rgbd_dataset_freiburg1_xyz

当您重新打开电脑时,实时运行单目ORB SLAM2的代码是:

#打开第一个终端,开启ROS
cd ~
roscore

#打开第二个终端,调用摄像头
cd ~/catkin_ws/src/usb_cam/launch
roslaunch usb_cam usb_cam-test.launch

#打开第三个终端,标定单目摄像头
#其中size是棋盘内角点的个数,square是棋盘单个小格的边长
rosrun camera_calibration cameracalibrator.py --size 7x5 --square 0.005 image:=/usb_cam/image_raw camera:=/usb_cam
#进入/tmp,将标定的压缩包解压,取出ost.yaml放入~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/,内有相机内参,并和原文件Asus.yaml合并

#打开第四个终端,运行实时SLAM
cd ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2
rosrun ORB_SLAM2 Mono ~/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

你可能感兴趣的:(slam)