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

question about a jacobian #24

Closed
fushi219 opened this issue Jun 19, 2022 · 2 comments
Closed

question about a jacobian #24

fushi219 opened this issue Jun 19, 2022 · 2 comments
Labels
math-explainer Algorithm math will not be elaborated on the issue tracker, unless errors are suspected

Comments

@fushi219
Copy link

Hi! Thanks for your beautiful code and I am confused about a jacobian and wish to get your help.

I have no idea about jacobians from https://github.com/SpectacularAI/HybVIO/blob/main/src/odometry/triangulation.cpp#L270 to https://github.com/SpectacularAI/HybVIO/blob/main/src/odometry/triangulation.cpp#L322. Are these calculations used for jacobian of landmark reprojection errors to imu poses in ekf state, which will be used in later filter update? (in this way, we do not need to project H into nullspaces of landmark.) But how the jacobians are derivated?

I know its quite boring and troublesome to explain it, so a liitle explain will be grateful, thanks!

@oseiskar
Copy link
Member

Hello. You are correct, those Jacobians are intermediary steps and the goal is computing the Jacobian of the reprojection errors accurately (by differentiating an entire Gauss-Newton iteration process) so the MSCKF nullspace projection trick is not needed. This is the main difference between PIVO and MSCKF. HybVIO is a derivative of the PIVO method in this sense.

What it actually differentiated in that code block are (related to) the left and right hand side of a Gauss-Newton update step in the triangulation process.

@fushi219
Copy link
Author

fushi219 commented Jun 21, 2022

Thanks a lot! I have understood the jacobians mentioned above, however, i can't figure out these:

const Vector3d dX_Eerror = -X.solve(dETE.block<3, 3>(0, j * 3) * X.solve(Eerror));
dpfi.col(j) += -X.solve(dEerror.col(j)) - dX_Eerror;
wish to get some help. Thanks!

@oseiskar oseiskar added the math-explainer Algorithm math will not be elaborated on the issue tracker, unless errors are suspected label Oct 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
math-explainer Algorithm math will not be elaborated on the issue tracker, unless errors are suspected
Projects
None yet
Development

No branches or pull requests

2 participants