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 SVN 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

  • Using PCL in your own project

    mi_1

    Title: Using PCL in 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.

  • Customizing the PCL build process

    mi_2

    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.

  • Compiling PCL and its dependencies from source in Windows

    mi_3

    Title: Compiling PCL and its dependencies from source in Windows

    Author: Alessio Placitelli

    Compatibility: > PCL 1.0

    In this tutorial, we will explain how to compile PCL and all its 3rd party dependencies from source in Microsoft Windows.

  • Compiling PCL from source in Windows using the 3rd party installers

    mi_4

    Title: Compiling PCL in Windows using the provided 3rd Party installers

    Author: Mourad Boufarguine

    Compatibility: > PCL 1.0

    In this tutorial, we will explain how to compile PCL in Microsoft Windows using the provided 3rd Party installers.

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

    mi_5

    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.

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 (PFH) descriptors

    fe_5

    Title: Fast Point Feature Histograms (FPFH) descriptors

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    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: > PCL 1.0

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

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 or the fields 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.

Keypoints

  • How to extract NARF keypoint from a range image

    kp_1

    Title: How to extract NARF keypoints from a range image

    Author: Bastian Steder

    Compatibility: > PCL 1.0

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

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 a range image

    ri_2

    Title: Extracting borders from Range Images

    Author: Bastian Steder

    Compatibility: > PCL 1.0

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

Registration

  • How to use iterative closest point

    re_1

    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.

Segmentation

  • Plane model segmentation

    se_1

    Title: Plane model segmentation

    Author: Radu B. Rusu

    Compatibility: > PCL 1.0

    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.0

    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.0

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

Surface

  • Smoothing and normal estimation based on polynomial reconstruction

    su_1

    Title: Smoothing and normal estimation based on polynomial reconstruction

    Author: Zoltan-Csaba Marton

    Compatibility: > PCL 1.0

    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.

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.0

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

  • PCLVisualizer

    vi_3

    Title: PCLVisualizer

    Author: Geoffrey Biggs

    Compatibility: >= PCL 1.0

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

  • Visualization of the NARF descriptor and descriptor distances

    vi_4

    Title: Visualization of how the NARF descriptor is calculated

    Author: Bastian Steder

    Compatibility: > PCL 1.0

    This tutorial is about the visualization of how the NARF descriptor is calculated and to test how the descriptor distances between certain points in a range image behave.

Applications

  • Aligning object templates to a point cloud

    ap_1

    Title: Aligning object templates to a point cloud

    Author: Michael Dixon

    Compatibility: > PCL 1.0

    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.