Introduction

The following links describe a set of basic PCL tutorials. Please note that their source codes may already be provided as part of the PCL regular releases, so check there before you start copy & pasting the code. The list of tutorials below is automatically generated from reST files located in our git repository.

Note

Before you start reading, please make sure that you go through the higher-level overview documentation at http://www.pointclouds.org/documentation/, under Getting Started. Thank you.

As always, we would be happy to hear your comments and receive your contributions on any tutorial.

Basic Usage

  • PCL Walkthrough

    mi_0

    Title: PCL Functionality Walkthrough

    Author: Razvan G. Mihalyi

    Compatibility: > PCL 1.6

    Takes the reader through all of the PCL modules and offers basic explanations on their functionalities.

  • Getting Started / Basic Structures

    mi_1

    Title: Getting Started / Basic Structures

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    Presents the basic data structures in PCL and discusses their usage with a simple code example.

  • Using PCL in your own project

    mi_2

    Title: Using PCL in your own project

    Author: Nizar Sallem

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to link your own project to PCL using cmake.

  • Compiling PCL from source on POSIX compliant systems

    mi_12

    Title: Compiling PCL from source on POSIX compliant systems

    Author: Victor Lamoine

    Compatibility: > PCL 1.0

    In this tutorial, we will explain how to compile PCL from sources on POSIX/Unix systems.

  • Customizing the PCL build process

    mi_3

    Title: Explaining PCL’s cmake options

    Author: Nizar Sallem

    Compatibility: > PCL 1.0

    In this tutorial, we will explain the basic PCL cmake options, and ways to tweak them to fit your project.

  • Using PCL on windows with VCPKG and CMake

    mi_4

    Title: Install PCL using VCPKG

    Author: Lars Glud

    Compatibility: PCL version available on VCPKG and Master, unless VCPKG updates a dependency before PCL is ready for it.

    In this tutorial,it is explained how to install PCL or PCL dependencies.

  • Building PCL’s dependencies from source on Windows

    mi_4

    Title: Compiling PCL’s dependencies from source on Windows

    Authors: Alessio Placitelli and Mourad Boufarguine

    Compatibility: > PCL 1.0

    In this tutorial, we will explain how to compile PCL’s 3rd party dependencies from source on Microsoft Windows.

  • Compiling PCL from source on Windows

    mi_5

    Title: Compiling PCL on Windows

    Author: Mourad Boufarguine

    Compatibility: > PCL 1.0

    In this tutorial, we will explain how to compile PCL on Microsoft Windows.

  • Compiling PCL and its dependencies from MacPorts and source on Mac OS X

    mi_6

    Title: Compiling PCL and its dependencies from MacPorts and source on Mac OS X

    Author: Justin Rosen

    Compatibility: > PCL 1.0

    This tutorial explains how to build the Point Cloud Library from MacPorts and source on Mac OS X platforms.

  • Compiling PCL from source using Docker

    mi_13

    Title: Compiling PCL using docker

    Author: Theodoros Nikolaou

    Compatibility: > PCL 1.12

    This tutorial explains how to build and install PCL from source using docker

  • Installing on Mac OS X using Homebrew

    mi_7

    Title: Installing on Mac OS X using Homebrew

    Author: Geoffrey Biggs

    Compatibility: > PCL 1.2

    This tutorial explains how to install the Point Cloud Library on Mac OS X using Homebrew. Both direct installation and compiling PCL from source are explained.

  • Using PCL with Eclipse

    mi_8

    Title: Using Eclipse as your PCL editor

    Author: Koen Buys

    Compatibility: PCL git master

    This tutorial shows you how to get your PCL as a project in Eclipse.

  • Generate a local documentation for PCL

    mi_11

    Title: Generate a local documentation for PCL

    Author: Victor Lamoine

    Compatibility: PCL > 1.0

    This tutorial shows you how to generate and use a local documentation for PCL.

  • Using a matrix to transform a point cloud

    mi_10

    Title: Using matrixes to transform a point cloud

    Author: Victor Lamoine

    Compatibility: > PCL 1.5

    This tutorial shows you how to transform a point cloud using a matrix.

