Changelog History
Page 3
-
v1.4.0
December 31, 2011The most notable overall changes are:
- changed the default on the order of data in all Eigen matrices to be row major
-DEIGEN_DEFAULT_TO_ROW_MAJOR
(Eigen defaults to column major). Be careful if your code was using 1D index operators, as they might be broken! See http://eigen.tuxfamily.org/dox/TopicStorageOrders.html and http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2011/12/msg00062.html.
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
andUnorganizedPointCloudException
. CreatedPCL_EXCEPTION
helper macro - โ added the GFPFH global descriptor point type
- โ added gaussian kernel class and utilities
- โ added
isTrivial
topcl::PointRepresentation
which allows avoiding copy operations in special cases, thus speeding up operations likerep->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
andPCL_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
intopcl_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
intopcl/point_traits.h
andpcl/ros/for_each_type.h
topcl/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
andNdCopyEigenPointFunctor
fromvoxel_grid.h
topoint_cloud.h
- added
CloudProperties
class for optional properties forpcl::PointCloud<Eigen::MatrixXf>
, and movedsensor_origin_
andsensor_orientation_
there (asproperties.sensor_origin
andproperties.sensor_orientation
), and removedheader
, while keepingheader.stamp
asproperties.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
andCorrespondence
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
; ThePointCloud2
filter wasn't working causing the unit test to fail - ๐ crop_box filter now supports
PointT
andPointCloud2
point clouds - โ added a normal space sampling filter
- ๐ fixed bug #433:
pcl::CropBox
doesn't updatewidth
andheight
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
andFilter
- ๐ moved the
set/getFilterLimits
,set/getFilterFieldName
, andget/setFilterLimitsNegative
fromFilter
intoVoxelGrid
andPassThrough
, 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
andpcl::kdtree:KdTree
libpcl_search
- fixed a bug in
OrganizedNeighbor
where one of theradiusSearch
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 missingradiusSearch
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 outputPointCloud<Eigen::MatrixXf>
datasets - โ added the possibility to write binary compressed Eigen data to disk using two new methods:
generateHeaderEigen
andwriteBinaryCompressedEigen
. 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
'sgetIndexIn1D
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
andperformReconstruction
inSurfaceReconstruction
to output aPointCloud<T>
andvector<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 a
reconstruction/performReconstructionfor
PolygonMesh(for backwards compatibility purposes) and a faster set of the same methods for
vector` - โป๏ธ refactorized
GreedyProjectionTriangulation
by making it inherit from the newMeshConstruction
base class, and removed a lot of old buggy code - overloaded
performReconstruction (PointCloud<T> &, vector<Vertices> &)
per the newSurfaceReconstruction
API - ๐ fixed a bug in
OrganizedFastMesh
where the x/y/z indices were assumed to be 0/1/2, and made it part of theMeshConstruction
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
andConcaveHull
to inherit from the newMeshConstruction
class - ๐ renamed
mesh_processing.h
toprocessing.h
andperformReconstruction/reconstruct
toperformProcessing/process
for the newMeshProcessing
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 fromstdlib.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
inpcl::Feature
to save the output in anPointCloud<Eigen::MatrixXf>
. Added partial specialization onEigen::MatrixXf
to all features and implementedcomputeFeature (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 forPFHEstimation
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 privatecomputeTransformation
without guess, makecomputeTransformation
with guess abstract, Adapt all classes implementingRegistration
accordingly.implemented
SampleConsensusInitialAlignment
with initial guess (thanks Dennis Guse)cleaned up the
CorrespondenceRejector
API, per #375apply Mourad's patch for #454; add more doc comments
libpcl_visualization
- ๐ fixed an issue in
pcl::visualization::PointPickingCallback
whereiren->GetMousePosition ()
didn't seem to work on some VTK versions/systems, so we replaced it instead withiren->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 toPCLHistogramVisualizer
, 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 usingremoveShape
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 ofaddPolygonMesh
for fast online rendering (i.e., produced viaOrganizedFastMesh
)
- changed the default on the order of data in all Eigen matrices to be row major
-
v1.3.1
November 30, 2011- ๐ 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
- ๐ fixed bug #428: in
-
v1.3
October 31, 2011๐ 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 should 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 should 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 missing)
- ๐ 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
-
v1.2
September 30, 2011โ 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)0๏ธโฃ 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)
-
v1.1.1
August 31, 2011- ๐ 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
-
v1.1.0
July 18, 2011๐ 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
-
v1.0.1
June 29, 2011please 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
-
v1.0.0
May 11, 2011- ๐ท 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
-
v0.10.0
February 25, 2010- Re-versioned 0.9.9 to follow patch-versioning semantics.
-
v0.9.9
February 22, 2010[[pcl]]
- removed ConvexHull2D (API breaking change!)
You need to change your code. From:
pcl::ConvexHull2D<...> ...;
topcl::ConvexHull<...> ...;
- added a new general purpose 2D/3D ConvexHull class based on QHull
- added a new general purpose 2D/3D ConcaveHull class based on QHull
- added helper transformPointCloud method for cloud+indices as input
- fixed: segfaults when ICP finds no correspondences (#4618)
- improved the PCD I/O capabilities (for binary PCD) to deal with SSE padding
- Added possibility to create a RangeImagePlanar from a point cloud
- Corrected is_dense to false in all range images.
- Reimplemented big parts of the NARF keypoint extraction - should be more reliable now (and unfortunately slower) - uses polynomials to search maxima now.
- Added helper classes for polynomial approximations to common
- Added a new RANSAC-like algorithm: PROSAC (much faster when there is a confidence for the matches)
- Fixed normalization factor in the VFH's scale component.
- Made MLS more flexible: output has all fields the input has, only with XYZ smoothed, and normals are provided separately (and optionally)
- Added multi-scale calculation to NARF keypoint to make it faster again, fixed a bug in BorderExtractor and fixed some issues in RangeImagePlanar.
- Added functions in common to compute max distance from a point to a pointcloud. Fixed distance component of VFH, normalization is now also invariant to rotation about the roll axis.
- Added pcl::PointSurfel to known point types.
- eigen-decomposition for symmetric positive-semi-definite 3x3 matrices: 1) bug fix so eigenvects are orthogonal, 2) is more robust for degenerated cases
- removed ConvexHull2D (API breaking change!)
You need to change your code. From:
[[pcl_ros]]
- MovingLeastSquares nodelet improvements
- Changed serialization of point clouds to ship the data as-is over the wire, padding included (#4754). Implemented subscriber-side optimizations to minimize memcpys. Will do one memcpy for the whole point cloud if the data layout is an exact match.