@@ -112,24 +112,13 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
112112 nu_decay_ratio_ = 0.5 ;
113113}
114114
115- template <typename PointSource, typename PointTarget, typename Scalar>
116- typename FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
117- ConvergenceTrigger
118- FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
119- getLastConvergenceTrigger () const
120- {
121- return last_convergence_trigger_;
122- }
123-
124115template <typename PointSource, typename PointTarget, typename Scalar>
125116void
126117FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
127118 computeTransformation (PointCloudSource& output, const Matrix4& guess)
128119{
129120 pcl::IterativeClosestPoint<PointSource, PointTarget, Scalar>::initComputeReciprocal ();
130121
131- last_convergence_trigger_ = ConvergenceTrigger::NONE;
132-
133122 auto convergence_criteria = this ->getConvergeCriteria ();
134123 if (convergence_criteria) {
135124 convergence_criteria->setMaximumIterations (this ->max_iterations_ );
@@ -145,14 +134,22 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
145134 }
146135
147136 if (!this ->input_ || !this ->target_ ) {
148- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
137+ if (convergence_criteria) {
138+ convergence_criteria->setConvergenceState (
139+ pcl::registration::DefaultConvergenceCriteria<
140+ Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
141+ }
149142 PCL_ERROR (" [pcl::%s::computeTransformation] Invalid input clouds.\n " ,
150143 this ->getClassName ().c_str ());
151144 return ;
152145 }
153146
154147 if (this ->input_ ->empty () || this ->target_ ->empty ()) {
155- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
148+ if (convergence_criteria) {
149+ convergence_criteria->setConvergenceState (
150+ pcl::registration::DefaultConvergenceCriteria<
151+ Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
152+ }
156153 PCL_ERROR (" [pcl::%s::computeTransformation] Empty input point clouds.\n " ,
157154 this ->getClassName ().c_str ());
158155 return ;
@@ -176,7 +173,6 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
176173 pcl::registration::DefaultConvergenceCriteria<
177174 Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
178175 }
179- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
180176 return ;
181177 }
182178
@@ -192,7 +188,6 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
192188 pcl::registration::DefaultConvergenceCriteria<
193189 Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
194190 }
195- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
196191 return ;
197192 }
198193
@@ -248,7 +243,6 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
248243 pcl::registration::DefaultConvergenceCriteria<
249244 Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
250245 }
251- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
252246 return ;
253247 }
254248
@@ -266,10 +260,6 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
266260 nu_current = std::max (nu_begin_ratio_ * residual_med, nu_limit);
267261 }
268262
269- const double stop_threshold = (this ->transformation_epsilon_ > 0 )
270- ? static_cast <double >(this ->transformation_epsilon_ )
271- : 1e-6 ;
272-
273263 this ->nr_iterations_ = 0 ;
274264 this ->converged_ = false ;
275265
@@ -309,7 +299,6 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
309299 pcl::registration::DefaultConvergenceCriteria<
310300 Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
311301 }
312- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
313302 return ;
314303 }
315304 energy = use_welsch ? computeEnergy (residuals, nu_current) : residuals.sum ();
@@ -327,16 +316,16 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
327316 svd_transform = candidate;
328317 transform_centered = candidate;
329318
330- const Matrix4d delta_transform =
331- transform_centered * previous_transform.inverse ();
332- this ->transformation_ = delta_transform.template cast <Scalar>();
333-
334319 if (use_anderson_) {
335320 const Matrix4d log_matrix = matrixLog (transform_centered);
336321 const Eigen::VectorXd& accelerated = anderson_.compute (log_matrix.data ());
337322 transform_centered = Eigen::Map<const Matrix4d>(accelerated.data ()).exp ();
338323 }
339324
325+ const Matrix4d delta_transform =
326+ transform_centered * previous_transform.inverse ();
327+ this ->transformation_ = delta_transform.template cast <Scalar>();
328+
340329 if (!updateCorrespondences (transform_centered,
341330 source_mat,
342331 target_mat,
@@ -352,28 +341,14 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
352341 pcl::registration::DefaultConvergenceCriteria<
353342 Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
354343 }
355- last_convergence_trigger_ = ConvergenceTrigger::NO_CORRESPONDENCES;
356344 return ;
357345 }
358346
359- const double delta = (transform_centered - previous_transform).norm ();
360347 previous_transform = transform_centered;
361348 ++this ->nr_iterations_ ;
362349
363350 if (convergence_criteria && static_cast <bool >(*convergence_criteria)) {
364351 converged = true ;
365- last_convergence_trigger_ = ConvergenceTrigger::DEFAULT_CRITERIA;
366- break ;
367- }
368-
369- if (delta < stop_threshold) {
370- converged = true ;
371- if (convergence_criteria) {
372- convergence_criteria->setConvergenceState (
373- pcl::registration::DefaultConvergenceCriteria<
374- Scalar>::CONVERGENCE_CRITERIA_TRANSFORM);
375- }
376- last_convergence_trigger_ = ConvergenceTrigger::FRICP_STOP_THRESHOLD;
377352 break ;
378353 }
379354 }
@@ -399,7 +374,6 @@ FastRobustIterativeClosestPoint<PointSource, PointTarget, Scalar>::
399374 convergence_criteria->setConvergenceState (
400375 pcl::registration::DefaultConvergenceCriteria<
401376 Scalar>::CONVERGENCE_CRITERIA_ITERATIONS);
402- last_convergence_trigger_ = ConvergenceTrigger::ITERATION_LIMIT;
403377 }
404378
405379 const Matrix4d final_transform =
0 commit comments