本文主要参考该文章。
1 Eigen3安装与卸载
1.1 安装
可通过apt命令安装,由于使用源码安装的方式在后续编译ORB-SLAM2 过程中可能会遇到一些问题,因此,本人建议使用apt命令进行安装:
1 | sudo apt install libeigen3-dev |
也可在官网下载eigen3 源码,然后编译安装(本人不推荐该方法,后续会出现程序找不到eigen3的问题):
1 | cd eigen-xxx |
版本查看命令:
1 | ❯ pkg-config --modversion eigen3 |
1.2 卸载
通过apt 方式安装的采用以下方式进行卸载:
1 | ## 通过remove 卸载 |
通过源码安装的,需要手动删除/usr/local/include/等目录下的eigen3目录:
1 | sudo updatedb |
2 Pangolin 安装与卸载
2.1 安装
首先安装依赖项:
1 | sudo apt install libglew-dev |
然后下载源码,编译安装
1 | git clone https://github.com/stevenlovegrove/Pangolin.git |
然后可在/usr/local/include/和/usr/local/lib/目录下找到pangolin相关的目录及库文件:
安装完成后进行测试:
1 | cd Pangolin/build/examples/HelloPangolin/ |
出现以下界面说明安装成功:
2.2 卸载
Pangolin 的卸载需要手动删除相关文件:
1 | sudo updatedb |
3 opencv 安装与卸载
分别到opencv、contrib 开发库下载对应版本,注意,两个文件的版本需要保持一致。
3.0 pkg-config
3.0.1 介绍
opencv 多版本管理主要参考文章1和文章2,该文章主要利用pkg-config 包管理工具来管理多版本的opencv。
一般用第三方库的时候,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候必须要指定这些头文件和库文件的位置。对于一个比较大的第三方库,其头文件和库文件的数量是比较多的,如果我们一个个手动地写,那将是相当的麻烦的。因此,pkg-config就应运而生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。pkg-config主要提供了下面几个功能:
- 检查库的版本号。 如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件
- 获得编译预处理参数,如宏定义、头文件的位置
- 获得链接参数,如库及依赖的其他库的位置,文件名及其他一些链接参数
- 自动加入所依赖的其他库的设置
如以下命令:
1 | gcc -o test test.c `pkg-config --libs --cflags glib-2.0` |
其中,—libs 用于指定库文件,—cflags 用于指定头文件。
pkg-config 命令基本用法如下:
1 | pkg-config <options> <library-name> |
3.0.2 配置环境变量
事实上,pkg-config只是一个工具,所以不是你安装了一个第三方库,pkg-config就能知道第三方库的头文件和库文件的位置的。为了让pkg-config可以得到一个库的信息,就要求库的提供者提供一个.pc 文件。例如,本人安装的opencv-4.6.0 中包含了对应的opencv4.pc 文件:
首先,将.pc 文件拷贝至pkgconfig 路径下:
1 | sudo cp ~/Softwares/opencv/opencv-4.6.0/lib/pkgconfig/opencv4.pc /usr/lib/pkgconfig/opencv4.pc |
然后,添加链接库路径:
1 | ## 新建文件并编辑 |
刷新之后,即可检验相应版本是否添加成功:
1 | > pkg-config --modversion opencv4 |
相应地,编译工程时即可使用如下命令:
1 | g++ -o cv_test cv_test.cpp `pkg-config --libs --cflags opencv4` |
3.1 opencv-4.6.0
3.1.1 编译与安装
编译命令如下:
1 | cmake -D CMAKE_BUILD_TYPE=RELEASE \ |
因为要使用pkg-config 对不同版本的opencv 进行管理,但是opencv4默认将opencv.pc 的产生选项关闭了,查看CMakelist.txt 相关语句如下所示:
1 | OCV_OPTION(OPENCV_GENERATE_PKGCONFIG "Generate .pc file for pkg-config build tool (deprecated)" OFF) |
所以需将CMakelist.txt 中对应语句的参数改为ON:
1 | ## 将对应命令更改如下: |
编译成功之后,make、安装:
1 | make -j13 -w |
值得注意的是,由于是安装到了自定义目录下,在利用CMakeLists.txt 进行编译前,需要进行以下操作:
1 | ## 将build文件夹中的OpenCVConfig.cmake、OpenCVModules.cmake移至share/opencv4中 |
3.1.2 多版本控制
按照pkgconfig 版本控制,使用opencv-4.6.0 对自带的示例进行测试,修改CMakeLists.txt 文件:
1 | ## 设置搜寻路径 |
进行cmake编译并执行:
1 | # cmake 过程中会出现相应的版本号、库文件等信息 |
得到如下输出结果,证明安装成功:
同样地,使用g++ 命令进行编译:
1 | g++ -o opencv_example example.cpp `pkg-config --libs --cflags opencv4` |
执行生成文件,得到与上图相同的结果证明安装成功。
3.2 opencv-3.4.11
编译命令如下:
1 | cmake -D CMAKE_BUILD_TYPE=RELEASE \ |
该版本的opencv 会自动在share/OpenCV 文件夹下生成OpenCVConfig.cmake、OpenCVModules.cmake 等文件,所以无需从build 文件夹中进行复制。
其他使用pkg-config 进行多版本控制方法与opencv-4.6.0 一致,在此不做赘述。
3.3 opencv 卸载
首先,到编译目录build 下执行卸载命令:
1 | sudo make uninstall |
然后,到opencv 的安装目录下,将bin、lib、share、include 等文件删除即可。若不再安装本版本,则将pkg-config 的相关配置清除掉。
4 ORB-SLAM2 编译与运行
4.1 前期准备
在此注明一下本人各个软件包的最终版本如下所示:
1 | opencv: 3.4.11 |
明确完软件包版本后,首先到ORB-SLAM2仓库下载,进入下载的文件夹后对以下文件进行更改:
1 | ## 对主目录及DBoW2下的CMakeLists.txt 文件中的opencv版本及搜寻路径进行相应修改 |
4.2 编译
按照官方介绍进行编译:
1 | chmod +x build.sh |
正常编译成功的话会在lib 文件夹内生成libORB_SLAM2.so 函数库,在Examples 文件夹内生成对应的可执行文件:mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc 和 stereo_euroc。但一般都会有各种报错,这里记录一下本人的报错及相应处理。
- 首先是可能因为软件包版本问题报错:
1 | ## 报错内容: |
- 再次编译可能会出现无法找到Eigen3 函数库的报错,此时根据报错内容,将Eigen3 的安装位置:/usr/include/目录下的eigen目录软链接到相应位置即可。
- 过程中没有其他报错内容,DBoW2、g2o等均编译成功,但最终编译ORB-SLAM2 各个运行程序时会提示:
1 | ## 输出提示 |
- 出现usleep() 未声明的报错:
1 | ## 报错内容: |
- LoopClosing.h中的报错:
1 | ## 报错内容: |
至此,安装成功,生成了相应的可执行文件。
4.3 运行测试
本处使用了TUM RGB-D 数据集进行测试,测试命令如下:
1 | ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ~/datasets/TUM/rgbd_dataset_freiburg1_desk ~/datasets/TUM/rgbd_dataset_freiburg1_desk/associate.txt |
运行界面如下图所示: