|
Point Cloud Library (PCL) 1.15.1
|
NormalDistributionsTransform2D provides an implementation of the Normal Distributions Transform algorithm for scan matching. More...
#include <pcl/registration/ndt_2d.h>
Public Member Functions | |
| NormalDistributionsTransform2D () | |
| Empty constructor. | |
| ~NormalDistributionsTransform2D () override=default | |
| Empty destructor. | |
| virtual void | setGridCentre (const Eigen::Vector2f ¢re) |
| centre of the ndt grid (target coordinate system) | |
| virtual void | setGridStep (const Eigen::Vector2f &step) |
| Grid spacing (step) of the NDT grid. | |
| virtual void | setGridExtent (const Eigen::Vector2f &extent) |
| NDT Grid extent (in either direction from the grid centre). | |
| virtual void | setOptimizationStepSize (const double &lambda) |
| NDT Newton optimisation step size parameter. | |
| virtual void | setOptimizationStepSize (const Eigen::Vector3d &lambda) |
| NDT Newton optimisation step size parameter. | |
| Public Member Functions inherited from pcl::Registration< PointSource, PointTarget, Scalar > | |
| Registration () | |
| Empty constructor. | |
| ~Registration () override=default | |
| destructor. | |
| void | setTransformationEstimation (const TransformationEstimationPtr &te) |
| Provide a pointer to the transformation estimation object. | |
| void | setCorrespondenceEstimation (const CorrespondenceEstimationPtr &ce) |
| Provide a pointer to the correspondence estimation object. | |
| virtual void | setInputSource (const PointCloudSourceConstPtr &cloud) |
| Provide a pointer to the input source (e.g., the point cloud that we want to align to the target). | |
| PointCloudSourceConstPtr const | getInputSource () |
| Get a pointer to the input point cloud dataset target. | |
| virtual void | setInputTarget (const PointCloudTargetConstPtr &cloud) |
| Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to). | |
| PointCloudTargetConstPtr const | getInputTarget () |
| Get a pointer to the input point cloud dataset target. | |
| void | setSearchMethodTarget (const KdTreePtr &tree, bool force_no_recompute=false) |
| Provide a pointer to the search object used to find correspondences in the target cloud. | |
| KdTreePtr | getSearchMethodTarget () const |
| Get a pointer to the search method used to find correspondences in the target cloud. | |
| void | setSearchMethodSource (const KdTreeReciprocalPtr &tree, bool force_no_recompute=false) |
| Provide a pointer to the search object used to find correspondences in the source cloud (usually used by reciprocal correspondence finding). | |
| KdTreeReciprocalPtr | getSearchMethodSource () const |
| Get a pointer to the search method used to find correspondences in the source cloud. | |
| Matrix4 | getFinalTransformation () |
| Get the final transformation matrix estimated by the registration method. | |
| Matrix4 | getLastIncrementalTransformation () |
| Get the last incremental transformation matrix estimated by the registration method. | |
| void | setMaximumIterations (int nr_iterations) |
| Set the maximum number of iterations the internal optimization should run for. | |
| int | getMaximumIterations () |
| Get the maximum number of iterations the internal optimization should run for, as set by the user. | |
| void | setRANSACIterations (int ransac_iterations) |
| Set the number of iterations RANSAC should run for. | |
| double | getRANSACIterations () |
| Get the number of iterations RANSAC should run for, as set by the user. | |
| void | setRANSACOutlierRejectionThreshold (double inlier_threshold) |
| Set the inlier distance threshold for the internal RANSAC outlier rejection loop. | |
| double | getRANSACOutlierRejectionThreshold () |
| Get the inlier distance threshold for the internal outlier rejection loop as set by the user. | |
| void | setMaxCorrespondenceDistance (double distance_threshold) |
| Set the maximum distance threshold between two correspondent points in source <-> target. | |
| double | getMaxCorrespondenceDistance () |
| Get the maximum distance threshold between two correspondent points in source <-> target. | |
| void | setTransformationEpsilon (double epsilon) |
| Set the transformation epsilon (maximum allowable translation squared difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution. | |
| double | getTransformationEpsilon () |
| Get the transformation epsilon (maximum allowable translation squared difference between two consecutive transformations) as set by the user. | |
| void | setTransformationRotationEpsilon (double epsilon) |
| Set the transformation rotation epsilon (maximum allowable rotation difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution. | |
| double | getTransformationRotationEpsilon () |
| Get the transformation rotation epsilon (maximum allowable difference between two consecutive transformations) as set by the user (epsilon is the cos(angle) in a axis-angle representation). | |
| void | setEuclideanFitnessEpsilon (double epsilon) |
| Set the maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged. | |
| double | getEuclideanFitnessEpsilon () |
| Get the maximum allowed distance error before the algorithm will be considered to have converged, as set by the user. | |
| void | setPointRepresentation (const PointRepresentationConstPtr &point_representation) |
| Provide a boost shared pointer to the PointRepresentation to be used when comparing points. | |
| bool | registerVisualizationCallback (std::function< UpdateVisualizerCallbackSignature > &visualizerCallback) |
| Register the user callback function which will be called from registration thread in order to update point cloud obtained after each iteration. | |
| double | getFitnessScore (double max_range=std::numeric_limits< double >::max()) |
| Obtain the Euclidean fitness score (e.g., mean of squared distances from the source to the target). | |
| double | getFitnessScore (const std::vector< float > &distances_a, const std::vector< float > &distances_b) |
| Obtain the Euclidean fitness score (e.g., mean of squared distances from the source to the target) from two sets of correspondence distances (distances between source and target points). | |
| bool | hasConverged () const |
| Return the state of convergence after the last align run. | |
| void | align (PointCloudSource &output) |
| Call the registration algorithm which estimates the transformation and returns the transformed source (input) as output. | |
| void | align (PointCloudSource &output, const Matrix4 &guess) |
| Call the registration algorithm which estimates the transformation and returns the transformed source (input) as output. | |
| const std::string & | getClassName () const |
| Abstract class get name method. | |
| bool | initCompute () |
| Internal computation initialization. | |
| bool | initComputeReciprocal () |
| Internal computation when reciprocal lookup is needed. | |
| void | addCorrespondenceRejector (const CorrespondenceRejectorPtr &rejector) |
| Add a new correspondence rejector to the list. | |
| std::vector< CorrespondenceRejectorPtr > | getCorrespondenceRejectors () |
| Get the list of correspondence rejectors. | |
| bool | removeCorrespondenceRejector (unsigned int i) |
| Remove the i-th correspondence rejector in the list. | |
| void | clearCorrespondenceRejectors () |
| Clear the list of correspondence rejectors. | |
| Public Member Functions inherited from pcl::PCLBase< PointSource > | |
| PCLBase () | |
| Empty constructor. | |
| virtual | ~PCLBase ()=default |
| Destructor. | |
| virtual void | setInputCloud (const PointCloudConstPtr &cloud) |
| Provide a pointer to the input dataset. | |
| PointCloudConstPtr const | getInputCloud () const |
| Get a pointer to the input point cloud dataset. | |
| virtual void | setIndices (const IndicesPtr &indices) |
| Provide a pointer to the vector of indices that represents the input data. | |
| IndicesPtr | getIndices () |
| Get a pointer to the vector of indices used. | |
| const PointSource & | operator[] (std::size_t pos) const |
| Override PointCloud operator[] to shorten code. | |
Protected Member Functions | |
| void | computeTransformation (PointCloudSource &output, const Eigen::Matrix4f &guess) override |
| Rigid transformation computation method with initial guess. | |
| Protected Member Functions inherited from pcl::Registration< PointSource, PointTarget, Scalar > | |
| bool | searchForNeighbors (const PointCloudSource &cloud, int index, pcl::Indices &indices, std::vector< float > &distances) |
| Search for the closest nearest neighbor of a given point. | |
| virtual void | computeTransformation (PointCloudSource &output, const Matrix4 &guess)=0 |
| Abstract transformation computation method with initial guess. | |
| Protected Member Functions inherited from pcl::PCLBase< PointSource > | |
| bool | initCompute () |
| This method should get called before starting the actual computation. | |
| bool | deinitCompute () |
| This method should get called after finishing the actual computation. | |
Protected Attributes | |
| Eigen::Vector2f | grid_centre_ |
| Eigen::Vector2f | grid_step_ |
| Eigen::Vector2f | grid_extent_ |
| Eigen::Vector3d | newton_lambda_ |
| Protected Attributes inherited from pcl::Registration< PointSource, PointTarget, Scalar > | |
| std::string | reg_name_ |
| The registration method name. | |
| KdTreePtr | tree_ |
| A pointer to the spatial search object. | |
| KdTreeReciprocalPtr | tree_reciprocal_ |
| A pointer to the spatial search object of the source. | |
| int | nr_iterations_ {0} |
| The number of iterations the internal optimization ran for (used internally). | |
| int | max_iterations_ {10} |
| The maximum number of iterations the internal optimization should run for. | |
| int | ransac_iterations_ {0} |
| The number of iterations RANSAC should run for. | |
| PointCloudTargetConstPtr | target_ |
| The input point cloud dataset target. | |
| Matrix4 | final_transformation_ |
| The final transformation matrix estimated by the registration method after N iterations. | |
| Matrix4 | transformation_ |
| The transformation matrix estimated by the registration method. | |
| Matrix4 | previous_transformation_ |
| The previous transformation matrix estimated by the registration method (used internally). | |
| double | transformation_epsilon_ {0.0} |
| The maximum difference between two consecutive transformations in order to consider convergence (user defined). | |
| double | transformation_rotation_epsilon_ {0.0} |
| The maximum rotation difference between two consecutive transformations in order to consider convergence (user defined). | |
| double | euclidean_fitness_epsilon_ |
| The maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged. | |
| double | corr_dist_threshold_ |
| The maximum distance threshold between two correspondent points in source <-> target. | |
| double | inlier_threshold_ {0.05} |
| The inlier distance threshold for the internal RANSAC outlier rejection loop. | |
| bool | converged_ {false} |
| Holds internal convergence state, given user parameters. | |
| unsigned int | min_number_correspondences_ {3} |
| The minimum number of correspondences that the algorithm needs before attempting to estimate the transformation. | |
| CorrespondencesPtr | correspondences_ |
| The set of correspondences determined at this ICP step. | |
| TransformationEstimationPtr | transformation_estimation_ |
| A TransformationEstimation object, used to calculate the 4x4 rigid transformation. | |
| CorrespondenceEstimationPtr | correspondence_estimation_ |
| A CorrespondenceEstimation object, used to estimate correspondences between the source and the target cloud. | |
| std::vector< CorrespondenceRejectorPtr > | correspondence_rejectors_ |
| The list of correspondence rejectors to use. | |
| bool | target_cloud_updated_ {true} |
| Variable that stores whether we have a new target cloud, meaning we need to pre-process it again. | |
| bool | source_cloud_updated_ {true} |
| Variable that stores whether we have a new source cloud, meaning we need to pre-process it again. | |
| bool | force_no_recompute_ {false} |
| A flag which, if set, means the tree operating on the target cloud will never be recomputed. | |
| bool | force_no_recompute_reciprocal_ {false} |
| A flag which, if set, means the tree operating on the source cloud will never be recomputed. | |
| std::function< UpdateVisualizerCallbackSignature > | update_visualizer_ |
| Callback function to update intermediate source point cloud position during it's registration to the target point cloud. | |
| Protected Attributes inherited from pcl::PCLBase< PointSource > | |
| PointCloudConstPtr | input_ |
| The input point cloud dataset. | |
| IndicesPtr | indices_ |
| A pointer to the vector of point indices to use. | |
| bool | use_indices_ |
| Set to true if point indices are used. | |
| bool | fake_indices_ |
| If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. | |
NormalDistributionsTransform2D provides an implementation of the Normal Distributions Transform algorithm for scan matching.
This implementation is intended to match the definition: Peter Biber and Wolfgang Straßer. The normal distributions transform: A new approach to laser scan matching. In Proceedings of the IEEE In- ternational Conference on Intelligent Robots and Systems (IROS), pages 2743–2748, Las Vegas, USA, October 2003.
| using pcl::NormalDistributionsTransform2D< PointSource, PointTarget >::ConstPtr |
| using pcl::NormalDistributionsTransform2D< PointSource, PointTarget >::Ptr = shared_ptr<NormalDistributionsTransform2D<PointSource, PointTarget>> |
|
inline |
Empty constructor.
Definition at line 78 of file ndt_2d.h.
References grid_centre_, grid_extent_, grid_step_, newton_lambda_, pcl::Registration< PointSource, PointTarget, Scalar >::reg_name_, and pcl::Registration< PointSource, PointTarget, Scalar >::Registration().
|
overridedefault |
Empty destructor.
|
overrideprotected |
Rigid transformation computation method with initial guess.
| [out] | output | the transformed input point cloud dataset using the rigid transformation found |
| [in] | guess | the initial guess of the transformation to compute |
Definition at line 392 of file ndt_2d.hpp.
References pcl::Registration< PointSource, PointTarget, Scalar >::converged_, pcl::Registration< PointSource, PointTarget, Scalar >::final_transformation_, pcl::ndt2d::ValueAndDerivatives< N, T >::grad, grid_centre_, grid_extent_, grid_step_, pcl::ndt2d::ValueAndDerivatives< N, T >::hessian, pcl::PCLBase< PointSource >::indices_, pcl::Registration< PointSource, PointTarget, Scalar >::max_iterations_, newton_lambda_, pcl::Registration< PointSource, PointTarget, Scalar >::nr_iterations_, pcl::Registration< PointSource, PointTarget, Scalar >::previous_transformation_, pcl::Registration< PointSource, PointTarget, Scalar >::target_, pcl::ndt2d::NDT2D< PointT >::test(), pcl::Registration< PointSource, PointTarget, Scalar >::transformation_, pcl::Registration< PointSource, PointTarget, Scalar >::transformation_epsilon_, pcl::Registration< PointSource, PointTarget, Scalar >::transformation_rotation_epsilon_, pcl::transformPointCloud(), pcl::Registration< PointSource, PointTarget, Scalar >::update_visualizer_, pcl::ndt2d::ValueAndDerivatives< N, T >::value, and pcl::ndt2d::ValueAndDerivatives< N, T >::Zero().
|
inlinevirtual |
centre of the ndt grid (target coordinate system)
| centre | value to set |
Definition at line 95 of file ndt_2d.h.
References grid_centre_.
|
inlinevirtual |
NDT Grid extent (in either direction from the grid centre).
| [in] | extent | value to set |
Definition at line 113 of file ndt_2d.h.
References grid_extent_.
|
inlinevirtual |
Grid spacing (step) of the NDT grid.
| [in] | step | value to set |
Definition at line 104 of file ndt_2d.h.
References grid_step_.
|
inlinevirtual |
NDT Newton optimisation step size parameter.
| [in] | lambda | step size: 1 is simple newton optimisation, smaller values may improve convergence |
Definition at line 123 of file ndt_2d.h.
References newton_lambda_.
|
inlinevirtual |
NDT Newton optimisation step size parameter.
| [in] | lambda | step size: (1,1,1) is simple newton optimisation, smaller values may improve convergence, or elements may be set to zero to prevent optimisation over some parameters |
This overload allows control of updates to the individual (x, y, theta) free parameters in the optimisation. If, for example, theta is believed to be close to the correct value a small value of lambda[2] should be used.
Definition at line 139 of file ndt_2d.h.
References newton_lambda_.
|
protected |
Definition at line 167 of file ndt_2d.h.
Referenced by computeTransformation(), NormalDistributionsTransform2D(), and setGridCentre().
|
protected |
Definition at line 169 of file ndt_2d.h.
Referenced by computeTransformation(), NormalDistributionsTransform2D(), and setGridExtent().
|
protected |
Definition at line 168 of file ndt_2d.h.
Referenced by computeTransformation(), NormalDistributionsTransform2D(), and setGridStep().
|
protected |
Definition at line 170 of file ndt_2d.h.
Referenced by computeTransformation(), NormalDistributionsTransform2D(), setOptimizationStepSize(), and setOptimizationStepSize().