【激光雷达】认识点云库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
希望对你有帮助。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
