Interpolation between three-dimensional rotations

418 Views Asked by At

I have to define a continuous function $g: [0, 1] \rightarrow \mathrm{SO}(3)$ such that $g(0) = I$ and $g(1) = R$ (a given rotation).

I know we can do this kind of interpolation using quaternions and slerp. But, the question says think along the lines of angle-axis parameterization. Any hints regarding how to interpolate between two rotations in $\mathrm{SO}(3)$ using angle-axis parameterization. Moreover, the function $g$ should give $R \in \mathrm{SO}(3)$. Thanks for the help!

2

There are 2 best solutions below

3
On BEST ANSWER

Hint: Any element in SO(3) is a rotation around an axis.

0
On

Even though this is a late answer, I think this might add some good points to the post:

  1. To find the axis of rotation for $R$, assuming that it's not degenerate like $R=I_{3\times 3}$ (the identity matrix), solve the linear system $(R-I)\begin{bmatrix}x & y & z\end{bmatrix}^t = 0$.
  2. Once you have found the axis of rotation, let's call it $\vec{a}=(a_1,a_2,a_3)$, you can see using the Euler-Rodrigues' formula that $R$, as a linear transformation, is given by

$$R=e^{\theta \vec{a}}=\cos(\theta)I_{3\times 3}+\sin(\theta)[a]_{\times}+\big(1-\cos(\theta)\big)\begin{bmatrix}a_1 & a_2 & a_3\end{bmatrix}\begin{bmatrix}a_1 \\a_2\\a_3\end{bmatrix}$$

Where $[a]_{\times}$ denotes the cross-product matrix associated to the linear transformation $A:\mathbb{R}^3 \to \mathbb{R}^3$ given by $A(\vec{v}) = \vec{a} \times \vec{v}$. You can see that $[\vec{a}]_{\times}$ is anti-symmetric. Also, $$\mathrm{tr}\bigg(\begin{bmatrix}a_1 & a_2 & a_3\end{bmatrix}\begin{bmatrix}a_1 \\ a_2 \\ a_3\end{bmatrix}\bigg)=\|\vec{a}\|^2$$

Assuming that $\|\vec{a}\|=1$ Taking trace from both sides yields

$$\mathrm{tr}(R)=3\cos(\theta)+\sin(\theta)\times 0+(1-\cos(\theta))\times1$$

$$\cos(\theta) = \frac{\mathrm{tr}(R)-1}{2}$$

$$\theta = \arccos(\frac{\mathrm{tr}(R)-1}{2})$$

Now you know the angle of rotation as well. To find your desired interpolation, consider

$$\large R(t)=e^{t\theta\vec{a}} \,\,\, \text{for t}\in [0,1]$$