个人笔记,如有错误,敬请指正
众所周知,相比于写代码与跑代码,配置环境才是最麻烦的部分。去年的时候,我基于甲骨文公司的 VirtualBox 虚拟机,在 Ubuntu 下对《视觉SLAM十四讲》(第一版)中所有示例代码的运行环境进行了配置,最终大部分代码都可以成功运行。此外,我将过程中的一些需要注意的点,较为简略地记录在了文本文档中。但是,如此记录毕竟不够妥当,因此现特将其转录到个人博客中。
这份记录最大的问题就是失之简略,可是今后大抵是不会再更新的,因为我已决定对第二版的运行环境进行配置,并详加记录。而两版代码的运行环境是有差别的——第一版所用的库都较老,第二版所用的库都较新,因而某些函数的定义已迥然不同,需要修改之后才能运行,毕竟不便。
尽管如此,我认为这份记录还是具有一定参考价值的,现将其重新排版,具体内容如下:
Ubuntu14.04以及Ubuntu16.04实测问题较多,因此弃而不用,最后选择的是Ubuntu18.04
同时,以下安装均需要一些必要的依赖库顺序如下:
gcc
g++
cmake
eigen3-dev
其中cmake不用下载源文件再编译,直接apt-get安装即可
此外,我也安装了一些其他的软件如下:
vim
kdevelop
虚拟机最开始是使用Win10自带的hype-v,但是莫名其妙很卡,于是改用VirtualBox,事实证明,后者操作更为方便而且不卡。
Ceres最好下载老版本,这里使用的是1.13.0版本,较新的版本2.0.0会出现与Eigen3.3的冲突问题导致编译错误,这一错误参见: https://blog.csdn.net/qq_40574708/article/details/105325819
https://blog.csdn.net/zhiwei121/article/details/88537576
注意Ceres的依赖库也有Eigen,默认apt-get下载的是3.3.4版本的,因此与Ceres2.0.0版本出现冲突。
Ceres1.13.0下载地址为:ceres-solver.org/ceres-solver-1.13.0.tar.gz
首先安装依赖项,参考书上的依赖包以及https://blog.csdn.net/gj295983859/article/details/95182810如下
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev
其中libcxsparse3.1.2这一版本的包不存在,可以换一个版本安装,这里安装的是libcxsparse3
g2o的安装在Ubuntu14.04以及Ubuntu16.04中错误太多,原因似乎是一些依赖库比如Qt的版本问题,参见: https://blog.csdn.net/sunshinefcx/article/details/82945216
与此同时,g2o不能安装新版本,否则会出现编译错误,作者在issues上现身说法说需要安装旧版本,下载地址:
https://github.com/RainerKuemmerle/g2o/archive/20170730_git.tar.gz
首先安装依赖项,参考新版本自带的README说明:
libsuitesparse-dev
libqt4-dev
qt4-qmake
libqglviewer-qt4-dev
同时参考书上内容以及https://blog.csdn.net/qq_41647175/article/details/103093651
libcholmod-dev qtdeclarative5-dev qt5-qmake
这里libcholmod-dev并不存在,转而安装libcholmod3
然后直接分析编译即可
书上需要安装的是OpenCV3,因此上https://gitee.com/mirrors/opencv下载OpenCV3.4版本的压缩包。
首先安装依赖项,参考https://www.cnblogs.com/huangkai-blog/p/10202540.html如下:
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
参考书上依赖项,发现缺少libvtk5-dev,这个可以通过换中科大的软件源解决。而缺少的libjapser-dev则参考https://www.cnblogs.com/enumx/p/12357468.html如下:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
此外,在编译OpenCV源代码时,注意不能在Windows共享文件夹下编译,否则会出现无法链接的错误如下。
CMake Error: cmake_symlink_library: System Error: Operation not supported
书上的libpcl-all这一依赖项并不存在,因此参考https://blog.csdn.net/Coderii/article/details/87636882更换为libpcl-dev
三步骤如下:
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-all
实例运行后,发现找不到pcl_viewer,直接参照提示进行安装:
sudo apt-get install pcl_tools
首先安装源代码:https://github.com/strasdat/Sophus
然后一定要记得版本回滚
编译出现错误,那么就参考https://blog.csdn.net/qq_40641575/article/details/81006349更改源文件Sophus/sophus/so2.cpp如下:
SO2::SO2()
{
//unit_complex_.real() = 1.;
//unit_complex_.imag() = 0.;
unit_complex_.real(1.);
unit_complex_.imag(0.);
}
Eigen库如果出现找不到库文件的问题,那么就开sudo nautilus复制一下Eigen到usr/include/
如果Sophus库出现未定义引用的问题,经过参考https://blog.csdn.net/u010003609/article/details/68961293以及https://blog.csdn.net/weixin_30673715/article/details/97520499分析可得出,其原因是因为没有将make install后/usr/local/lib/libSophus.so链接到Sophus_LIBRARIES,因此在CMakeLists.txt中,在链接之前添加:
set(Sophus_LIBRARIES "/usr/local/lib/libSophus.so")
便可完美解决。