-
Notifications
You must be signed in to change notification settings - Fork 207
Description
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
- 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