1
$\begingroup$

Let us suppose we have two orthogonal rotation matrices representing a three-dimensional rotations $$\mathbf{R}(t)$$ and $$\mathbf{R}(t+\Delta t)$$

How is it possible to extract the angular velocity of the rotation $\boldsymbol \omega \in \mathbb{R}^3$ or equivalently the angular velocity tensor (represented by the skew-symmetric matrix) $$\boldsymbol \Omega = \begin{pmatrix} 0 & -\omega_z(t) & \omega_y(t) \\ \omega_z(t) & 0 & -\omega_x(t) \\ -\omega_y(t) & \omega_x(t) & 0 \\ \end{pmatrix}$$ from them?

I would ask you if the following approach make sense...

1) By mean of exponential map $\mathbf{R}(t+\Delta t) = e^{\boldsymbol \Omega \Delta t} \mathbf{R}(t)$

2) Solve for $\boldsymbol \Omega$ then $$\boldsymbol \Omega = \frac{ \log\left( \mathbf{R}(t)\mathbf{R}^{-1}(t+\Delta t) \right)}{\Delta t}$$

3) Call $\boldsymbol Y = \mathbf{R}(t) \mathbf{R}^{-1}(t+\Delta t) -\mathbf{I}$ and approximate the logarithm with its Taylor expansion

$$ \boldsymbol \Omega(t) = \dfrac{ \log\left(\mathbf{R}(t) \mathbf{R}^{-1}(t+\Delta t) \right)}{\Delta t} \approx \frac{1}{\Delta t} \left( \mathbf{Y} - \frac{\mathbf{Y}^2}{2} + \frac{\mathbf{Y}^3}{3} - \frac{\mathbf{Y}^4}{4} + \ldots \right ) $$

  • 0
    I think you mean "between two consecutive points in time"? Though that raises the question what makes two points in time consecutive. I think it should simply say "between two points in time".2011-09-07
  • 0
    Is $dt$ just a normal time interval? Then it might be preferable to denote it by $\Delta t$ to prevent confusion with the differential.2011-09-07
  • 0
    Rotation matrices are evaluated on a rigid-body at two consecutive time intervals, so I would have used $\Delta t$, yes.2011-09-07
  • 0
    I pointed out that "at two consecutive time intervals" makes no sense, but you used it again -- do you disagree?2011-09-07
  • 1
    excuse me corrected...2011-09-07

1 Answers 1

1

You don't need any series expansions to do this. $\mathbf Y^{-1}=\mathbf R(t+\Delta t) \mathbf R^{-1}(t)$ is a rotation matrix that rotates the body from the position at time $t$ to the position at time $t+\Delta t$. This is a rotation around the axis along $\boldsymbol\omega$ through the angle $|\boldsymbol\omega|\Delta t$. The trace of a rotation matrix with angle $\phi$ is $1+2\cos\phi$, so you can calculate $|\boldsymbol\omega|$ directly from the trace. To get the direction, you can solve the homogoeneous linear system $\mathbf Yx=x$.

  • 0
    Ok it works: first I compute the angle $\phi$ as $\phi = \arccos \left( \dfrac{\textrm{trace}(\mathbf{Y}(t)) - 1}{2}\right)$ and then the direction as the eigenvector of $\mathbf{Y}$ with the largest eigenvalue. Does this make sense?2011-09-07
  • 0
    @linello: The first part does; the second part is unnecessarily complicated -- you don't have to solve an eigenvalue problem; you already know that the eigenvalue for the axis is $1$, so you can solve the linear system $Yx=x$, which is easier.2011-09-07
  • 0
    maybe even easier is to use the following? $$\boldsymbol \omega = \frac{1}{2 \sin(\phi)} \begin{bmatrix} \mathbf{Y}_{3,2}(t)-\mathbf{Y}_{2,3}(t) \\ \mathbf{Y}_{1,3}(t)-\mathbf{Y}_{3,1}(t) \\ \mathbf{Y}_{2,1}(t)-\mathbf{Y}_{1,2}(t) \end{bmatrix} $$2011-09-07
  • 0
    @linello: Yes, that's a good idea. All methods (including these two) will become ill-conditioned as $\Delta t\to0$; I can't say at first sight which of these two will be worse numericaly in case you have to handle small $\Delta t$; you might want to try both and compare.2011-09-07
  • 0
    Thanks, I need a method to estimate the angular velocity tensor in a virtual environment head tracking system, where I also have to compute velocity of fingers with respect to head reference frame, the frame rate is around 100Hz, I will verify if this approach still holds or more advanced numerical methods must be applied. Thanks for your very useful suggestions!2011-09-07
  • 0
    Yes, as you said this method produce ill-conditioned matrices for high sampling rate (or equivalently $\Delta t \rightarrow 0$ ). Are there a method of estimation of the $\mathbf{Y}$ which isn't ill conditioned? As said before the method compute allows me to compute the angular velocity tensor correctly for slow sampling rates.2011-09-26
  • 0
    @linello: It's in the nature of this problem that it's ill-conditioned for $\Delta t\to0$. There might be some differences between methods, but all methods will encounter this problem. It's like numerical differentiation.2011-09-26
  • 0
    Thanks, I understand, when the sampling rate increases $\mathbf{Y}$ approaches the identity, but maybe can be useful to derive a better discrete approximation to Y. Is this the case? How to deal (if possible) with better derivative approximation scheme supposing that I'm able to have $R(t),R(t-1),R(t-2),...,R(t-k)$?2011-09-26
  • 0
    @linello: I don't understand the question. The fragment "but maybe can be useful" has no subject -- what can maybe be useful? And what do you mean with "How to deal with better derivative approximation scheme"? Which scheme is this referring to?2011-09-27
  • 0
    Yes, this is not correct. I meant I would like to compute $\mathbf{Y}$ in a more robust manner, but I think that given its definition, it's obvious it approximate the identity when $\Delta t \rightarrow 0$, so for high sampling rate, no chances... It seems to me so strange that there are no methods to extract angular velocity from discrete time systems...2011-09-27
  • 0
    @joriki When solving $\mathbf{Yx=x}$, how do we know that we obtain the correct direction $\mathbf{u}$ and not the opposite direction $-\mathbf{u}$?2014-06-01
  • 0
    @linello How did you obtain the formula for $\omega$ in your comment above (sept7'11)? I am trying to solve the equation for $\mathbf{x}$ in $\mathbf{Y}$ but cannot reach your solution.2014-06-02