PlanetPhysics/Euler Angle Velocity of 321 Sequence

The method of deriving the Euler angle velocity for a given sequence is to transform each of the derivatives into the reference frame. Remember that an Euler angle sequence is made up of three successive rotations. In other words, the angular velocity $$\dot{\psi}$$ needs one rotation, $$\dot{\theta}$$ needs two and $$\dot{\phi}$$ needs three.

$$ \vec{\omega} = R_1(\psi) R_2(\theta) R_3(\phi) \left[  \begin{matrix} 0 \\ 0 \\ \dot{\phi} \end{matrix} \right] + R_1(\psi)  R_2(\theta)  \left[  \begin{matrix} 0 \\ \dot{\theta} \\ 0 \end{matrix} \right] + R_1(\psi) \left[ \begin{matrix} \dot{\psi} \\ 0 \\ 0 \end{matrix} \right] $$

Carrying out the matrix multiplication with $$ R_1(\psi) R_2(\theta) R_3(\phi)$$ being the Euler 321 sequence $$ R_1(\psi)R_2(\theta) = \left[ \begin{matrix} c_{\theta} & 0 & -s_{\theta} \\ s_{\psi} s_{\theta} & c_{\psi} & s_{\psi} c_{\theta} \\ c_{\psi} s_{\theta} & -s_{\psi} & c_{\psi} c_{\theta} \end{matrix} \right] $$

and

$$ R_1(\psi) = \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & c_{\psi} & s_{\psi} \\ 0 & -s_{\psi} & c_{\psi}\end{matrix} \right] $$

gives us

$$ \left[ \begin{matrix} \omega_x \\ \omega_y \\ \omega_z \end{matrix} \right] = \left[ \begin{matrix} -s_{\theta} \dot{\phi} \\ s_{\psi} c_{\theta} \dot{\phi} \\ c_{\psi} c_{\theta} \dot{\phi} \end{matrix} \right] + \left[ \begin{matrix} 0 \\ c_{\psi} \dot{\theta} \\ -s_{\psi} \dot{\theta} \end{matrix} \right] + \left[ \begin{matrix} \dot{\psi} \\ 0 \\ 0 \end{matrix} \right] $$

Adding the vectors together yields

$$ \left[ \begin{matrix} \omega_x \\ \omega_y \\ \omega_z \end{matrix} \right] = \left[ \begin{matrix} -s_{\theta} \dot{\phi} + \dot{\psi} \\ s_{\psi} c_{\theta} \dot{\phi} +  c_{\psi} \dot{\theta} \\ c_{\psi} c_{\theta} \dot{\phi} - s_{\psi} \dot{\theta} \end{matrix} \right] $$

Of course, we also wish to have the Euler angle velocities in terms of the angular velocities which requires us to solve the linear equations for them. Using a program like Matlab makes it easy for us to get

$$ \left[ \begin{matrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{matrix} \right] = \left[ \begin{matrix} \left( \omega_y s_{\psi} + \omega_z c_{\psi} \right ) sec({\theta}) \\ \omega_y c_{\psi} - \omega_z s_{\psi} \\ \omega_x + \omega_y s_{\psi} t_{\theta} + \omega_z c_{\psi} t_{\theta} \end{matrix} \right] $$

In matlab solving for the Euler angle velocites can be done with the following commands. Using the notation $$Ax = b$$, we want to solve for $$x$$, such that $$x = A^{-1}b$$. For our problem then

{\emph syms wx wy wz phd thd psd SPS cth cps b x A;

b = [wx wy wz]';

x = [phd thd psd]';

A = [ -sth 0 1; sps*cth cps 0; cps*cth -sps 0];}

and solve for the angle velocites with the command

 x = inv(A)*b

Note that matlab spits out extra sine and cosine terms that just equal 1 through

$$ s_{\psi}^2 + c_{\psi}^2 = 1$$

The shorthand notation used in this article is

$$ s_{\psi} = sin(\psi) $$ $$ c_{\psi} = cos(\psi) $$ $$ t_{\psi} = tan(\psi) $$