Skip to content
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

Possible Issue with Jacobian Function #8

Open
magicbycalvin opened this issue May 3, 2021 · 5 comments
Open

Possible Issue with Jacobian Function #8

magicbycalvin opened this issue May 3, 2021 · 5 comments

Comments

@magicbycalvin
Copy link

Greetings,

The Jacobian function in the icp.ipynb file on line "In [14]" uses the derivative of the rotation matrix at a constant angle of zero rather than the derivative of the rotation matrix at the current angle. Because of this, I suspect that the Jacobian may be approximating about the wrong point.

Should my math be correct, I would recommend replacing the zero with the variable "theta".

@niosus
Copy link
Owner

niosus commented May 6, 2021

Hey @magicbycalvin thanks for pointing it out! I will look into this.

@BlueBirdHouse
Copy link

Without this typo, the point-to-plane metric will converge more slowly than the point-to-point metric. I understand that the point-to-plane metric will be much better than the point-to-point under many conditions. But, we cannot say it is always better. It is normal that we find some exceptions.

@niosus
Copy link
Owner

niosus commented Aug 19, 2022

Ok, so the way I understand the math there is that we linearlize not at the current position in its absolute sense, but with respect to the "displacement" from the current position. So we aim to find the Jacobian of our function at the optimum, i.e., at 0 displacement, thus we linearize at 0. Does this make sense?

@oliverzzm
Copy link

Ok, so the way I understand the math there is that we linearlize not at the current position in its absolute sense, but with respect to the "displacement" from the current position. So we aim to find the Jacobian of our function at the optimum, i.e., at 0 displacement, thus we linearize at 0. Does this make sense?

I read through the code carefully, mainly the "icp_least_squares" function. Note that we always prepare_system for the original P and Q, not the iteratively-updated P and Q. In the loop we've been constantly updating x with dx, so we are continously moving in the landscape, which means after iteration two, we are at a different location than the (0,0,0) right? The linearization method is to find a moving direction based on the local landscape around the point where we are currently at. So I think maybe 'theta' is correct.

Actually I think this is a very tricky details. If one change the prepare_system to accept P_copy rather thant the P, then maybe '0' is correct. But if we do this, other parts of the code needs to be changed.

Anyway, the weird thing is, either '0' or 'theta' makes a good-looking chi_values plot.

@oliverzzm
Copy link

'theta' is correct! When making the example data, modify pi/4 to pi/3. The original '0' makes a fast degrading error curve but plateau to a very large value. The animation shows the fitting stucks at some point. However, changing to 'theta' would make a perfect alignment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants