Table of Contents

Rotation Conventions

Overview

This article aims to explain the rotation conventions, axis-angle and Euler angle, that are used in Bladed. The core calculation of multibody dynamics in Bladed uses axis-angle convention and consequently, the results are calculated in axis-angle convention. However, Bladed output data are detailed in their components (x, y, z) under different output groups. In some specific cases, Euler angle convention is utilized in Bladed to report data as it is needed. In those cases,a transformation from axis-angle convention to Euler angle convention is required. The following subsections explain how these transformations are implemented in Bladed.

Axis-angle frame vs Euler angle frame

The axis-angle convention is a representation of any rotation or series of rotations in three-dimensional space as equivalent to a rotation of the geometry around a single fixed axis. In this convention, the rotation is expressed by a unit vector \(e\) indicating the axis of rotation and an angle of rotation \(\theta\) describing the magnitude and direction (e.g., clockwise) of the rotation about that axis (see Figure 1_a).
On the contrary, the Euler angle convention involves three successive rotational angles, known as Euler angles, to describe the orientation of a rigid body (see Figure 1_b). The final orientation of the coordinate system can be defined using any sequence of rotations, as long as consecutive rotations are not around the same axis. The Bryant angle, a specific form of the Euler angle convention, ensures that the three successive rotations are not repeated, such as in the order of X-Y-Z or Z-Y-X. This rotation convention is commonly employed in engineering applications. It is worth noting that Euler angles are defined by intrinsic rotations or extrinsic rotations. The elemental rotations can either occur about the axes of the fixed coordinate system (extrinsic rotations) or about the axes of a rotating coordinate system, which is initially aligned with the fixed one and modifies its orientation after each elemental rotation (intrinsic rotations). Transformation matrix using axis-angle and Transformation matrix using Euler angle describe the calculation of rotation matrix in axis-angle convention and Euler angle convention, respectively.

Alt text

Figure 1: 3D space rotation of an object, a: Axis-angle representation , b: Euler angle representation (intrinsic rotation of XYZ order).

The axis-angle convention is employed to specify the orientation of initial mooring position in Bladed UI. Bladed calculates the kinematics results in the axis-angle convention.

Transformation matrix using axis-angle

Spatial orientations and rotations of an element in three dimensional space are represented in a mathematically convenient identity known as unit quaternions.
With an axis-angle representation (\(\bscalar{n}\), \(\bscalar{\theta}\)), where \(\bscalar{n}\) denotes a unit vector and \(\bscalar{\theta}\) is a counter-clockwise angle of rotation about \(\bscalar{n}\), the unit quaternions are calculated:

\[ \begin{equation} \bscalar{e_0} = \cos \left( \dfrac{\theta}{2} \right) \end{equation} \]
\[ \begin{equation} \bscalar{e} = \left[\begin{array}{c} \bscalar{e_1} \\ \bscalar{e_2} \\ \bscalar{e_3} \\ \end{array}\right]=\sin \left( \dfrac{\theta}{2} \right) \bscalar(n)=\sin \left( \frac{\theta}{2}\right) \left[\begin{array}{c} \bscalar{n_1} \\ \bscalar{n_2} \\ \bscalar{n_3} \\ \end{array}\right] \end{equation} \]

The corresponding quaternion can be represented in different forms:

\[ \begin{equation} \bscalar{q} = \left\{\begin{aligned} =\bscalar{e_0}+\bscalar{e_1} \bvector{i}+\bscalar{e_2} \bvector{j}+\bscalar{e_3} \bvector{k} \ \ \ \ ,\ \ & \text{Hamilton form} \\ =(\bscalar{e_0}+\bscalar{e}) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ , \ \ & \text{Scaler vector form} \\ =(\bscalar{e_0},\bscalar{e_1},\bscalar{e_2},\bscalar{e_3}) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ , \ \ & \text{4-tuple form}\\ \end{aligned} \right.\ \end{equation} \]

Given a unit quaternion, the corresponding transformation matrix is:

\[ \begin{equation} \bmatrix{T}= \left[\begin{array}{ccc} 1-2 (\bscalar{e_2^2+e_3^2}) & 2 (\bscalar{e_1 e_2-e_0 e_3}) & 2 (\bscalar{e_1 e_3+ e_0 e_2}) \\ 2 (\bscalar{e_1 e_2+ e_0 e_3}) & 1-2 (\bscalar{e_1^2+e_3^2}) & 2 (\bscalar{e_2 e_3-e_0 e_1}) \\ 2 (\bscalar{e_1 e_3-e_0 e_2}) & 2 (\bscalar{e_2 e_3 + e_0 e_1}) & 1-2 (\bscalar{e_1^2+e_2^2}) \\ \end{array}\right] \label{RotationMatrixAxisAngleConvention} \end{equation} \]

Transformation matrix using Euler angle

In some applications, Bladed uses the Bryant angle convention (extrinsic rotation in X-Y-Z order) to generate proper data of angular kinematics. The rotation process are elaborated in Appendix A of Nikravesh 1988. The transformation matrix for the rotation order of X-Y-Z is expressed as:

\[ \begin{equation} \bmatrix{T}_{XYZ} = \bmatrix{T}_{X} \times \bmatrix{T}_{Y} \times \bmatrix{T}_{Z}= \left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \varphi _4 & - \sin \varphi _4 \\ 0 & \sin \varphi _4 & \cos \varphi _4 \\ \end{array}\right] \times \left[\begin{array}{ccc} \cos \varphi _5 & 0 & \sin \varphi _5 \\ 0 & 1 & 0 \\ - \sin \varphi _5 & 0 & \cos \varphi _5 \\ \end{array}\right] \times \left[\begin{array}{ccc} \cos \varphi _6 & -\sin \varphi _6 & 0 \\ \sin \varphi _6 & \cos \varphi _6 & 0 \\ 0 & 0 & 1\\ \end{array}\right] \end{equation} \]

Where \(\varphi _4\), \(\varphi _5\), and \(\varphi _6\) are Euler angles about X, Y, and Z axis, i.e. roll, pitch and yaw angles respectively. For more information, please see Appendix A in Nikravesh 1988. If Euler angles are known, the transformation matrix (\(\bmatrix{T}_{XYZ}\)) yields

\[ \begin{equation} \bmatrix{T}_{XYZ} = \left[\begin{array}{ccc} \cos \varphi _5 \cos \varphi _6 & -\cos \varphi _5 \sin \varphi _6 & \sin \varphi _5 \\ \cos \varphi _4 \cos \varphi _6 + \sin \varphi _4 \sin \varphi _5 \cos \varphi _6 & \cos \varphi _4 \cos \varphi _6 - \sin \varphi _4 \sin \varphi _5 \sin \varphi _6 & - \sin \varphi _5 \cos \varphi _5\\ \sin \varphi _4 \sin \varphi _6 - \cos \varphi _4 \sin \varphi _5 \cos \varphi _6 & \sin \varphi _4 \cos \varphi _6 + \cos \varphi _4 \sin \varphi _5 \sin \varphi _6 & \cos \varphi _5 \cos \varphi _4\\ \end{array}\right] \label{eq:RotationMatrixEulerAngleConvention} \end{equation} \]

Kinematics in Euler angle frame

Kinematics of a rigid body in Bladed are originally calculated in axis-angle convention. If outputs in Euler angle convention are needed then Bryant angle representation is used for outputing kinematics.

Orientation

If the transformation matrix (\(\bmatrix{T}_{XYZ}\)) is calculated using axis-angle (see Transformation matrix using axis-angle), then Euler angles, i.e. \(\varphi _4\), \(\varphi _5\), and \(\varphi _6\) , are found as:

\[ \begin{equation} \bscalar{\varphi _5} = \sin^{-1} (\bmatrix{a}_{13}) \end{equation} \]
\[ \begin{equation} \bscalar{\varphi _4} = \sin^{-1} \left( - \dfrac{\bmatrix{a}_{23}}{\cos \varphi _5} \right) \end{equation} \]
\[ \begin{equation} \bscalar{\varphi _6} = \sin^{-1} \left( \dfrac{\bmatrix{-a}_{12}}{\cos \varphi _5} \right) \end{equation} \]

here \(\bmatrix{a}_{ij}\) denotes the component of transformation matrix \(\bmatrix{T}_{XYZ}\). It is worth notting that \(\varphi _5 \neq \frac {n \pi} {2}+ n \pi \ \ \ n= \pm 1, \pm 2, ...\). If \(\varphi _5 = \frac {n \pi} {2}+ n \pi\), then Gimbal lock ocurrs. See Appendix A of Nikravesh 1988 for more information.