Advanced Usage

  • Adding your own custom PointT type

    au_1

    Title: Adding your own custom PointT point type

    Author: Radu B. Rusu

    Compatibility: > PCL 0.9, < PCL 2.0

    This document explains what templated point types are in PCL, why do they exist, and how to create and use your own PointT point type.

  • Writing a new PCL class

    au_2

    Title: Writing a new PCL class

    Author: Radu B. Rusu, Luca Penasa

    Compatibility: > PCL 0.9, < PCL 2.0

    This short guide is to serve as both a HowTo and a FAQ for writing new PCL classes, either from scratch, or by adapting old code.

Features

  • How 3D Features work in PCL

    fe_1

    Title: How 3D features work

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    This document presents a basic introduction to the 3D feature estimation methodologies in PCL.

  • Estimating Surface Normals in a PointCloud

    fe_2

    Title: Estimating Surface Normals in a PointCloud

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    This tutorial discusses the theoretical and implementation details of the surface normal estimation module in PCL.

  • Normal Estimation Using Integral Images

    fe_3

    Title: Normal Estimation Using Integral Images

    Author: Stefan Holzer

    Compatibility: > PCL 1.0

    In this tutorial we will learn how to compute normals for an organized point cloud using integral images.

  • Point Feature Histograms (PFH) descriptors

    fe_4

    Title: Point Feature Histograms (PFH) descriptors

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    This tutorial introduces a family of 3D feature descriptors called PFH (Point Feature Histograms) and discusses their implementation details from PCL’s perspective.

  • Fast Point Feature Histograms (FPFH) descriptors

    fe_5

    Title: Fast Point Feature Histograms (FPFH) descriptors

    Author: Radu B. Rusu

    Compatibility: > PCL 1.3

    This tutorial introduces the FPFH (Fast Point Feature Histograms) 3D descriptor and discusses their implementation details from PCL’s perspective.

  • Estimating VFH signatures for a set of points

    fe_6

    Title: Estimating VFH signatures for a set of points

    Author: Radu B. Rusu

    Compatibility: > PCL 0.8

    This document describes the Viewpoint Feature Histogram (VFH) descriptor, a novel representation for point clusters for the problem of Cluster (e.g., Object) Recognition and 6DOF Pose Estimation.

  • How to extract NARF Features from a range image

    fe_7

    Title: How to extract NARF features from a range image

    Author: Bastian Steder

    Compatibility: > 1.3

    In this tutorial, we will learn how to extract NARF features from a range image.

  • Moment of inertia and eccentricity based descriptors

    fe_8

    Title: Moment of inertia and eccentricity based descriptors

    Author: Sergey Ushakov

    Compatibility: > PCL 1.7

    In this tutorial we will learn how to compute moment of inertia and eccentricity of the cloud. In addition to this we will learn how to extract AABB and OBB.

  • RoPs (Rotational Projection Statistics) feature

    fe_9

    Title: RoPs (Rotational Projection Statistics) feature

    Author: Sergey Ushakov

    Compatibility: > PCL 1.7

    In this tutorial we will learn how to compute RoPS feature.

  • Globally Aligned Spatial Distribution (GASD) descriptors

    fe_10

    Title: Globally Aligned Spatial Distribution (GASD) descriptors

    Author: Joao Paulo Lima

    Compatibility: >= PCL 1.9

    This document describes the Globally Aligned Spatial Distribution (GASD) global descriptor to be used for efficient object recognition and pose estimation.

