Computing Jacobian of error function using Lie Algebra

491 Views Asked by At

First off all, I hope this is the right place to ask, as it is a computer vision problem, but I'm specifically asking about the mathematical part of it.

I am currently implementing the ICP (Iterative Closest Point) algorithm, whose aim is to perform 3D pointcloud registration, i.e find the best 3D rigid transformation that maps one pointcloud onto the other. I have already successfully implemented it, so I know that the following works, I am merely trying to understand how the Jacobian of the error function is computed, as I will have to modify the error function to better suit our needs, and thus will need to compute a new Jacobian.

As such, for each point I have to minimize the following error function

$$ e(x) = (P - e^x\hat{T}P^*)^2 $$

Where

  • $P*=(X,Y,Z,1) \in R^4$ is the 3D point of the reference point cloud (in homogeneous coordinates),

  • P is the corresponding point in the point cloud that we want to register (obtained by nearest neighbor search)

  • $\hat{T} \in \frak{se(3)}$ is the initial guess for the transformation

  • $x = (v_1, v_2, v_3, \omega_1, \omega_2, \omega_3)$ is the estimated transformation twist that we are trying to iteratively refine towards the best possible solution, ie the rigid transformation that best fits the two point clouds together.

I update the pose at the left hand side $$\hat{T} = e^x*\hat{T}$$

Thus, I need to compute the following Jacobian in order to use Gauss-Newton method for minimization:

$$J = \frac{\partial e}{\partial x}$$

I know that the following Jacobian is correct:

$$ J = \left( \begin{array}{cc} I_{3x3} & \hat{P} \end{array}\right) = \left( \begin{array}{cccccc} 1& 0& 0& 0& Z& Y \\ 0& 1& 0& -Z& 0& X \\ 0& 0& 1& Y& -X& 0 \end{array}\right)$$

Could someone explain to me how it is computed?

I am not overly experienced with matrix derivatives, and am just starting to learn about lie algebra, and I couldn't find enough information around to understand it.

Thanks in advance for your input.