Interpolation in $SO(3)$ : different approaches

1.5k Views Asked by At

I am studying rotations and in particular interpolation between 2 matrices $R_1,R_2 \in SO(3)$ which is: find a smooth path between the 2 matrices.

I found some slides about it but not yet a good book, I asked the author of the slides and he told me he does not know about a good book about it. The slides are really nice but I need more details.


My doubt is rising when he is talking about the interpolation between 2matrices $R_1,R_2 \in SO(3)$. He is trying to do that with different approaches:

  • Approach 1: Euler angles
  • Approach 2: use the geodesics of $SO(3)$

Regarding the Approach 1 he says that the interpolation will be not an intuitive motion and the topology will NOT be preserved.

What does it mean exactly?


Regarding the Approach 2 it does not say it explicitly but I think that you get a really intuitive motion because you are basically moving on a sphere (because you are using the geodesic between the matrix $R_1$ and $R_2$). You can look at the following image to get an idea:

enter image description here

Is that correct?


Thanks in advance for your help.

1

There are 1 best solutions below

0
On

Using the notation of Travis and, I think, his approach, let $B_1 = AC_1$ where $A$ is the starting matrix, $B_1$ is the ending matrix and $C_1$ is the matrix that rotates $A$ to $B_1$. All three matrices are rotation matrices. Following Travis' approach, we want to find a way to smoothly vary $C$ from the identity matrix $I$ to $C_1=A^{-1}B_1=A^TB_1$. As $C$ is varied between $I$ and $C_1$, then $B$ will likewise vary smoothly between $A$ and $B_1$.

One approach (and there may be better) is to find the axis of rotation of $C_1$ and the angle that $C_1$ rotates about that axis. For a 3-D rotation matrix, one of the eigenvalues will be equal to one and its associated eigenvector $v$ is the axis of rotation. The angle of rotation $\theta_1$ can be found from the trace of $C_1$: $\mathrm{Tr}(C_1)=1+2\cos(\theta_1)$. Unfortunately, I don't how to determine to determine the sign of $\theta_1$ other than by trial and error.

Now, see this for one way to generate a rotation matrix from $v$ and $\theta$. Step $\theta$ smoothly between zero and $\theta_1$ and apply the referenced equation to generate successive $C_\theta$ matrices. These will smoothly vary between $I$ and $C_1$. Then $B_\theta=AC_\theta$ will vary smoothly between $A$ and $B_1$.

If desired, I can add MATLAB code implementing this approach.

EDIT: Here's a better approach. Find the eigenvalues and eigenvectors of $C_1$ such that $C_1v=v\lambda_1$ where the columns of $v$ are the eigenvectors and $\lambda_1$ is a diagonal matrix of the eigenvalues. Find the two complex eigenvalues of $\lambda_1$ so that $\lambda_+=\exp(i\theta_1)$ and $\lambda_-=\exp(-i\theta_1)$ where $\theta_1>0$. For each step of $\theta$ between zero and $\theta_1$, replace $\lambda_+$ and $\lambda_-$ with $\exp(i\theta)$ and $\exp(-i\theta)$ respectively thus generating $\lambda_\theta$. Now $C_\theta=v\lambda_\theta v^\dagger$. The two approaches give identical results.