Filtering

  • Filtering a PointCloud using a PassThrough filter

    fi_1

    Title: Filtering a PointCloud using a PassThrough filter

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to remove points whose values fall inside/outside a user given interval along a specified dimension.

  • Downsampling a PointCloud using a VoxelGrid filter

    fi_2

    Title: Downsampling a PointCloud using a VoxelGrid filter

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to downsample (i.e., reduce the number of points) a Point Cloud.

  • Removing outliers using a StatisticalOutlierRemoval filter

    fi_3

    Title: Removing sparse outliers using StatisticalOutlierRemoval

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to remove sparse outliers from noisy data, using StatisticalRemoval.

  • Projecting points using a parametric model

    fi_4

    Title: Projecting points using a parametric model

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to project points to a parametric model (i.e., plane).

  • Extracting indices from a PointCloud

    fi_5

    Title: Extracting indices from a PointCloud

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to extract a set of indices given by a segmentation algorithm.

  • Removing outliers using a Conditional or RadiusOutlier removal

    fi_6

    Title: Removing outliers using a Conditional or RadiusOutlier removal

    Author: Gabe O’Leary

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to remove outliers from noisy data, using ConditionalRemoval, RadiusOutlierRemoval.

I/O

  • The PCD (Point Cloud Data) file format

    i_o0

    Title: The PCD (Point Cloud Data) file format

    Author: Radu B. Rusu

    Compatibility: > PCL 0.9

    This document describes the PCD file format, and the way it is used inside PCL.

  • Reading Point Cloud data from PCD files

    i_o1

    Title: Reading Point Cloud data from PCD files

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to read a Point Cloud from a PCD file.

  • Writing Point Cloud data to PCD files

    i_o2

    Title: Writing Point Cloud data to PCD files

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to write a Point Cloud to a PCD file.

  • Concatenate the points of two Point Clouds

    i_o3

    Title: Concatenate the fields or points of two Point Clouds

    Author: Gabe O’Leary / Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to concatenate both the fields and the point data of two Point Clouds. When concatenating fields, one PointClouds contains only XYZ data, and the other contains Surface Normal information.

  • The OpenNI Grabber Framework in PCL

    i_o4

    Title: Grabbing Point Clouds from an OpenNI camera

    Author: Nico Blodow

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to acquire point cloud data from an OpenNI camera.

  • The Velodyne High Definition LiDAR (HDL) Grabber

    i_o5

    Title: Grabbing Point Clouds from a Velodyne High Definition LiDAR (HDL)

    Author: Keven Ring

    Compatibility: >= PCL 1.7

    In this tutorial, we will learn how to acquire point cloud data from a Velodyne HDL.

  • The PCL Dinast Grabber Framework

    i_o6

    Title: Grabbing Point Clouds from Dinast Cameras

    Author: Marco A. Gutierrez

    Compatibility: >= PCL 1.7

    In this tutorial, we will learn how to acquire point cloud data from a Dinast camera.

  • Grabbing point clouds from Ensenso cameras

    i_o7

    Title: Grabbing point clouds from Ensenso cameras

    Author: Victor Lamoine

    Compatibility: >= PCL 1.8.0

    In this tutorial, we will learn how to acquire point cloud data from an IDS-Imaging Ensenso camera.

  • Grabbing point clouds / meshes from davidSDK scanners

    i_o8

    Title: Grabbing point clouds / meshes from davidSDK scanners

    Author: Victor Lamoine

    Compatibility: >= PCL 1.8.0

    In this tutorial, we will learn how to acquire point cloud or mesh data from a davidSDK scanner.

  • Grabbing point clouds from DepthSense cameras

    i_o9

    Title: Grabbing point clouds from DepthSense cameras

    Author: Sergey Alexandrov

    Compatibility: >= PCL 1.8.0

    In this tutorial we will learn how to setup and use DepthSense cameras within PCL on both Linux and Windows platforms.

Keypoints

KdTree

  • How to use a KdTree to search

    kd_1

    Title: KdTree Search

    Author: Gabe O’Leary

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to search using the nearest neighbor method for k-d trees

