jlblancoc / tutorial-se3-manifold

LaTeX sources of the technical report "A tutorial on SE(3) transformation parameterizations and on-manifold optimization"
https://jlblancoc.github.io/tutorial-se3-manifold/
182 stars 30 forks source link

TO-DO: Jacobian of Matrix-to-quaternion conversion #2

Open jlblancoc opened 6 years ago

jlblancoc commented 6 years ago

It might be useful to define the Jacobian for this conversion, so all formulas in latest chapters also apply to quaternions via the chain rule.

The conversion Jacobian can be derived by combining two Jacobians:

A more direct way would be to derive the Jacobian of the operation described in this paper, but it implies obtaining the Jacobian of an eigenvector. I couldn't find such a closed form expression, not even in the "Matrix Bookbook".

jlblancoc commented 5 years ago

Working here again after discussion in https://github.com/strasdat/Sophus/issues/179

Partly done in d6357ddc8f2ca3cca873f2ebd9422566bb633c00

Still to be done: Add new section 2.5.2 with missing Jacobian. Then, the two Jacobians can be chained together to have the one for 3x3 Matrix -> Quaternion.

cc: @v01d

jlblancoc commented 5 years ago

WIP: c346e572a802ba1cd038e32c8151ef17a684ec82

jlblancoc commented 5 years ago

Done now.

But the result is quite cumbersome. Probably it's way easier and more robust to consider all the Jacobians directly for quaternions...

jlblancoc commented 5 years ago

New to-do list:

protobits commented 5 years ago

Hi, thanks for working on this.

I'm still looking for a direct expression of jacobian of log w.r.t. quaternion directly. Wouldn't be a matter of taking the derivative of eq (9.17c) w.r.t. q? Or am I missing something?

protobits commented 5 years ago

BTW: Sophus seems to implement the log() operation using equation (29) of https://arxiv.org/pdf/1107.1119.pdf which also seems reasonable to derive.

tscmga commented 2 years ago

there is a paper , dynamic fusion, using dual quaternion.......that is , many nodes affect a 3d point . a node has a 3x4 mat . convert the 3x4 mat to dual quation 1x8 , and blend w1dq1+w2dq2+ .... convert back to a 3x4 mat ... i think if using dualquation to blende node influrence , it is good to using (R,t) and so3

tscmga commented 2 years ago

the paper told me YPR is not good .. lie a... is good. but after read the code , i find out that , the icp method in kinect fusion is not using lie..., that is some thing called twist... and it works well and the surfelwarp is using something called twist..too...and works well core/warp_solver/geometry_icp_jacobian.cuh: twist_gradient_j[1].translation = make_float3( 0.0f, -1.0f, 0.0f); core/warp_solver/geometry_icp_jacobian.cuh: twist_gradient_j[2].rotation = make_float3(-Tj_xj.y, Tj_xj.x, 0.0f); core/warp_solver/geometry_icp_jacobian.cuh: twist_gradient_j[2].translation = make_float3( 0.0f, 0.0f, -1.0f); core/warp_solver/geometry_icp_jacobian.cuh: TwistGradientOfScalarCost twist_gradient_i,//[3] core/warp_solver/geometry_icp_jacobian.cuh: TwistGradientOfScalarCost twist_gradient_j //[3] core/warp_solver/geometry_icp_jacobian.cuh: computeSmoothTermJacobian(r, s, twist_gradient_i, twist_gradient_j); core/warp_solver/geometry_icp_jacobian.cuh: TwistGradientOfScalarCost* twist_gradient//[3] ...