Rotation using Euler Angles
Published:
I have always found rotation using Euler angles confusing. This post is just a simple note to maintain my sanity while performing rigid body transformations using Euler angles and rotational matrices.
Rotation
Rotational matrices are special orthogonal matrices. I am not going to discuss any property of these matrices over here. But this post is a quick reference for rotation using z-y-x Euler angles. For further details, you can refer to this.
Euler Angle Transformation
The most important thing you must remember before reading further about transformations using Euler angles is:
The order of matrix multiplication of rotational matrices is of extreme importance.
- Euler angles are used to specify the orientation of one reference frame relative to another reference frame.
- Euler angles are specified by the three angles, viz., $\psi$, $\theta$, $\phi$.
- Euler angles represent three consecutive rotations in the order of $\psi$, $\theta$, $\phi$ so that one coordinate axes system is made to coincide with another system.
- Again, the order of rotation, i.e., $\psi$, $\theta$, $\phi$, is very very important.
- Angle $\psi$ - Angle to be rotated about the current frame's Z-axis.
- Angle $\theta$ - Angle to be rotated about the current frame's Y-axis.
- Angle $\phi$ - Angle to be rotated about the current frame's X-axis.
Sequence of rotation of three Euler angles:
Let’s say one has to go from frame 1 to frame 2 using the Euler angles \(\psi\), \(\theta\), \(\phi\). Let’s start with the current frame, i.e., frame 1.
- Original Frame: $Ox_{1}y_{1}z_{1}$
- Target Frame: $Ox_{2}y_{2}z_{2}$
- Angle $\psi$ is the rotation about $Oz_{1}$.
- This transformation takes frame $Ox_{1}y_{1}z_{1}$ to frame $Ox_{1}^{\prime}y_{1}^{\prime}z_{1}^{\prime}$
- $Ox_{1}$ is rotated to $Ox_{1}^{\prime}$
- $Oy_{1}$ is rotated to $Oy_{1}^{\prime}$
- $Oz_{1}$ is rotated to $Oz_{1}^{\prime}$. The axes $Oz_{1}$ and $Oz_{1}^{\prime}$ overlap with each other.
- One should note, $Oy_{1}^{\prime}$ now falls in the plane $Oy_{2}z_{2}$, which is in the target frame of reference. The axis $Ox_{1}^{\prime}$, however, does not fall in the plane $Ox_{2}z_{2}$ in general. Its direction expressed in the target frame is $(\cos\theta, \; \sin\phi\sin\theta, \; \cos\phi\sin\theta)$, so it lies in the plane $Ox_{2}z_{2}$ only when $\theta = 0$ or $\phi = 0$. In general $Ox_{1}^{\prime}$ falls in the plane $Ox_{1}^{\prime\prime}z_{1}^{\prime\prime}$, i.e., the plane spanned by $Ox_{2}$ and $Oz_{1}^{\prime\prime}$ (the frame $Ox_{1}^{\prime\prime}y_{1}^{\prime\prime}z_{1}^{\prime\prime}$ is introduced in the next step).
- Angle $\theta$ is rotation about $Oy_{1}^{\prime}$.
- This transformation takes frame $Ox_{1}^{\prime}y_{1}^{\prime}z_{1}^{\prime}$ to frame $Ox_{1}^{\prime\prime}y_{1}^{\prime\prime}z_{1}^{\prime\prime}$.
- $Ox_{1}^{\prime}$ is rotated to $Ox_{1}^{\prime\prime}$.
- $Oy_{1}^{\prime}$ is rotated to $Oy_{1}^{\prime\prime}$. The axes $Oy_{1}^{\prime}$ and $Oy_{1}^{\prime\prime}$ overlap with each other.
- $Oz_{1}^{\prime}$ is rotated to $Oz_{1}^{\prime\prime}$.
- $Ox_{1}^{\prime\prime}$ now coincides with the axes $Ox_{2}$ and $Oz_{1}^{\prime\prime}$ now falls in the plane $Oy_{2}z_{2}$. The axis $Ox_{2}$ and the plane $Oy_{2}z_{2}$ are in the target frame of reference.
- Angle $\phi$ is rotation about $Ox_{1}^{\prime\prime}$.
- This transformation takes frame $Ox_{1}^{\prime\prime}y_{1}^{\prime\prime}z_{1}^{\prime\prime}$ to frame $Ox_{1}^{\prime\prime\prime}y_{1}^{\prime\prime\prime}z_{1}^{\prime\prime\prime}$. The resulting frame $Ox_{1}^{\prime\prime\prime}y_{1}^{\prime\prime\prime}z_{1}^{\prime\prime\prime}$ is also the target frame $Ox_{2}y_{2}z_{2}$.
- $Ox_{1}^{\prime\prime}$ is rotated to $Ox_{1}^{\prime\prime\prime}$ ($Ox_{2}$).
- $Oy_{1}^{\prime\prime}$ is rotated to $Oy_{1}^{\prime\prime\prime}$ ($Oy_{2}$).
- $Oz_{1}^{\prime\prime}$ is rotated to $Oz_{1}^{\prime\prime\prime}$ ($Oz_{2}$).
- $Oy_{1}^{\prime\prime\prime}$ now coincides with the axes $Oy_{2}$ and $Oz_{1}^{\prime\prime\prime}$ coincides with the axis $Oz_{2}$. The axes $Oy_{2}$ and $Oz_{2}$ are in the target frame of reference.

