简介
最近要在Ubuntu上实现3D点云SLAM程序,故需要在Ubuntu上同时使用 OpenCV和PCL库。网上关于Ubuntu单独安装Opencv/ 单独安装PCL的例子很多,在Ubuntu上联合安装Opencv和PCL的例子因版本太古老,根本就实现不了。
为避免版本问题,先提供我此次安装的相关版本:
- Ubuntu16.04.04
- OpenCV3.4.0
- PCL1.7.2
此处Ubuntu版本最好为16.04.04,若为16.04.02,在装完OpenCV及PCL后容易产生“the system is running in low-graphics mode”错误,可参考https://blog.youkuaiyun.com/lyy14011305/article/details/76316197 解决。如果解决不了,就只能重装系统了。
Ubuntu17及18的版本就不用考虑了,SLAM相关库如g2o/ ROS/ CUDA等目前能支持的最高版本就是16.04。
OpenCV库和PCL库之间本来就存在一些冲突,安装顺序比较重要。
安装顺序最好为先安装OpenCV,再安装PCL。按此顺序安装会产生一些Bug,但这些Bug有提示,可以根据提示解决问题。
若先安装PCL再安装OpenCV,安装时比较顺利,但在CMake调用库时就会出现许多莫名奇妙的错误,比如装Kdevelop报错,调用FindOpenCV.cmake报错等等。
若只安装PCL,参照https://blog.youkuaiyun.com/we1583004we/article/details/79651299即可。
在以上安装过程中,我趟了好几次雷,重装了好几次系统。故以下的安装步骤从新装好的Ubuntu系统开始。
系统环境设置
-1修改镜像源
打开Ubuntu Software,菜单选择Software & Updates,然后在download from里面,把镜像源选成清华的。
-2更新锁屏时间
因为装机时间很长,在设置里面,将锁屏时间设为never。
-3更新软件清单
控制台输入
sudo apt-get update
安装Synaptic,便于后续查找应安装的库。
sudo apt-get install synaptic
-4安装CMake
新建cmaker文件夹,去Cmaker官网下载安装包,https://cmake.org/download/,放入路径中。
因为可能需要联合编译,最好用最新版本,要图简单就直接sudo apt-get install cmake cmake-gui 。控制台输入:
./bootstrap
make -j3
sudo make install
重启
shutdown -r now
安装OpenCV
参考https://blog.youkuaiyun.com/we1583004we/article/details/79651299
-1安装依赖库
考虑到后续opencv需要使用eigen,vtk 3D显示模块,推荐安装的依赖库如下:
sudo apt-get install build-essential git libeigen3-dev libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev python-dev python-numpy python-tk libtbb-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
-2源码编译安装
新建opencv文件夹,去opencv官网下载源文件,https://opencv.org/opencv-3-4.html,放入路径中。
进入opencv文件夹,控制台输入
mkdir build && cd build
sudo cmake -D CMAKE_BUILD_TYPE=None -D WITH_TBB=ON -D WITH_VTK=On -D WITH_V4L=ON -D CMAKE_INSTALL_PREFIX=/usr/local/opencv ..
sudo make -j3
sudo make install -j3
简单的话可以cmake-gui ..然后依次点Configure和Generate按钮生成Configure文件。
其中cmake步骤中可能会下载一些文件,比较耗费时间。可以按ctrl+C中断,此时OpenCV的源文件夹路径下会出现.cache的隐藏文件。然后下载opencv-cache.zip,将其中文件解压到.cache文件夹中,里面有需要下载的东西。
设置config路径
控制台输入
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开该文件加入下面的内容:
/usr/local/opencv/lib
保存后,再在控制台输入
sudo ldconfig /etc/ld.so.conf
设置环境变量
控制台输入sudo gedit /etc/bash.bashrc
在文件末尾加上
export PKG_CONFIG_PATH=/usr/local/opencv/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv/lib
保存之后,再使用命令
source /etc/bash.bashrc
sudo updatedb
安装错了,就得卸载了重新安装
进入到build文件夹,控制台输入以下项
sudo make uninstall
cd ..
sudo rm -r release
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv
-3修改与PCL冲突的flann文件
若先安装opencv,则需修改与opencv冲突的flann文件夹名称。
修改opencv下flann文件夹名为flann2,并查找所有引用该文件夹的文件,都修改为flann2。
控制台输入
cd /usr/local/opencv
find . -type f -name '*' | xargs grep 'opencv2/flann/'
结果为
./opencv2/flann.hpp:#include "opencv2/flann/miniflann.hpp"
./opencv2/flann.hpp:#include "opencv2/flann/flann_base.hpp"
./opencv2/features2d.hpp:#include "opencv2/flann/miniflann.hpp"
./opencv2/flann2/miniflann.hpp:#include "opencv2/flann/defines.h"
分别输入
sudo gedit ./opencv2/flann.hpp
sudo gedit ./opencv2/features2d.hpp
sudo gedit ./opencv2/flann2/miniflann.hpp
将其中的flann改为flann2,然后
cd /usr/local/opencv/include/opencv2
sudo mv flann flann2
把flann文件夹名字改为flann2。
安装PCL
-1外网安装法
如果能上外网,恭喜你,安装方式非常简单,直接输入
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-dev
就装好了。
-2源码安装法
很不幸啊,如果你只能在内网上自己下载源文件
git clone https://github.com/PointCloudLibrary/pcl.git
,就只能摸爬滚打地安装了。本人在此处趟雷无数,耗费了大量时间。
安装依赖库
PCL依赖的库随着PCL版本和Ubuntu版本而变化,最好去https://github.com/PointCloudLibrary/pcl/blob/master/.travis.yml中查一下。没有绝对的正确,本人推荐
sudo apt-get install linux-libc-dev
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 libpcap-dev libboost1.58-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 libproj-dev
sudo updatedb
源码编译安装
进入PCL源码文件夹,控制台输入
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_GPU=ON -DBUILD_apps=ON -DCMAKE_INSTALL_PREFIX=/usr ..
sudo make -j3
sudo make install -j3
出错解决法
此处出错的概率是极大的,在运行程序时cmake可能会出现”/usr/bin/ld:cannot find-lxxx”,
参考https://blog.youkuaiyun.com/yiliang_/article/details/68928387。
你可以去路径下以先
cd /usr/lib/
locate xxx
再ll libxxx.so libxxx*.so
若有该库,肯定是软链接的问题,通过
sudo ln -s libxxx*.so libxxx.so
来解决
如果没有就sudo apt-get install libxxx.so
,回头再来安装一下,就能通过了。
需要安装的软件包名字也可在Synaptic查询一下,可通过输入 boost, vtk, pcl等关键词来查询。
SLAM相关库安装
SLAM十四讲相关代码git clone https://github.com/gaoxiang12/slambook
,其中的3rdparty文件夹中有我们可以用的相关库源码。
-1源码安装Sophus
Sophus库为李群李代数的库,用于前端视觉里程计VO,相关源码在SLAM的3rdLibrary里面,
也可从git中下载
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
然后进入源码文件夹
mkdir build && cd build
cmake ..
make -j3
sudo make install -j3
-2源码安装Ceres
Ceres主要用于最小二乘法求解,用于后端优化(与g2o功能相同),源码可通过git clone https://github.com/ceres-solver/ceres-solver
下载,也在SLAM的3rdLibrary里面。
安装依赖项
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.4 libgflags-dev libgoogle-glog-dev libgtest-dev
编译安装
mkdir build && cd build
cmake ..
make -j3
sudo make install -j2
-3源码安装g2o
g2o为非线性优化的库,用于后端优化(与Ceres功能相同),相关源码在SLAM的3rdLibrary里面。
安装依赖项
sudo apt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.4 libcholmod3.0.6
编译安装
进入源码文件夹
mkdir build && cd build
cmake ..
make -j3
sudo make install -j3
设置环境变量
控制台输入sudo gedit /etc/ld.so.conf.d/g2o.conf
打开该文件加入下面的内容:
/usr/local/lib
然后
sudo ldconfig /etc/ld.so.conf
sudo updatedb
一般来说,g2o与Ceres没必要同时都安装。
-4源码安装DBoW3
DBoW3为词袋库,用于回环检测,相关源码在SLAM的3rdLibrary里面。控制台进入源码文件夹输入
sudo apt-get install libboost-dev
mkdir build && cd build
cmake ..
make -j3
sudo make install -j3
相关工具安装
IDE
推荐Kdevelop + Qt 组合。程序使用Kdevelop,界面使用Qt。
Kdevelop可以使用
直接下载使用。
sudo apt-get install phonon-backend-gstreamer phonon4qt5-backend-gstreamer phonon-backend-vlc
sudo apt-get install kdevelop
看笔记
同步Github上,主要使用.markdown 文件来记录。
推荐安装Typora,因为它显示效果快,还有查找功能。
参考 https://typora.io/#linux
个人感觉比remarkable好。
opencv源码文件夹下doc/tutorials下的.markdown文件中,其中的公式标记为 [\f 和\f],其对应代表的应是 $$