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 body
- Update: remove ciminpack dependency and rely on eigen for LM
- Fixed a bug in ICP-NL by modifying
WarpPointRigid
to preserve the value of the 4th coordinate when warping; Re-enabled missing unit tests for ICP and ICP-NL - Added point-to-plane ICP
- added nr_iterations_ and max_iterations_ to the initializer list (were mising)
- Fixed bugs in
WarpPointRigid3D
andTransformationEstimationLM
- fixed a problem where if no correspondences would be found via
nearestKSearch
, the RANSAC-based rejection scheme would fail (thanks to James for reporting this) - changed the default LM implementation to use L2 instead of L2SQR
- Added a new
TransformationEstimationPointToPlaneLLS
class that uses a Linear Least-Squares approximation to minimize the point-to-plane distance between two point clouds - Added the ability to specify the error function to be minimized in SAC-IA (see Feature #362)
libpcl_sample_consensus
- reimplemented the Levenberg Marquardt code that was using cminpack with Eigen, thus dropping the cminpack dependency for PCL
libpcl_surface
- fixed bug in surface/mls: when no search interface and no tree is given, mls creates its' own tree, but didn'tupdate the search method to use
- added citation for Rosie's work (http://dl.acm.org/citation.cfm?id=1839808)
- added some error checking for missing/ill formed inputs for
MarchingCubes
- don't delete smart pointers (thanks Chytu: http://www.pcl-users.org/Seg-fault-while-using-VTK-Smoother-tp3380114p3381648.html)
- added computation of area and volume for convex hulls.
libpcl_segmentation
- added a labeled cluster euclidean segmentation method
libpcl_visualization
- fixed an issue where
saveScreenshot
was not correctly initialized with the proper renderer, thus not saving the data - supporting fontsize in addText (per feature #365)
- fixing the interactor style by ignoring all combinations in
OnChar
that we cover inOnKeyDown
- added
removeAllShapes
andremoveAllPointClouds
per #353 - renamed
deleteText3D
toremoveText3D
to consolidate the API - 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 patch from Lucas Walter to fix pcl::visualization::PCLVisualizer::removeAllPointClouds and removeAllShapes
- fixed a few doxygen errors
- cleaned up the
PCLHistogramVisualizer
API by moving to a vtk interactor instead of ours, and removed unnecessary calls such assaveScreenShot
(never used with the histogram visualizer, and most likely buggy),wasStopped
andresetStoppedFlag
(never used). - removed
PCLVisualizerInteractor
and switched back to a better defaultvktWindowRenderInteractor
for VTK >= 5.6. Adjusted and fixed the internal API. No public API changes were made (except the removal of thePCLVisualizerInteractor
class which was never meant to be used externally anyway). - cleaned up and implemented the
ImageViewer
class properly and demonstrated it in a single thread via openni_viewer. The other tool (openni_viewer_simple) will not work due toCloudViewer
starting its own thread and thus clashing on the same OpenGL context. - fixed the correct order in initializer list for ImageViewer
- removed wxWidgets completely from the codebase
- added implementation for
markPoint
toImageViewer
to mimic older wxWidgets-based code - fixed an issue in
PCLVisualizerInteractorStyle
where mouse events were not properly mapped in Qt (#389 - thanks Adam!) - added an extra field of view to the camera paramers (#392 - thanks Adam!)
- small bugfix when the radius_sphere was different than 1 for
renderViewTesselatedSphere