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

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

版权

双愚

https://zhuanlan.zhihu.com/p/268524083?utm_source=wechat_session

 

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

顺便放下个人学习代码 (有详细中文注解)https://github.com/HuangCongQing/pcl-learning
自己做了很多笔记,有时间可以整理出来,发出来!
【20201103】系列笔记整理出来了,先放在语雀文档上,后续发在知乎上!PCL(Point Cloud Library)学习记录(2021) · 语雀

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

PCL(Point Cloud Library)学习指南&资料推荐 · 语雀​www.yuque.com图标

1 PCL 介绍

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

官网和github连接先mark这了。

官网:https://pointclouds.org/

GitHub:https://github.com/PointCloudLibrary/pcl

介绍:

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

 

下面是PCL架构图

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

 

 

 

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

官网各模块:https://pcl.readthedocs.io/projects/tutorials/en/latest/#

 

各种模块

 

每个模块都有依赖关系,依赖关系如下图(可以看出有四层),最基本的就是最底层的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学习教程书籍每章总结: https://github.com/MNewBie/PCL-Notes

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

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

 

bibili-PCL点云库官网教程

 

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

点云库PCL学习教程,朱德海,北京航空航天大学出版社

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

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

百度网盘资料:
链接: https://pan.baidu.com/s/1ziq8s_kj5QpM8eXO_d6RJg
提取码:g6ny

 

百度网盘资料

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

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

https://github.com/MNewBie/PCL-Notes

 

PCL各章节笔记

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

2.2 代码实践

代码实践资料:
1  官方各模块示例(和对应的对象函数对照着看)【英文】: https://pcl.readthedocs.io/projects/tutorials/en/latest/#
2 官方各模块对应的对象和函数【英文】:
https://pointclouds.org/documentation/modules.html
https://pointclouds.org/  点击网站中的12宫图,每一格对应一个模块的对象函数详解
3  黑马机器人系列文档:PCL-3D点云http://robot.czxy.com/docs/pcl/
4  CSDN博主系列文章PCL学习(64篇)https://www.cnblogs.com/li-yao7758258/category/954066.html

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

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

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

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

https://pcl.readthedocs.io/projects/tutorials/en/latest/#

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

 

2.2.2各模块的函数详解

进入各模块有两种方式

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

https://pointclouds.org/documentation/modules.html

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

https://pointclouds.org/

 

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

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

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

总的学习方法:
先将要学的 官网IO模块的实例demo代码和IO模块函数的详解页面打开。
然后将 模块介绍和中文代码注释的博客打开,一起学习!

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

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

IO模块函数class

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

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

http://robot.czxy.com/docs/pcl/chapter01/io/

个人学习代码(有详细中文注解)https://github.com/HuangCongQing/pcl-learning

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

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

 

对照中文博客更佳

 

IO模块函数class

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

3 经验和推荐资料总结

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

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

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

3.1系列资料汇总

入门资料:

链接:https://pan.baidu.com/s/1ziq8s_kj5QpM8eXO_d6RJg

提取码:g6ny

代码实践资料:

 

4 附每个模块学习链接

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

02kdtree k维tree

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/index.html#kdtree

对应函数https://pointclouds.org/documentation/group__kdtree.html

详细中文博客https://www.cnblogs.com/li-yao7758258/p/6437440.html

https://zhuanlan.zhihu.com/p/144991935

03octree 八叉树

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#octree

对应函数:https://pointclouds.org/documentation/group__octree.html

详细中文博客文章

05sample consensus 抽样一致性模块

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#sample-consensus

对应函数https://pointclouds.org/documentation/group__sample__consensus.html

详细中文博客文章

http://robot.czxy.com/docs/pcl/chapter02/RANSAC/系列

PCL采样一致性算法

PCL几种采样方法

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

06range-images深度图像

官方demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#range-images

How to create a range image from a point cloud

How to extract borders from range images

对应函数

http://robot.czxy.com/docs/pcl/chapter02/range_image/

PCL深度图像(1)

PCL深度图像(2)

可视化深度图像

08 io 输入输出

官方demo

documentation(class和function函数)

code

详情笔记:

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

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

 

09 filters 滤波

官方示例:https://pcl.readthedocs.io/projects/tutorials/en/latest/index.html#filtering

对应函数https://pointcloudlibrary.github.io/documentation/group__filters.html

 

详细中文博客文章

PCL滤波介绍(1)

PCL滤波介绍(2)

PCL滤波介绍(3)

10 features 特征

官网demo:https://pcl.readthedocs.io/projects/tutorials/en/latest/index.html#features

函数https://pointcloudlibrary.github.io/documentation/group__features.html

详细中文博客文章

3D 特征点概述(1)

3D 特征点概述(2)

 

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

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

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

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

 

11 surface表面

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#surface

函数https://pointcloudlibrary.github.io/documentation/group__surface.html

 

详细中文博客文章

http://robot.czxy.com/docs/pcl/chapter04/resampling/

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

 

PCL点云曲面重建(1)

PCL法线估计

12 segmentation分割

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#segmentation

函数https://pointclouds.org/documentation/group__segmentation.html

详细中文博客文章

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

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

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

 

PCL点云分割(1)

PCL点云分割(2)

PCL点云分割(3)

13 recognition识别

官网demo:

https://pcl.readthedocs.io/projects/tutorials/en/latest/#recognition

函数https://pointclouds.org/documentation/group__recognition.html

详细中文博客文章

https://github.com/Ewenwan/MVision/tree/master/PCL_APP/Recognition

14 registration配准

官网demo:https://pcl.readthedocs.io/projects/tutorials/en/latest/#registration

函数https://pointcloudlibrary.github.io/documentation/group__registration.html

中文博客文章:

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

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

15 visualization可视化

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#visualization

类/对象/函数:https://pointcloudlibrary.github.io/documentation/group__visualization.html

详细中文博客文章

16 keypoints关键点

官网demohttps://pcl.readthedocs.io/projects/tutorials/en/latest/#keypoints

类/对象/函数:https://pointclouds.org/documentation/group__keypoints.html

详细中文博客文章

http://robot.czxy.com/docs/pcl/chapter02/keypoints/

PCL关键点(1)


以上,附个人学习代码(有详细中文注解)

HuangCongQing/pcl-learning​github.com图标

 

 

  • 32
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值