cilantro
cilantro copied to clipboard
Question about removal of the Center Of Mass in Symmetric Point-To-Plane ICP
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:
https://github.com/kzampog/cilantro/blob/cd80c1a5f2f4a9e2760fcc9b353ce0880f79783d/include/cilantro/registration/transform_estimation.hpp#L333-L333
https://github.com/kzampog/cilantro/blob/cd80c1a5f2f4a9e2760fcc9b353ce0880f79783d/include/cilantro/registration/transform_estimation.hpp#L335
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
- Do you have some references on the procedure to remove the CoM from the reading and reference point clouds?
- Did you consider the alternative approaches implemented by the other libraries? If yes how was your experience with them?
- How deeply have you battle-tested the approach implemented by Cilantro? Do you see any limitations?
Thank you in advance.
Best, Yoshua Nava