PCL(Point Cloud Library)学习指南&资料推荐(2022版)

转载:https://zhuanlan.zhihu.com/p/268524083 这里非常的详细,保姆级教程,这里仅当学习

 

 

PCL(Point Cloud Library)学习指南&资料推荐(2022版)

PCL开始上手其实有点容易迷惑,而且PCL文档最近(2020)改版了。里面很多文档和之前的都不一样了,我自己学习PCL时,看的是最新文档,也踩了很多坑,现在分享一下自己的学习方法和思路,希望对大家有所帮助。

顺便放下个人学习代码(有详细中文注解):
自己做了很多笔记,有时间可以整理出来,发出来!
【20201103】系列笔记整理出来了,先放在语雀文档上!



文章最后附上了每个模块的学习资料和代码,大家可以看下!
【20211226】有同学建议给大家录个B站视频演示下【我先自己标记下,后面有空的时候录视频】
【20220128】视频终于录制好啦》PCL(Point Cloud Library)学习入门指南&代码实践(最新版)


新建了一个PCL微信交流群,扫码下图可以加入下(若无法加群,请关注公众号【双愚】后台回复PCL加群)

本文初写於语雀文档,阅读体验更好:

PCL(Point Cloud Library)学习指南&资料推荐 · 语雀:

1 PCL 介绍和安装

首先肯定先介绍下PCL,虽然大家都大概知道了(✿◡‿◡)!如下:

官网和github连接先mark这了。

官网:

GitHub:

下载安装(Ubuntu&Win):

介绍:

  • 点云数据的处理可以采用获得广泛应用的Point Cloud Library (点云库,PCL库)。
  • PCL库是一个最初发布于2013年的开源C++库。它实现了大量点云相关的通用算法和高效的数据管理。
  • 支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的技术结晶,那么PCL在3D信息获取与处理上,就与OpenCV具有同等地位
  • PCL是BSD授权方式,可以免费进行商业和学术应用。

 

下面是PCL架构图(C++模板库)

如图PCL架构图所示,对于3D点云处理来说,PCL完全是一个的模块化的现代C++模板库。其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。

 

 

 

我们主要学习的就是里面各种模块,总体来说16个模块(下图中有15个,少了recognition),如下:

官网各模块:

文章最后附上了每个模块的学习资料和代码,大家可以看下!

各种模块

 

每个模块都有依赖关系,依赖关系如下图(可以看出有四层),最基本的就是最底层的commom模块。

箭头对应的是依赖关系,比如第二层的kdtree依赖于common;第四层的registration有四个箭头,分别是sample_consensus, kdtree, common, features。

官方图

 

B站up主画的更详细的图

B站up主画的更详细的图

2 PCL学习指南

PCL最近(2020)改版了。里面很多文档和之前的都不一样了,我自己学习PCL时时,是看的最新文档,也踩了很多坑,现在分享一下自己的学习方法和思路,希望对大家有所帮助。

2.1 理解入门

先放下入门资料(后面会介绍):
1. 视频:bilibili-PCL点云库官网教程
2. 点云库PCL学习教程书籍每章总结:

大家应该都明白,官方文档是最好的学习资料,但目前没有中文版,我看有些博主也翻译了一部分,现在特意整理了下!

第一步,首先,大家什么都不了解的话,强烈推荐大家看这个视频入门:bilibili-PCL点云库官网教程

 

bibili-PCL点云库官网教程

 

第二步,然后,有一本中文教程大家应该知道:

点云库PCL学习教程,朱德海,北京航空航天大学出版社:https://book.douban.com/subject/20283456/

这本书好多人吐槽,因为就是英文的官方文档翻译过来的,还有一些错误信息。

不过作为入门还是挺好的,里面有附带的代码demo(就是官网上的),下面是书籍PDF版和示例代码,有需要的可以看下。

百度网盘资料:
链接:
提取码:g6ny

 

百度网盘资料

但是这本书我没有看,因为当时在github上发现了一个人总结的书中的笔记,如下。

文档写的还挺好的,大家可以先看这个打基础,对PCL有个宏观的了解!

 

PCL各章节笔记

经过上面两步,大家应该对PCL有所了解,然后我们就敲代码吧!

2.2 代码实践

代码实践资料:
1 官方各模块示例(和对应的对象函数对照着看)【英文】:
2 官方各模块对应的对象和函数【英文】:

 点击网站中的12宫图,每一格对应一个模块的对象函数详解
黑马机器人系列文档:PCL-3D点云
CSDN博主系列文章PCL学习(64篇)
个人学习代码(有详细中文注解):
和配套系列文章:PCL(Point Cloud Library)学习记录(2022) · 语雀

代码学习主要看两块:官方示例demo + 每个示例中的对象函数介绍。

主要结合这两块来看:边看示例代码,边看代码里面对象函数的参数详情。

2.2.1官方示例demo代码(官方英文,后面可以结合中文注解一起看,下面有写)

各模块的官方示例demo位置在网站侧边栏。如下图

各模块的官方示例demo位置在网站侧边栏

 

2.2.2各模块的函数详解

