Rotation matrix and translation vector¶

A pose can also be defined by a rotation matrix $$R$$ and a translation vector $$T$$.

$\begin{split}R = \left(\begin{array}{ccc} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{array}\right), \qquad T = \left(\begin{array}{c} X \\ Y \\ Z \end{array}\right).\end{split}$

The pose transformation can be applied to a point $$P$$ by

$P' = R P + T.$

Conversion from rotation matrix to quaternion¶

The conversion from a rotation matrix (with $$det(R)=1$$) to a quaternion $$q=(\begin{array}{cccc}x & y & z & w\end{array})^T$$ can be done as follows.

$\begin{split}x &= \text{sign}(r_{21}-r_{12}) \frac{1}{2}\sqrt{\text{max}(0, 1 + r_{00} - r_{11} - r_{22})} \\ y &= \text{sign}(r_{02}-r_{20}) \frac{1}{2}\sqrt{\text{max}(0, 1 - r_{00} + r_{11} - r_{22})} \\ z &= \text{sign}(r_{10}-r_{01}) \frac{1}{2}\sqrt{\text{max}(0, 1 - r_{00} - r_{11} + r_{22})} \\ w &= \frac{1}{2}\sqrt{\text{max}(0, 1 + r_{00} + r_{11} + r_{22})}\end{split}$

The $$\text{sign}$$ operator returns -1 if the argument is negative. Otherwise, 1 is returned. It is used to recover the sign for the square root. The $$\text{max}$$ function ensures that the argument of the square root function is not negative, which can happen in practice due to round-off errors.

Conversion from quaternion to rotation matrix¶

The conversion from a quaternion $$q=(\begin{array}{cccc}x & y & z & w\end{array})^T$$ with $$||q||=1$$ to a rotation matrix can be done as follows.

$\begin{split}R = 2 \left(\begin{array}{ccc} \frac{1}{2} - y^2 - z^2 & x y - z w & x z + y w \\ x y + z w & \frac{1}{2} - x^2 - z^2 & y z - x w \\ x z - y w & y z + x w & \frac{1}{2} - x^2 - y^2 \end{array}\right)\end{split}$