Ubuntu16.04下配置ORB-SLAM2
本文記錄了 ORB-SLAM2 在Ubuntu16.04下的安裝過程。
安裝環境:
- Xenial (Ubuntu 16.04) amd64
- ROS Kinetic Kame
- 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都帶有gcc
和g++
接下來將安裝 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.”的軟體源,可以根據下面的連結配置:
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 已經成功安裝並配置
###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-SLAM2
的make -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
稍後給出