Point Cloud Library

The point cloud library is designed to allow users to deal with range data acquired from various sensors in meaningful and useful ways.

This page is currently an aggregation of notes and ideas towards the library, which is referred to as nrtCloud for now.

Dependencies

  • Eigen3 - A very fast SSE optimized library for linear algebra.
  # To install: Download Eigen3
  wget http://bitbucket.org/eigen/eigen/get/3.0-beta3.tar.gz
 
  # Unpack and install Eigen3
  tar xvf 3.0-beta3.tar.gz
  cd 3.0-beta3/ && mkdir build && cd build
  cmake .. && make && sudo make install
  sudo ldconfig /usr/local/lib/
 
  # Clean up
  cd ../.. && rm -rf 3.0-beta3 && rm 3.0-beta3.tar.gz
 
  # TODO: include fix for parallelism.h file
 
  • FLANN - A very fast and optimized library for performing approximate nearest neighbor. This library handles creation of kd-trees and all of the hard work associated with multidimensional NN. Eventually it would be nice to eliminate this as a dependency or also introduce a non approximate version of NN for when any inaccuracies would cause problems.
# To install: Download flann
wget http://www.cs.ubc.ca/~mariusm/uploads/FLANN/flann-1.6.7-src.zip
 
# Unpackand install flann
unzip flann-1.6.7-src.zip
cd flann-1-6.7-src && mkdir build && cd build
cmake .. && make && sudo make install
sudo ldconfig /usr/local/lib
 
# clean up
cd ../.. && rm -rf flann-1.6.7-src && rm flann-1.6.7-src.zip

Core Features (implemented)

  • A generic point cloud data structure
  • Extensible filtering
  • KDTree Searching (radius and knn)
  • Registration using Iterative Closest Point
  • Sample Concensus
    • RANSAC
    • Models for Registration

Coming Soon

Design Notes

  • Point clouds are represented using a “Generic Bag” data container which is very similar to a tuple. The container allows for bags with different collections of items to be assigned to each other - any time there is a type match there will be an assignment.
    • A downside to this approach is that we do not know ahead of time what the specific type will be for varying parts of our point - such as the geometry. To remedy this, point cloud classes are templated based upon the point type and a PointDescriptor, which specifies important typedefs needed internally.
    • For the most commonly utilized point types (such as 3D geometry, normals, and rgba color), the PointDescriptor will be generated automatically and the user only worries about the PointType template parameter
  • Point cloud subsets are represented by their indices in a vector of ints when there is no need to actually create a new cloud
  • Currently a lot of inspiration is being drawn from PCL which is part of ROS.
point_cloud_library.txt · Last modified: 2011/05/16 13:40 by shane