【激光雷达】认识点云库PCL

前言

激光雷达生成的点云数据通过可视化显示,是下图中的效果:

能看到激光雷达发射多线激光束(蓝色圆圈形纹),通过接收器进行处理加工,最好可视化展示出来。从图能看到车、行人、路灯杆、周围的建筑物等。

 

那么通过什么来处理这些点云数据呢?

答案是:PCL点云库

目录

简介

特征

PCL的代码库图

PCL项目由哪些开发的?

以下适合纯使用者,快速入门

以下适合开发者,快速入门

安装PCL

开发实践


 

简介

  PCL全称 Point Cloud Library,中文简称:点云库;这个库包含丰富的点云处理函数。点云库(PCL)是一个独立的,大规模的,开放的项目用于2D / 3D图像和点云处理。


 

 

特征

  • PCL是ROS(机器人操作系统)的3D处理主干。
  • 点云库(PCL)可在许多操作系统上运行,并且预构建的二进制文件可用于Linux,Windows和Mac OSX。
  • PCL是根据BSD许可条款发布的,可免费用于商业和研究用途。
  • 为了简化开发,将PCL分为一系列较小的代码库,可以分别进行编译。
  • PCL分为一系列模块化库,包含:filters、features、keypoints、registration、kdtree、segmentation、sample、consensus surface、recognition、visualization。

图中标注了常用的模块函数;

PCL库主要包括:点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化

 

PCL的代码库图

类似于Boost of C ++库。这是一个例子:

PCL项目由哪些开发的?

PCL开源项目,由来自许多不同组织的众多工程师和科学家开发的,分布在世界各地,包括:

 

 

以下适合纯使用者,快速入门

(如果开发者可以跳过,后面介绍)

API文档:http://docs.pointclouds.org/trunk/

如何找到不同版本的API呢??

点击我来查找不同版本的API

用户论坛:http://www.pcl-users.org

 

以下适合开发者,快速入门

PCL开发者论坛:http://www.pcl-developers.org

PCL开源库地址:https://github.com/PointCloudLibrary/pcl

 

如果开发过程中遇到问题,可以在下面提问交流:

开发者教程:http://www.pointclouds.org/documentation/tutorials/

 

其他

PCL点云库的标志

PCL官方博客文章:http://www.pointclouds.org/blog/

 

安装PCL

Ubuntu系统

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

Linux系统

wget https://aur.archlinux.org/packages/pc/pcl/pcl.tar.gz
tar -xzf pcl.tar.gz
cd pcl
makepkg
sudo pacman -U pcl*.xz

安装好后,需要进行配置。参考官网:在自己的项目中使用PCL

 

 

开发实践

1)PCL点云读取和显示

dmeo1 基本的读取与显示

PCL中点云的显示主要有两个类:1. pcl::visualization::CloudViewer;  2. pcl::visualization::PCLVisualizer。

下面代码采用CloudViewer,读取点云数据的pcd文件:

#include  //标准输入输出流
#include  //PCL的PCD格式文件的输入输出头文件
#include  //PCL对各种格式的点的支持头文件
#include   //引入cloud_viewer相关文件int main(int argc, char** argv)
{pcl::PointCloud::Ptr cloud(new pcl::PointCloud); // 创建点云(指针)//读入PCD格式的文件,如果文件不存在,返回-1if (pcl::io::loadPCDFile("D:/PCL_TEST/velodyn_1.pcd", *cloud) == -1) {PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在时,返回错误,终止程序。return (-1);}std::cout << "Loaded "<< cloud->width * cloud->height<< " data points from test_file.pcd with the following fields: "<< std::endl;for (size_t i = 0; i < cloud->points.size (); ++i) //通过for循环,显示所有的点  效率偏慢std::cout << "    " << cloud->points[i].x<< " " << cloud->points[i].y<< " " << cloud->points[i].z << std::endl;pcl::visualization::CloudViewer viewer("pcd viewer");   //建立CloudViewer 对象viewer.showCloud(cloud);   //窗口可视化显示system("pause");return (0);
}

pcl  是一个命名空间,跟std类似;PointCloud是类模板,是模板类实例化的类型。

其中PointXYZ可以替换为PointXYZRGB,、PointXYZRGBA等多种点云的格式。

D:/PCL_TEST/velodyn_1.pcd具有写自己文件放置的位置路径


demo2 基本读取与丰富地显示

pcl::visualization::PCLVisualizer

如果想要更加丰富的点云显示,如给点云添加颜色、显示点云中的法矢、在窗口中自己画图案、自定义视角的位置,可以采用pcl::visualization::PCLVisualizer

官网案例参考:http://www.pointclouds.org/documentation/tutorials/pcl_visualizer.php#pcl-visualizer

下面代码采用PCLVisualizer,读取点云数据的pcd文件:

#include 
#include 
#include 
#include        //前面是导入OpenCV的函数文件
#include   //导入点云可视化的文件using namespace pcl;     //申明命名空间
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));  //创建PCLVisualizer对象int main()
{//定义点云数据pcl::PointCloud::Ptr cloud (new pcl::PointCloud);// 定义读取对象pcl::PCDReader reader;// 读取点云文件reader.read ("D:/PCL_TEST/velodyn_1.pcd", *cloud);  // D:/PCL_TEST/velodyn_1.pcd具有写自己文件放置的位置路径while(true){viewer1->removeAllPointClouds();  // 移除当前所有点云viewer1->addPointCloud(cloud, "test");  viewer1->updatePointCloud(cloud, "test"); viewer1->spinOnce(0.0000000000001);}
}

同样其中PointXYZ可以替换为PointXYZRGB,、PointXYZRGBA等多种点云的格式。

D:/PCL_TEST/velodyn_1.pcd具有写自己文件放置的位置路径

参考:https://blog.csdn.net/lizhengze1117/article/details/89154028?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-13&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-13

 

2)点云库对滤波算法的实现

其原理及算法:直通滤波器、体素滤波器、统计滤波器、半径滤波器  参考:https://www.cnblogs.com/ironstark/p/4991232.html

参考:https://blog.csdn.net/qq_30815237/article/details/86294496

VexelGrid滤波器对点云下采样;参考:https://blog.csdn.net/LimitOut/article/details/102888615

 

 

 

希望对你有帮助。

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部