Constraints on three Euler angles:
Euler angle rotation using rotation matrices suffers from a singularity known as gimbal lock, which occurs at \(\theta = \pm\frac{\pi}{2}\). The three angles are restricted to the ranges below so that, away from this singularity, every orientation corresponds to exactly one set of Euler angles. The restriction does not remove the singularity itself: at \(\theta = \pm\frac{\pi}{2}\) we have \(\cos\theta = 0\), and only the combination \(\phi - \psi\) (when \(\theta = +\frac{\pi}{2}\)) or \(\phi + \psi\) (when \(\theta = -\frac{\pi}{2}\)) can be recovered from the rotation matrix, so \(\psi\) and \(\phi\) remain individually ambiguous there. The limits are as follows:
\[-\pi \le \psi \le \pi\] \[-\frac{\pi}{2} \le \theta \le \frac{\pi}{2}\] \[-\pi \le \phi \le \pi\]Rotational Transformations
Let there be two frames defined as start frame and target frame.
- Start Frame: \(Ox_{1}y_{1}z_{1}\)
- Target Frame: \(Ox_{2}y_{2}z_{2}\)
- A point \(p\) is defined in the start and target frames as \(p^{1}\) and \(p^{2}\) respectively.
Now, with the help of Euler angles, transform the point given in the start frame to the corresponding point in the target frame.
Note: Order of transformation is: (1) Angle \(\psi\) along \(Oz_{1}\); (2) Angle \(\theta\) along \(Oy_{1}^{\prime}\); (3) Angle \(\phi\) along \(Ox_{1}^{\prime\prime}\).
- Rotation by \(\psi\) along \(Oz_{1}\): This transforms point \(p^{1}\) in frame \(Ox_{1}y_{1}z_{1}\) to point \(p^{1^{\prime}}\) in frame \(Ox_{1}^{\prime}y_{1}^{\prime}z_{1}^{\prime}\).

- The above transformation is followed by \(\theta\) around \(Oy_{1}^{\prime}\) and then by \(\phi\) around \(Ox_{1}^{\prime\prime}\).


Therefore, the resultant transformation matrix for going from Frame \(Ox_{1}y_{1}z_{1}\) to Frame \(Ox_{2}y_{2}z_{2}\) is:
\[p^{2} = R_{1^{\prime\prime}_{x=\phi}}^{2} R_{1^{\prime}_{y=\theta}}^{1^{\prime\prime}} R_{1_{z=\psi}}^{1^{\prime}} p^{1}\]
Code
The code for euler angle transformation is available on Google Colab:
You can also find the corresponding notebook on github:
References
- Pamadi, B. N. (2004). Performance, Stability, Dynamics, and Control of Airplanes (2nd ed.). American Institute of Aeronautics and Astronautics.

Leave a Comment