Releases: PointCloudLibrary/pcl
Releases · PointCloudLibrary/pcl
pcl-1.3.1
- fixed bug #428: in
PointCloudColorHandlerRGBField
where using an "rgba" field was causing an error inpcd_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: inOrganizedNeighbor
where one of theradiusSearch
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 inPointCloudColorHandlerRGBField<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
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 fromlibpcl_kdtree
andlibpcl_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 asPointIndices
as well - added eigen allocator to correspondence vectors (
pcl::Correspondences
) and adapted all registration modules => be sure to usepcl::Correspondences
instead ofstd::vector<pcl::Correspondence>
- fixed a few doxygen errors
- added simple stop watch for non-scoped function time measurements and made
ScodeTime
derived fromStopWatch
- 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
topcl::Search
: movedOrganizedDataIndex
andOrganizedNeighbor
classes tolibpcl_search
- added new templated methods for
nearestKSearch
andradiusSearch
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 basepcl::Search
class as they did not belong there
libpcl_io
- use
stringstream
instead ofatof
because of locale issues in IO (note that we can't use theifstream
directly because we have to check for thenan
value) - added locale independent PCD ASCII i/o
- implemented
setMapSynchronization
forpcl::PCDWriter
. When set,msync()
will be called beforemunmap()
in thepcl::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 purposesensor_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 aSIFTKeypoint<PointXYZRGB, PointXYZRGB>
and thus removes the constraint on usingcopyPointCloud
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
topcl::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 basepcl::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 usepcl::Correspondences
instead ofstd::vector<pcl::Correspondence>
- fixing the API: a few left inconsistencies between
vector<Correspondence>
andCorrespondences
. 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 ...
Enough small talk
Additions, improvements, and optimizations
- Eliminated the
transform.h
header file < API breaking change > (r2517)- the following functions have moved to
transforms.h
:transformXYZ
(renamed totransformPoint
)getTransformedPointCloud
(replaced withtransformPointCloud
)
- 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
- the following functions have moved to
- Made major changes in pcl::registration (r2503)
- all registration code now uses
TransformEstimation
objects (TransformEstimationSVD
andTransformEstimationLM
in particular) rather than the olderestimateRigidTransformationSVD
code. Each class inheriting frompcl::Registration
can pass in a different estimator viasetTransformationEstimation
- simplified
TransformEstimationSVD
code - implemented
TransformEstimationLM
by moving away code fromIterativeClosestPointNonLinear
(which now uses the transformation object)
- all registration code now uses
- replaced the
io/io.h
header file withcommon/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 toSampleConsensusModelRegistration
(r2502) - added a
PCL_VISUALIZER_REPRESENTATION
property forsetShapeRenderingProperties
with three possible values:PCL_VISUALIZER_REPRESENTATION_POINTS
for representing data as points on screenPCL_VISUALIZER_REPRESENTATION_WIREFRAME
for representing data as a surface wireframe on screenPCL_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
fromlibpcl_surface
(r2354) - removed
libpcl_io dependency
fromlibpcl_keypoints
(r2364) - removed
libpcl_io dependency
forlibpcl_filters
(r2365) - removed
libpcl_io dependency
forlibpcl_registration
(r2372)
- removed the
- added a new function,
pcl::concatenateFields
for concatenating the fields of twosensor_msgs::PointCloud2
datasets (1933) - added a new
countWithinDistance
method toSampleConsensusModel
(r2326), and optimized RANSAC and RRANSAC by replacing calls toselectWithinDistance
withcountWithinDistance
(r2327) - added feature #330: new PCLVisualizer::addCube and pcl::visualization::createCube methods (r2322)
- added
correspondence.h
to the includes incommon/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 thepcl::RGB
structure's members (r2077,r2078) - added a new
IOException
class for read/write exceptions (r2068) - added missing
set/getAngleThreshold
forBoundaryEstimation
. 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)
- in
- 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)
- #139 (
- 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
- 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
- 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
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 thekeep_organized
condition was reversed - removed
BorderDescription
andHistogram<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
- 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