最近因为项目需要配置了ORB SLAM2环境,网上找来的各种教程很多都是不全面的,各种缺失依赖项,痛苦踩坑。现在整理一份详细的环境搭建策略,供大家参考学习,有问题的话欢迎一起讨论交流。
ORB SLAM2整体框架代码下载的官方网址: https://github.com/raulmur/ORB_SLAM2
官方也提供了一些安装教程和策略,不过不太直观,比较粗略。
参考博客:
https://blog.csdn.net/RadiantJeral/article/details/82193370
https://www.cnblogs.com/liu-fa/p/5779206.html
ORB-SLAM2是一套完整的SLAM方案,它能够实现地图重用,回环检测和重新定位的功能。ORB-SLAM2在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法允许米制比例尺的轨迹精确度评估。此外,ORB-SLAM2包含一个轻量级的定位模式,该模式能够在允许零点漂移的条件下,利用视觉里程计来追踪未建图的区域并且匹配特征点。
官方提供了在KITTI数据集,TUM数据集,以及在EuRoC数据集中单目,双目和RGB-D三种接口的SLAM系统示例,同时也提供了使用ROS节点来处理实时的SLAM示例。
在开始配置ORB-SLAM2之前,有若干工具是需要提前安装的,即vim、cmake、git、gcc、g++。
安装工具命令行:
sudo apt-get install vim git cmake -y
sudo apt-get install gcc g++ -y
sudo apt-get install git
-y表示自动安装,不需要每项手动确认输入 Yes
ROS官网链接:http://wiki.ros.org/kinetic/Installation/Ubuntu"optional title here"
可查看ROS Kinetic Kame 安装手册。
ROS Kinetic ONLY supports Wily (Ubuntu 15.10), Xenial (Ubuntu 16.04) and Jessie (Debian 8) for debian packages.
由于实时SLAM需要配合ROS平台使用,建议先安装ROS平台,在ROS工作空间中配置ORB SLAM2。后续再搭建非实时SLAM的工程(不需ROS平台也能运行)会变得非常容易。
配置Ubuntu要求允许接受”restricted” “universe” 和 “multiverse”的软件源,一般是系统默认设置,可以在Software & Updates 中查看。
设置计算机从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
首先更新Debian包索引,确保系统软件处于最新版,命令行:
sudo apt-get update
ROS Kinetic 含有多种库和工具,也有很多版本,比如工业版,基础版,高级版,豪华版,至尊豪华…
也可以依据自己的需求进行个性化安装。
我这里安装的是桌面完整版,命令行如下,安装完成后可用后可查看能使用的包:
sudo apt-get install ros-kinetic-desktop-full
apt-cache search ros-kinetic
使用apt-get方式在 Ubuntu上安装 ROS,在使用前需要激活/opt/ros/kinetic/目录下的setup.bash文件来添加 ROS 环境变量,命令如下:
source /opt/ros/kinetic/setup.bash
在每次打开一个新的 shell 时,都需要使用上述命令激活setup.bash文件。这样很繁琐。
因此,可以添加 ROS 的环境变量,当打开新的shell时,bash会话中就会自动添加环境变量,命令如下:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc #(使环境变量设置立即生效)
上面两句非常非常非常重要,后续如果出现找不到 Package,找不到node的错误,很多情况下都是因为没有添加source。
之后安装几个常用的插件:
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential -y
启动ROS环境,命令行:
roscore
如果显示出started core service [/rosout] ,说明 ROS 已经成功安装并配置。
现在开始创建ROS工作空间 catkin workspaces,命令行如下:
mkdir -p ~/catkin_ws/src #在home下新建文件夹catkin_ws/src
cd ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make #编译工作空间
source devel/setup.bash
Tips. 如果catkin_make执行后报错:
This workspace contains non-catkin packages in it, and catkin cannot build a non-homogeneous workspace without isolation.
可以将catkin_make
命令替换为catkin_make_isolated
。
注意,这里所有依赖项的安装与配置皆在~/catkin_ws/src 目录下完成,即ROS工作空间catkin workspaces,便于管理。
安装依赖库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依赖包,命令行如下:
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,并将下载的OpenCV解压,命令行如下:
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的库加入到路径,从而让系统可以找到:
Tips. 如果直接双击文件进行修改,在没有权限的情况下会报错:
You do not have the permissions necessary to save the file. Please check that you typed the location correctly and try again.
此时需使用sudo gedit
命令打开进行编辑。
执行以下命令行:
cd /etc/ld.so.conf.d/
touch opencv.conf #新建文件opencv.conf
sudo gedit /etc/ld.so.conf.d/opencv.conf #编辑文件内容
在文件末尾加入/usr/local/lib
,保存并退出。执行命令行使配置生效:
sudo ldconfig #使配置生效
继续配置环境变量,编辑.bashrc文件,执行命令行:
sudo gedit /etc/bash.bashrc
在文件末尾加入PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
,保存并退出。
执行命令行使配置立刻生效:
sudo source /etc/bash.bashrc #使配置生效
Tips. 该步骤我运行时报错找不到命令,
sudo: source: command not found
原因是source是root命令,没有权限,输入以下命令行解决问题:
su #进入root权限,输入密码
source /etc/bash.bashrc
#按键盘的Ctrl+d ,推迟root
sudo updatedb #更新database
下面可以写一个测试代码,验证OpenCV是否已经配置成功。随便找一张图像,放在某路径下,测试代码我这里起名为Rina.cpp:
#include
#include
using namespace cv;
int main( )
{
Mat image;
#将下面的路径替换为自己的图片路径
image = imread("/home/rina/catkin_ws/src/Rina.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++ Rina.cpp -o Rina.o `pkg-config --cflags --libs opencv` #编辑,生成.o文件
./Rina.o #运行
如果能够正确实现图像导入显示功能,则证明OpenCV已正确安装并配置。
Eigen3最低要求版本为3.1.0,下载并解压 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
mv eigen-eigen-b9cd8366d4e8/ eigen-3.2.10 #得到eigen-eigen-b9cd8366d4e8目录,并将其重命名为eigen-3.2.10
编译安装eigen3.2.10,命令行如下:
cd eigen-3.2.10/
mkdir build
cd build
cmake ..
make
sudo make install
从官网下载ORB SLAM2安装包,执行命令行:
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,加快其编译速度,并执行build.sh:
sudo gedit build.sh
./build.sh
编译完成后,在ROS工作空间中就成功安装与配置了ORG-SLAM2项目,下一个博客会继续总结官方单目、RGB-D示例分别在C++与ROS平台上运行的具体教程。
Tips. 如果想在C++平台下运行非实时的SLAM工程(不使用ROS平台),则无需在ROS工作空间下进行ORB SLAM2的搭建,可以在任意路径下搭建ORB SLAM2,直接执行如下命令行:
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
在ROS工作空间中需要使用rosrun运行代码,如果采用C++平台下的运行方式,由于二者配置库不同会导致定位结果精度非常差的现象,吾等新手还是建议仔细按照官方说明https://github.com/raulmur/ORB_SLAM2进行例程的复现,尤其需要注意C++与ROS的区别。
每天都在努力学习新知识的乔木同学
记于2019.11.01