-
Notifications
You must be signed in to change notification settings - Fork 236
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
Implement left-Jacobians #116
Comments
API-wise, another solution could be to rely on different types. In the futur I would like to introduce the manif::Jacobian<SE3, SE3> J_Y_X; // == Eigen::Matrix<double, 6, 6>
manif::Jacobian<SE3, Vector3> J_X_v // == Eigen::Matrix<double, 6, 3>
manif::Jacobian<Vector3, Vector3> J_vb_va // == Eigen::Matrix<double, 3, 3> We could go all the way down and create a class manif::Jacobian<SE3, SE3> right_J_inv_x;
manif::Jacobian<SE3, SE3, manif::Left> left_J_inv_x;
...
X.inverse(right_J_inv_x);
X.inverse(left_J_inv_x); This implies some heavy modifications but after a quick look I would say it is feasible. |
Wow this looks neat! However, I wonder if it is a good idea to have the left/right thing kind of hidden inside of the matrix template definition. I mean it can be confusing for example for finding bugs once the code is done, because the trace for left/right is perhaps up in some typedef or variable declaration, far from the actual function calls. What do you think? |
Late answer... |
Pasting from #132 (comment)
|
@joansola I've been revisiting this topic and the conclusion is that the designed I proposed a while back (see below) is basically not doable without giving up the use of Not doable: manif::Jacobian<SE3, SE3> right_J_inv_x;
manif::Jacobian<SE3, SE3, manif::Left> left_J_inv_x;
...
X.inverse(right_J_inv_x);
X.inverse(left_J_inv_x); So back to api design discussion... I really don't know what's best here;
Unfortunately the most practical solution is likely the argument flag |
This is a low priority issue.
I am wondering: manif could have the option of providing the left-Jacobians instead of the right-Jacobians. This would give extra power to interface it with other tools that might be using left- logic. This means all implementations that regard uncertainties in the global reference.
As a reminder:
For example, Delaert and Drummond typically use left operations. Also Ceres uses left-plus in the local parametrizations they ship with the library.
So Manif could easily adapt to these cases.
The option should be global I guess, something like:
manif::options::setRightJacobians()
or whatsoeverX.inverse(J, manif::LEFT_JAC)
--> ugly in my opinionThe text was updated successfully, but these errors were encountered: