点云及PCL编程基础

点云基础

点云定义

定义:通过测量仪器(激光,三维相机)得到的产品外观表面的点数据集合也称之为点云。

通常使用三维坐标测量机所得到的点数量比较少,点与点的间距也比较大,叫稀疏点云;而使用三维激光扫描仪或照相式扫描仪得到的点云,点数量比较大并且比较密集,叫密集点云或者叫稠密点云。

对点云理解

点云是在和目标物体表面特性的海量点集合。根据激光测量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity)。

当一束激光照射到物体表面时,所反射的激光会携带方位、距离等信息。若将激光束按照某种轨迹进行扫描,便会边扫描边记录到反射的激光点信息,由于扫描极为精细,则能够得到大量的激光点,因而就可形成激光点云。

根据摄影测量原理得到的点云,包括三维坐标(XYZ)和颜色信息(RGB)。结合激光测量和摄影测量原理得到点云,包括三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)。

在获取物体表面每个采样点的空间坐标后,得到的是一个点的集合,称之为“点云”(Point Cloud)。点云的格式:; *.pts; *.asc ; *.dat; *.stl ; *.imw;*.xyz,PCD;

在PCL点云库中经常使用的点云的格式有pcd,ply,xyz,  这里先介绍一些基本内容,后面的章节将会以程序实例展示以及解释api代码功能。

点云的特性

点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等,

(1)非结构化数据(无网格):点云是分布在空间中的XYZ点。

(3)点云数量上的变化:在图像中,像素的数量是一个给定的常数,取决于相机。然而,点云的数量可能会有很大的变化,这取决于各种传感器。

(3)不变性排列:点云本质上是一长串点(nx3矩阵,其中n是点数)。在几何上,点的顺序不影响它在底层矩阵结构中的表示方式,例如, 相同的点云可以由两个完全不同的矩阵表示。如下图所示:

PCL基础

PCL库简介

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

PCL库简介

我们理解了点云的概念,再看看PCL点云库,这个是我们依赖的编程的基础库,对于点云的处理,有太多的库了,这里我们主要以PCL库为主,

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

对于3D点云处理来说,PCL完全是一个的模块化的现代C++模板库。其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。PCL利用OpenMP、GPU、CUDA等先进高性能计算技术,通过并行化提高程序实时性。K近邻搜索操作的构架是基于FLANN (Fast Library for Approximate Nearest Neighbors)所实现的,速度也是目前技术中最快的。PCL中的所有模块和算法都是通过Boost共享指针来传送数据的,因而避免了多次复制系统中已存在的数据的需要,从0.6版本开始,PCL就已经被移入到Windows,MacOS和Linux系统,并且在Android系统也已经开始投入使用,这使得PCL的应用容易移植与多方发布。

PCL能解决什么问题呢?

机器人领域移动机器人对其工作环境的有效感知、辨识与认知,是其进行自主行为优化并可靠完成所承担任务的前提和基础。如何实现场景中物体的有效分类与识别是

移动机器人场景认知的核心问题,目前基于视觉图像处理技术来进行场景的认知是该领域的重要方法。但移动机器人在线获取的视觉图像质量受光线变化影响较大,特别是在光线较暗的场景更难以应用,随着RGBD获取设备的大量推广,在机器人领域势必掀起一股深度信息结合2D信息的应用研究热潮,深度信息的引入能够使机器人更好地对环境进行认知、辨识,与图像信息在机器人领域的应用一样,需要强大智能软件算法支撑,PCL就为此而生,最重要的是PCL本身就是为机器人而发起的开源项目,PCL中不仅提供了对现有的RGBD信息的获取设备的支持,还提供了高效的分割、特征提取、识别、追踪等最新的算法,最重要的是它可以移植到android、ubuntu等主流Linux平台上

PCL库模块介绍

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

PCL包括多个子模块库。最重要的PCL模块库有如下:过滤器Filters、特征Features、关键点Keypoints、注册Registration、Kd树Kd-tree、八叉树Octree、切分Segmentation、Sample Consensus、Surface、Range Image、文件读写I/O、Visualization、通用库Common、Search在PCL中一个处理管道的基本接口程序是:

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

(2)使用setInputCloud通过输入点云数据,处理模块;

(3)设置算法相关参数;

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

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

之后公众号会发布对每一个模块API更加详细的解释,并结合实例讲解,告诉你如何使用该库函数。

编程基础

PCL库安装

根据PCL库起源于ROS,而ROS是基于Ubuntu的,所以我们安装PCL库在Ubuntu系统上十分简单,但是在windows上也是可以安装的,只是在很多小伙伴的吐槽和询问下,总结出windows配置PCL比容易出错。那么这两种环境的配置都是有博客分享的,可查看博主博客或微信公众号的历史消息查看文章,总之Ubuntu上安装只需几条命令行,windows下安装可能需要你半天甚至好几天。

Cmake基础

