PCL v1.4.0 Release Notes

Release Date: 2011-12-31 // over 12 years ago
  • The most notable overall changes are:

    libpcl_common

    • โž• added float union to the pointXYZRGBL type, in order to aid PCD_viewer compatibility
    • ๐Ÿ›  bugfix: pcl::computeCovarianceMatrixNormalized did not normalize for each implementation
    • ๐Ÿ›  fixed bug #421: at(u,v) should return a const reference
    • โž• added InitFailedException and UnorganizedPointCloudException. Created PCL_EXCEPTION helper macro
    • โž• added the GFPFH global descriptor point type
    • โž• added gaussian kernel class and utilities
    • โž• added isTrivial to pcl::PointRepresentation which allows avoiding copy operations in special cases, thus speeding up operations like rep->isValid (p)
    • โž• added eigen33 for smallest eigenvalue/vector and only eigenvalues version
    • โž• added PointCloudColorHandlerHSVField implementation
    • โœ‚ deleted wrong definition of density in pcl::transformPointCloud
    • โž• added copy constructor for PCLBase
    • ๐Ÿ›  fixed PointCloud's in range inserter: width and height were not updated
    • added PCL_MAJOR_VERSION and PCL_MINOR_VERSION #defines per Ryan's request
    • ๐Ÿ›  fixed the getMatrixXf advanced user API call to return the correct values now that we are forcing Eigen Matrices to be row major in 1.x
    • moved the content of win32_macros.h into pcl_macros.h
    • โž• added an isFinite method to check for x/y/z = NaN in point_types.hpp
    • moved internal headers from pcl/ros/point_traits.h into pcl/point_traits.h and pcl/ros/for_each_type.h to pcl/for_each_type.h (these headers are for internal use only and should have never been imported by user code - however pcl_ros in perception_pcl_unstable will need to be modified when following trunk after this revision, as that is the only external piece of code that should import these headers)
    • ๐Ÿ›  fixed one of the constructors for pcl::PointCloud<T> (cloud, indices) that was incomplete
    • no longer checking "frame_id" parameters in header for operator += in pcl::PointCloud<T>
    • โž• added operator + for pcl::PointCloud<T>
    • ๐Ÿ‘Œ improved doxygen documentation all around libpcl_common
    • added new specialization for pcl::PointCloud<Eigen::MatrixXf> - for advanced users only! (expect the API to change in trunk if needed)
    • moved NdCopyPointEigenFunctor and NdCopyEigenPointFunctor from voxel_grid.h to point_cloud.h
    • added CloudProperties class for optional properties for pcl::PointCloud<Eigen::MatrixXf>, and moved sensor_origin_ and sensor_orientation_ there (as properties.sensor_origin and properties.sensor_orientation), and removed header, while keeping header.stamp as properties.acquisition_time
    • ๐Ÿ›  fixed the copy constructor (vector -> vector) and added an implementation for the + operator
    • โž• added a general convolution class. Convolution handles point cloud convolution in rows, columns and horizontal directions. Convolution allows for 3 policies: zero padding (default), borders mirroring and borders duplicating through PointCloudSpring class
    • ๐Ÿ”จ refactorized PointCorrespondence and Correspondence into the same thing, per issue #458
    • โž• added ChannelProperties in preparation for 2.0
    • ๐Ÿ›  fixed bug #445: Overloaded the setIndices method in PCLBase so that it can accept boost::shared_ptr<const std::vector> >
    • โœ… disabled unit test for getMatrixXfMap in DEBUG mode, as it was failing due to eigen's strictness on aligned/unaligned data, and added const+non consts versions

    libpcl_filters

    • ๐Ÿ›  fixed bug in random_sample.cpp; The PointCloud2 filter wasn't working causing the unit test to fail
    • ๐Ÿ‘ crop_box filter now supports PointT and PointCloud2 point clouds
    • โž• added a normal space sampling filter
    • ๐Ÿ›  fixed bug #433: pcl::CropBox doesn't update width and height member of output point cloud
    • ๐Ÿ›  fixed bug #423 CropBox + VoxelGrid filters, order changes behaviour (using openni grabber)
    • โž• add CropHull filter for filtering points based on a 2D or 3D convex or concave hull. The ray-polygon intersection test is used, which relies on closed polygons/surfaces
    • โž• added clipper3D interface and a draft plane_clipper3D implementation
    • โœ‚ removed spurious old ColorFilter class (obsolete, and it was never implemented - the skeleton was just lurking around)
    • ๐Ÿ‘ better Doxygen documentation to PassThrough, VoxelGrid and Filter
    • ๐Ÿšš moved the set/getFilterLimits, set/getFilterFieldName, and get/setFilterLimitsNegative from Filter into VoxelGrid and PassThrough, as they were the only filters using it. The rest were not, thus leading to user confusion and a bloated API.

    libpcl_kdtree

    • ๐Ÿ›  fixed bug #442: reversed template parameters preventing use of nearestKSearchT and radiusSearchT in pcl::search::Search and pcl::kdtree:KdTree

    libpcl_search

    • fixed a bug in OrganizedNeighbor where one of the radiusSearch signatures was working only if the cloud is not organized (#420 - thanks Hanno!)
    • โšก๏ธ updated pcl::search:OrganizedNeighbor to be back functional, radiusSearch is working back, 4-6x faster then KdTree, Knearest still need to implement this
    • ๐Ÿ’… changed pcl::search::FlannSearch: fixed style of class and tests, moved impl to hpp
    • cleaning up OrganizedNearestNeighbor as well as implementing one of the missing radiusSearch methods
    • ๐Ÿ‘Œ improved documentation for libpcl_search and silenced all Doxygen warnings
    • โœ‚ removed auto (it needs to be completely rewritten and was left in a very bad state)
    • made sure all the output of the search method is consistently returning 0 in case the nearest neighbor search failed and not -1
    • ๐Ÿš€ updated kdtree wrapper code for the latest FLANN release

    libpcl_octree

    • โž• added method getVoxelBounds to octree iterator & removed result vector reserves
    • ๐Ÿ‘Œ improved documentation for libpcl_octree and silenced all Doxygen warnings

    libpcl_sample_consensus

    • fixed an omission of the sample size declaration for SACMODEL_PARALLEL_LINES (thanks Benergy)
    • โœ… replaced rand () with boost random number generators and fixed all failing unit tests
    • โ†ช workaround to get rid of infinite loops if no valid model could be found

    libpcl_io

    • ๐Ÿ”จ refactorization and consistent code indentation + make sure the timestamp is not set if we use PCL in ROS
    • ๐Ÿ›  fixed an older issue where the is_dense flag was not set appropriately when reading data from a binary file (thanks Updog!)
    • ๐Ÿ›  fixed an issue in the PLYWriter class where the element camera was not correctly set thus leading to crashes in Meshlab (thanks Bruno!)
    • the VTK library loads vertex colors in PLY files as RGB. Added that to the polymesh loader.
    • ๐Ÿ›  fixed 2 bugs in writing PolygonMesh and unpacking RGB
    • ๐Ÿ›  fixed a bug in the .OBJ exporter to strip the path from the material library filename (thanks Robert!)
    • โž• added support for exporting vertex normals to the .OBJ (pcl::io::saveOBJFile) file exporter (thanks Robert!)
    • ๐Ÿ›  fixed a 32bit/64bit issue in pointcloud compression
    • โž• added method to write obj files from PolygonMesh
    • โž• added serial number support for Windows using mahisorns patch. Thanks to mahisorn
    • overloaded callbacks for OpenNIGrabber to output PointCloud<Eigen::MatrixXf> datasets
    • โž• added the possibility to write binary compressed Eigen data to disk using two new methods: generateHeaderEigen and writeBinaryCompressedEigen. Performance improvements to 30Hz I/O
    • fix for #463 (Missing Symbol rgb_focal_length_SXGA_)
    • ๐Ÿ›  fix: rgb values need to be packed before saving them in PointCloud2 for PLYWriter
    • โž• added example code for accessing synchronized image x depth data
    • added support for the Stanford range_grid element and obj_info for PLY files. If you chosse to use range_grid instead of camera then only valid vertices will be written down to the PLY file.

    lipcl_keypoints

    • โž• added refine method for Harris3D corner detector
    • rewrote big parts of the NARF keypoint extraction. Hopefully fixing some stability issues. Unfortunately still pretty slow for high resolution point clouds.
    • ๐Ÿ›  fixed bug #461 (SIFT Keypoint result cloud fields not complete); cleaned up the line-wrapping in the error/warning messages

    libpcl_surface

    • ๐Ÿ›  fixed a bug in MarchingCubes's getIndexIn1D which led to the result variable to overflow when the data_size was larger than something around 210 (thanks Robert!)
    • reviewed and slightly modified mls implementation. Added MovingLeastSquaresOMP OpenMP implementation
    • ๐Ÿ†• new architecture for the mesh processing algorithms using VTK: MeshProcessing
    • overloaded reconstruction and performReconstruction in SurfaceReconstruction to output a PointCloud<T> and vector<Vertices> as well
    • โž• added a new class called MeshConstruction per API design decision to split the surface reconstruction methods into topology preserving (EarClipping,OrganizedFastMesh,GreedyProjectionTriangulation) and the rest. The new class implements areconstruction/performReconstructionforPolygonMesh(for backwards compatibility purposes) and a faster set of the same methods forvector`
    • ๐Ÿ”จ refactorized GreedyProjectionTriangulation by making it inherit from the new MeshConstruction base class, and removed a lot of old buggy code
    • overloaded performReconstruction (PointCloud<T> &, vector<Vertices> &) per the new SurfaceReconstruction API
    • ๐Ÿ›  fixed a bug in OrganizedFastMesh where the x/y/z indices were assumed to be 0/1/2, and made it part of the MeshConstruction API
    • optimizations for OrganizedFastMesh. Now in 30Hz+ flavor.
    • ๐Ÿ›  fixed a segfault from last night's EarClipping refactorization and improved the efficiency of the algorithm considerably
    • โšก๏ธ updated ConvexHull and ConcaveHull to inherit from the new MeshConstruction class
    • ๐Ÿ“‡ renamed mesh_processing.h to processing.h and performReconstruction/reconstruct to performProcessing/process for the new MeshProcessing API

    libpcl_features

    • ๐Ÿ›  fixed bug #439: 3DSC unit test fails on MacOS
    • ๐Ÿ›  fixed IntegralImage2Dim : setting first line to zero was buggy producing undefined output data.
    • fixing an issue 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!)
    • ๐Ÿ›  fixed ShapeContext3DEstimation computation and unit tests by switching from stdlib.h's random () to Boost.
    • ๐Ÿ›  fixed a bug in IntensityGradient: need to demean also intensity values, otherwise its assumed that the hyperplane goes always through origin which is not true
    • overloaded compute in pcl::Feature to save the output in an PointCloud<Eigen::MatrixXf>. Added partial specialization on Eigen::MatrixXf to all features and implemented computeFeature (PointCloud<MatrixXf> &output)
    • major doxygenization work
    • โž• added optimization checks for is_dense for some features, implemented NaN output for most (per http://dev.pointclouds.org/issues/457)
    • โž• added new unit tests for the Eigen::MatrixXf output
    • ๐Ÿ›  fixing the MacOS GCC 4.2.1 compiler segfault by removing the OpenMP #pragma (related to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35364 ?).
    • ๐Ÿ›  fixed bug #468: refactored to make floor explicit.
    • โž• added a setUseInternalCache method for PFHEstimation to use the internal cache on demand only. Other fixes to PFH/FPFH/PPF signatures (histogram sums were not adding up to 100.0 in some cases)
    • major improvements for integral images + added template specialization for one dimensional integral images

    libpcl_registration

    • ๐Ÿ›  fixed some bugs in ELCH, thanks Frits for pointing them out
    • Big ELCH cleanup.

      • elch.h (API changes):
      • Use Boost bundled properties for LoopGraph, every vertex stores a pointer to the corresponding point cloud in graph[vertex].cloud.
      • loop_graph_ is now stored as a shared_ptr.
      • loop_start_ and loop_end_ are saved as ints for now (will change in the future).
      • loop_transform_ is not stored as a pointer (may change in the future).
      • elch.hpp:
      • Remove call to PCLBase::initCompute() as ELCH doesn't use a single input cloud or indices.
      • Change loopOptimizerAlgorithm to use start and end of the loop as stored in the object.
      • Adapt to API changes in elch.h.
    • โž• added 2D implementation of Normal Distributions Transform for registration (Biber, Strasser; 2003), including example tool program.

    • ๐Ÿšš reworked internal Registration API: Remove private computeTransformation without guess, make computeTransformation with guess abstract, Adapt all classes implementing Registration accordingly.

    • implemented SampleConsensusInitialAlignment with initial guess (thanks Dennis Guse)

    • cleaned up the CorrespondenceRejector API, per #375

    • apply Mourad's patch for #454; add more doc comments

    libpcl_visualization

    • ๐Ÿ›  fixed an issue in pcl::visualization::PointPickingCallback where iren->GetMousePosition () didn't seem to work on some VTK versions/systems, so we replaced it instead with iren->GetEventPosition () (#444 - thanks Adam!)
    • ๐Ÿ›  fixed a bug in PointCloudColorHandlerRGBField<sensor_msgs::PointCloud2> where one of the offsets for Z was incorrectly calculated thus leading to erroneous data (#404 - thanks Lucas!)
    • set the lighting off on setShapeRenderingProperties when the user tries to control the color of the object precisely (maybe add a different lighting on/off property later?)
    • โช revert pcl::visualization::PCLVisualizer::setShapeRenderingProperties vtk5.2, default in ubuntu LTS, doesn't support the SetLighting method on vtkActor
    • ๐Ÿ›  fixed an issue in PointCloudColorHandlerRGBField where using an "rgba" field was causing an error in pcd_viewer (#428 - thanks Maurice!)
    • โž• added PointCloudColorHandlerHSVField
    • ๐Ÿ›  fixed the PointPickingCallback behavior on Windows 7: iren->GetShiftKey () returns 4 instead of 1 (thanks bepe)
    • โž• added updateFeatureHistogram functionality to PCLHistogramVisualizer, per #456 (thanks Asil!)
    • โž• added patch from Adam Stambler (Bug #396)
    • โž• added removePolygonMesh to make the API more user friendly (addPolygonMesh was already existing, but the polygon meshes were removed using removeShape until now)
    • made the polygon meshes actually implement CloudActor structures internally, so that we can use different colors per vertex
    • โž• added updatePolygonMesh and improved the efficiency of addPolygonMesh for fast online rendering (i.e., produced via OrganizedFastMesh)