PCL点云库(Point Cloud Library)简介

什么是PCL

PCLPoint Cloud Library)是在吸取了前人点云相关研究基础上创建起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操做系统平台,可在WindowsLinuxAndroidMac OS X、部分嵌入式实时系统上运行。若是说OpenCV2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具备同等地位,PCLBSD受权方式,能够免费进行商业和学术应用。android

PCL的发展与创景

PCL起初是ROSRobot Operating System)下由来自于慕尼黑大学(TUM - Technische Universität München)和斯坦福大学(Stanford UniversityRadu博士等人维护和开发的开源项目,主要应用于机器人研究应用领域,随着各个算法模块的积累,于2011年独立出来,正式与全球3D信息获取、处理的同行一块儿,组建了强大的开发维护团队,以多所知名大学、研究所和相关硬件、软件公司为主,可参考图1。截止目前,发展很是迅速,不断有新的研究机构等加入,在Willow Garage, NVidia, Google (GSOC 2011), Toyota, Trimble, Urban Robotics, Honda Research Institute等多个全球知名公司的资金支持下,可参考图1,不断提出新的开发计划,代码更新很是活跃,至今在不到一年的时间内从1.0版本已经发布到1.7.0版本。算法


1 加入或资助PCL的开发组织、研究所、公司编程


2 加入PCL开发的组织全球地理分布ubuntu

PCL是集体智慧的结晶,是你们共同努力的结果。若是没有这些人的贡献,也就不可能有PCL的出现,笔者在此表示无比敬仰。网络

随着加入组织的增多,PCL官方目前的计划是继续加入不少新的功能模块和算法的实现,包括当前最新的3D相关的处理算法,如基于PrimeSensor 3D设备,微软Kinect或者华硕的XTionPRO智能交互应用等,详细读者能够参考官方网站每期的新闻,并且也计划进一步支持使用CUDA OpenCL等基于GPU的高性能计算的技术。笔者相信在近几年内会有更多的人和组织加入到这个项目中来,共享开源PCL带来的各自领域的成果。数据结构

PCL的潜在应用领域

前面讲述了,在这么短期,如此多的组织我的和公司加入到PCL开源项目中来,为何?PCL能解决什么问题呢?架构

机器人领域

移 动机器人对其工做环境的有效感知、辨识与认知,是其进行自主行为优化并可靠完成所承担任务的前提和基础。如何实现场景中物体的有效分类与识别是移动机器人 场景认知的核心问题,目前基于视觉图像处理技术来进行场景的认知是该领域的重要方法。但移动机器人在线获取的视觉图像质量受光线变化影响较大,特别是在光 线较暗的场景更难以应用,随着RGBD获取设备的大量推广,在机器人领域势必掀起一股深度信息结合2D信息的应用研究热潮,深度信息的引入可以使机器人更好地对环境进行认知、辨识,与图像信息在机器人领域的应用同样,须要强大智能软件算法支撑,PCL就为此而生,最重要的是PCL自己就是为机器人而发起的开源项目,PCL中不只提供了对现有的RGBD信息的获取设备的支持,还提供了高效的分割、特征提取、识别、追踪等最新的算法,最重要的是它能够移植到androidubuntu等主流Linux平台上,PCL无疑将会成为机器人应用领域一把瑞士军刀。模块化

CAD/CAM、逆向工程

大部分工业产品是根据二维或三维CAD模 型制造而成,但有时由于数据丢失、设计屡次更改、实物引进等缘由,产品的几何模型没法得到,于是经常须要根据现有产品实物生成物体几何模型。逆向工程技术 可以对产品实物进行测绘,重构产品表面三维几何模型,生成产品制造所需的数字化文档。在一些工业领域,如汽车制造业,许多零件的几何模型都经过逆向工程由 油泥模型或实物零件得到,目前在CAD/CAM领域利用激光点云进行高精度测量与重建成为趋势,同时引来了新的问题,经过获取的海量点云数据,来提取重建模型的几何参数,或者形状模型,对模型进行智能检索,从点云数据获取模型的曲面模型等,诸如此类的问题解决方案在PCL中都有涉及。例如kdtreeoctree对海量点云进行高效压缩存储与管理,其中滤波、配准、特征描述与提早基础处理,能够应用于模型的智能检索,以及后期的曲面重建和可视化都在PCL中有相应的模块。总之,三维点云数据的处理是逆向工程中比较重要的一环,PCL中间全部的模块正是为此而生的。性能

激光遥感测量

能 够直接获取高精度三维地面点数据,是对传统测量技术在高程数据获取及自动化快速处理方面的重要技术补充。激光遥感测量系统在地形测绘、环境检测、三维城市 建模、地球科学、行星科学等诸多领域具备普遍的发展前景,是目前最早进的能实时获取地形表面三维空间信息和影像的遥感系统。目前,在各类提取地面点的算法 中,算法结果与世界结果之间差异较大,违背了实际状况,PCL中强大的模块能够助力此处的各类需求。单元测试

虚拟现实、人机交互

    虚拟现实技术(简称VR), 又称灵境技术,是以沉浸性、交互性和构想性为基本特征的计算机高级人机界面。它综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络 技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感受器官功能,令人可以沉浸在计算机生成的虚拟境界中,并可以经过语言、手势等天然的方式 与之进行实时交互,建立了一种适人化的多维信息空间,具备广阔的应用前景。目前各类交互式体感应用的推出,让虚拟现实与人机交互发展很是迅速,以微软、华 硕、三星等为例,目前诸多公司推出的RGBD解决方案,势必会让虚拟现实走出实验室,由于现有的RGBD设备已经开始大量推向市场,只是缺乏,其余应用的跟进,这正是在为虚拟现实和人机交互应用铸造生态链的底部,笔者认为这也正是PCL为什么在此时才把本身与世人分享的重要缘由所在,它将是基于RGBD设备的虚拟现实和人机交互应用生态链中最重要的一个环节。让咱们抓住这一个节点,立足于交互式应用的一片小天地,希望本书来的不是太迟。

PCL在中国

PCL虽然在国际上,有如此多的组织和公司参与,因为发展如此迅速,目前在google中检索出中文相关的PCL探讨,有且只有一条,固然这也是笔者出书缘由之一了,事实上,如图1.2所示,在全球范围内,惟独在中国的版块上,没有参与组织,这里但愿广大读者,能够为中国板块上添加一个小旗帜。固然,确定有科研工做者的在应用或者学习PCL了,笔者依托于中国农业大学、农业部信息获取重点实验室,在与创始人Ruda博士交流后,深感PCL在复杂的农业对象中有不可估量的做用,例如对动植物的重建测度、果蔬等分级检测等应用领域,决定把PCL做为基础研究平台来开展实际应用。同时用学习笔记撰写了本书,把PCL与国人分享,相信在不久的未来,与2D信息处理库OpenCV同样,中国将是PCL最大的用户和贡献者基地。

PCL的结构和内容

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

PCL利用OpenMPGPUCUDA等先进高性能计算技术,经过并行化提升程序实时性。K近邻搜索操做的构架是基于FLANN (Fast Library for Approximate Nearest Neighbors)所实现的,速度也是目前技术中最快的。PCL中的全部模块和算法都是经过Boost共享指针来传送数据的,于是避免了屡次复制系统中已存在的数据的须要,从0.6版本开始,PCL就已经被移入到WindowsMacOSLinux系统,而且在Android系统也已经开始投入使用,这使得PCL的应用容易移植与多方发布。

3 PCL架构图

从算法的角度,PCL是 指归入了多种操做点云数据的三维处理算法,其中包括:过滤,特征估计,表面重建,模型拟合和分割,定位搜索等。每一套算法都是经过基类进行划分的,试图把 贯穿整个流水线处理技术的全部常见功能整合在一块儿,从而保持了整个算法实现过程当中的紧凑和结构清晰,提升代码的重用性、简洁可读。在PCL中一个处理管道的基本接口程序是:

建立处理对象:(例如过滤、特征估计、分割等);

使用setInputCloud经过输入点云数据,处理模块;

设置算法相关参数;

调用计算(或过滤、分割等)获得输出。

为了进一步简化和开发,PCL被分红一系列较小的代码库,使其模块化,以便可以单独编译使用提升可配置性,特别适用于嵌入式处理中:

libpcl filters:如采样、去除离群点、特征提取、拟合估计等数据实现过滤器;

 libpcl features:实现多种三维特征,如曲面法线、曲率、边界点估计、矩不变量、主曲率,PFHFPFH特征,旋转图像、积分图像,NARF描述子,RIFT,相对标准误差,数据强度的筛选等等;

libpcl I/O:实现数据的输入和输出操做,例如点云数据文件(PCD)的读写;

 libpcl segmentation:实现聚类提取,如经过采样一致性方法对一系列参数模型(如平面、柱面、球面、直线等)进行模型拟合点云分割提取,提取多边形棱镜内部点云等等;

  • libpcl surface:实现表面重建技术,如网格重建、凸包重建、移动最小二乘法平滑等;

  libpcl register:实现点云配准方法,如ICP等;

  libpclkeypoints:实现不一样的关键点的提取方法,这能够用来做为预处理步骤,决定在哪儿提取特征描述符;

 libpcl range :实现支持不一样点云数据集生成的范围图像。

为了保证PCL中操做的正确性,上述提到的库中的方法和类包含了单位和回归测试。这套单元测试一般都是由专门的构建部门按需求编译和验证的。当某一部分测试失败时,这些特定部分的各自做者就会当即被告知。这完全地保证了代码测试过程出现的任何变故,以及新功能或修改都不会破坏PCL中已经存在的代码。

 

参考文献

1.  http://pointclouds.org/2012/11/9

2.  朱德海,郭浩,苏伟,点云库PCL学习教程,北京航空航天出版社,2012-10-1

相关文章
相关标签/搜索