进入各模块有两种方式

  • 下面链接侧边栏也都是各模块函数详情,如下图:

  • 官网的Getting Started中的12宫图,每一格对应一个模块的对象函数详解,如下图

 

侧边栏也都是各模块函数详情

官网的Getting Started中的12宫图,每一格对应一个模块的对象函数详解

2.2.3单个模块学习举例(比如IO模块

总的学习方法:
先将要学的官网IO模块的实例demo代码和IO模块函数的详解页面打开。
然后将模块介绍和中文代码注释的博客打开,一起学习!
个人学习代码(有详细中文注解):
和配套系列文章:PCL(Point Cloud Library)学习记录(2022) · 语雀

首先,将官网IO模块的实例demo代码和IO模块函数的详解页面打开,如下图:

实例demo代码(实战) 每个模块都有几个demo代码,点击进去里面有代码的解释

IO模块函数class

同时,可以结合看中文详情博客笔记:

从PCD文件写入和读取点云数据

个人学习代码(有详细中文注解):

实例demo代码(实战) 每个模块都有几个demo代码

每个示例都有对应代码和解释

 

对照中文博客更佳

 

IO模块函数class

再放下个人学习代码(有详细中文注解):
自己做了很多笔记,有时间可以整理发出来。

3 经验和推荐资料总结

先说下这位博主的建议,我觉得挺好的:

关于如何查找和利用PCL库学习资源的一些心得

  • 博主个人推荐是把PCL官网的“API Documentation”、“Tutorial”和《点云库PCL学习教程2》结合起来用效果会比较好。如果你需要用到某项功能,先去看原版的PCL官网的“API Documentation”、“Tutorial”获取最原汁原味的“第一感觉”,然后再去看《点云库PCL学习教程2》进行“中文亲切版收割”,其中还可以顺便收割一波“理论背景与整理”。先啃硬骨头,然后云里笑。
  • 看例程,需要用哪块就直接上实例熟悉代码和库。多调试代码,慢慢就熟悉了。每个人都得经历这个过程。

3.1系列资料汇总

入门资料:

链接:

提取码:g6ny

代码实践资料:

 

4 附每个模块学习链接

代码自己一定要动手敲一遍

02kdtree k维tree

官网demo:

对应函数:

详细中文博客:

03octree 八叉树

官网demo:

对应函数:

详细中文博客文章:

05sample consensus 抽样一致性模块

官网demo:

对应函数:

详细中文博客文章:

系列

PCL采样一致性算法

PCL几种采样方法

  1. 下采样 Downsampling
  2. 均匀采样:这个类基本上是相同的,但它输出的点云索引是选择的关键点在计算描述子的常见方式。
  3. 增采样 :增采样是一种表面重建方法,当你有比你想象的要少的点云数据时,增采样可以帮你恢复原有的表面(S)
  4. 表面重建:深度传感器的测量是不准确的,和由此产生的点云也是存在的测量误差,比如离群点,孔等表面,可以用一个算法重建表面,遍历所有的点云和插值数据,试图重建原来的表面。比如增采样,PCL使用MLS算法和类。执行这一步是很重要的,因为由此产生的点云的法线将更准确。

06range-images深度图像

官方demo:

How to create a range image from a point cloud

How to extract borders from range images

对应函数:无

详细中文博客文章:

PCL深度图像(1)

PCL深度图像(2)

可视化深度图像

08 io 输入输出

官方demo

documentation(class和function函数)

code

详情笔记:

从PCD文件写入和读取点云数据

连接两个点云中的字段或数据形成新点云以及Opennni Grabber初识

 

09 filters 滤波

官方示例:

对应函数:

 

详细中文博客文章:

PCL滤波介绍(1)

PCL滤波介绍(2)

PCL滤波介绍(3)

10 features 特征

官网demo:

函数:

详细中文博客文章:

3D 特征点概述(1)

3D 特征点概述(2)

 

PCL点云特征描述与提取(1)

PCL点云特征描述与提取(2)

PCL点云特征描述与提取(3)

PCL点云特征描述与提取(4)

 

11 surface表面

官网demo:

函数:

详细中文博客文章:

pcl几种表面重建_3D的博客-CSDN博客

PCL点云曲面重建(1)

PCL法线估计

12 segmentation分割

官网demo:

函数:

详细中文博客文章:

PCL中分割_欧式分割(1)

PCL中分割方法的介绍(2)

PCL中分割方法的介绍(3)

 

PCL点云分割(1)

PCL点云分割(2)

PCL点云分割(3)

13 recognition识别

官网demo:

函数:

详细中文博客文章:

14 registration配准

官网demo:

函数:

中文博客文章:

黑马机器人 | PCL-3D点云

PCL中的点云ICP配准(附源代码和数据)_qq_29462849的 ...

15 visualization可视化

官网demo:

类/对象/函数:

详细中文博客文章:

16 keypoints关键点

官网demo:

类/对象/函数:

详细中文博客文章:

PCL关键点(1)

posted on 2022-10-18 21:49  Sanny.Liu-CV&&ML  阅读(1650)  评论(0编辑  收藏  举报

导航