Octree

  • Point Cloud Compression

    oc_1

    Title: Point cloud compression

    Author: Julius Kammerl

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to compress a single point cloud and streams of point clouds.

  • Spatial Partitioning and Search Operations with Octrees

    oc_2

    Title: Octrees for spatial partitioning and neighbor search

    Author: Julius Kammerl

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to use octrees for spatial partitioning and nearest neighbor search.

  • Spatial change detection on unorganized point cloud data

    oc_3

    Title: Spatial change detection on unorganized point cloud data

    Author: Julius Kammerl

    Compatibility: > PCL 1.0

    In this tutorial, we will learn how to use octrees for detecting spatial changes within point clouds.

Range Images

  • How to create a range image from a point cloud

    ri_1

    Title: Creating Range Images from Point Clouds

    Author: Bastian Steder

    Compatibility: > PCL 1.0

    This tutorial demonstrates how to create a range image from a point cloud and a given sensor position.

  • How to extract borders from range images

    ri_2

    Title: Extracting borders from Range Images

    Author: Bastian Steder

    Compatibility: > PCL 1.3

    This tutorial demonstrates how to extract borders (traversals from foreground to background) from a range image.

Recognition

  • 3D Object Recognition based on Correspondence Grouping

    rc_1

    Title: The PCL Recognition API

    Author: Tommaso Cavallari, Federico Tombari

    Compatibility: > PCL 1.6

    This tutorial aims at explaining how to perform 3D Object Recognition based on the pcl_recognition module.

  • Implicit Shape Model

    rc_2

    Title: Implicit Shape Model

    Author: Sergey Ushakov

    Compatibility: > PCL 1.7

    In this tutorial we will learn how the Implicit Shape Model algorithm works and how to use it for finding objects centers.

  • Tutorial: Hypothesis Verification for 3D Object Recognition

    rc_3

    Title: Hypothesis Verification for 3D Object Recognition

    Author: Daniele De Gregorio, Federico Tombari

    Compatibility: > PCL 1.7

    This tutorial aims at explaining how to do 3D object recognition in clutter by verifying model hypotheses in cluttered and heavily occluded 3D scenes.

Registration

  • The PCL Registration API

    re_1

    Title: The PCL Registration API

    Author: Dirk Holz, Radu B. Rusu, Jochen Sprickerhof

    Compatibility: > PCL 1.5

    In this document, we describe the point cloud registration API and its modules: the estimation and rejection of point correspondences, and the estimation of rigid transformations.

  • How to use iterative closest point

    re_2

    Title: How to use iterative closest point algorithm

    Author: Gabe O’Leary

    Compatibility: > PCL 1.0

    This tutorial gives an example of how to use the iterative closest point algorithm to see if one PointCloud is just a rigid transformation of another PointCloud.

  • How to incrementally register pairs of clouds

    re_3

    Title: How to incrementally register pairs of clouds

    Author: Raphael Favier

    Compatibility: > PCL 1.4

    This document demonstrates using the Iterative Closest Point algorithm in order to incrementally register a series of point clouds two by two.

  • Interactive Iterative Closest Point

    re_7

    Title: Interactive ICP

    Author: Victor Lamoine

    Compatibility: > PCL 1.5

    This tutorial will teach you how to build an interactive ICP program

  • How to use Normal Distributions Transform

    re_4

    Title: How to use the Normal Distributions Transform algorithm

    Author: Brian Okorn

    Compatibility: > PCL 1.6

    This document demonstrates using the Normal Distributions Transform algorithm to register two large point clouds.

  • In-hand scanner for small objects

    re_5

    Title: How to use the In-hand scanner for small objects

    Author: Martin Saelzle

    Compatibility: >= PCL 1.7

    This document shows how to use the In-hand scanner applications to obtain colored models of small objects with RGB-D cameras.

  • Robust pose estimation of rigid objects

    re_6

    Title: Robust pose estimation of rigid objects

    Author: Anders Glent Buch

    Compatibility: >= PCL 1.7

    In this tutorial, we show how to find the alignment pose of a rigid object in a scene with clutter and occlusions.

