PCL官方教程:http://pointclouds.org/documentation/tutorials/
PCL官方github库: https://github.com/PointCloudLibrary/pcl.git
github库太慢了,使用国内镜像码云库
Gitee.com 码云库: https://gitee.com/mirrors/pcl
背景
 Ubuntu16.04 + pcl-1.10
安装
 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 libflann1.8 libflann-dev
 sudo apt-get install libeigen3-dev
 sudo apt-get install libboost-all-dev
注意这里libvtk的版本需要与pcl匹配,如安装的pcl是1.9以上,需要使用 vtk6.2
pcl>1.9 则使用 sudo apt-get install libvtk6.2 libvtk6.2-qt libvtk6-dev
否则,会在运行测试demo时,会报错,下文会给出解决办法
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 libopenni2-dev
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 vtk介绍:(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。
2、 下载源码
https://github.com/PointCloudLibrary/pcl.git
git clone https://gitee.com/mirrors/pcl
 git checkout pcl-1.10.0
 1
 2
 3
 gitee 国内镜像 每天同步一次github数据
3、编译源码
cd pcl
 mkdir build
 cd build
 cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr 
 -DBUILD_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON 
 -DCMAKE_INSTALL_PREFIX=/usr …
 make
 1
 2
 3
 4
 5
 6
 7
 4、安装
sudo make install
 1
 5、测试
创建test/test_pcl.cpp文件
#include 
 #include <pcl/common/common_headers.h>
 #include <pcl/io/pcd_io.h>
 #include <pcl/visualization/pcl_visualizer.h>
 #include <pcl/visualization/cloud_viewer.h>
 #include <pcl/console/parse.h>
 using namespace pcl;
int main(int argc, char const *argv[])
 {
 std::cout << “Test Pcl !” << std::endl;
 PointCloud::Ptr point_cloud_ptr(new PointCloud);
 uint8_t r(255), g(15), b(15);
 for(float z(-1.0); z <= 1.0; z += 0.05){
 for(float angle(0.0); angle <= 360.0; angle += 5.0){
 PointXYZRGB point;
 point.x = 0.5 * cosf (deg2rad(angle));
 point.y = sinf (deg2rad(angle));
 point.z = z;
		uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
			static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
		point.rgb = *reinterpret_cast<float*>(&rgb);
		point_cloud_ptr->points.push_back (point);
	}
	if(z < 0.0){
		r -= 12;
		g += 12;
	} else {
		g -= 12;
		b += 12;
	}
}
point_cloud_ptr->width = (int) point_cloud_ptr->points.size();
point_cloud_ptr->height = 1;
visualization::CloudViewer viewer("PCL Test");
viewer.showCloud(point_cloud_ptr);
while(!viewer.wasStopped()){};
return 0;
 
}
1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 创建test/CMakeList.txt
cmake_minimum_required(VERSION 2.6)
 project(pcl_test)
#要求工程依赖的PCL最低版本为1.2,并且版本至少包含common和IO两个模块 这里的REQUIRED意味着如果对应的库找不到 则CMake配置的过程将完全失败,
 #因为PCL是模块化的,也可以如下操作:
一个组件 find_package(PCL 1.6 REQUIRED COMPONENTS io)
多个组件 find_package(PCL 1.6 REQUIRED COMPONENTS commom io)
所有组件 find_package(PCL 1.6 REQUIRED )
find_package(PCL 1.2 REQUIRED)
#下面的语句是利用CMake的宏完成对PCL的头文件路径和链接路径变量的配置和添加,如果缺少下面几行,生成文件的过程中就会提示
 #找不到相关的头文件,在配置CMake时,当找到了安装的PCL,下面相关的包含的头文件,链接库,路径变量就会自动设置
PCL_FOUND:如果找到了就会被设置为1 ,否则就不设置
PCL_INCLUDE_DIRS:被设置为PCL安装的头文件和依赖头文件的目录
PCL_LIBRARIES:被设置成所建立和安装的PCL库头文件
PCL_LIBRARIES_DIRS:被设置成PCL库和第三方依赖的头文件所在的目录
PCL_VERSION:所找到的PCL的版本
PCL_COMPONENTS:列出所有可用的组件
PCL_DEFINITIONS:列出所需要的预处理器定义和编译器标志
include_directories(
    
     
      
       
        
         P
        
        
         C
        
        
         
          L
         
         
          I
         
        
        
         N
        
        
         C
        
        
         L
        
        
         U
        
        
         D
        
        
         
          E
         
         
          D
         
        
        
         I
        
        
         R
        
        
         S
        
       
       
        )
       
       
        l
       
       
        i
       
       
        n
       
       
        
         k
        
        
         d
        
       
       
        i
       
       
        r
       
       
        e
       
       
        c
       
       
        t
       
       
        o
       
       
        r
       
       
        i
       
       
        e
       
       
        s
       
       
        (
       
      
      
       {PCL_INCLUDE_DIRS}) link_directories(
      
     
    PCLINCLUDEDIRS)linkdirectories({PCL_LIBRARY_DIRS})
 add_definitions(${PCL_DEFINITIONS})
add_executable(pcl_test pcl_test.cpp)
#虽然包含了PCL的头文件,因此编译器知道我们现在访问所用的方法,我们也需要让链接器知道所链接的库,PCL找到库文件由
 #PCL_COMMON_LIBRARIES变量指示,通过target_link_libraries这个宏来出发链接操作
 target_link_libraries (pcl_test ${PCL_LIBRARIES})
install(TARGETS pcl_test RUNTIME DESTINATION bin)
1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 编译test_pcl.cpp
cd test
 mkdir build
 cd build
 cmake …
 make
 1
 2
 3
 4
 5
 报如下错误:
Scanning dependencies of target pcl_test
 [ 50%] Building CXX object CMakeFiles/pcl_test.dir/pcl_test.cpp.o
 /home/bing/Study/pcl/test/pcl_test.cpp:4:46: fatal error: pcl/visualization/pcl_visualizer.h: No such file or directory
 1
 2
 3
 关键报错信息pcl/visualization/pcl_visualizer.h
 打开pcl的安装目录,查看是否存在该include目录,前门编译pcl时,设置的安装目录在/usr/
 进入/usr/include/pcl-1.10/pcl/,发现果真没有visualization目录,安装时出了问题。
解决思路:从pcl的CMakeLists文件可知,需要安装高版本的vtk依赖库,很多教程中的VTK5.10版本
 重新安装VTK76.2版本。无需卸载旧版本,再重新cmake+make编译,再make install安装pcl,可以解决该问题。
打开cpl的 CMakeList.txt 搜索一下关键字vtk,发现需要6.2版本的
安装vtk6.2
sudo apt-get install libvtk6.2 libvtk6.2-qt libvtk6-dev
进入删除原来编译的pcl
cd pcl/build
 sudo rm -rf *
重新编译
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr 
 -DBUILD_GPU=ON -DBUILD_apps=ON -DBUILD_examples=ON 
 -DCMAKE_INSTALL_PREFIX=/usr …
 make
重新安装,无需要删除原来安装的pcl,直接再次安装即可
sudo make install
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 完成后,再次编译test_pcl
cd test/build
 cmake …
 make
运行
./test_pcl
 1
 2
 3
 4
 5
 运行结果如下
————————————————










