====== 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==== * [[http://eigen.tuxfamily.org/index.php?title=Main_Page|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 * [[http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN|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==== * Normal Estimation * For smooth data * For sharp data - see [[http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6TYG-4Y9CF9M-2&_user=10&_coverDate=04%2F30%2F2010&_rdoc=1&_fmt=high&_orig=gateway&_origin=gateway&_sort=d&_docanchor=&view=c&_searchStrId=1719827455&_rerunOrigin=scholar.google&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=b6b56ff00df23405ebafc8aac0a66123&searchtype=a|Robust Normal Estimation for Point Clouds with Sharp Features]] * Plane Fitting ====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 [[http://www.ros.org/wiki/pcl|PCL]] which is part of ROS.