including slides from federico tombari - point cloud library · why pcl . overview . ......
TRANSCRIPT
PCL Intro
• Collection of Libraries focused on Point Cloud processing • BSD Licensed - free for commercial use
• Started in March 2010 at Willow Garage (US) by Radu Rusu • Currently:
More than 450 developers/contributors More than 1600 users (2000+ mailing list subscribers) 100 M hits on the website (500k unique) Over 60 Tutorials and many examples
Open Perception
• New non-profit foundation dedicated to supporting PCL
• Helps coordinate sponsors & donors with development community
• CEO: Radu Rusu • openperception.org
Recent & ongoing activities
• Extension of pcl::people module for detecting people in unconventional poses
• Human action recognition from skeleton information • Sample Consensus (SaC) fitting of superquadric shapes • RGB-D object segmentation in clutter • Object Discovery in Kinfu data • Face shift • Stereo module improvement • Etc.
http://www.pointclouds.org/blog/gsoc14/
Getting Started
• Binaries are available for stable releases on Ubuntu, Windows, Mac OSX
• PCL repository is hosted on GitHub: https://github.com/PointCloudLibrary/pcl • Trunk version has all recent features, and is generally
useable despite being under very active development • Tutorials are a great starting point • pcl/apps also has many good examples
Getting Help
• Main Web Site: http://www.pointclouds.org/ • Docs & Tutorials: http://www.pointclouds.org/documentation/ • Mailing List + Nabble: http://www.pcl-users.org/ • IRC: #pcl on irc.oftc.net
Getting Involved
• Use PCL in your research • Develop & maintain code • Participate in code sprints • Participate in the mailing list / IRC • Organize developer meetups • Help write tutorials, docs, web pages, etc
The class pcl::PointCloud is a container of elements of PointT class. To indicate which type of PointT you want to store in your cloud you have to use this syntax:
pcl::PointCloud<PointT>()
Basic strucures
PointXY { float x; float y; };
PointXYZ { float x; float y; float z; };
Normal { float normal_x; float normal_y; float normal_z; float curvature; };
PointXYZRGBNormal
PointXYZRGB { float x; float y; float z; int8 r; int8 g; int8 b; }; PointXYZINormal
PointNormal
PointXYZI { float x; float y; float z; float intensity; };
Some PointT types available
PFHSignature125
Point Feature Histogram
FPFHSignature33
Fast Point Feature Histogram
VFHSignature308
Viewpoint Feature Histogram
Narf36
Normally Aligned Radius Feature
PointT for 3D descriptors
MyPointType { double test; };
also from the existing ones:
MySecondPointType { float normal_x; float normal_y; float normal_z; float curvature; double test; };
You can define more types!
# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
0.97192 0.278 0 4.2108e+06
0.944 0.29474 0 4.2108e+06
0.98111 0.24247 0 4.2108e+06
PCD file version
name of each dimension/field that a point can have
size of each dimension in bytes
type of each dimension as a char: I - signed types
U - unsigned types
F - floating types
elements for each dimension
width and height of the point cloud dataset
acquisition viewpoint for the dataset
data type: - ascii
- bynary
number of points in the cloud
PCD file format
pcl::PointCloud<pcl::PointXYZ> cloud;
Read a point cloud from a .pcd file
pcl::io::loadPCDFile<pcl::PointXYZ>("test.pcd",cloud);
Write a point cloud to a .pcd file
pcl::io::savePCDFileASCII ("test.pcd", cloud);
Concatenate two point clouds
cloud_a += cloud_b;
Simple commands
Virtual Machine
• Ubuntu 14.04 • PCL trunk (1.7.2) • 4 tutorials
Registration Segmentation People detection Object recognition
Build the tutorials: cd <tutorial_name>
mkdir build
cd build
cmake -DPCL_DIR=<pcl_directory> ..
make
Run the tutorials: cd ../bin
./<executable_name> <arguments>