SE(3) Pose Manifolds Jacobians

245 views
Skip to first unread message

raf...@dotproduct3d.com

unread,
Jul 20, 2024, 10:50:48 AM7/20/24
to Ceres Solver
Hello,

I would like to use Ceres as the optimization backend for SfM that's a small part of a larger VIO engine that I'm building.

Throughout the engine I am using SE3 objects as camera poses that offer suitable log() and exp() functions.

Now, it would be relatively straightforward to build suitable classes derived from ceres::Manifold to make my pose parameterization known to Ceres, were it not for two items:

1. Ceres requires me to implement Plus() and Minus() (ok -- can do that!) as well as PlusJacobian() and MinusJacobian() --> what is this?
I'm also not sure why the Jacobian functions are necessary (for Autodiff? As long as I can provide Jacobians through my CostFunction objects, wouldn't that suffice?).
TBH I'm not even sure what PlusJacobian() and MinusJacobian() are exactly.
From the header comment of PlusJacobian():
// jacobian is a row-major AmbientSize() x TangentSize() matrix.
OK, TangentSize() must be is 6 as SE3 has 6 DOF.
What is AmbientSize() though? 3 (3d-space)? 6 (because why not)? 12 (full rotation matrix + translation vector)?
What are we differentiating here?
The matrix elements vs. a delta in tangent space?
The minimal 6-dof log representation vs. a delta in tangent space?
I can provide the generator matrices for SE(3) if that helps...

2. I could, in theory, make my life easy and just use the Manifold implementations of the Sophus library (https://github.com/strasdat/Sophus/blob/main/sophus/ceres_manifold.hpp) however the problem there is that they are using a right-multiply convention throughout the library (i.e. BoxPlus = T * exp(x)) whereas I'm using a left-multiply convention throughout my engine (BoxPlus = exp(x) * T) and I'm not sure how a change from right-multiply to left-multiply would affect the implementations of PlusJacobian() and MinusJacobian().

Hope someone can help me here. Seems like an issue that might have come up before?

Thanks

raf...@dotproduct3d.com

unread,
Jul 21, 2024, 12:52:37 PM7/21/24
to Ceres Solver
Actually, this thread answered my question perfectly:
https://groups.google.com/g/ceres-solver/c/OF7AITGhAvU/m/uOBe_wszAwAJ
Reply all
Reply to author
Forward
0 new messages