Skip to content

Fix ICP sample indices after initialization #183

Description

@keenan-burnett

Currently, we resample the filtered_samples_inds at each iteration of ICP:

for (size_t i = 0; i < sample_inds.size(); i++) {
if (nn_dists[i] < max_pair_d2) {
// Check planar distance (only after a few steps for initial alignment)
auto diff = aligned_points[sample_inds[i].first].getVector3fMap() -
point_map[sample_inds[i].second].getVector3fMap();
float planar_dist = std::abs(
diff.dot(point_map[sample_inds[i].second].getNormalVector3fMap()));
if (step < first_steps || planar_dist < max_planar_d) {
filtered_sample_inds.push_back(sample_inds[i]);
}
}
}
timer[2]->stop();
/// point to plane optimization

This essentially "moves" the minimum of the cost function at each iteration of ICP.
If we fixed filtered_samples_inds after the initialization steps, it might allow ICP to converge faster.

Currently, it often takes 20-40 iterations of ICP to converge which seems like too much.

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions