55 const Matrix4& transformation_matrix)
const
57 double fitness_score = 0.0;
62 input_transformed.
resize(cloud_src->size());
63 for (std::size_t i = 0; i < cloud_src->size(); ++i) {
64 const PointSource& src = (*cloud_src)[i];
65 PointTarget& tgt = input_transformed[i];
66 tgt.x =
static_cast<float>(
67 transformation_matrix(0, 0) * src.x + transformation_matrix(0, 1) * src.y +
68 transformation_matrix(0, 2) * src.z + transformation_matrix(0, 3));
69 tgt.y =
static_cast<float>(
70 transformation_matrix(1, 0) * src.x + transformation_matrix(1, 1) * src.y +
71 transformation_matrix(1, 2) * src.z + transformation_matrix(1, 3));
72 tgt.z =
static_cast<float>(
73 transformation_matrix(2, 0) * src.x + transformation_matrix(2, 1) * src.y +
74 transformation_matrix(2, 2) * src.z + transformation_matrix(2, 3));
79 pcl::search::autoSelectMethod<PointTarget>(cloud_tgt,
86 std::vector<float> nn_dists(1);
90 for (
const auto& point : input_transformed) {
92 tree->nearestKSearch(point, 1, nn_indices, nn_dists);
95 if (nn_dists[0] > max_range_)
99 fitness_score += nn_dists[0];
104 return (fitness_score / nr);
105 return (std::numeric_limits<double>::max());