Open jlblancoc opened 6 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
WIP: c346e572a802ba1cd038e32c8151ef17a684ec82
Done now.
But the result is quite cumbersome. Probably it's way easier and more robust to consider all the Jacobians directly for quaternions...
New to-do list:
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?
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.
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
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] ...
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".