Angular velocity

The representation of the relationship between the angular velocity in the Euler angle frame and the axis-angle frame is given by:

\[ \begin{equation} \bvector{\omega}^A = \bmatrix{R}_{XYZ}^{EA} \dot{\bvector{\varphi}}^E \label{eq:AngularVelocityAxis} \end{equation} \]

Where:

  • \(\bvector{\omega}^A\) : Angular velocity expressed in axis-angle frame.
  • \(\dot{\bvector{\varphi}}^E\): Angular rate expressed in Euler angle frame based on roll-pitch-yaw rotation order.
  • \(\bmatrix{R}_{XYZ}^{EA}\) : Rotation matrix of velocity from axis-angle frame to Euler angle frame

Using Equation \(\eqref{eq:AngularVelocityAxis}\), then global angular velocity in Euler angle frame is calculated as:

\[ \begin{equation} \dot{\bvector{\varphi}}^E = {\bmatrix{R}_{XYZ}^{EA}}^{-1} \bvector{\omega}^A \label{eq:AngularVelocityEuler} \end{equation} \]

Where \({\bmatrix{R}_{XYZ}^{EA}}^{-1}\) is the inverse of rotation matrix in Euler angle frame, i.e. \(\bmatrix{R}_{XYZ}^{EA}\). The definition of these matrices is given in Nikravesh 1988 as Equations \(\eqref{eq:VelocityRotationMatrixEulerAngleConvention}\) and \(\eqref{eq:InverseVelocityRotationMatrixEulerAngleConvention}\).

\[ \begin{equation} \bmatrix{R}_{XYZ}^{EA}= \left[\begin{array}{ccc} \cos \varphi _4 \cos \varphi _6 & \sin \varphi _6 & 0 \\ -\cos \varphi _5 \sin \varphi _6 & \cos \varphi _6 & 0 \\ \sin \varphi _5 & 0 & 1 \\ \end{array}\right] \label{eq:VelocityRotationMatrixEulerAngleConvention} \end{equation} \]
\[ \begin{equation} {\bmatrix{R}_{XYZ}^{EA}}^{-1}= \frac{1}{\cos \varphi _5} \left [\begin{array}{ccc} \cos \varphi _6 & - \sin \varphi _6 & 0 \\ \cos \varphi _5 \sin \varphi _6 & \cos \varphi _5 \cos \varphi _6 & 0 \\ -\cos \varphi _6 \sin \varphi _5 & \sin \varphi _5 \sin \varphi _6 & \cos \varphi _5 \\ \end{array}\right] \label{eq:InverseVelocityRotationMatrixEulerAngleConvention} \end{equation} \]

Angular acceleration

Differentiating Equation \(\eqref{eq:AngularVelocityEuler}\) with respect to time yields the relationship between the global acceleration in the Euler angle frame and the axis-angle frame.

\[ \begin{equation} \frac{d}{dt}( \bvector{\omega}^A =\bmatrix{R}_{XYZ}^{EA} \dot{\bvector{\varphi}}^E ) \ \Rightarrow \ \dot{\bvector{\omega}}^{A}=\bmatrix{R} _{XYZ}^{EA} \ddot{\bvector{\varphi}}^E+\dot{\bmatrix{R}}_{XYZ}^{AE} \dot{\bvector{\varphi}}^E \label{eq:AngularAccelerationAxis} \end{equation} \]

Where

  • \(\bvector{\omega}^A\): Angular acceleration expressed in axis-angle frame.
  • \(\ddot{\bvector{\varphi}}^E\): Rate of angular rate in Euler frame based on roll-pitch-yaw rotation convention.

Equation \(\eqref{eq:AngularAccelerationAxis}\) is rewritten to find angular acceleration in Euler frame:

\[ \begin{equation} \ddot{\bvector{\varphi}}^E={\bmatrix{R}_{XYZ}^{EA}}^{-1} \left( \dot{\bvector{\omega}}^{A}-\dot{\bmatrix{R}}_{XYZ}^{EA} \dot{\bvector{\varphi}}^E \right) \label{eq:AngularAccelerationEuler} \end{equation} \]

