Skip to content

Question about removal of the Center Of Mass in Symmetric Point-To-Plane ICP #68

@YoshuaNava

Description

@YoshuaNava

Introduction

First of all, I want to say thank you for developing, maintaining and sharing Cilantro. It is an awesome library 🙏

My name is Yoshua Nava. I work in Point Cloud-based SLAM targeted to live robot localization.

Background

I have come to the realization that multiple point cloud registration libraries may not be handling a key aspect in the same way, and that is: estimating transformations when reference/target point clouds are displaced from the origin.

I looked at Cilantro's code, specially the computation of the error for Symmetric Point-To-Plane ICP:

const Vector<ScalarT, 3> d = dst_p.col(corr.indexInFirst) - dst_mean;

const Vector<ScalarT, 3> s = tform * (src_p.col(corr.indexInSecond) - src_mean);

And I observed that it is quite different to other implementations. I also digged a bit through Cilantro's PRs, and found two mentions (1, 2)

Moreover, I checked different point cloud libraries such as PCL, Open3D, KissICP, OpenCV, as well as Libpointmatcher (Point-To-Point & Point-To-Plane).

I'm surprised by the variety of approaches, and I wonder what is the best one. I found in practice that handling of the CoM can make a significant difference in the estimation of rotations with Point-To-Plane ICP, because the rotational term is quite sensitive to the position of the origin.

Questions

  1. Do you have some references on the procedure to remove the CoM from the reading and reference point clouds?
  2. Did you consider the alternative approaches implemented by the other libraries? If yes how was your experience with them?
  3. How deeply have you battle-tested the approach implemented by Cilantro? Do you see any limitations?

Thank you in advance.

Best,
Yoshua Nava

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions