本文记录了 ORB-SLAM2 在Ubuntu16.04下的安装过程。
安装环境:
- Xenial (Ubuntu 16.04) amd64
- ROS Kinetic Kame
- ORB-SLAM2
在开始配置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
下面我将给出 ROS Kinetic Kame 在 Xenial (Ubuntu 16.04) 上的安装和测试过程。
点击[这里](http://wiki.ros.org/kinetic/Installation/Ubuntu"optional title here"),查看 ROS 官网的 ROS Kinetic Kame 安装手册。
配置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.
一般地,这是系统默认设置,如下图所示:
设置你的计算机从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.
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
首先,更新Debian包索引
sudo apt-get update
ROS含有多种库和工具。官网提供了4种默认配置的安装供你选择。你也可以依据自己需求进行个性化安装。
sudo apt-get install ros-kinetic-desktop-full
sudo apt-get install ros-kinetic-desktop
sudo apt-get install ros-kinetic-ros-base
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”) 解决问题。
使用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/
/setup.bash 使用 ROS distribution 的短名称替换
如果我们想切换到 ROS Indigo Igloo :
$ source /opt/ros/indigo/setup.bash
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential -y
之后注意在安装其他ROS插件时记得把ros-×××中的×××
替换成kinetic,如下:
sudo apt-get install ros-kinetic-...
启动ROS环境,如果显示出started core service [/rosout]
,即为安装成功,如下图:
说明 ROS 已经成功安装并配置
我们开始创建 catkin workspaces
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
slam1a@slam2-vm:~/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
。
所有依赖项放在
~/catkin_ws/src
目录下,便于管理。
安装依赖库
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
点击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 #使配置生效
slam2@slam2-vm:~/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
#include
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.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
注意:要安装在工作区的
~/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是否正确安装。
在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_tum Vocabulary/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
同样地,注意:要安装在工作区的
~/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文件,打开之后内容如下:
其中video_device的默认设备为video0,可以根据情况更改。
如果不了解自己的usb摄像头为video几,可以运行如下命令查看:
ls /dev/video*
usb_cam用于实时SLAM,配合ROS平台使用
稍后给出