Here, \(\dot{\bmatrix{R}}_{XYZ}^{EA}\) represents the derivative of the rotation matrix, as discussed below in Time derivative of rotation matrix.

Before proceeding further, the skew-symmetric operator is defined as it facilitates the conversion of a cross product of two vectors into a matrix-vector product. For the vector \(\bvector{\omega}^A = \begin{bmatrix} \omega_x^A & \omega_y^A & \omega_z^A \end{bmatrix}^{T} \in \mathbb{R}^3\), the skew-symmetric operator \({\tilde{\cdot}}\) is defined as:

\[ \begin{equation} \tilde{\bvector{\omega}}^A \equiv \begin{bmatrix} 0 & -\omega_z^A & \omega_y^A \\ \omega_z^A & 0 & -\omega_x^A \\ -\omega_y^A& \omega_x^A & 0 \\ \end{bmatrix} \in \mathbb{R}^{3 \times 3} \label{eq:SkewSymetricMatrixDef} \end{equation} \]

By substituting Equation \(\eqref{eq:RotMatDotOmegaA}\) into Equation \(\eqref{eq:AngularAccelerationEuler}\), the equation for angular acceleration in the Euler frame is obtained as:

\[ \begin{equation} \ddot{\bvector{\varphi}}^E={\bmatrix{R}_{XYZ}^{EA}}^{-1} \left( \dot{\bvector{\omega}}^{A}+\left( \bmatrix{R}_{XYZ}^{EA} \tilde{\bvector{\omega}}^A \right) \dot{\bvector{\varphi}}^E \right). \label{eq:FinalAngularAccelerationEuler} \end{equation} \]

Time derivative of rotation matrix

The time derivative of a rotation matrix is crucial for describing the rotational kinematics of a body. The time derivative of a rotation matrix is equivalent to the product of a skew-symmetric matrix and the rotation matrix itself. One traditional approach to derive this result is elucidated by Murray 1994.

Let \(\bmatrix{R}(t) \in \mathbb{R}^{3\times3}\) with \(t \geqslant 0\) be a rotation matrix satisfying \(\bmatrix{R}(t) \bmatrix{R}^T(t) = I\) for all \(t\), where \(I\) is the identity matrix. Taking the time derivative on both sides of \(\bmatrix{R}(t) \bmatrix{R}^T(t) = I\) yields:

\[ \begin{equation} \dot{\bmatrix{R}}(t)\bmatrix{R}^T(t)+ \bmatrix{R}(t) \dot{\bmatrix{R}}^T (t)=0 \end{equation} \]

which indicates that \(S(t) \equiv \dot{\bmatrix{R}}(t)\bmatrix{R}^T(t)\) is a skew-symmetric matrix satisfying \(S(t)+S^T(t)=0\) for all \(t\), and consequently

\[ \begin{equation} \dot{\bmatrix{R}}(t)= S(t) \bmatrix{R}(t) \label{eq:RotMatDot} \end{equation} \]

In Equation \(\eqref{eq:RotMatDot}\), \(S(t)\) represents an angular velocity vector. Therefore, the specific physical interpretation of \(S(t)\) is determined by the reference frame in which this vector is defined. Consider two reference frames, \(A\) and \(B\), in three-dimensional space (refer to Figure 2). Assume that the origins of the two frames coincide. Suppose frame \(A\) is stationary, while frame \(B\) is undergoing rotation. In this context, \(\bmatrix{R}^{BA} \in \mathbb{R}^{3\times3}\) signifies the rotation matrix from frame \(A\) to frame \(B\). The time derivative of the rotation matrix \(\bmatrix{R}^{BA}\) is expressed as:

\[ \begin{equation} \dot{\bmatrix{R}}^{BA} = -[\omega _{B}]_{\times }\bmatrix{R}^{BA} \label{eq:RotMatDotOmegaA} \end{equation} \]
\[ \begin{equation} \dot{\bmatrix{R}}^{BA} = -\bmatrix{R}^{BA} [\omega _{A}]_{\times} \label{eq:RotMatDotOmegaB} \end{equation} \]

Alt text

Figure 2: Frame \(A\) is fixed while frame \(B\) is rotating. The vector \(\omega _B\) indicates the angular velocity of frame \(B\) relative to frame \(A\) expressed in frame \(B\).