44 #include <pcl/pcl_base.h>
45 #include <pcl/common/transforms.h>
46 #include <pcl/memory.h>
47 #include <pcl/pcl_macros.h>
48 #include <pcl/search/kdtree.h>
49 #include <pcl/registration/boost.h>
50 #include <pcl/registration/transformation_estimation.h>
51 #include <pcl/registration/correspondence_estimation.h>
52 #include <pcl/registration/correspondence_rejection.h>
60 template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar =
float>
64 using Matrix4 = Eigen::Matrix<Scalar, 4, 4>;
71 using Ptr = shared_ptr< Registration<PointSource, PointTarget, Scalar> >;
72 using ConstPtr = shared_ptr< const Registration<PointSource, PointTarget, Scalar> >;
107 const std::vector<int>&,
109 const std::vector<int>&);
136 , point_representation_ ()
221 bool force_no_recompute =
false)
224 if (force_no_recompute)
249 bool force_no_recompute =
false)
252 if ( force_no_recompute )
376 point_representation_ = point_representation;
386 if (visualizerCallback)
399 getFitnessScore (
double max_range = std::numeric_limits<double>::max ());
407 getFitnessScore (
const std::vector<float> &distances_a,
const std::vector<float> &distances_b);
429 inline const std::string&
463 inline std::vector<CorrespondenceRejectorPtr>
597 std::vector<int> &indices, std::vector<float> &distances)
599 int k = tree_->nearestKSearch (cloud, index, 1, indices, distances);
620 PCL_WARN (
"[pcl::registration::Registration] setInputCloud is deprecated."
621 "Please use setInputSource instead.\n");
630 #include <pcl/registration/impl/registration.hpp>
KdTreeReciprocalPtr tree_reciprocal_
A pointer to the spatial search object of the source.
shared_ptr< KdTree< PointT, Tree > > Ptr
bool initComputeReciprocal()
Internal computation when reciprocal lookup is needed.
bool source_cloud_updated_
Variable that stores whether we have a new source cloud, meaning we need to pre-process it again...
Matrix4 getLastIncrementalTransformation()
Get the last incremental transformation matrix estimated by the registration method.
search::KdTree is a wrapper class which inherits the pcl::KdTree class for performing search function...
KdTreeReciprocalPtr getSearchMethodSource() const
Get a pointer to the search method used to find correspondences in the source cloud.
void align(PointCloudSource &output)
Call the registration algorithm which estimates the transformation and returns the transformed source...
void addCorrespondenceRejector(const CorrespondenceRejectorPtr &rejector)
Add a new correspondence rejector to the list.
shared_ptr< CorrespondenceRejector > Ptr
TransformationEstimationPtr transformation_estimation_
A TransformationEstimation object, used to calculate the 4x4 rigid transformation.
void setRANSACOutlierRejectionThreshold(double inlier_threshold)
Set the inlier distance threshold for the internal RANSAC outlier rejection loop. ...
pcl::PointCloud< PointSource > PointCloudSource
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) ...
CorrespondenceEstimationPtr correspondence_estimation_
A CorrespondenceEstimation object, used to estimate correspondences between the source and the target...
int nr_iterations_
The number of iterations the internal optimization ran for (used internally).
typename PointRepresentation< PointT >::ConstPtr PointRepresentationConstPtr
typename CorrespondenceEstimation::ConstPtr CorrespondenceEstimationConstPtr
CorrespondencesPtr correspondences_
The set of correspondences determined at this ICP step.
shared_ptr< CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > Ptr
PointCloudTargetConstPtr const getInputTarget()
Get a pointer to the input point cloud dataset target.
bool target_cloud_updated_
Variable that stores whether we have a new target cloud, meaning we need to pre-process it again...
void setTransformationEstimation(const TransformationEstimationPtr &te)
Provide a pointer to the transformation estimation object.
bool removeCorrespondenceRejector(unsigned int i)
Remove the i-th correspondence rejector in the list.
virtual void computeTransformation(PointCloudSource &output, const Matrix4 &guess)=0
Abstract transformation computation method with initial guess.
Matrix4 getFinalTransformation()
Get the final transformation matrix estimated by the registration method.
bool hasConverged() const
Return the state of convergence after the last align run.
std::function< UpdateVisualizerCallbackSignature > update_visualizer_
Callback function to update intermediate source point cloud position during it's registration to the ...
shared_ptr< const CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > ConstPtr
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...
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
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) ...
Eigen::Matrix< Scalar, 4, 4 > Matrix4
typename CorrespondenceEstimation::Ptr CorrespondenceEstimationPtr
int ransac_iterations_
The number of iterations RANSAC should run for.
int getMaximumIterations()
Get the maximum number of iterations the internal optimization should run for, as set by the user...
bool force_no_recompute_reciprocal_
A flag which, if set, means the tree operating on the source cloud will never be recomputed.
double getRANSACIterations()
Get the number of iterations RANSAC should run for, as set by the user.
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 t...
void clearCorrespondenceRejectors()
Clear the list of correspondence rejectors.
double getEuclideanFitnessEpsilon()
Get the maximum allowed distance error before the algorithm will be considered to have converged...
pcl::registration::CorrespondenceRejector::Ptr CorrespondenceRejectorPtr
KdTreePtr tree_
A pointer to the spatial search 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.
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.
const std::string & getClassName() const
Abstract class get name method.
Matrix4 previous_transformation_
The previous transformation matrix estimated by the registration method (used internally).
Matrix4 transformation_
The transformation matrix estimated by the registration method.
double getMaxCorrespondenceDistance()
Get the maximum distance threshold between two correspondent points in source <-> target...
void setMaximumIterations(int nr_iterations)
Set the maximum number of iterations the internal optimization should run for.
int max_iterations_
The maximum number of iterations the internal optimization should run for.
double getRANSACOutlierRejectionThreshold()
Get the inlier distance threshold for the internal outlier rejection loop as set by the user...
shared_ptr< PointCloud< PointSource > > Ptr
std::vector< CorrespondenceRejectorPtr > correspondence_rejectors_
The list of correspondence rejectors to use.
std::vector< CorrespondenceRejectorPtr > getCorrespondenceRejectors()
Get the list of correspondence rejectors.
shared_ptr< Registration< PointSource, PointTarget, Scalar > > Ptr
Matrix4 final_transformation_
The final transformation matrix estimated by the registration method after N iterations.
PointCloudTargetConstPtr target_
The input point cloud dataset target.
typename KdTree::PointRepresentationConstPtr PointRepresentationConstPtr
double getTransformationRotationEpsilon()
Get the transformation rotation epsilon (maximum allowable difference between two consecutive transfo...
bool initCompute()
Internal computation initialization.
bool searchForNeighbors(const PointCloudSource &cloud, int index, std::vector< int > &indices, std::vector< float > &distances)
Search for the closest nearest neighbor of a given point.
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.
~Registration()
destructor.
void setTransformationEpsilon(double epsilon)
Set the transformation epsilon (maximum allowable translation squared difference between two consecut...
bool registerVisualizationCallback(std::function< UpdateVisualizerCallbackSignature > &visualizerCallback)
Register the user callback function which will be called from registration thread in order to update ...
typename KdTreeReciprocal::Ptr KdTreeReciprocalPtr
typename PointCloudSource::Ptr PointCloudSourcePtr
void setRANSACIterations(int ransac_iterations)
Set the number of iterations RANSAC should run for.
Registration represents the base registration class for general purpose, ICP-like methods...
typename pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar > TransformationEstimation
typename TransformationEstimation::Ptr TransformationEstimationPtr
double inlier_threshold_
The inlier distance threshold for the internal RANSAC outlier rejection loop.
double transformation_rotation_epsilon_
The maximum rotation difference between two consecutive transformations in order to consider converge...
typename KdTree::Ptr KdTreePtr
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...
shared_ptr< const PointCloud< PointSource > > ConstPtr
typename PointCloudSource::ConstPtr PointCloudSourceConstPtr
bool converged_
Holds internal convergence state, given user parameters.
double transformation_epsilon_
The maximum difference between two consecutive transformations in order to consider convergence (user...
KdTreePtr getSearchMethodTarget() const
Get a pointer to the search method used to find correspondences in the target cloud.
virtual void setInputCloud(const PointCloudConstPtr &cloud)
Provide a pointer to the input dataset.
typename TransformationEstimation::ConstPtr TransformationEstimationConstPtr
std::string reg_name_
The registration method name.
typename PointCloudTarget::Ptr PointCloudTargetPtr
double corr_dist_threshold_
The maximum distance threshold between two correspondent points in source <-> target.
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
PointCloudConstPtr input_
The input point cloud dataset.
Registration()
Empty constructor.
double getTransformationEpsilon()
Get the transformation epsilon (maximum allowable translation squared difference between two consecut...
bool force_no_recompute_
A flag which, if set, means the tree operating on the target cloud will never be recomputed.
typename PointCloudTarget::ConstPtr PointCloudTargetConstPtr
void setPointRepresentation(const PointRepresentationConstPtr &point_representation)
Provide a boost shared pointer to the PointRepresentation to be used when comparing points...
int min_number_correspondences_
The minimum number of correspondences that the algorithm needs before attempting to estimate the tran...
void(const pcl::PointCloud< PointSource > &, const std::vector< int > &, const pcl::PointCloud< PointTarget > &, const std::vector< int > &) UpdateVisualizerCallbackSignature
The callback signature to the function updating intermediate source point cloud position during it's ...
shared_ptr< const Registration< PointSource, PointTarget, Scalar > > ConstPtr
void setTransformationRotationEpsilon(double epsilon)
Set the transformation rotation epsilon (maximum allowable rotation difference between two consecutiv...
void setMaxCorrespondenceDistance(double distance_threshold)
Set the maximum distance threshold between two correspondent points in source <-> target...
shared_ptr< Correspondences > CorrespondencesPtr
Abstract CorrespondenceEstimationBase class.