1
$\begingroup$

I am trying to obtain equation for angular velocity of rotated object in 3d.

I started with defining yaw, pitch and roll angles. Then I wrote rotation matrices from these angles. As I understand it I should integrate this rotation matrix (which is multiplication of three rot. matrices of every axes) and multiply it with transpose of rotation matrix. And somehow I should able to obtain skew symmetric matricx which have component of angular velocity.

But I didnt understand why multiplication of R'*Tranpose(R) equals to skew matrices.

And also I couldn't able to solve it in Matlab. I dont know is it appropriate to ask question related to Matlab. But output of my symbolic script does not give skew symmetric matrix.

Here is the code:

%a - yaw
%b - pitch
%c  - roll
syms a b c da db dc

Rx=[1 0 0; 0 cos(c) -sin(c); 0 sin(c) cos(c)];
Ry=[cos(b) 0 sin(b); 0 1 0; -sin(b) 0 cos(b)];
Rz=[cos(a) -sin(a) 0; sin(a) cos(a) 0; 0 0 1];
dRx=diff(Rx,c)*dc;
dRy=diff(Ry,b)*db;
dRz=diff(Rz,a)*da;
R=Rx*Ry*Rz;

dR=dRx*Ry*Rz+dRy*Rx*Rz+dRz*Ry*Rx;

dR*transpose(R);

If asking questions related to code is not appropriate please leave a comment and I will edit question.

$\endgroup$

1 Answer 1

1
$\begingroup$

The proof is very simple and comes right form the definition. let $R(t)$ be a rotation matrix as a function of time. $R$ is an orthogonal matrix so its inverse is equal to its transpose:

$I = R(t)R^T(t).$ ($I$ is the identity matrix)

The time derivative of the above equation is $0 = \frac{d[R(t)R^T(t)]}{dt} = \frac{d[R(t)]}{dt}R^T(t)+R(t)\frac{d[R^T(t)]}{dt} =\dot{R}R^T(t)+(\dot{R}R^T(t))^T$.

Therefore, $S(t)=\dot{R}R^T(t)$ is a skew-symmetric matrix. The way you use it to get to angular velocity is $\dot{R}=S(t)R(t)$.

For a constant norm vector $p\in \mathbb{R}^3$ and $p=R(t)p'$ there are two ways to compute $\dot{p}$; the rate of the change of $p$:

  • $\dot{p}=\dot{R}p'=S(t)R(t)p'=S(t)p(t)$
  • $\dot{p}=\omega\times p(t)=S(\omega(t))p(t)$

Compare the two and you see how $S(\omega)=\dot{R}R^T$.

Also your Matlab code was wrong. Below is the corrected code. Compare and figure out what you did wrong.

syms a b c da db dc

Rx=[1 0 0; 0 cos(c) -sin(c); 0 sin(c) cos(c)];
Ry=[cos(b) 0 sin(b); 0 1 0; -sin(b) 0 cos(b)];
Rz=[cos(a) -sin(a) 0; sin(a) cos(a) 0; 0 0 1];
dRx=diff(Rx,c);
dRy=diff(Ry,b);
dRz=diff(Rz,a);
R=Rx*Ry*Rz;

dR=dRx*Ry*Rz+Rx*dRy*Rz+Rx*Ry*dRz;

S = dR*transpose(R);
simplify(S+transpose(S))
$\endgroup$
2
  • $\begingroup$ Why did you erased da, db, dc while taking derivatives of rotation matrices? Shouldn't I taking their derivatives according to time? $\endgroup$ Commented Apr 19, 2016 at 19:47
  • $\begingroup$ @user3160302 The result is also true for partial derivatives with respect to the Euler angles (just see it as setting the rates da=db=dc=1 or multiplying the above equation by dt). Of course, for the general case you can put back da, db and dc to work with time derivatives. The only reason I deleted them was to speed up the process of "simplify" function. $\endgroup$
    – RozaTh
    Commented Apr 19, 2016 at 22:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.