整个安装过程基本是参考了博客:

https://blog.csdn.net/qq_42585108/article/details/105519029

总体来说还算顺利。

其中遇到一些问题在此做个记录:

一、安装工具

在配置过程中需要cmake、gcc、g++和Git工具。可在终端通过以下命令下载。

(1)更新apt库,更新软件列表

sudo apt-get update

(2)安装git,用于从Github上克隆项目到本地

sudo apt-get install git

(3)安装cmake,用于程序的编译

sudo apt-get install cmake

(4)安装gcc、g++

sudo apt-get install g++ 
sudo apt-get install gcc

这些其实安装ROS的时候都有了,基本不需要重新安装

二、安装Pangolin作为可视化和用户界面

(1)安装依赖项

sudo apt-get install libglew-dev libpython2.7-dev

(2)从Github将项目下载到本地

git clone https://github.com/stevenlovegrove/Pangolin.git

(3)编译安装

cd Pangolin
mkdir build
cd build
cmake ..
make -j
sudo make install

在原博客中这里似乎是没有问题的,但是我在编译的时候报了一系列的警告,虽然最后编译通过了,但是感觉还是有点奇怪
在这里插入图片描述
不知道后面发生的问题是不是跟这里有关系。

三、安装OpenCV ,用于处理图像和特征

(1)安装依赖项

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

(2)在OpenCV官网(http://opencv.org)下载OpenCV 3.4.1的source版本,然后解压到本地或者用命令下载如下

wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip

(3)编译安装

cd ~/opencv-3.4.1
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release –D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8
sudo make install

(4)配置一些OpenCV的编译环境

1.sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到

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

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加

/usr/local/lib

保存回到命令行界面,执行如下命令使得刚才的配置路径生效

sudo ldconfig

2.配置bash

sudo gedit /etc/bash.bashrc

在最末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH

保存,执行如下命令使得配置生效

source /etc/bash.bashrc

这里安装opencv没有遇到问题。

四、安装Eigen3,它是一个开源线性库,可进行矩阵运算

sudo apt-get install libeigen3-dev

五、安装ORB-SLAM2

这里注意有两种不同的安装方式,一种是依赖于ROS的一种是不依赖于ROS的。如果要安装依赖于ROS的话要安装到ROS的工作路径下,第一次安装没注意安装了一个不依赖于ROS的以后,再安装第二个一直报一个路径问题。最终都没能解决这个问题。无奈重装系统

这里记录一个依赖于ROS的安装过程:

在ROS环境下运行ORB_SLAM,最好将工程放在catkin_ws/src文件夹下:

cd ~/catkin_ws/src
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

1)将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行。

sudo  gedit ~/.bashrc

在这里插入图片描述

source ./catkin_ws/devel/setup.sh

使修改后的/.bashrc文件生效

source ~/.bashrc
cd catkin_ws/src/ORB_SLAM2
chmod +x build_ros.sh
./build_ros.sh

运行后会出现错误:
在这里插入图片描述
解决办法:

修改Examples/ROS/ORB_SLAM2/文件夹下的CMakeLists.txt文件。

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
)

修改为:

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)

其实只是在后面加了一句:

-lboost_system

再次运行,:

chmod +x build_ros.sh
./build_ros.sh

原文到这里就完成编译了,但是我在执行最后一步的时候出现了一个错误导致了编译失败:
在这里插入图片描述
这里似乎是没有找到libDBoW2.so文件,百度了说是会跟ROB_SLAM2一起编译的才对,但是似乎在这里出现了一些问题,感觉类似于本来ORB_SLAM2依赖于这些东西,那么这些东西会在ORB_SLAM2之前获得编译,但是现在它们似乎还没有完成编译就先去编译了ORB_SLAM2,导致了里面的Mono也好还是RGBD也好缺少这些依赖。个人理解。具体不知道问题出在哪里

这里卡了挺久的,而且开始也没有找到解决方法,直到后来在

https://www.pianshen.com/article/3952637520/

中找到了方法

这篇文章有点乱,但是注意到它跟上面链接中的方式不同的是它在编译ORB_SLAM2的时候单独编译了DBoW2

于是这里我采用了相同的方式:

进入Thirdparty/DBoW2/目录下,执行:

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make

然后再回头去编译

chmod +x build_ros.sh
./build_ros.sh

这两句话,但是后面报了关于libgo2.so以及libORB_SLAM2.so我问题,其实就是对应于

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so

中的这些东西,说白了一个都没有找到。

使用同样的方法编译这两个文件即可,注意libg2o.so在Thirdparty文件夹下,但是libORB_SLAM2.so这个其实是找不到的,它需要在ORB_SLAM2文件夹下直接运行编译命令,这时候会生成一个lib文件夹,libORB_SLAM2.so就在这个文件夹下。

把这三个都编译完成后再对整个包重新编译一次,就可以正常运行了。

这里关于第二个错误似乎还有一种方式,就是在运行./build_ros.sh之前先运行:

sh build.sh

这个编译过程会将除了ORB_SLAM对于ROS接口的几个文件以外的文件先编译完成,然后再执行:

./build_ros.sh

这样前面的依赖都完成了就不会再报上面的错误了。