Interpolation in $SO(3)$ : different approaches 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:

Is that correct?

Thanks in advance for your help.
 A: 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.
A: For a general overview of interpolation in $\textrm{SO}(3)$, Park and Ravani's 'Smooth Invariant Interpolation of Rotations' is a must-read. It distills much of the work in the early to mid 1990's on this topic in addition to presenting three original methods for interpolation you might find interesting.  Among other things, it contains the first analytical derivations of the $\textrm{SO}(3)$ spatial and body Jacobians, in addition to an analytical form of the body acceleration.
However there is an extremely powerful trick you can exploit to interpolate trajectories in $\textrm{SO}(3)$ that avoids many of the problems other methods run into.

Given a matrix $M \in \textrm{GL}^+(3, \mathbb{R})$ and its corresponding SVD factorization, $M = U \Sigma V^{H}$, its projection onto $\textrm{SO}(3)$ is given by \begin{align*} R = UV^{H} \in \textrm{SO}(3). \end{align*} Moreover, this projection can be weighted by a real $3 \times 3$ symmetric matrix $W$, such that \begin{align*}MW = U \Sigma V^{H}, \ R= UV^{H} \in \textrm{SO}(3).  \end{align*}

As described in this wonderful paper by Belta and Kumar, the above method essentially allows you interpolate a trajectory in $\textrm{SO}(3)$ element-wise, using the same techniques you might apply to trajectories in $\mathbb{R}^n$, without worrying about whether or not the interpolated rotational trajectory stays actually in $\textrm{SO}(3)$. If you don't do anything too crazy, the interpolated trajectory should stay in $\textrm{GL}^+(3, \mathbb{R})$ and you can just project it back down into $\textrm{SO}(3)$.
In an applied sense, the quality of your interpolant tends to be proportional proportional to the amount of information you give it. As an example, suppose you're given a set of $T$ time instances $\{t_i\}$ and the corresponding values of a trajectory in $\textrm{SO}(3)$ evaluated at these points, $\{R(t_i)\}$. With no information about the temporal derivatives, your options are limited if you want to recover an interpolating curve.
However, if you're able to get a serviceable approximation of the temporal derivatives of the curve at the given time instances (high order finite difference methods work well in application) then you can do something pretty neat.

Given a set of $T$ arbitrary time instances $\{t_i\}$, the corresponding values of a trajectory $\{R(t_i)\} \in \textrm{SO}(3)$, and the values of its temporal derivative $\{\dot{R}(t_i)\}$ a piecewise interpolating curve that passes through $R(t_i)$ at time $t_i$, $1 \leq i \leq T$ can be constructed as follows:
For $t \in [t_i, t_{i+1}]$, we can define a cubic minimum acceleration curve in $\textrm{GL}^{+}(3, \mathbb{R})$ as \begin{align*}  M(t) = M_3 t^3 + M_2 t^2 + M_1 t + M_0, \quad t \in [t_i, t_{i+1}] \end{align*}
where \begin{align*}
& M_3 = 6 \ \frac{\dot{R}(t_i) + \dot{R}(t_{i+1})}{{(\Delta t)}^2} - 12\frac{\Delta x}{(\Delta t)^3} \\
& M_2 = \frac{\Delta v}{\Delta t} - M_3 \frac{t_i + t_{i+1}}{2} \\
& M_1 = \dot{R}(t_i) - M_3\frac{t_i^2}{2} - M_2 t_i \\
& M_0 = R(t_i) - M_3 \frac{t_i^3}{6} - M_2 \frac{t_i^2}{2} - M_1 t_i
\end{align*} and
\begin{align*}
& \Delta t = t_{i+1} - t_i \\
& \Delta x = R(t_{i+1}) - R(t_{i}) \\
& \Delta v = \dot{R}t_{i+1}) - \dot{R}(t_{i})
\end{align*}
Taking $W$ to be real symmetric weighing matrix, we can find the singular value decomposition of $M(t) W$ to recover the matrices $ U(t), \Sigma(t), V(t)$ such that $$ M(t) W = U(t) \Sigma (t) V^{H}(t).$$ Then, the interpolating curve in $\textrm{SO}(3)$ on the interval $[t_i, t_{i+1}]$ is given by
\begin{align*} R(t) = U(t) V^{H}(t), \quad t \in [t_i, t_{i+1}] \end{align*}

In my opinion, the most elegant part of this approach is that if your trajectory corresponds to a rigid body you can weigh the interpolation based on the inertial properties of the body.

Namely, if $\cal I$ is the $3 \times 3$ inertia tensor corresponding to the rigid body, then $W$ can be defined as \begin{align*}
W = \frac{1}{2} \textrm{tr}({\cal I}) \mathbb{I} - {\cal I} \end{align*}
where $\mathbb{I}$ is the $3 \times 3$ identity matrix.

If you don't know the inertial tensor corresponding to the rigid body or your trajectory doesn't correspond to one, a tasteful choice for $W$ would be based on the inertia tensor corresponding to a solid sphere of unit mass. In this case $\cal{I} = \mathbb{I}$ and $W = (2/5)\mathbb{I}$.