经常会有有人问到CMake的学习的问题,而且网上也有很多博客是介绍学习CMake 的用法,但是我觉的学习不用这样死板,用到了就顺便学习一下,也就是边做边学,由浅入深,慢慢的就会熟悉了,这个学习的过程中会遇到很多问题,以解决问题的方式驱动自己学习CMake,首先总结一下CMake 的好处,CMake是一个跨平台编译的工具,所以不再需要折腾平台了,比如Windows需要创建Visual Studio项目文件,配置环境等问题,Linux创建Makefile,OS X创建Xcode项目文件。实际上大部分你的配置都会是一样的,使用CMake会给你很好的项目维护性,也会降低你的维护成本。

Cmake 是kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目。官方网站是www.cmake.org,可以通过访问官方网站获得更多关于cmake 的信息,

Cmake的特点

(1)开放源代码,使用类BSD 许可发布。http://cmake.org/HTML/Copyright.html

(2)  跨平台,并可生成native 编译配置文件,在Linux/Unix 平台,生成makefile,在苹果平台,可以生成xcode,在Windows 平台,可以生成MSVC 的工程文件。

(3)  能够管理大型项目。

(4)  简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。

(5)  高效虑,可扩展,可以为cmake 编写特定功能的模块,扩充cmake 功能。

最后就是C++编程的基础,需要慢慢积累,需要多看多写吧,希望大家和我共同学习,共勉!!

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

(0)

相关推荐

  • CMake编译工具与项目构建

    文章导读 本文从C/C++代码的编译过程入手,弄清楚Make与Makefile,CMake与CMakeLists的关系,最后从CMakeLists的语法规则入手给出示例带大家熟悉如何编写一份简单的编译 ...

  • 机器学习算法工程师需要掌握哪些编程语言?

    机器学习和编码是相辅相成的.如果没有编码,数据科学家就无法使用机器学习模型.因此,机器学习工程师至少要对一门编程语言有全面的了解.这篇文章深入介绍了适合机器学习的五种编程语言,并帮助您确定哪种语言最适 ...

  • opencv-开源计算机视觉python库

    OpenCV(开源计算机视觉库:opencv.org)是一个开放源代码库,其中包含数百种计算机视觉算法.该文档介绍了所谓的OpenCV 2.x API,与基于C的OpenCV 1.x API相比,它实 ...

  • 首页 > 编程语言 > php 编程语言Windows下CMake编译安装OpenCV

    Windows下CMake编译安装OpenCV 这是一个面向新手的在windows上运进opencv,helloword的教程.在这里我们使用vs2019来编译opencv,并运行一个hellowor ...

  • 如何选择Halcon算法库应用软件集成开发环境

    视觉/图像重磅干货,第一时间送达 新机器视觉 最前沿的机器视觉与计算机视觉技术 206篇原创内容 公众号 来源:机器视觉算法与应用 大多数HALCON解决方案都必须嵌入到PC端的应用程序中(例如,提供 ...

  • vba编程基础1

    在主要的编程语言中, 结构体是用大括号来表示 代码段的 范围 界定的. 但是在一些比较'老的'语言中,由于历史原因, 还是使用的 是: 关键字来进行界定代码 的 结构段, 如vba中的 语法结构: i ...

  • 老曹眼中的网络编程基础

    我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. ...

  • 那些轻松拿高薪的程序员,在学完编程基础语法之后做了些什么?

    对于一个想要入行IT的新人,怎样选择一个前景好的编程语言十分很重要!让我们来看看那些拿高工资的程序员,到底是学的什么编程语言吧? 下面我介绍几个可以帮助你扎实地掌握编程基础知识,并且能够提升编程能力的 ...

  • 阿里云坚定“做深基础”,逐浪政企市场未来十年

    马克安德森所说的"软件正在吞噬世界"一直在潜移默化的发生.   起初虚拟化技术实现了硬件细节的抽象,让基础设施成为由软件管理的单一实体.而云计算的出现又进一步使硬件成为一种抽象资源 ...

  • 详解并发编程基础之原子操作(atomic包)

    Go语言中文网 今天 以下文章来源于Golang梦工厂 ,作者AsongGo Golang梦工厂Asong是一名Golang开发工程师,专注于Golang相关技术:Golang面试.Beego.Gin ...

  • Python编程基础:序列类型概述

    https://m.toutiao.com/is/eYtBNf7/ 序列首先是一种数据存储方式,用来存储一系列的数据.序列存储数据的主要特点就是数据在内存空间中是连续存储的,例如字符串abc(字符串属 ...

  • Socket编程基础学习

    Socket编程基础学习

  • UG编程基础知识:内R刀的创建技巧,你想学的编程技术和知识都在这#ug编程#ug学习#机械#数控 #...

    UG编程基础知识:内R刀的创建技巧,你想学的编程技术和知识都在这#ug编程#ug学习#机械#数控 #...

  • aauto 快手编程基础练习一

    aauto 快手编程基础练习一 原创 dowie 工作日志 2014/06/19 17:35 阅读数 181 aauto快手编程练习一 打印九九乘法表. io.open(); for(i=1;9){ ...