54 PCL_ERROR(
"[pcl::%s::computeTransformation] Must set InputSources and InputTargets "
55 "to the same, nonzero size!\n",
59 bool manual_correspondence_estimations_set =
true;
61 manual_correspondence_estimations_set =
false;
63 for (std::size_t i = 0; i <
sources_.size(); i++) {
72 PCL_ERROR(
"[pcl::%s::computeTransform] Must set CorrespondenceEstimations to be "
73 "the same size as the joint\n",
77 std::vector<PointCloudSourcePtr> inputs_transformed(
sources_.size());
78 for (std::size_t i = 0; i <
sources_.size(); i++) {
89 std::vector<std::size_t> input_offsets(
sources_.size());
90 std::vector<std::size_t> target_offsets(
targets_.size());
94 std::size_t input_offset = 0;
95 std::size_t target_offset = 0;
96 for (std::size_t i = 0; i <
sources_.size(); i++) {
98 if (guess != Matrix4::Identity()) {
103 *inputs_transformed[i] = *
sources_[i];
106 *inputs_transformed_combined += *inputs_transformed[i];
108 input_offsets[i] = input_offset;
109 target_offsets[i] = target_offset;
110 input_offset += inputs_transformed[i]->size();
111 target_offset +=
targets_[i]->size();
118 for (std::size_t i = 0; i <
sources_.size(); i++) {
133 if (rej->requiresTargetPoints())
134 rej->setTargetPoints(targets_combined_blob);
136 rej->setTargetNormals(targets_combined_blob);
145 std::vector<CorrespondencesPtr> partial_correspondences_(
sources_.size());
146 for (std::size_t i = 0; i <
sources_.size(); i++) {
174 PCL_DEBUG(
"[pcl::%s::computeTransformation] Found %d partial correspondences for "
177 partial_correspondences_[i]->size(),
179 for (std::size_t j = 0; j < partial_correspondences_[i]->size(); j++) {
187 PCL_DEBUG(
"[pcl::%s::computeTransformation] Total correspondences: %d\n",
194 toPCLPointCloud2(*inputs_transformed_combined, *inputs_transformed_combined_blob);
198 PCL_DEBUG(
"Applying a correspondence rejector method: %s.\n",
201 PCL_DEBUG(
"Applying a correspondence rejector method: %s.\n",
202 rej->getClassName().c_str());
203 if (rej->requiresSourcePoints())
204 rej->setSourcePoints(inputs_transformed_combined_blob);
206 rej->setSourceNormals(inputs_transformed_combined_blob);
207 rej->setInputCorrespondences(temp_correspondences);
216 PCL_ERROR(
"[pcl::%s::computeTransformation] Not enough correspondences found. "
217 "Relax your threshold parameters.\n",
221 Scalar>::CONVERGENCE_CRITERIA_NO_CORRESPONDENCES);
228 *inputs_transformed_combined,
235 *inputs_transformed_combined, *inputs_transformed_combined,
transformation_);
237 for (std::size_t i = 0; i <
sources_.size(); i++) {
251 converged_ =
static_cast<bool>((*convergence_criteria_));
254 PCL_DEBUG(
"Transformation "
255 "is:\n\t%5f\t%5f\t%5f\t%5f\n\t%5f\t%5f\t%5f\t%5f\n\t%5f\t%5f\t%5f\t%5f\n\t%"
256 "5f\t%5f\t%5f\t%5f\n",
283 if (!manual_correspondence_estimations_set) {
307 PCL_WARN(
"[pcl::%s::determineRequiredBlobData] Estimator expects source normals, "
308 "but we can't provide them.\n",
312 PCL_WARN(
"[pcl::%s::determineRequiredBlobData] Estimator expects target normals, "
313 "but we can't provide them.\n",
325 PCL_WARN(
"[pcl::%s::determineRequiredBlobData] Rejector %s expects source "
326 "normals, but we can't provide them.\n",
328 rej->getClassName().c_str());
331 PCL_WARN(
"[pcl::%s::determineRequiredBlobData] Rejector %s expects target "
332 "normals, but we can't provide them.\n",
334 rej->getClassName().c_str());