02-编译安装PCL点云库

官网及文档

源码官网:https://github.com/PointCloudLibrary/pcl

安装方式

方式一:编译源码安装(最稳妥)

  1. 准备编译环境及工具
sudo apt-get update
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 libpcap-dev
sudo apt-get install libflann1.9 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install vtk6 libvtk6.3 libvtk6-dev libvtk6.3-qt libvtk6-qt-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 libopenni-dev libopenni2-dev
# sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
  1. 编译PCL(PointCloudLibrary)

下载源码:

git clone https://gitee.com/mirrors/pcl.git

进入下载后的pcl目录,创建并进入release目录,执行编译:

cd pcl
# 切换到指定版本v1.9.1再编译
git checkout pcl-1.9.1
# 创建目录
mkdir release
# 进入目录
cd release

# 配置cmake
cmake -DCMAKE_BUILD_TYPE=None \
      -DCMAKE_INSTALL_PREFIX=/usr/local \
      -DBUILD_GPU=ON \
      -DBUILD_apps=ON \
      -DBUILD_simulation=ON \
      -DBUILD_examples=ON ..

# 进行编译
make -j8
  1. 安装

编译可能比较久,等他编完后,执行安装:

sudo make install
  1. 测试

测试是否成功,打开窗口看到logo点云即为成功安装

pcl_viewer ../test/pcl_logo.pcd

方式二:在线安装(100M下载,释放后1G)

sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-dev  # 或 libpcl-all

问题及处理

问题:没有pcl_viewer

  • 解决:

说明编译的时候,cmake参数有误,或install有问题,可以检查参数后重新执行cmake make

或通过以下命令安装 bash sudo apt install pcl-tools

问题:加载pcd文件异常

描述:执行pcl::io::loadPCDFile<PointType>("./assets/xxxx.pcd", *cloud) == -1),控制台报错

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
  • 解决:

此时,很可能是eigen3有问题,从此处下载离线版eigen3库

http://bitbucket.org/eigen/eigen/get/3.2.0.tar.bz2

http://eigen.tuxfamily.org/index.php?title=Main_Page 在该网站中,可以下载任意版本对应的文件,本例下载了Eigen 3.2.0. tar.bz2 格式压缩文件。 文件名:eigen-eigen-ffa86ffb5570.tar.bz2

执行如下操作:

  1. 卸载原有eigen3:
sudo apt-get remove libeigen3-dev --purge
  1. 重装eigen3

# 解压
tar -jxvf eigen3_3.2.0.orig.tar.bz2
# 重命名
mv eigen-eigen-ffa86ffb5570/ eigen3
# 复制到/usr/local/include/
sudo cp -r eigen3 /usr/local/include/eigen3
# 复制到/usr/include/
sudo cp -r eigen3 /usr/include/eigen3

问题:metslib cmake 错误

no metslib found.
  • 解决:
wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
tar xzvf metslib-0.5.3.tgz
cd metslib-0.5.3
./configure
make 
sudo make install

问题:libpq.solibvtkIO.so错误

[ 13%] Built target pcl_pcd_convert_NaN_nan
[ 13%] Linking CXX executable ../../bin/pcl_pcd_introduce_nan
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to `SSL_get_peer_certificate@OPENSSL_1.0.0'
/usr/lib/libvtkIO.so.5.10.1: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to `CRYPTO_num_locks@OPENSSL_1.0.0'
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to `SSL_get_current_compression@OPENSSL_1.0.0'
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to `SSL_CTX_free@OPENSSL_1.0.0'
  • 解决:
sudo apt-get remove libpq5
sudo apt-get install libpq-dev

问题:make时libproj.so

 make[2]: *** No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so', needed by 'lib/libpcl_io.so.1.9.1.99'。 停止。CMakeFiles/Makefile2:499: recipe for target 'io/CMakeFiles/pcl_io.dir/all' failed
  • 解决:

建立软连接, 终端中输入:

sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/x86_64-linux-gnu/libproj.so

问题:libpng16.so错误

//home/ty/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
collect2: error: ld returned 1 exit status
src/CMakeFiles/pcl_test.dir/build.make:253: recipe for target '../build/debug/bin/pcl_test' failed
make[3]: *** [../build/debug/bin/pcl_test] Error 1
  • 解决:
cd /usr/lib/x86_64-linux-gnu
sudo ln -sf ~/anaconda/lib/libpng16.so.16 libpng16.so.16
cd /usr/lib/
sudo ln -sf ~/anaconda/lib/libpng16.so.16 libpng16.so.16
sudo ldconfig

conda remove libpng
sudo apt-get install libpng16-16 --reinstall

实在不行编译安装源码:

wget https://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz
tar -zxvf libpng-1.6.37.tar.gz
cd libpng-1.6.37/
./configure --prefix=/usr/local/
sudo make && make install

问题:/usr/bin/ld: cannot find -lxxx

  • `/usr/bin/ld: cannot find -lvtkproj4为例
  • 解决:

原因1:libvtkproj4.so的链接不正确或没有链接,注意规则是libxxx.so

cd /usr/lib
ll | grep -i vtkproj4
# 输出
lrwxrwxrwx   1 root root       21 4月   5  2016 libvtkproj4.so.5.10 -> libvtkproj4.so.5.10.1
-rw-r--r--   1 root root   312320 4月   5  2016 libvtkproj4.so.5.10.1

说明没有libvtkproj4.so链接,则执行以下命令即可:

sudo ln -s libvtkproj4.so.5.10 libvtkproj4.so

原因2:系统缺少对应的so库,即/usr/lib下找不到类似的so

则进行搜索并安装

sudo apt-cache search libvtkproj4-dev
sudo apt-get install libvtkproj4-dev