PointCloudLibrary点云库介绍
PointCloudLibrary点云库介绍
PCL(Point Cloud Library)学习指南&资料推荐(2020版)
PCL开始上手其实有点容易迷惑,而且PCL文档最近(2020)改版了。里面很多文档和之前的都不一样了,我自己学习PCL时,看的是最新文档,也踩了很多坑,现在分享一下自己的学习方法和思路,希望对大家有所帮助。
顺便放下个人学习代码(有详细中文注解):https://github.com/HuangCongQing/pcl-learning
自己做了很多笔记,有时间可以整理出来,发出来!
【20201103】系列笔记整理出来了,先放在语雀文档上,后续发在知乎上!PCL(Point Cloud Library)学习记录(2020) · 语雀
本文初写於语雀文档,阅读体验更好:
PCL(Point Cloud Library)学习指南&资料推荐:
https://www.yuque.com/huangzhongqing/pcl/rdk5k8
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/#
- 01common
- 02kdtree k维tree
- 03octree 八叉树
- 04search
- 05sample consensus 抽样一致性模块
- 06range-images深度图像
- 07tracking (此模块,没有官方示例代码)
- 08 io 输入输出
- 09 filters 滤波
- 10 features 特征
- 11 surface表面
- 12 segmentation分割
- 13 recognition识别(下图中没有)
- 14 registration配准
- 15 visualization可视化
- 16 keypoints关键点
每个模块都有依赖关系,依赖关系如下图(可以看出有四层),最基本的就是最底层的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代码,点击进去里面有代码的解释
- shttps://pcl.readthedocs.io/projects/tutorials/en/latest/index.html#i-o
IO模块函数class
- https://pointcloudlibrary.github.io/documentation/group__io.html
同时,可以结合看中文详情博客笔记:
从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系列资料汇总
入门资料:
- 视频:bilibili-PCL点云库官网教程
- 点云库PCL学习教程书籍每章总结:https://github.com/MNewBie/PCL-Notes
- 百度网盘资料:
链接:https://pan.baidu.com/s/1ziq8s_kj5QpM8eXO_d6RJg
提取码:g6ny
代码实践资料:
- 官方各模块示例(和对应的对象函数对照着看)【英文】:https://pcl.readthedocs.io/projects/tutorials/en/latest/#
- 官方各模块对应的对象和函数【英文】:
- https://pointclouds.org/documentation/modules.html
- https://pointclouds.org/ 点击网站中的12宫图,没一格对应一个模块的对象函数详解
- 黑马机器人系列文档:PCL-3D点云:http://robot.czxy.com/docs/pcl/
- CSDN博主系列文章PCL学习(64篇):https://www.cnblogs.com/li-yao7758258/category/954066.html
4 附每个模块学习链接
代码自己一定要动手敲一遍
02kdtree k维tree
官网demo:https://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 八叉树
官网demo:https://pcl.readthedocs.io/projects/tutorials/en/latest/#octree
- 点云压缩
- 将学习如何压缩单点云和点云流
- 使用八进制进行空间分区和搜索操作
- 学习如何使用八叉树进行空间分区和最近邻居搜索
- 无组织点云数据的空间变化检测没有看
- 学习如何使用八叉树检测点云内的空间变化
对应函数:https://pointclouds.org/documentation/group__octree.html
详细中文博客文章:
- PCL学习八叉树
- PCLVisualizer可视化类
05sample consensus 抽样一致性模块
官网demo:https://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几种采样方法
- 下采样 Downsampling
- 均匀采样:这个类基本上是相同的,但它输出的点云索引是选择的关键点在计算描述子的常见方式。
- 增采样 :增采样是一种表面重建方法,当你有比你想象的要少的点云数据时,增采样可以帮你恢复原有的表面(S)
- 表面重建:深度传感器的测量是不准确的,和由此产生的点云也是存在的测量误差,比如离群点,孔等表面,可以用一个算法重建表面,遍历所有的点云和插值数据,试图重建原来的表面。比如增采样,PCL使用MLS算法和类。执行这一步是很重要的,因为由此产生的点云的法线将更准确。
06range-images深度图像
官方demo:https://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
- shttps://pcl.readthedocs.io/projects/tutorials/en/latest/index.html#i-o
documentation(class和function函数)
- https://pointcloudlibrary.github.io/documentation/group__io.html
code
- https://github.com/HuangCongQing/pcl-learning/blob/master/08IO%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA
详情笔记:
从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表面
官网demo:https://pcl.readthedocs.io/projects/tutorials/en/latest/#surface
- Smoothing and normal estimation based on polynomial reconstruction
- Construct a concave or convex hull polygon for a plane model
- Fast triangulation of unordered point clouds
- Fitting trimmed B-splines to unordered point clouds
函数:https://pointcloudlibrary.github.io/documentation/group__surface.html
详细中文博客文章:
http://robot.czxy.com/docs/pcl/chapter04/resampling/
pcl几种表面重建_3D的博客-CSDN博客
PCL点云曲面重建(1)
PCL法线估计
12 segmentation分割
官网demo:https://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
- 3D Object Recognition based on Correspondence Grouping
- Implicit Shape Model
- Tutorial: Hypothesis Verification for 3D Object 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
- The PCL Registration API官网理论
- 使用迭代最近点算法(ICP)How to use iterative closest point
- 如何逐步匹配多幅点云 How to incrementally register pairs of clouds
- 04-配准之交互式ICPInteractive Iterative Closest Point
- 正态分布变换配准(NDT)How to use Normal Distributions Transform
- 手持式小型物品扫描仪 In-hand scanner for small objects
- 刚性物体的鲁棒姿态估计Robust pose estimation of rigid objects
中文博客文章:
- PCL点云配准(1)代码
- PCL点云配准(2)代码
- PCL点云配准(3)理论
- PCL特征点与配准(1)
- 点云NDT配准方法介绍
黑马机器人 | PCL-3D点云
- 01-点云中的数学
- 02-点云配准原理概述
- 03-点云配准流程示例 *
- 使用迭代最近点算法(ICP)
- 正态分布变换配准(NDT)
- 刚性物体的鲁棒姿态估计
- 04-配准之交互式ICP
- 05-点云配准数学原理
PCL中的点云ICP配准(附源代码和数据)_qq_29462849的 ...
15 visualization可视化
官网demo:https://pcl.readthedocs.io/projects/tutorials/en/latest/#visualization
类/对象/函数:https://pointcloudlibrary.github.io/documentation/group__visualization.html
详细中文博客文章:
- PCL 可视化
- PCLVisualizer可视化类
- 可视化深度图像
16 keypoints关键点
官网demo:https://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-learninggithub.com
引用
版权
双愚
码农研究生 自动驾驶/点云视觉感知 | 公众号『重庆小哥稳』
https://www.cnblogs.com/li-yao7758258/category/954066.html?page=1
PCL点云库官网教程
PointCloudLibrary点云库介绍相关推荐
- PDAL点云处理库介绍
点击"蓝字"关注点云PCL,选择"星标"获取最新文章 PDAL是点云数据处理的库.这是一个C/C++开源库,用于点云数据的转换和处理.尽管该库中许多工具的重点和 ...
- 学习笔记:点云库PCL(Point Cloud Library )介绍
本文简要介绍点云库(PCL),一个用于处理2D和3D数据的开源库,如激光雷达点云. 通过熟悉使用PCL的一些基础知识,以便后续使用PCL进行定位.主要涵盖以下内容: 点云数据Point Cloud D ...
- 火盈云库分享创始人陌路老师的采访和软件介绍
互联网是一个神奇的行业,大门不出二门不迈,一根网线一台电脑就可以赚钱.它给我们创造了前所未有的商业机会,让成千上万有梦想,敢想敢干的人通互联网获得了巨大的成功!正因为如此,无数新人涌入这个行业,希望在 ...
- 一文详解点云库PCL
3D is here: Point Cloud Library (PCL) 摘要: 随着新型,低成本的3D传感器硬件的出现(例如Kinect),以及科研人员在高级点云处理研究上的不断努力,3D感知在机 ...
- 编译安装PCL点云库,Kinect2驱动,乐视Astra相机驱动
编译安装PCL点云库 安装方法一 3d点云安装 apt-cache cearch pcl 安装 sudo apt install 上面查出来的 opencv不建议用以上方法因为需要 安装 opencv ...
- 云监控介绍 - Amazon CloudWatch
云监控介绍 - Amazon CloudWatch 作者:张航东 本文主要用于个人学习.总结,欢迎转载,但请务必注明作者和出处,感谢! Amazon CloudWatch 是一项针对 AWS 云资源和 ...
- Ubuntu下安装PCL1.12.1点云库经验分享
Ubuntu下安装PCL点云库经验分享 内容简介 安装ubuntu VMware全屏下不完全显示 换国内镜像源 安装VTK 问题一 问题二 安装PCL 配置vscode c_cpp_propertie ...
- (学习笔记)PCL点云库的基本使用
目录 前言 1.理解点云库 1.1.不同的点云类型 1.2.PCL中的算法 1.3.ROS的PCL接口 2.创建第一个PCL程序 2.1.创建点云 2.2.加载点云文件 2.3.创建点云文件 2.4. ...
- 【免费】小米即时消息云MIMC介绍——免费、简单实现IM
前言 IM是互联网业务重要组成,很多场景下需要即时地.方便地交流.而实现IM较为复杂,需要后台提供连接.投递.存储.统计支持,人力成本和机器成本都很高.所以目前很多用户选择不自己实现IM功能,或者使用 ...
最新文章
- poj 2288(状态压缩dp + TSP问题)
- java基础---IO转换流
- nRFgo Studio 和 Nrfjprog 无法找到JLinkARM.dll的解决方法
- 【CodeChef - CLIQUED 】Bear and Clique Distances(建图,缩点技巧,思维)
- 想不想在手机上敲 Python 代码?!这里有一款推荐方案
- PHP正则表达式学习(一) 模式修正符
- JavaScript 字符串属性和方法
- Python partial
- RapidXml用法
- visio安装问题总结
- SPSS卡方检验结果解读详解
- 数据科学分布——泊松分布
- 博途仿真PLC与第三方客户端通信
- 短信验证码接口被恶意攻击怎么办?
- 小幅震荡市场下的期权投资策略举例
- Can DBC文件翻译
- CodeForces - 1152 B. Neko Performs Cat Furrier Transform
- 在VM虚拟机上装“黑苹果
- andorid身份证输入格式--EditText设置
- Spring Cloud Bus 消息总线