Skip to content

Releases: PointCloudLibrary/pcl

pcl-1.3.1

05 Sep 18:29
Compare
Choose a tag to compare
  • fixed bug #428: in PointCloudColorHandlerRGBField where using an "rgba" field was causing an error in pcd_viewer (thanks Maurice!)
  • fixed bug #404: in PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2> where one of the offsets for Z was incorrectly calculated thus leading to erroneous data (thanks Lucas!)
    fixed bug #420: in OrganizedNeighbor where one of the radiusSearch signatures was working only if the cloud is not organized (thanks Hanno!)
  • fixed bug #421: toROSMsg referenced the address of a temporary return
  • fixed bug #422: SHOT estimation did not work with different surface than keypoints
  • fixed bug #430: an infinite loop in SAC methods if no valid model could be found
  • fixed bug #433: CropBox did not update width and height member of output point cloud
  • added missing using declarations for shot
  • added a missing include file to transformation_estimation_point_to_plane.h;
  • added transformation_estimation_point_to_plane_lls.h/hpp to the CMakeLists file
  • fixed an issue where the is_dense flag was not set appropriately when reading data from a binary file (thanks Updog!)
  • fixed a bug in the PLYWriter class where the element camera was not correctly set thus leading to crashes in Meshlab (thanks Bruno!)
  • fixed a bug in PrincipalCurvaturesEstimation where the pc1 and pc2 magnitudes were not normalized with respect to the neighborhood size, thus making comparisons of different neighborhoods impossible (thanks Steffen!)
  • set the lighting off on setShapeRenderingProperties when the user tries to control the color of the object precisely
    fixed bug in PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2> where y_point_offset and z_point_offset were not incremented
  • fixed a bug in tools/compute_cloud_error
  • fixed a crash in test_ii_normals.cpp
  • removed unnecessary header from point_correspondence.h
  • fixed unnormalized covariance matrix in computeCovarianceMatrixNormalized
  • added missing include in std_msgs/Header.h
  • added error checking for radius search in extractEuclideanClusters
  • fixed a bug in PassThrough where NaN values were not correctly replaced by the user-specified value
  • fixed a bug in ply_io when writing PolygonMesh
  • fixed a bug in ply_io when unpacking rgb values

Gaudi

05 Sep 18:26
Compare
Choose a tag to compare

From 1.3 we are constructing the Changelist for each library separately, as they can in theory be mixed and matched with older versions (though we officially do not support this yet). The
most notable overall changes are:

  • removed wxWidgets as a dependency from PCL and implemented the Image visualization classes using VTK
  • removed cminpack as a dependency from PCL and implemented the LM optimization functionality using Eigen
  • added a new library called PCL Search (libpcl_search) that has a more uniform API for nearest neighbor searches and stripped the unneeded functionality from libpcl_kdtree and libpcl_octree. Search now wraps KdTree and Octree for NN calls. This is a MINOR API BREAKING CHANGE. To change your code switch from:
pcl::KdTree -> pcl::Search (if the purpose is to use one of its children for search)
pcl::KdTreeFLANN -> pcl::search::KdTree
pcl::OrganizedDataIndex -> pcl::search::OrganizedNeighbor
  • improved MacOS support
  • improved documentation and unit tests
  • added lots of application examples and demos. Note: not all have a complete functionality... we will try to clean this up in 1.4 and future releases.

