整个安装过程基本是参考了博客:
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
这样前面的依赖都完成了就不会再报上面的错误了。