-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[registration] icp with TransformationEstimationPointToPlane can not give right result. #6060
Comments
You can enable more logging by adding
However in the second iteration of the transformation estimation, something seems to go wrong:
I will see if I can find out more. |
I failed on my first iteration.
|
@QiuYilin Apparently, there are three points in both the source and the target cloud where xyz are valid, but the normal is invalid/nan. How did you estimate the normals? |
@mvieth gpu version normalestimation #6055 parameter: radius 2; max results 100; view point(1000,1000,10000) point xyz pcd: https://ufile.io/7c83dt1t So, there is also a difference in the logic between PointToPlaneLM and PointToPlaneLLS. PointToPlaneLLS will ignore invalid values while PointToPlaneLM will not? |
I checked the three points, they are kind of isolated. So they did not have enough neighbours within the radius to estimate the normal. You could remove these three invalid points, then the PointToPlaneLM should work correctly. By the way, I have been working on making PointToPlaneLM faster, but I am not sure yet when that will be ready for a pull request. |
So how should the program handle point cloud data with valid xyz values but invalid normal values? The RemoveNanFromPoint method will only remove invalid xyz points. Should it directly treat such point clouds as corrupted data? |
You can use |
If icp uses TransformationEstimationPointToPlane as the transformation estimation method, meaningless results will be obtained
I am testing to compare the performance of different ICP methods.
Currently, PCL has an ICPWithNormals type, which is based on the PointToPlane principle of LLS. There are also two other transformation estimation methods based on PointToPlane that are based on LM, but I tried these two methods and could not get meaningful results , only an identity matrix.
My code:
my file: https://ufile.io/f/vpq0a
result:
Your Environment (please complete the following information):
OS: Windows 10
Compiler: MSVC 2022
PCL Version 1.14.1.99(2d5101a)
GPU:1060 6GB
The text was updated successfully, but these errors were encountered: