1. 程式人生 > >Ubuntu16.04下配置ORB-SLAM2

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) 上的安裝和測試過程。
點選[這裡](http://wiki.ros.org/kinetic/Installation/Ubuntu"optional title here"),檢視 ROS 官網的 ROS Kinetic Kame 安裝手冊。

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.

一般地,這是系統預設設定,如下圖所示:

這裡寫圖片描述

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](http://wiki.ros.org/ROS/Installation/UbuntuMirrors/“optional title here”)

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](http://answers.ros.org/question/203610/ubuntu-14042-unmet-dependencies/“optional title here”) 或者 [launchpad issue](https://bugs.launchpad.net/ubuntu/trusty/+source/mesa/+bug/1424059/“optional title here”) 解決問題。


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
[email protected]:~/catkin_ws$ 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的庫加入到路徑,從而讓系統可以找到

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

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

sudo ldconfig    

使配置生效

sudo gedit /etc/bash.bashrc 

末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
儲存退出

sudo source /etc/bash.bashrc  #使配置生效
[email protected]:~/catkin_ws/src$ sudo source /etc/bash.bashrc 
[sudo] password for slam2: 
sudo: source: command not found

該步驟可能會報錯找不到命令,原因是source是root命令

su  #(進入root許可權)

輸入密碼

source /etc/bash.bashrc
Ctrl+d  #(推遲root)
sudo updatedb #更新database

測試例項

//檔名字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;
}

編譯

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_tumVocabulary/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

稍後給出