Bootstrap

ubuntu18.04 安装安装PCL1.9.1库

  在一家AI公司工作了将近两年时间,从视觉到点云的神经网络,其中经历了很多,也学到了不少不东西;由于自己主要是做算法仿真的,一直没有特别的去深入学习pcl库;只知道它用于处理点云数据,但不知道它包含了什么样的功能,可以利用点云数据去做些什么功能操作。于是下定决心来学习PCL库。

1. PCL库介绍

官网:pointclouds.org
GitHub:github.com/PointCloudLibrary/pcl

Point Cloud Library:
 1. PCL库为点云数据的处理可以采用获得最广泛应用的开源库。
 2. PCL库实现了大量和点云相关的通用算法及高效的数据管理,实在2013年开源的C++库。
 3. PCL库支持跨平台操作(包含Windows、Linux、Max OS、Android以及部分嵌入式实时系统)。
 4. PCL是BSD授权方式,可以免费进行商业和学术的应用。

2. 安装依赖库

PCL库的编译需要依赖很多环境,需要我们自己去安装配置;
必须安装的环境:Boost、Eigen、FLANN、vtk
可选择的安装环境:Qhull、OpenNI、CUDA

安装依赖库指令:
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 libflann1.8 libflann-dev  
sudo apt-get install libeigen3-dev  
sudo apt-get install libboost-all-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  

建议在安装QT和vtk时,用源码安装更为合适一些:
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev  
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre  

vtk8.2.0安装方法
下载地址:https://vtk.org/download/
需要下载VTK-8.2.0.tar.gzVTKData-8.2.0.tar.gz
首先解压VTK-8.2.0.tar.gz包,在解压VTKData-8.2.0.tar.gz(默认会将vtkdata解压到vtk包的路径下面),若为解压到vtk路径下面,需要手动指定,或者拷贝。
解压完成后,指令编译,如下所示:

mkdir vtk-8.2.0-build
cd vtk-8.2.0-build
cmake ../ -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON
make -j8
sudo make install

qt5.9.9安装方法
下载地址:qt-everywhere-opensource-src-5.9.9.tar.xz

解压:

xz -d qt-everywhere-opensource-src-5.9.9.tar.xz
tar -xvf qt-everywhere-opensource-src-5.9.9.tar

安装依赖:

1)安装flex词法分析器和bison语法分析器
sudo apt-get install flex
sudo apt-get install bison
2)安装gperf哈希函数生成器
sudo apt-get install gperf
3)安装opengl
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev
sudo apt-get install freeglut3-dev

编译安装:

mkdir qt-5.9.9-build
cd qt-5.9.9-build
./../configure -release
备注:-prefix 配置qt安装路径,目前采用默认安装路径

在执行configure过程中,会有一下选择提示:
1)版本提示,输入o,回车:
在这里插入图片描述
2)询问是否接收协议,输入y,回车:
在这里插入图片描述
3)configure成功:
在这里插入图片描述

编译命令:
make
sudo make install

配置环境变量:

sudo gedit ~/.profile

配置内容:
export QT_DIR=/usr/local/Qt-5.9.9/
export PATH=$QT_DIR/bin:$PATH
export LD_LIBRARY_PATH=$QT_DIR/lib:$LD_LIBRARY_PATH

配置完成后,需要重启电脑/虚拟机。
在终端中输入qmake -v命令,若输出一下信息,则表示qt源码编译安装成功:
在这里插入图片描述

3. pcl源码编译安装

  1. 源码下载:https://github.com/PointCloudLibrary/pcl/releases
  2. 解压pcl-pcl-1.9.1.tar.gz
  3. 安装
cd pcl-pcl-1.9.1
mkdir pcl-1.9.1-build
cd pcl-1.9.1-build
cmake ..  -DCMAKE_BUILD_TYPE=Release
make -j2
sudo make install

4. 测试程序

测试程序

#include <iostream> 
#include <pcl/io/pcd_io.h>           //PCD读写类相关的头文件
#include <pcl/point_types.h>      //PCL中支持的点类型的头文件

int
  main (int argc, char** argv)
{
  //实例化的模板类PointCloud  每一个点的类型都设置为pcl::PointXYZ
/*************************************************
 点PointXYZ类型对应的数据结构
    Structure PointXYZ{
     float x;
     float y;
     float z;
    };
**************************************************/
  pcl::PointCloud<pcl::PointXYZ> cloud;

  // 创建点云  并设置适当的参数(width height is_dense)
  cloud.width    = 5;
  cloud.height   = 1;
  cloud.is_dense = false;  //不是稠密型的
  cloud.points.resize (cloud.width * cloud.height);  //点云总数大小
   //用随机数的值填充PointCloud点云对象
  for (size_t i = 0; i < cloud.points.size (); ++i)
  {
    cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
    cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
    cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
  }
  //把PointCloud对象数据存储在 test_pcd.pcd文件中
  pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);

//打印输出存储的点云数据
  std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;

  for (size_t i = 0; i < cloud.points.size (); ++i){
    std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
  }
  return (0);
}

cmake文件

cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
project(pcl_test)
find_package(PCL REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
 
include_directories(/usr/include)
 
link_directories(${PCL_LIBRARY_DIRS})
 
add_definitions(${PCL_DEFINITIONS})
 
add_executable(pcl_test pcl_test.cpp)
 
target_link_libraries(pcl_test 
${PCL_COMMON_LIBRARIES}
${PCL_IO_LIBRARIES}
boost_system
)

运行结果

cmake .
make
./pcl_test

result:
Saved 5 data points to test_pcd.pcd.
    0.352222 -0.151883 -0.106395
    -0.397406 -0.473106 0.292602
    -0.731898 0.667105 0.441304
    -0.734766 0.854581 -0.0361733
    -0.4607 -0.277468 -0.916762

;