40 #ifndef PCL_REGISTRATION_DEFAULT_CONVERGENCE_CRITERIA_HPP_ 41 #define PCL_REGISTRATION_DEFAULT_CONVERGENCE_CRITERIA_HPP_ 43 #include <pcl/console/print.h> 46 template <
typename Scalar>
bool 49 convergence_state_ = CONVERGENCE_CRITERIA_NOT_CONVERGED;
51 PCL_DEBUG (
"[pcl::DefaultConvergenceCriteria::hasConverged] Iteration %d out of %d.\n", iterations_, max_iterations_);
53 if (iterations_ >= max_iterations_)
55 if (failure_after_max_iter_)
59 convergence_state_ = CONVERGENCE_CRITERIA_ITERATIONS;
62 return (failure_after_max_iter_ ?
false :
true);
66 double cos_angle = 0.5 * (transformation_.coeff (0, 0) + transformation_.coeff (1, 1) + transformation_.coeff (2, 2) - 1);
67 double translation_sqr = transformation_.coeff (0, 3) * transformation_.coeff (0, 3) +
68 transformation_.coeff (1, 3) * transformation_.coeff (1, 3) +
69 transformation_.coeff (2, 3) * transformation_.coeff (2, 3);
70 PCL_DEBUG (
"[pcl::DefaultConvergenceCriteria::hasConverged] Current transformation gave %f rotation (cosine) and %f translation.\n", cos_angle, translation_sqr);
72 if (cos_angle >= rotation_threshold_ && translation_sqr <= translation_threshold_)
74 if (iterations_similar_transforms_ < max_iterations_similar_transforms_)
77 ++iterations_similar_transforms_;
82 iterations_similar_transforms_ = 0;
83 convergence_state_ = CONVERGENCE_CRITERIA_TRANSFORM;
88 correspondences_cur_mse_ = calculateMSE (correspondences_);
89 PCL_DEBUG (
"[pcl::DefaultConvergenceCriteria::hasConverged] Previous / Current MSE for correspondences distances is: %f / %f.\n", correspondences_prev_mse_, correspondences_cur_mse_);
93 if (fabs (correspondences_cur_mse_ - correspondences_prev_mse_) < mse_threshold_absolute_)
95 if (iterations_similar_transforms_ < max_iterations_similar_transforms_)
98 ++iterations_similar_transforms_;
103 iterations_similar_transforms_ = 0;
104 convergence_state_ = CONVERGENCE_CRITERIA_ABS_MSE;
110 if (fabs (correspondences_cur_mse_ - correspondences_prev_mse_) / correspondences_prev_mse_ < mse_threshold_relative_)
112 if (iterations_similar_transforms_ < max_iterations_similar_transforms_)
115 ++iterations_similar_transforms_;
120 iterations_similar_transforms_ = 0;
121 convergence_state_ = CONVERGENCE_CRITERIA_REL_MSE;
126 correspondences_prev_mse_ = correspondences_cur_mse_;
131 #endif // PCL_REGISTRATION_DEFAULT_CONVERGENCE_CRITERIA_HPP_ virtual bool hasConverged()
Check if convergence has been reached.