笔记:《视觉SLAM十四讲》之开源库的安装
正文
前言
本篇博客主要写了视觉SLAM常用库的安装方法,主要包括Eigen线性代数库、Sophus李代数库、OpenCV计算机视觉库、PCL点云库、Ceres非线性优化库和G2O图优化库等。安装步骤是直接从高翔大牛书上搬抄过来了的,目的是为了大家学习SLAM时能够顺利安装好这些开源库。Ubuntu系统为14.04版本,亲测安装有效,童叟无欺!初步先写这些库的安装过程,可能后面会写学习库的笔记等。工欲善其事,必先利其器,大家一起快乐的学习视觉SLAM吧,加油!初稿完成于2017年7月23日上午晴
1、Eigen线性代数库的安装
Eigen库是一个C++线性代数开源库[1],它提供了有关线性代数、矩阵和矢量运算、数值分析及相关的算法。许多上层的软件库也使用Eigen进行矩阵运算,包括g2o、Sophus等。Eigen库由Ubuntu软件源中提供,通过apt命令可以很方便的安装Eigen。
sudo apt-get install libeigen3-dev
Eigen与其他库不同,它是一个由头文件搭建起来的库,Eigen头文件的默认安装位置在“/usr/include/eigen3/”中。我们在使用时,只需引入Eigen头文件,不需要链接它的库文件,在CMakeLists.txt里添加Eigen头文件的目录。
#添加头文件 include_directories("/usr/include/eigen3")
学习更多Eigen知识,请参考:http://eigen.tuxfamily.org/dox-devel/modules.html
2、Sophus李代数库的安装
Eigen库提供了几何模块,但是没有提供李代数的支持。一个较好的李代数库是由Strasdat维护的Sophus库。Sophus库支持三维运动的SO(3)、SE(3),此外还支持二维运动的SO(2)、SE(2)和相似变换Sim(3)等内容。它是直接在Eigen库基础上开发的,因此我们不需要安装额外的依赖库。读者可以直接从github上获取Sophus库[2],Sophus库有模板类库和非模板类库两个版本,本书选择的是非模板类库。可以通过输入以下命令获得非模板类的Sophus库:
git clone http://github.com/strasdat/Sophus.git
Sophus库本身是一个cmake工程,使用以下命令对它进行编译(Sophus库只需编译,无需安装)。
cd XXXX #进入Sophus库文件目录下
mkdir build #新建build文件夹
cd build #进入build文件夹
cmake .. #build上一层目录下执行CMake命令
make #编译
在CMakeLists.txt中添加Sophus库的头文件和库文件,如下所示。find_package命令是cmake提供的寻找某个库的头文件和库文件的命令。如果cmake能找到它,就会提供头文件和库文件所在目录的变量。
#为了使用Sophus,需要使用find_package命令
find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS}) #添加头文件目录
add_executable( useSophus useSophus.cpp) #添加可执行文件
target_link_libraries( useSophus ${Sophus_LIBRARIES} ) #添加库文件目录
3、OpenCV计算机视觉库的安装
OpenCV[3]提供了大量的开源视觉算法库,是计算机视觉中使用极其广泛的图像处理算法库。在Ubuntu下,可以选择从源代码安装和只安装库文件两种方式。从源代码安装是指从OpenCV官网中下载相应版本的OpenCV源码,然后使用cmake命令中编译安装,好处是可以选择的版本比较丰富,而且可以看到源代码;只安装库文件,是指安装由Ubuntu社区人员编译好的库文件,这样就无需重新编译一遍。本书使用的是OpenCV3系列,由OpenCV官网下载安装包编译安装。
在编译之前,需要先安装OpenCV库的依赖项:
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev
libopenexr-dev libtbb-dev
在configure中选择默认设置即可,opencv3要下载一个ippicv的第三方包(ippicv_linux_20151201.tgz),直接下比较慢,可以自己下后,放到 3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e里即可。 然后对Opencv安装包编译安装,OpenCV库和普通的cmake工程一样,编译安装如下:
......
make #编译
sudo make install #安装
OpenCV库的头文件和库文件默认安装在”/usr/local”目录下,在CMakeLists.txt中添加OpenCV库的头文件和库问价如下所示:
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS}) #添加头文件目录
add_executable( imageBasics imageBasics.cpp) #添加可执行文件
target_link_libraries( imageBasics ${OpenCV_LIBS} ) #添加库文件目录
注:在安装opencv 3.2时,由于ROS系统自带opencv2,因此需要修改安装目录,参考博客:ubuntu下opencv3.2.0和opencv2.4.8共存\
4、PCL点云库的安装
PCL库是点云库(Point Cloud Library)[4]。PCL库的安装比较容易,输入以下命令即可(也可以使用源代码安装):
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all
安装完成后,PCL库的头文件将安装在”/usr/include/pcl-1.7/”中。库文件位于”/usr/lib/”中。在CMakeLists中添加头文件和库文件如下:
find_package( PCL REQUIRED COMPOMENT common io )
include_directories( ${PCL_INCLUDE_DIRS}) #添加头文件目录
add_executable( joinMap joinMap.cpp) #添加可执行文件
target_link_libraries( joinMap ${PCL_LIBRARIES} ) #添加库文件目录
生成的点云文件以pcd的格式存储,用PCL提供的可视化程序打开这个文件:
pcl_viewer map.pcd
5、Ceres非线性优化库的安装
Ceres库是来自谷歌的非线性优化库[5],Ceres库面向通用的最小二乘问题的求解,作为用户,我们需要做的就是定义优化问题,然后设置一些选项,输入Ceres求解即可。Ceres库建议去github上下载[6],Ceres库是一个cmake工程,安装前需要安装它的依赖项,主要是谷歌的一些日志和测试工具。
sudo apt-get install liblpack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev
libgoogle-glog-dev libgtest-dev
安装好依赖项之后,使用cmake编译并安装Ceres库。Ceres库的头文件安装在”/usr/local/include/ceres/”目录下,库文件安装在”/usr/local/lib/”目录下。在CMakeList.txt中添加头文件和库文件路径的命令,如下。
# 添加cmake模块以使用ceres库
list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )
find_package( Ceres REQUIRED )
include_directories( ${CERES_INCLUDE_DIRS}) #添加头文件目录
add_executable( curve_fitting main.cpp ) #添加可执行文件
target_link_libraries( curve_fitting ${CERES_LIBRARIES} ) #添加库文件目录
6、G2O图优化库的安装
g2o是一个基于图优化的库,图优化是一种将非线性理论与图论结合起来的理论,在图优化中将顶点表示优化变量,边表示误差项,从而将非线性最小二乘问题转化成构建一直对应的一个图。g2o库的安装包可以从github上下载[7], 它也是一个CMake工程。安装g2o前需要安装它的依赖库(部分与Ceres由重合):
sudo apt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2
libcholmod-dev
(注:最后一个依赖项需要table键来填充名称)
安装完依赖项之后,按照CMake的方式对g2o进行编译安装。安装完成后,g2o库的头文件将在”/usr/local/g2o/”目录下,库文件在”/usr/local/lib/”目录下。在CMakeList.txt中添加头文件和库文件路径的命令,如下。
# 添加g2o的依赖
# 因为g2o不是常用库,要添加它的findg2o.cmake文件
LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )
SET( G2O_ROOT /usr/local/include/g2o )
FIND_PACKAGE( G2O )
include_directories( ${G2O_INCLUDE_DIRS} ) #添加头文件目录
add_executable( curve_fitting main.cpp ) #添加可执行文件
target_link_libraries( curve_fitting g2o_core g2o_stuff ) #添加库文件目录
7、Octomap八叉树地图库的安装
octomap的网页见:https://octomap.github.io
它的github源码在:https://github.com/OctoMap/octomap
它还有ROS下的安装方式:http://wiki.ros.org/octomap
Ubuntu Prerequisites You can either install libQGLViewer as a system-wide package (libqglviewer-qt4-dev in Ubuntu), or use the version we provide in the "external" directory. If the CMake compilation can't find an installed qglviewer, it will automatically compile our supplied version and link against it. For building the GUI, you need to make sure that qmake for Qt4 is used (qmake -v). If yours is set to Qt3 in Ubuntu, you can change it to qmake-qt4 by running sudo update-alternatives --config qmake after installing the dependencies below. All dependencies for the library and viewer on Ubuntu 12.04 can be met by running: sudo apt-get install build-essential cmake doxygen libqt4-dev \ libqt4-opengl-dev libqglviewer-dev-qt4 Note: For older version of Ubuntu, the last package name is libqglviewer-dev or libqglviewer-qt4-dev instead.
注意:安装ROS版本的octomap后再编译无ROS版本的ocotomap会出错,需要卸载ROS。
8、DBoW3词袋模型库
直接编译安装
参考文献
[1] Eigen官方主页:http://eigen.tuxfamily.org/index.php?title=Main_Page
[2] Sophus in github:http://github.com/strasdat/Sophus
[3] OpenCV官网:http://opencv.org
[4] PCL官网:http://pointclouds.org
[5] Ceres官网:http://ceres-solver.org
[6] Ceres in github:https://github.com/ceres-solver/ceres-solver
[7] G2O in github:https://github.com/RainerKuemmerle/g2o