Build system changes

  • define PCL_ROOT environment variable using the NSIS installer
  • removing test+python from the dependency graph
  • fixed bug #374
  • remove cminpack from PCLConfig.cmake cmake and 3rdparty (switched to Eigen's Levenberg-Marquardt implementation)
  • update NSIS.template.in : use CPACK_PACKAGE_INSTALL_REGISTRY_KEY as the registry key
  • added the capability to build an all-in-one installer
  • fixed the build system to work 100% on Android and MacOS

libpcl_common

  • add overriding for operator[] to shorten code
  • add a setIndices method that computes indices of points in a region of interest
  • add demeanPointCloud with indices as PointIndices as well
  • added eigen allocator to correspondence vectors (pcl::Correspondences) and adapted all registration modules => be sure to use pcl::Correspondences instead of std::vector<pcl::Correspondence>
  • fixed a few doxygen errors
  • added simple stop watch for non-scoped function time measurements and made ScodeTime derived from StopWatch
  • fixed a bug in getRejectedQueryIndices, wrong output when order of correspondences have been changed
  • moved getRejectedQueryIndices to pcl/common/correspondence.h
  • added more doxygen documentation to the registration components
  • marked all getRemainingCorrespondences-functions as DEPRECATED, we sould replace them with purely stateless version outside the class body
  • fixed a const missing in PolynomialCalculationsT (#388 - thanks Julian!)
  • add PCL_DEPRECATED macro, closes #354.
  • added PointXYZHSV type and the conversions for it
  • added check for endianness for the Android platform

libpcl_search

  • BIG changes introduced - migration from KdTree to pcl::Search: moved OrganizedDataIndex and OrganizedNeighbor classes to libpcl_search
  • added new templated methods for nearestKSearch and radiusSearch for situations when PointT is different than the one the KdTree object was created with (e.g., KdTree vs nearestKSearch (PointT2 &p...)
  • added two new methods for getApproximateIndices where given a reference cloud of point type T1 we're trying to find the corresponding indices in a different cloud of point type T2
  • refactorized a lot of code in search and octree to make it look more consistent with the rest of the API
  • fixed a bug in octree_search which was semantically doing something bad: for each radiusSearch/nearestKSearch/approxNearestSearch call with a PointCloudConstPtr, the octree was getting recreated. Changed the API to be consistent with the rest of PCL (including pcl_search and pcl_kdtree) where we pass in a PointCloud instead of a PointCloudConstPtr which simply calls searchMethod (cloud.points[i], ...)
  • minor code optimizations
  • renamed organized_neighbor.h header in pcl_search (unreleased, therefore API changes OK!) to organized.h
  • disabled the auto-search tuning as it wasn't really working. must clean this up further
  • remove all approxNearestSearch methods from the base pcl::Search class as they did not belong there

libpcl_io

  • use stringstream instead of atof because of locale issues in IO (note that we can't use the ifstream directly because we have to check for the nan value)
  • added locale independent PCD ASCII i/o
  • implemented setMapSynchronization for pcl::PCDWriter. When set, msync() will be called before munmap() in the pcl::PCDWriter::write* calls, which guarantees data reliability. Though I/O performance is 300% better when unset, data corruption might occur on NFS systems, as indicated by http://www.pcl-developers.org/PCD-IO-consistency-on-NFS-msync-needed-td4885942.html.
  • added new writeBinaryCompressed functionality for general purpose sensor_msgs::PointCloud2 data (which is still our generic data container in PCL 1.x)
  • added additional unit tests for binary_compressed
  • fixed a grave bug in PCDReader (most likely introduced a few releases ago due to code refactorization) where the data was incorrectly copied if a PCD ASCII file had a field with multiple count elements (field.count) as first. Binary files are not affected by this bug. Added an unit test to catch this in the future.
  • added functionality for openni_grab_frame (added optional command line options, optional output filename, chose output format)
  • changed to new location of samplesconfig.xml for OpenNI
  • added signal and slot blocking into grabber. Using blocking to skip first frame in openni_grabber, since it is corrupted
  • added PLY format file support in binary and ascii mode (requires boost::iostreams library)

libpcl_keypoints

  • added 3D versions of Harris/Noble/Lowe/Tomasi and Curvature-based keypoint detection... scale space still missing
  • work on making SIFTKeypoint more flexible by saving scale only when the output point type contains "scale" (the catch is that all point types must be correctly declared via our macros - see the modifications in test_keypoints.cpp). This allows us to use a SIFTKeypoint<PointXYZRGB, PointXYZRGB> and thus removes the constraint on using copyPointCloud afterwards.
  • fixed an issue in SIFTKeypoint where width/height were not correctly set

libpcl_features

  • specialize std::vector for Eigen::Matrix4f (alignment issue with msvc 32bit) in SHOTEstimation
  • added a faster (eigen-based) integral image calculation => sped up normal estimation to 15Hz
  • added Unique Shape Context (USC) feature descriptor
  • added Shape Context 3D feature descriptor
  • fixed a bug in the normalization factor of VFH for the distance component (only affecting if set distance component is true)
  • fixed a few bugs regarding Windows build introduced in earlier commits
  • BIG changes introduced - migration from KdTree to pcl::Search
  • merged libpcl_range_image_border_extractor into libpcl_features. There's absolutely no reason why we should have 2 libraries generated from the features module.

libpcl_filters

  • added FilterIndices functionality #315
  • added a RandomSample filter which makes use of indices #323
  • added a new (very fast) class for data decimation: ApproximateVoxelGrid
  • fix for #369 (StatisticalOutlierRemoval crash when input dataset is empty)
  • implemented feature request #346

libpcl_octree

  • added function genVoxelBounds to octree pointcloud class
  • added octree neighbor search class
  • added octree-ray-tracing patch to octree_search class
  • buxfix in octree ray traversal function getIntersectedVoxelCentersRecursive
  • added unit test for getIntersectedVoxelCentersRecursive
  • added method getIntersectedVoxelIndices for getting indices of intersected voxels and updated unit test
  • refactorized a lot of code in search and octree to make it look more consistent with the rest of the API
  • fixed a bug in octree_search which was semantically doing something bad: for each radiusSearch/nearestKSearch/approxNearestSearch call with a PointCloudConstPtr, the octree was getting recreated. Changed the API to be consistent with the rest of PCL (including pcl_search and pcl_kdtree) where we pass in a PointCloud instead of a PointCloudConstPtr which simply calls searchMethod (cloud.points[i], ...)
  • minor code optimizations
  • renamed organized_neighbor.h header in pcl_search (unreleased, therefore API changes OK!) to organized.h
  • disabled the auto-search tuning as it wasn't really working. must clean this up further
  • remove all approxNearestSearch methods from the base pcl::Search class as they did not belong there

libpcl_registration

  • fixed a minor bug in CorrespondenceRejectorSampleConsensus: getRemainingCorrespondences tried to nput_ although it should only use the given input correspondences
  • added missing implementation for TransformationEstimationLM on correspondence vectors
  • added eigen allocator to correspondence vectors (pcl::Correspondences) and adapted all registration modules --> be sure to use pcl::Correspondences instead of std::vector<pcl::Correspondence>
  • fixing the API: a few left inconsistencies between vector<Correspondence> and Correspondences. The latter is to be preferred as it contains the Eigen aligned allocator.
  • added new ELCH loop correction API (New pcl::registration::ELCH class (WIP), add Registration::Ptr typedef)
  • added unit tests for the (new) registration API and all registration components
  • Further cleaning up registration code and writing documentation.
    • fixed bug in getRejectedQueryIndices, wrong output when order of correspondences have been changed
    • moved getRejectedQueryIndices to pcl/common/correspondence.h
    • added more doxygen documentation to the registration components
    • marked all "getRemainingCorrespondences"-functions as DEPRECATED, we sould replace them with purely stateless version outside the class ...
Read more

Enough small talk

05 Sep 18:11
Compare
Choose a tag to compare

Additions, improvements, and optimizations

  • Eliminated the transform.h header file < API breaking change > (r2517)
    • the following functions have moved to transforms.h:
      • transformXYZ (renamed to transformPoint)
      • getTransformedPointCloud (replaced with transformPointCloud)
    • the following methods have been replaced with built-in Eigen methods:
      • operator<< (use .matrix () )
      • getRotationOnly ( .rotation () )
      • getTranslation ( .translation () )
      • getInverse ( .inverse () )
    • the following functions have move to eigen.h:
      • getTransFromUnitVectorsZY
      • getTransFromUnitVectorsZY
      • getTransFromUnitVectorsXY
      • getTransFromUnitVectorsXY
      • getTransformationFromTwoUnitVectors
      • getTransformationFromTwoUnitVectors
      • getTransformationFromTwoUnitVectorsAndOrigin
      • getEulerAngles
      • getTranslationAndEulerAngles
      • getTransformation
      • getTransformation
      • saveBinary
      • loadBinary
  • Made major changes in pcl::registration (r2503)
    • all registration code now uses TransformEstimation objects (TransformEstimationSVD and TransformEstimationLM in particular) rather than the older estimateRigidTransformationSVD code. Each class inheriting from pcl::Registration can pass in a different estimator via setTransformationEstimation
    • simplified TransformEstimationSVD code
    • implemented TransformEstimationLM by moving away code from IterativeClosestPointNonLinear (which now uses the transformation object)
  • replaced the io/io.h header file with common/io.h (for backwards compatibility, io/io.h will remain, but its use is deprecated)
  • added unit test for lineWithLineIntersection (r2514)
  • improved the VTK installation from source documentation for MacOS (r2589)
  • updated the tutorials regarding usage of FindPCL.cmake vs. PCLConfig.cmake (r2567)
  • added a new PointCloud constructor for copying a subset of points (r2562)
  • made wxwidgets an optional dependency for visualization (r2559)
  • added feature #334 (Enabling a library should enable all its library dependencies in CMake) implementation, (r2551)
  • added an internal estimateRigidTransformationSVD method to SampleConsensusModelRegistration (r2502)
  • added a PCL_VISUALIZER_REPRESENTATION property for setShapeRenderingProperties with three possible values:
    • PCL_VISUALIZER_REPRESENTATION_POINTS for representing data as points on screen
    • PCL_VISUALIZER_REPRESENTATION_WIREFRAME for representing data as a surface wireframe on screen
    • PCL_VISUALIZER_REPRESENTATION_SURFACE for representing data as a filled surface on screen
      (r2500)
  • optimized performance of BoundaryEstimation (approximately 25% faster) (r2497)
  • added reference citation to estimateRigidTransformationSVD (r2492)
  • added a new keypoint for uniformly sampling data over a 3D grid called UniformSampling (r2413)
  • added a destructor to VoxelGrid<sensor_msgs::PointCloud2> (r2412)
  • optimized the performance of SampleConsensusModelLine (r2404)
  • changed the behavior of toc_print and toc from pcl::console:TicToc to return milliseconds (r2402)
  • added a new model, SAC_MODEL_STICK, for 3D segmentation (r2400)
  • added 2x point picking to PCLVisualizer; use Alt + Mouse Left click to select a pair of points and draw distances between them (r2388)
  • added two new functions (pcl::getMaxSegment) for determining a maximum segment in a given set of points (r2386)
  • moved filters/test/test_filters to test/test_filters (r2365)
  • renamed the binary executable in the compression.rst tutorial (r2345)
  • Updated library dependencies
    • removed the libfeatures dependency for `libpcl_surface (r2337)
    • removed the libpcl_io dependency from libpcl_surface (r2354)
    • removed libpcl_io dependency from libpcl_keypoints (r2364)
    • removed libpcl_io dependency for libpcl_filters (r2365)
    • removed libpcl_io dependency for libpcl_registration (r2372)
  • added a new function, pcl::concatenateFields for concatenating the fields of two sensor_msgs::PointCloud2 datasets (1933)
  • added a new countWithinDistance method to SampleConsensusModel (r2326), and optimized RANSAC and RRANSAC by replacing calls to selectWithinDistance with countWithinDistance (r2327)
  • added feature #330: new PCLVisualizer::addCube and pcl::visualization::createCube methods (r2322)
  • added correspondence.h to the includes in common/CMakeLists.txt (r2260)
  • implemented defaults for the search method, per http://www.pcl-developers.org/defaults-for-search-method-td4725514.html (r2219,r2220,r2222,r2225,r2226,r2228)
  • exposed pcl::PCLVisualizer::saveScreenshot (const std::string &filename) (r2095)
  • enabled pcd_io.hpp (r2085)
  • added a new faster binary writer + cloud/indices (r2080)
  • added pcl::RGB structure and switched bitshifting RGB code to use the pcl::RGB structure's members (r2077,r2078)
  • added a new IOException class for read/write exceptions (r2068)
  • added missing set/getAngleThreshold for BoundaryEstimation. Made class parameter protected. (r2067)
  • added functions in pcl::console for parsing CSV arguments of arbitrary length (r2052)
  • added new functionality to OrganizedFastMesh (r1996); Now support for modes:
    • fixed triangle meshing (left and right) that create quads and always cut them in a fixed direction,
    • adaptive meshing that cuts where possible and prefers larger differences in 'z' direction, as well as
    • quad meshing
  • improved OrganizedFastMesh's removal of unused points (r1996)
  • CMake changes (r2592)
    • changed the install dir of PCLConfig.cmake in Windows
    • renamed CMAKE_INSTALL_DIR into PCLCONFIG_INSTALL_DIR
    • NSIS installer will add a key in Windows Registry at HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\PCL to help CMake find PCL (CMake >= 2.8.5) (NSIS.template.in)
    • reordered CMAKE_MODULE_PATH entries, for CMake to pick up our NSIS.template.in
    • fixed CPACK_PACKAGE_INSTALL_REGISTRY_KEY value

Bug fixes

  • fixed bugs in PointCloud
    • in swap(), the point data was swapped, but the width and height fields were not (r2562)
    • in push_back(), adding points did not update the width/height of the point cloud (r2596)
    • in insert()/erase(), inserting or erasing points did not update the width/height of the point cloud (r2390)
  • fixed bugs in SampleConsensusModelRegistration
    • if target_ wasn't given, would crash with a boost shared uninitialized error (r2501)
    • homogeneous coordinates were wrong (r2502)
  • fixed a bug in BoundaryEstimation in case "angles" is empty (r2411)
  • fixed a bug in OrganizedFastMesh's adaptive cut triangulation; added a new unit test (r2138)
  • fixed a bug in the openni_image viewer tool (r2511)
  • fixed problems with Windows/MacOS ALT bindings in PCLVisualizer (r2558)
  • fixed issues
    • #139 (FPFHEstimation for non-trivial indices) (r2528)
    • #303 (make pcd_viewer reset the camera viewpoint when no camera given) (r1915)
    • #338 (cylinder segmentation tutorial was referring to a different file) (r2396)
    • #339 (the direction of the normal was wrongly estimated when setSearchSurface was given) (r2395)
    • #340 (keep_organized_ bug in ConditionalRemoval) (r2433)
    • #342 (Allow QT to be used with PCL Visualizer) (r2489)
    • #343 (empty() member function of a point cloud is not const) (r2440)
    • #350 (Misspelling in GreedyProjectionTriangulation::setMaximumSurfaceAgle()) (r2556)
  • added missing include in correspondence_rejection.h (r2393)
  • corrected the headers included by sample_consensus/sac_model.h (r2550)
  • removed duplicate content of NSIS.template.in (r2601)
  • fixed various casting related compiler warnings (r2532)
  • corrected typos in
    • Windows tutorial (CMAKE_INSTALL_DIR => CMAKE_INSTALL_PREFIX) (r2595)
    • registration/icp.h documentation (reg => icp) (r2515)
    • several apps/tools console messages (wotks => works) (r2491)
    • how_features_work.rst tutorial (Muechen => Muenchen) (r2484)

Low Entropy

05 Sep 18:10
Compare
Choose a tag to compare
  • issues fixed: #224, #277, #288, #290, #291, #292, #293, #294, #295, #296, #297, #299, #302, #318, #319, #324, #325, #329
  • Additional fixes:
    • fixed a segfault in PCLVisualizer::addPointCloudNormals
    • fixed PCLVisualizer hanging on 'q' press
    • fixed a bug in MLS
    • fixed a bug in test_io
    • fixed a bug in PointCloudColorHandlerGenericField
    • fixed a bug when writing chars to ASCII .PCD files
    • fixed several errors "writing new classes" tutorial
    • added missing parameter setter in the "concave hull" tutorial

Deathly Hallows

05 Sep 18:09
Compare
Choose a tag to compare
  • new 3D features:
    • SHOT (Signature of Histograms of Orientations)
    • PPF (Point-Pair Features)
    • StatisticalMultiscaleInterestRegionExtraction
    • MultiscaleFeaturePersistence
  • improved documentation:
    • sample consensus model coefficients better explained
    • new tutorials (RadiusOutlierRemoval, ConditionalRemovalFilter, ConcatenateClouds, IterativeClosestPoint, KdTreeSearch, NARF Descriptor visualization, NARF keypoint extraction, ConcaveHull, PCLVisualizer demo)
  • new surface triangulation methods:
    • MarchingCubes, MarchingCubesGreedy
    • OrganizedFastMesh
    • SurfelSmoothing
    • SimplificationRemoveUnusedVertices
  • new registration methods:
    • PyramindFeatureMatching
    • CorrespondenceRejectorSampleConsensus
  • new general purpose classes/methods:
    • Synchronizer
    • distance norms
    • TextureMesh
    • PointCloud.{isOrganized, getMatrixXfMap)
    • SACSegmentation now works with PROSAC too
    • PCDViewer now reads VTK files
    • new Mouse and Keyboard events for PCLVisualizer
    • PCLVisualizer.{addText3D, addCoordinateSystem (Eigen::Matrix4f), deleteText3D, updatePointCloud, renderViewTesselatedSphere, resetCameraViewpoint, getCameras, getViewerPose}
    • ONIGrabber, DeviceONI
    • ImageRGB24, IRImage
    • generic FileReader + FileWriter
  • optimizations:
    • faster pipelinening by not recreating a fake set of indices everytime
    • rendering optimizations for PCLVisualizer
    • copyPointCloud is now faster and can copy the intersections of the fields in both input datasets
    • VoxelGrid is now ~20Hz for Kinect data
  • new applications:
    • VFH NN classification
    • 3D concave hulls
    • 3D convex hulls
    • ICP registration
    • Planar segmentation
    • Stream compression
    • Range image viewer
    • Voxel Grid
    • IntegralImage normal estimation
  • issues fixed: #75, #106, #118, #126, #132, #139, #156, #182, #184, #189, #197, #198, #199, #201, #202, #203, #210, #213, #211, #217, #223, #225, #228, #230, #231, #233, #234, #240, #247, #250, #251, #254, #255, #257, #258, #259, #261, #262, #264, #265, #266, #267, #268, #269, #273, #276, #278, #279, #281, #282, #283

First Steps

05 Sep 18:07
Compare
Choose a tag to compare

please note that version 1.0.0 had a flaw when creating ASCII pcd files. This version includes the tool pcd_convert_NaN_nan to fix this

  • added VTK file visualization to pcd_viewer
  • hiding the cminpack/FLANN headers, thus reducing compile time for user code
  • fixed IntegralImageNormalEstimation
  • tutorial updates and fixes + new tutorials. Changed tutorial structure to split CPP files from RST text.
  • better doxygen documentation for many functions
  • fixed a bug in ConditionalRemovalFilter where the keep_organized condition was reversed
  • removed BorderDescription and Histogram<2> from the list of explicit template instantiations
  • added PointXY point registration macros
  • added ExtractIndicesSelf unit test
  • fixed a lot of alignment issues on 32bit architectures
  • PCD ascii files now have each individual line trimmed for trailing spaces
  • internal changes for PCDReader/PCDWriter, where NAN data is represented as "nan"
  • sped up compilation with MSVC by adding /MP for multiprocessor builds
  • added a voxel grid command line tool filter
  • issues fixed: #242, #207, #237, #215, #236, #226, #148, #214, #218, #216, #196, #219, #207, #194, #192, #183, #178, #154, #174, #145, #155, #122, #220
  • added support for PathScale pathcc compiler
  • added support for Intel icc C++ compiler
  • added support for GCC 4.6 C++ compiler
  • added preliminary support for Clang C++ compiler
  • FindPCL.cmake and PCLConfig.cmake completed

A new beginning

05 Sep 18:06
Compare
Choose a tag to compare
  • completely standalone build system using CMake (not dependent on ROS anymore)
  • tested on Win32/Win64, Linux (32/64) and MacOS (installers provided for all 3rd party dependencies and PCL)
  • separated the entire codebase into multiple libraries that depend on each other. separate CMake declarations for each individual library.
  • provide a FindPCL.cmake to ease integration
  • many new unit tests + tutorials + improved Doxygen documentation (check http://www.pointclouds.org/documentation and http://docs.pointclouds.org)
  • new liboctree interface for nearest neighbor/radius search with Octrees, change detection, and Point Cloud compression!
  • added concave/convex hulls using QHull (dropped our old ConvexHull2D class)
  • pcl::Registration improvements and bugfixes, sped up inner loops, added alignment methods with initial guess
  • pcl::visualization bugfixes: multiple interactors are now possible, better threading support, sped up visualization (2-3x), addPolygonMesh helper methods
  • new grabber interface for OpenNI-compatible camera interface: all 3 OpenNI cameras are supported (Kinect, Asus XTionPRO, PSDK)
  • new grabber interface for streaming PCD files
  • pcl::io bugfixes for PCD files using binary mode
  • ROS_ macros are no longer valid, use PCL_ instead for printing to screen
  • new PCA implementation, up to 4-5 times faster eigen decomposition code
  • new CVFH feature, with higher performance than VFH for object recognition