参考:3. 视觉SLAM十四讲各种库安装_HITLDY的博客-CSDN博客
视觉slam十四讲开源库安装教程 - feifanren - 博客园
(104条消息) 视觉SLAM十四讲学习笔记—ch6 关于bug aka class ceres::internal::FixedArray<double, 3>}’ has no member named_路拾遗37的博客-CSDN博客
目录
目录
1. Eigen3
2. Sophus
非模板类
模板类
3. OpenCV3
opencv+contrib安装
opencv+contrib+cuda安装
4. PCL点云库
pcl-1.8
1. 下载源码:
2. 安装依赖:
3. 安装pcl:
5. Ceres非线性优化库
6. Pangolin
7. Octomap
8. Cmake
9. g2o
官方网站:
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
Eigen库提供了几何模块,但是没有提供李代数的支持。一个较好的李代数库是由Strasdat维护的Sophus库。Sophus库支持三维运动的SO(3)、SE(3),此外还支持二维运动的SO(2)、SE(2)和相似变换Sim(3)等内容。它是直接在Eigen库基础上开发的,因此我们不需要安装额外的依赖库。读者可以直接从github上获取Sophus库,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 #编译
编译过程中可能会出现的问题:
/Sophus/sophus/so2.cpp:32:26: error: lvalue required as left operand of assignment
unit_complex_.real() = 1.;
/Sophus/sophus/so2.cpp:33:26: error: lvalue required as left operand of assignment
unit_complex_.imag() = 0.;
该错误可以定位到so2.cpp源码文件下:(更多问题可参考ubuntu下安装Sophus库出现问题及解决办法_逗比熊二的大哥-CSDN博客)
将
SO2::SO2()
{
unit_complex_.real() = 1.;
unit_complex_.imag() = 0.;
}
修改为
SO2::SO2()
{
//unit_complex_.real() = 1.;
//unit_complex_.imag() = 0.;
unit_complex_.real(1.);
unit_complex_.imag(0.);
}
slam十四讲(第二版)中安装的为模板类Sophus,该sophus对eigen库的版本有要求,如果你有3.3以下的版本的eigen,那么请先卸载:
sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 /usr/share/doc/libeigen3-dev /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums
安装eigen3.3以上版本(这里我选用最新的3.3.6,注意3.2系列的不可以!!!)
注意:千万不要使用 sudo apt-get install libeigen3-dev 因为这个命令下载的是3.2版本的eigen,从而无法与模板类的sophus相匹配
正确方法:
(1)在官网(Eigen)下载安装包:eigen-3.3.6.tar.bz2 ,然后提取到此处
(2)进入文件夹eigen-3.3.6,右键在终端打开。
(3)进行安装
mkdir build
cd build
cmake ..
sudo make install
Sophus安装
自己建立一个文件夹,在终端打开,然后
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
mkdir build
cd build
cmake ..
make
sudo make install
在这里强调!不要回滚git checkout a621ff,否则会装成老版本的非模板sophus(网上大多教程都有回滚)
千万不要回滚!!!!!
且强调
sudo make install一定要有
在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} ) #添加库文件目录
OpenCV提供了大量的开源视觉算法库,是计算机视觉中使用极其广泛的图像处理算法库。在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工程一样,编译安装如下:
cd ..... #进入库文件目录下
mkdir build #新建build文件夹
cd build #进入build文件夹
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
#build上一层目录下执行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} ) #添加库文件目录
#头文件在/usr/local/include文件夹下
#库文件在/usr/local/lib下
注:在安装opencv 3.2时,由于ROS系统自带opencv2,因此需要修改安装目录,参考博客:ubuntu下opencv3.2.0和opencv2.4.8共存\
文件准备
1.opencv-3.3.1.zip
2. opencv_contrib-3.3.1.zip
准备
先安装以下依赖包
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
sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev libgphoto2-dev libopenblas-base libopenblas-dev doxygen openjdk-8-jdk pylint libvtk6-dev
sudo apt-get install pkg-config
编译
1.解压下载好的包:
sudo unzip opencv-3.3.1.zip
sudo unzip opencv_contrib-3.3.1.zip
2.解压完后需要将opencv_contrib.zip提取到opencv目录下,同时在该目录下新建一个文件夹build:
sudo cp -r opencv_contrib-3.3.1 opencv-3.3.1 #复制opencv_contrib到opencv目录下
cd opencv-3.3.1
sudo mkdir build #新建文件夹build
3.现在进入到opencv-3.3.1目录下,查看文件结构:
#ls
3rdparty cmake data LICENSE platforms
apps CMakeLists.txt doc modules README.md
build CONTRIBUTING.md include opencv_contrib-3.3.1 samples
4.进入build目录,并且执行cmake生成makefile文件:
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/nvidia/opencv-3.3.1/opencv_contrib-3.3.1/modules/ ..
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/software/opencv-3.3.1/opencv_contrib-3.3.1/modules \-D WITH_CUDA=ON \
-D WITH_CUBLAS=ON \
-D DCUDA_NVCC_FLAGS="\
-D_FORCE_INLINES" \
-D CUDA_ARCH_BIN="6.1" \
-D CUDA_ARCH_PTX="" \
-D CUDA_FAST_MATH=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON ..
注意:OPENCV_EXTRA_MODULES_PATH就是你 opencv_contrib-3.3.1下面的modules目录,请按照自己的实际目录修改地址。还有后面的两点不可省略!!
接下来就是漫长的等待了…
生成完毕提示:
-- Install path: /usr/local
--
-- cvconfig.h is in: /home/files/opencv-3.3.1/build
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/files/opencv-3.3.1/build
5.在cmake成功之后,就可以在build文件下make了:
make -j8 #8线程编译
sudo make install
接下来就是更漫长的等待了…具体时间因人而异,我的电脑跑了30分钟。没报错就意味着成功了,再sudo make install
就ok了!
注意:make期间多多少少会遇到一些常见的错误提示,如:
编译时提示opencv_contrib缺少boostdesc_bgm.i等文件
错误提示:~/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:673:20: fatal error: boostdesc_bgm.i: No suchfileor directory
这时如果查看build文件夹下的CMakeDownloadLog.txt,会发现其中指出boostdesc_bgm.i缺失,到其指定地址下载。
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
百度云链接:百度网盘 请输入提取码
提取码:e1wc
放在 opencv_contrib-3.3.1/modules/xfeatures2d/src/ 路径下,重新编译即可
报错 fatal error: opencv2/xfeatures2d.hpp: No such file or directory
删除build下的编译文件
cmake时加入
-D BUILD_opencv_xfeatures2d=OFF
然后重新编译
更多错误可参考:记录Ubuntu编译安装opencv
Linux Ubuntu16.04 Opencv3(+CUDA9.0)安装记录_差点没学上的xlj的博客-CSDN博客
6.链接库共享
编译安装完毕之后,为了让你的链接库被系统共享,让编译器发现,需要执行管理命令ldconfig:
sudo ldconfig -v
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-dev
更多安装细节,可参考:Ubuntu 配置安装PCL - 潇雨危栏 - 博客园
安装完成后,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
网址:https://github.com/PointCloudLibrary/pcl/releases
找到 pcl-1.8.1,下载Source code
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libqhull-dev
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
将下载的pcl源码解压后放在主目录下,然后编译安装:
cd pcl-pcl-1.8.1
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=None -DBUILD_apps=ON -DBUILD_examples=ON ..
make -j4
sudo make install
CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.5)
project(pcl_test)
find_package(PCL 1.8 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcl_test pcl_test.cpp)
target_link_libraries (pcl_test ${PCL_LIBRARIES})
install(TARGETS pcl_test RUNTIME DESTINATION bin)
Ceres库是来自谷歌的非线性优化库,Ceres库面向通用的最小二乘问题的求解,作为用户,我们需要做的就是定义优化问题,然后设置一些选项,输入Ceres求解即可。Ceres库建议去github上下载,Ceres库是一个cmake工程,安装前需要安装它的依赖项,主要是谷歌的一些日志和测试工具。
sudo apt-get install liblpack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev
libgoogle-glog-dev libgtest-dev
安装好依赖项之后,使用cmake编译并安装Ceres库。
cd Ceres #进入库文件目录下
mkdir build #新建build文件夹
cd build #进入build文件夹
cmake .. #build上一层目录下执行CMake命令
make #编译
sudo make install #安装
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} ) #添加库文件目录
安装依赖库
sudo apt-get install libglew-dev libpython2.7-dev libboost-dev libboost-thread-dev libboost-filesystem-dev -y
1、下载Pangolin、编译并安装(安装在home/下就行)
git clone https://github.com/stevenlovegrove/Pangolin
cd Pangolin
mkdir build
cd build
cmake ..
make -j4
sudo make install
OctoMap库实现了一个三维网格占用映射方法,提供数据结构和映射算法在C ++特别适合于机器人。
sudo apt-get install libqglviewer-dev-qt4
git clone https://github.com/OctoMap/octomap
cd octomap
mkdir build && cd build
cmake ..
make
sudo make install
sudo apt-get install ros-kinetic-octomap ros-kinetic-octomap-mapping ros-kinetic-octomap-msgs ros-kinetic-octomap-ros ros-kinetic-octomap-rviz-plugins ros-kinetic-octomap-server
1.通过以下命令查询cmake版本。
$ cmake --version
2.这里,我并没有卸载旧版本的cmake,而是直接安装新版本,而且这样没有出现问题。【非必须】
可去http://www.cmake.org/files查找需要的版本,写本博客时最新版为3.11.3,以此为例。
$ sudo apt-get install build-essential
$ wget http://www.cmake.org/files/v3.11/cmake-3.11.3.tar.gz
$ tar xf cmake-3.11.3.tar.gz
$ cd cmake-3.11.3
$ ./configure
$ make
$ sudo make install
3.创建cmake的软连接
ln -sf /your cmake3.11 path/bin/* /usr/bin/
ln -sf /your/cmake-3.11.3/path/bin/* /usr/bin/
4.然后,输入以下命令查询cmake版本。
$ cmake --version
如果输出以下信息,则表明安装成功。
cmake version 3.11.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
某些软件包编译时需要高版本的Cmake,因此需要升级Cmake。 不能使用 sudo apt-get remove cmake
卸载低版本cmake后再重装高版本,这样做会导致之前编译和安装的很多库一起被卸载!!!
正确步骤是:
1.去https://cmake.org/files/下载所需版本的源码。也可以使用wget下载,例如:
wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz
2.解压
tar -xvzf cmake-3.22.1.tar.gz
3.进入解压目录,配置成功之后显示:CMake has bootstrapped. Now run make.
chmod 777 ./configure
./configure
4. 配置完成后,编译:
make
5.编译完成后,安装:
sudo make install
6.最后使用新安装的cmake替换旧版本,其中/usr/local/bin/cmake为新安装的cmake目录。
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
7.最后测试cmake版本:
cmake --version
# cmake version 3.22.1
# CMake suite maintained and supported by Kitware (kitware.com/cmake).
[1] Eigen官方主页:Eigen
[2] Sophus in github:GitHub - strasdat/Sophus: C++ implementation of Lie Groups using Eigen.
[3] OpenCV官网:Home - OpenCV
[4] PCL官网:Point Cloud Library | The Point Cloud Library (PCL) is a standalone, large scale, open project for 2D/3D image and point cloud processing.
[5] Ceres官网:Ceres Solver — A Large Scale Non-linear Optimization Library
[6] Ceres in github:GitHub - ceres-solver/ceres-solver: A large scale non-linear optimization library
[7] G2O in github:GitHub - RainerKuemmerle/g2o: g2o: A General Framework for Graph Optimization