Sample Consensus

  • How to use Random Sample Consensus model

    sc_1

    Title: How to use Random Sample Consensus model

    Author: Gabe O’Leary

    Compatibility: > PCL 1.0

    In this tutorial we learn how to use a RandomSampleConsensus with a plane model to obtain the cloud fitting to this model.

Segmentation

  • Plane model segmentation

    se_1

    Title: Plane model segmentation

    Author: Radu B. Rusu

    Compatibility: > PCL 1.3

    In this tutorial, we will learn how to segment arbitrary plane models from a given point cloud dataset.

  • Cylinder model segmentation

    se_2

    Title: Cylinder model segmentation

    Author: Radu B. Rusu

    Compatibility: > PCL 1.3

    In this tutorial, we will learn how to segment arbitrary cylindrical models from a given point cloud dataset.

  • Euclidean Cluster Extraction

    se_3

    Title: Euclidean Cluster Extraction

    Author: Serkan Tuerker

    Compatibility: > PCL 1.3

    In this tutorial we will learn how to extract Euclidean clusters with the pcl::EuclideanClusterExtraction class.

  • Region growing segmentation

    se_4

    Title: Region Growing Segmentation

    Author: Sergey Ushakov

    Compatibility: >= PCL 1.7

    In this tutorial we will learn how to use region growing segmentation algorithm.

  • Color-based region growing segmentation

    se_5

    Title: Color-based Region Growing Segmentation

    Author: Sergey Ushakov

    Compatibility: >= PCL 1.7

    In this tutorial we will learn how to use color-based region growing segmentation algorithm.

  • Min-Cut Based Segmentation

    se_6

    Title: Min-Cut Based Segmentation

    Author: Sergey Ushakov

    Compatibility: >= PCL 1.7

    In this tutorial we will learn how to use min-cut based segmentation algorithm.

  • Conditional Euclidean Clustering

    se_7

    Title: Conditional Euclidean Clustering

    Author: Frits Florentinus

    Compatibility: >= PCL 1.7

    This tutorial describes how to use the Conditional Euclidean Clustering class in PCL: A segmentation algorithm that clusters points based on Euclidean distance and a user-customizable condition that needs to hold.

  • Difference of Normals Based Segmentation

    se_8

    Title: Difference of Normals Based Segmentation

    Author: Yani Ioannou

    Compatibility: >= PCL 1.7

    In this tutorial we will learn how to use the difference of normals feature for segmentation.

  • Clustering of Pointclouds into Supervoxels - Theoretical primer

    se_9

    Title: Supervoxel Clustering

    Author: Jeremie Papon

    Compatibility: >= PCL 1.8

    In this tutorial, we show to break a pointcloud into the mid-level supervoxel representation.

  • Identifying ground returns using ProgressiveMorphologicalFilter segmentation

    se_10

    Title: Progressive Morphological Filtering

    Author: Brad Chambers

    Compatibility: >= PCL 1.8

    In this tutorial, we show how to segment a point cloud into ground and non-ground returns.

  • Filtering a PointCloud using ModelOutlierRemoval

    se_11

    Title: Model outlier removal

    Author: Timo Häckel

    Compatibility: >= PCL 1.7.2

    This tutorial describes how to extract points from a point cloud using SAC models

