在这里插入图片描述

电脑环境

  • Ubuntu 20.04
  • PCL-1.10

安装PCL

直接安装,没有从源码编译安装。

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 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 qt5-default
sudo apt install libpcl-dev

安装后可以在/usr/include/下找到它。
在这里插入图片描述

pcd文件下载链接

下载上面的pcd文件后,进入文件所在的目录,执行:

pcl_viewer pcl_logo.pcd

会弹出窗口显示如下:
在这里插入图片描述

预备知识

PCL库的缺点

PCL提供了很多易用的函数来处理点云,但是在实际项目的使用过程中,比如自己对点云的数据结构有特定的要求,如有序和无序点云,输入有序点云,经过PCL的函数处理之后,可能就会变成无序点云。在实践过程中,大家或多或少都会碰到PCL无法满足自己要求的情况,需要自己通过变通来解决。
这个库的版本也一直在更新,会修复一些Bug、添加一些功能,可以访问GithubReleases来查看新功能。
碰到一些Bug和问题也可以在Issues中查找,自己碰到的很多Bug在其中都可以找到官方开发人员和世界上的广大开发者给出的回答,这样可以大大提供解决Bug的效率。

有序点云和无序点云

网络上多数的博客都是对无序点云进行处理,很少有针对有序点云的。我最近有接触很多有序点云的数据集,发现有序点云的特性有很多优点,但由于PCL经常将有序点云变为无序,又导致很多的麻烦。

无序点云

有序点云的pcd文件使用VScode或者文本编辑器打开会显示如下:
在这里插入图片描述
可以看到第8行的HEIGHT 1,从高度这一参数,就可以确认这是一个无序点云。

有序点云

如果使用VScode打开我这边设备采集到的有序点云的文件,会提示如下
在这里插入图片描述
使用文本编辑强制打开,会得到一系列乱码,如下图所示:
在这里插入图片描述
如果我通过PCL读取该pcd文件,再写入pcd文件,就不会出现乱码,并且仍为有序点云,这可能是采集点云的设备的编码和文本编辑器的编码不同导致的。
可以看到第8行的HEIGHT 1200,从高度这一参数,就可以确认这是一个有序点云。
1920x1200是不是常见图像的宽和高有这一分辨率?,这就是有序点云的特点。可以将有序点云的每个点对应着RGB图片上的每个像素点,只不过有序点云多了一个Z轴方向上的深度数值。

PCL的模版类

经常在点云处理的程序开头看见这行代码:

typedef pcl::PointXYZRGB PointT;
// 或者
typedef pcl::PointXYZRGB PointType;

这样,通过在程序开头修改模版点类型,就可以将程序应用于PointXYZPointXYZRGB等多种不同的点类型,大大提高程序复用性。
当然,用户可以自定义点的类型,来满足自己的实际需求,官方文档也提供了对此的解释:

添加您自己的自定义 PointT类型