Point Cloud Library (PCL) 1.14.0
|
IterativeClosestPointNonLinear is an ICP variant that uses Levenberg-Marquardt optimization backend. More...
#include <pcl/registration/icp_nl.h>
Public Types | |
using | Ptr = shared_ptr< IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar > > |
using | ConstPtr = shared_ptr< const IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar > > |
using | Matrix4 = typename Registration< PointSource, PointTarget, Scalar >::Matrix4 |
![]() | |
using | PointCloudSource = typename Registration< PointSource, PointTarget, Scalar >::PointCloudSource |
using | PointCloudSourcePtr = typename PointCloudSource::Ptr |
using | PointCloudSourceConstPtr = typename PointCloudSource::ConstPtr |
using | PointCloudTarget = typename Registration< PointSource, PointTarget, Scalar >::PointCloudTarget |
using | PointCloudTargetPtr = typename PointCloudTarget::Ptr |
using | PointCloudTargetConstPtr = typename PointCloudTarget::ConstPtr |
using | PointIndicesPtr = PointIndices::Ptr |
using | PointIndicesConstPtr = PointIndices::ConstPtr |
using | Ptr = shared_ptr< IterativeClosestPoint< PointSource, PointTarget, Scalar > > |
using | ConstPtr = shared_ptr< const IterativeClosestPoint< PointSource, PointTarget, Scalar > > |
using | Matrix4 = typename Registration< PointSource, PointTarget, Scalar >::Matrix4 |
![]() | |
using | Matrix4 = Eigen::Matrix< Scalar, 4, 4 > |
using | Ptr = shared_ptr< Registration< PointSource, PointTarget, Scalar > > |
using | ConstPtr = shared_ptr< const Registration< PointSource, PointTarget, Scalar > > |
using | CorrespondenceRejectorPtr = pcl::registration::CorrespondenceRejector::Ptr |
using | KdTree = pcl::search::KdTree< PointTarget > |
using | KdTreePtr = typename KdTree::Ptr |
using | KdTreeReciprocal = pcl::search::KdTree< PointSource > |
using | KdTreeReciprocalPtr = typename KdTreeReciprocal::Ptr |
using | PointCloudSource = pcl::PointCloud< PointSource > |
using | PointCloudSourcePtr = typename PointCloudSource::Ptr |
using | PointCloudSourceConstPtr = typename PointCloudSource::ConstPtr |
using | PointCloudTarget = pcl::PointCloud< PointTarget > |
using | PointCloudTargetPtr = typename PointCloudTarget::Ptr |
using | PointCloudTargetConstPtr = typename PointCloudTarget::ConstPtr |
using | PointRepresentationConstPtr = typename KdTree::PointRepresentationConstPtr |
using | TransformationEstimation = typename pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar > |
using | TransformationEstimationPtr = typename TransformationEstimation::Ptr |
using | TransformationEstimationConstPtr = typename TransformationEstimation::ConstPtr |
using | CorrespondenceEstimation = pcl::registration::CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > |
using | CorrespondenceEstimationPtr = typename CorrespondenceEstimation::Ptr |
using | CorrespondenceEstimationConstPtr = typename CorrespondenceEstimation::ConstPtr |
using | UpdateVisualizerCallbackSignature = void(const pcl::PointCloud< PointSource > &, const pcl::Indices &, const pcl::PointCloud< PointTarget > &, const pcl::Indices &) |
The callback signature to the function updating intermediate source point cloud position during it's registration to the target point cloud. | |
![]() | |
using | PointCloud = pcl::PointCloud< PointSource > |
using | PointCloudPtr = typename PointCloud::Ptr |
using | PointCloudConstPtr = typename PointCloud::ConstPtr |
using | PointIndicesPtr = PointIndices::Ptr |
using | PointIndicesConstPtr = PointIndices::ConstPtr |
Public Member Functions | |
IterativeClosestPointNonLinear () | |
Empty constructor. | |
![]() | |
IterativeClosestPoint () | |
Empty constructor. | |
IterativeClosestPoint (const IterativeClosestPoint &)=delete | |
Due to convergence_criteria_ holding references to the class members, it is tricky to correctly implement its copy and move operations correctly. | |
IterativeClosestPoint (IterativeClosestPoint &&)=delete | |
IterativeClosestPoint & | operator= (const IterativeClosestPoint &)=delete |
IterativeClosestPoint & | operator= (IterativeClosestPoint &&)=delete |
~IterativeClosestPoint () override=default | |
Empty destructor. | |
pcl::registration::DefaultConvergenceCriteria< Scalar >::Ptr | getConvergeCriteria () |
Returns a pointer to the DefaultConvergenceCriteria used by the IterativeClosestPoint class. | |
void | setInputSource (const PointCloudSourceConstPtr &cloud) override |
Provide a pointer to the input source (e.g., the point cloud that we want to align to the target) | |
void | setInputTarget (const PointCloudTargetConstPtr &cloud) override |
Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to) | |
void | setUseReciprocalCorrespondences (bool use_reciprocal_correspondence) |
Set whether to use reciprocal correspondence or not. | |
bool | getUseReciprocalCorrespondences () const |
Obtain whether reciprocal correspondence are used or not. | |
![]() | |
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. | |
PointCloudSourceConstPtr const | getInputSource () |
Get a pointer to the input point cloud dataset target. | |
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. | |
![]() | |
PCLBase () | |
Empty constructor. | |
PCLBase (const PCLBase &base) | |
Copy 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. | |
virtual void | setIndices (const IndicesConstPtr &indices) |
Provide a pointer to the vector of indices that represents the input data. | |
virtual void | setIndices (const PointIndicesConstPtr &indices) |
Provide a pointer to the vector of indices that represents the input data. | |
virtual void | setIndices (std::size_t row_start, std::size_t col_start, std::size_t nb_rows, std::size_t nb_cols) |
Set the indices for the points laying within an interest region of the point cloud. | |
IndicesPtr | getIndices () |
Get a pointer to the vector of indices used. | |
IndicesConstPtr const | getIndices () const |
Get a pointer to the vector of indices used. | |
const PointSource & | operator[] (std::size_t pos) const |
Override PointCloud operator[] to shorten code. | |
Additional Inherited Members | |
![]() | |
pcl::registration::DefaultConvergenceCriteria< Scalar >::Ptr | convergence_criteria_ |
![]() | |
virtual void | transformCloud (const PointCloudSource &input, PointCloudSource &output, const Matrix4 &transform) |
Apply a rigid transform to a given dataset. | |
void | computeTransformation (PointCloudSource &output, const Matrix4 &guess) override |
Rigid transformation computation method with initial guess. | |
virtual void | determineRequiredBlobData () |
Looks at the Estimators and Rejectors and determines whether their blob-setter methods need to be called. | |
![]() | |
bool | searchForNeighbors (const PointCloudSource &cloud, int index, pcl::Indices &indices, std::vector< float > &distances) |
Search for the closest nearest neighbor of a given point. | |
![]() | |
bool | initCompute () |
This method should get called before starting the actual computation. | |
bool | deinitCompute () |
This method should get called after finishing the actual computation. | |
![]() | |
std::size_t | x_idx_offset_ {0} |
XYZ fields offset. | |
std::size_t | y_idx_offset_ {0} |
std::size_t | z_idx_offset_ {0} |
std::size_t | nx_idx_offset_ {0} |
Normal fields offset. | |
std::size_t | ny_idx_offset_ {0} |
std::size_t | nz_idx_offset_ {0} |
bool | use_reciprocal_correspondence_ {false} |
The correspondence type used for correspondence estimation. | |
bool | source_has_normals_ {false} |
Internal check whether source dataset has normals or not. | |
bool | target_has_normals_ {false} |
Internal check whether target dataset has normals or not. | |
bool | need_source_blob_ |
Checks for whether estimators and rejectors need various data. | |
bool | need_target_blob_ |
![]() | |
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. | |
![]() | |
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. | |
IterativeClosestPointNonLinear is an ICP variant that uses Levenberg-Marquardt optimization backend.
The resultant transformation is optimized as a quaternion.
The algorithm has several termination criteria:
using pcl::IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar >::ConstPtr = shared_ptr< const IterativeClosestPointNonLinear<PointSource, PointTarget, Scalar> > |
using pcl::IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar >::Matrix4 = typename Registration<PointSource, PointTarget, Scalar>::Matrix4 |
using pcl::IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar >::Ptr = shared_ptr<IterativeClosestPointNonLinear<PointSource, PointTarget, Scalar> > |
|
inline |
Empty constructor.
Definition at line 85 of file icp_nl.h.
References pcl::Registration< PointSource, PointTarget, Scalar >::min_number_correspondences_, pcl::Registration< PointSource, PointTarget, Scalar >::reg_name_, and pcl::Registration< PointSource, PointTarget, Scalar >::transformation_estimation_.