Surface

  • Smoothing and normal estimation based on polynomial reconstruction

    su_1

    Title: Smoothing and normal estimation based on polynomial reconstruction

    Author: Zoltan-Csaba Marton, Alexandru E. Ichim

    Compatibility: > PCL 1.6

    In this tutorial, we will learn how to construct and run a Moving Least Squares (MLS) algorithm to obtain smoothed XYZ coordinates and normals.

  • Construct a concave or convex hull polygon for a plane model

    su_2

    Title: Construct a concave or convex hull polygon for a plane model

    Author: Gabe O’Leary, Radu B. Rusu

    Compatibility: > PCL 1.0

    In this tutorial we will learn how to calculate a simple 2D concave or convex hull polygon for a set of points supported by a plane.

  • Fast triangulation of unordered point clouds

    su_3

    Title: Fast triangulation of unordered point clouds

    Author: Zoltan-Csaba Marton

    Compatibility: > PCL 1.0

    In this tutorial we will learn how to run a greedy triangulation algorithm on a PointCloud with normals to obtain a triangle mesh based on projections of the local neighborhood.

  • Fitting trimmed B-splines to unordered point clouds

    su_4

    Title: Fitting trimmed B-splines to unordered point clouds

    Author: Thomas Mörwald

    Compatibility: > PCL 1.7

    In this tutorial we will learn how to reconstruct a smooth surface from an unordered point-cloud by fitting trimmed B-splines.

Visualization

  • The CloudViewer

    vi_1

    Title: Visualizing Point Clouds

    Author: Ethan Rublee

    Compatibility: > PCL 1.0

    This tutorial demonstrates how to use the pcl visualization tools.

  • How to visualize a range image

    vi_2

    Title: Visualizing Range Images

    Author: Bastian Steder

    Compatibility: > PCL 1.3

    This tutorial demonstrates how to use the pcl visualization tools for range images.

  • PCLVisualizer

    vi_3

    Title: PCLVisualizer

    Author: Geoffrey Biggs

    Compatibility: > PCL 1.3

    This tutorial demonstrates how to use the PCLVisualizer class for powerful visualisation of point clouds and related data.

  • PCLPlotter

    vi_4

    Title: PCLPlotter

    Author: Kripasindhu Sarkar

    Compatibility: > PCL 1.7

    This tutorial demonstrates how to use the PCLPlotter class for powerful visualisation of plots, charts and histograms of raw data and explicit functions.

  • Visualization

    vi_5

    Title: PCL Visualization overview

    Author: Radu B. Rusu

    Compatibility: >= PCL 1.0

    This tutorial will give an overview on the usage of the PCL visualization tools.

  • Create a PCL visualizer in Qt with cmake

    vi_6

    Title: Create a PCL visualizer in Qt with cmake

    Author: Victor Lamoine

    Compatibility: > PCL 1.5

    This tutorial shows you how to create a PCL visualizer within a Qt application.

  • Create a PCL visualizer in Qt to colorize clouds

    vi_7

    Title: Create a PCL visualizer in Qt to colorize clouds

    Author: Victor Lamoine

    Compatibility: > PCL 1.5

    This tutorial shows you how to color point clouds within a Qt application.

Applications

  • Aligning object templates to a point cloud

    ap_1

    Title: Aligning object templates to a point cloud

    Author: Michael Dixon

    Compatibility: > PCL 1.3

    This tutorial gives an example of how some of the tools covered in the previous tutorials can be combined to solve a higher level problem — aligning a previously captured model of an object to some newly captured data.

  • Cluster Recognition and 6DOF Pose Estimation using VFH descriptors

    ap_2

    Title: Cluster Recognition and 6DOF Pose Estimation using VFH descriptors

    Author: Radu B. Rusu

    Compatibility: > PCL 0.8

    In this tutorial we show how the Viewpoint Feature Histogram (VFH) descriptor can be used to recognize similar clusters in terms of their geometry.

  • Point Cloud Streaming to Mobile Devices with Real-time Visualization

    ap_3

    Title: Point Cloud Streaming to Mobile Devices with Real-time Visualization

    Author: Pat Marion

    Compatibility: > PCL 1.3

    This tutorial describes how to send point cloud data over the network from a desktop server to a client running on a mobile device.

  • Detecting people on a ground plane with RGB-D data

    ap_5

    Title: Detecting people on a ground plane with RGB-D data

    Author: Matteo Munaro

    Compatibility: >= PCL 1.7

    This tutorial presents a method for detecting people on a ground plane with RGB-D data.

GPU