计算机操作系统:Ubuntu16.04
机器人系统:ROS-kinetic
ORB-SLAM源码的地址为:
https://github.com/raulmur/ORB_SLAM
下载后,将其解压到自己的ROS工作空间中,将解压后的一级文件夹命名为“ORB_SLAM”。
TUM数据集的下载地址为:
https://vision.in.tum.de/data/datasets/rgbd-dataset/download
下载文件格式为.bag的文件。运行ORB_SLAM时,会用到此类文件。比如下载的文件名为test.bag。
编译ORB_SLAM之前需要安装一些必要的依赖库,有Boost、Eigen3、OpenCV、 g2o、DBoW2。下面分别介绍各自安装方法。
Boost库用来启动SLAM系统的不同线程,其安装过程只需一条命令:
sudo apt-get install libboost-all-dev
为了编译g2o,需要安装Eigen3,其安装过程只需一条命令:
sudo apt-get install libeigen3-dev
安装机器人系统ROS-kinetic时,会顺带安装OpenCV3,所以OpenCV的安装可以忽略。
我们使用g2o的修改版本来执行优化,不用到网上下载g2o库源码。当我们下载了ORB_SLAM的源码时,g2o库在ORB_SLAM文件夹下,其具体的路径为 ~/ORB_SLAM/Thirdparty/g2o。终端进入其路径下,逐条执行以下命令:
mkdir build
cd build
cmake ..
make
用DBoW2的一些组件来进行位置识别和功能匹配。编译DBoW2没有其他依赖项。DBoW2也在ORB_SLAM文件夹下,其路径为 ~/ORB_SLAM/Thirdparty/DBoW2。终端进入其路径下,逐条执行以下命令:
mkdir build
cd build
cmake ..
make
1.在ORB_SLAM文件夹下有个manifest.xml文件,将里面的如下代码删除或注释。修改原因是使用了ROS-kinetic版本自带OpenCV3。
<depend package="opencv2"/>
2.打开ORB_SLAM/src文件夹下的ORBextractor.cc文件,添加如下两个头文件,修改原因是使用了ROS-kinetic版本自带OpenCV3。
#include
#include
3.打开ORB_SLAM/Thirdparty/g2o/g2o/solvers文件夹下的linear_solver_eigen.h文件,找到:
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;
将这一句代码用以下代码替换:
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> PermutationMatrix;
修改原因是Ubuntu16.04安装的Eigen库与源码自带的g2o库产生了一些不兼容的问题。
4.打开ORB_SLAM文件夹下的CMakeLists.txt,在target_link_libraries()中添加两个库文件:
/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
修改原因是编译中可能会遇到cmake找不到libboost_system.so和libboost_filesystem.so的情况。这两个库的路径要根据自己的实际情况进行适当修改,终端输入locate libboost_system.so指令来进行定位。
进入到ORB_SLAM目录下,在终端逐条执行以下命令:
mkdir build
cd build
cmake ..
make
1.此步骤只需在第一次运行时执行。解压ORBvoc.txt.tar.gz,打开终端,逐条执行以下命令:
roscd ORB_SLAM
cd Data/
tar zxvf ORBvoc.txt.tar.gz
2.打开终端,执行命令:
roscore
3.重开终端,执行命令:
roslaunch ORB_SLAM ExampleGroovyOrNewer.launch
4.重开终端,进入test.bag文件目录下,执行命令:
rosbag play --pause test.bag
步骤3的命令等价于以下三个命令:
rosrun ORB_SLAM ORB_SLAM Data/ORBvoc.txt Data/Settings.yaml
rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
rosrun rviz rviz -d Data/rviz.rviz