Skip to main content
Engineering LibreTexts

9.2: Rotation of Reference Frames

  • Page ID
    47272
    • Franz S. Hover & Michael S. Triantafyllou
    • Massachusetts Institute of Technology via MIT OpenCourseWare
    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    A vector has a dual definition: it is a segment of a line with direction, or it consists of its projection on a reference system \(xyz\), usually orthogonal and right-handed. The first form is independent of any reference system, whereas the second (in terms of its components) depends directly on the coordinate system. Here we use the second notation, i.e., \(\underline{x}\) is meant as a column vector, whose components are found as projections of an (invariant) directed segment on a specific reference system.

    We denote through a subscript the specific reference system of a vector. Let a vector expressed in the inertial (Earth) frame be denoted as \(\vec{x}\), and in a body-reference frame \(\vec{x}_b\). For the moment, we assume that the origins of these frames are coincident, but that the body frame has a different angular orientation. The angular orientation has several well-known descriptions, including the Euler angles and the Euler parameters (quaternions). The former method involves successive rotations about the principal axes, and has a solid link with the intuitive notions of roll, pitch, and yaw. One of the problems with Euler angles, however, is that for certain specific values the transformation exhibits discontinuities (as will be seen below). Quaternions present a more elegant and robust method, but with more abstraction. We will develop the equations of motion here using Euler angles.

    Tape three pencils together to form a right-handed three-dimensional coordinate system. Successively rotating the system about three of its own principal axes, it is easy to see that any possible orientation can be achieved. For example, consider the sequence of [yaw, pitch, roll]. Starting from an orientation identical to some inertial frame, e.g., the walls of the room you are in, rotate the movable system about its yaw axis, then about the new pitch axis, then about the newer still roll axis. Needless to say, there are many valid Euler angle rotation sets possible to reach a given orientation; some of them might use the same axis twice.

    Diagram demonstrates the transformation of the original coordinate axes into a new and arbitrary orientation after successive orientations.
    Figure \(\PageIndex{1}\): successive application of three Euler angles transforms the original coordinate frame into an arbitrary orientation.

    A first question is: what is the coordinate of a point fixed in inertial space, referenced to a rotated body frame? The transformation takes the form of a \(3 \times 3\) matrix, which we now derive through successive rotations of the three Euler angles. Before the first rotation, the body-referenced coordinate matches that of the inertial frame: \(\vec{x}_b ^0 = \vec{x}\). Now rotate the movable frame yaw axis \((z)\) through an angle \(\phi\). We have

    \[ \vec{x}_b ^1 \, = \, \begin{bmatrix} \cos \phi & \sin \phi & 0 \\[4pt] -\sin \phi & \cos \phi & 0 \\[4pt] 0 & 0 & 1 \end{bmatrix} \vec{x}_b ^0 \, = \, R(\phi) \vec{x}_b ^0. \]

    Rotation about the \(z\)-axis does not change the \(z\)-coordinate of the point; the other axes are modified according to basic trigonometry. Now apply the second rotation, pitch about the new \(y\)-axis by the angle \(\theta\):

    \[ \vec{x}_b ^2 \, = \, \begin{bmatrix} \cos \theta & 0 & -\sin \theta \\[4pt] 0 & 1 & 0 \\[4pt] \sin \theta & 0 & \cos \theta \end{bmatrix} \vec{x}_b ^1 \, = \, R(\theta) \vec{x}_b ^1. \]

    Finally, rotate the body system an angle \(\psi\) about its newest \(x\)-axis:

    \[ \vec{x}_b ^3 \, = \, \begin{bmatrix} 1 & 0 & 0 \\[4pt] 0 & \cos \psi & \sin \psi \\[4pt] 0 & -\sin \psi & \cos \psi \end{bmatrix} \vec{x}_b ^3 \, = \, R(\psi) \vec{x}_b ^2. \]

    This represents the location of the original point, in the fully-transformed body-reference frame, i.e., \(\vec{x}_b ^3\). We will use the notation \(\vec{x}_b\) instead of \(\vec{x}_b ^3\) from here on. The three independent rotations can be cascaded through matrix multiplication (order matters!):

    \begin{align} \vec{x}_b \, &= \, R(\psi) R(\theta) R(\phi) \vec{x} \\[4pt] &= \, \begin{bmatrix} c\theta c\phi & c\theta s\phi & -s\theta \\[4pt] -c\psi s\phi + s\psi s\theta c\phi & c\psi c\phi + s\psi s\theta s\phi & s\psi c\theta \\[4pt] s\psi s\theta + c\psi s\theta c\phi & -s\psi c\theta + c\psi s\theta s\phi & c\psi c\theta \end{bmatrix} \vec{x} \\[4pt] &= \, R(\phi, \, \theta, \, \psi) \vec{x}. \end{align}

    All of the transformation matrices, including \(R(\phi, \, \theta, \, \psi)\), are orthonormal: their inverse is equivalent to their transpose, so that \(\vec{x} = R^T \vec{x}_b\). Additionally, we should note that the rotation matrix \(R\) is universal to all representations of orientation, including quaternions. The roles of the trigonometric functions, as written, are specific to Euler angles, and to the order in which we performed the rotations.

    In the case that the movable (body) reference frame has a different origin than the inertial frame, we have \[ \vec{x} \, = \, \vec{x}_0 + R^T \vec{x}_b, \] where \(\vec{x}_0\) is the location of the moving origin, expressed in inertial coordinates.


    This page titled 9.2: Rotation of Reference Frames is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by Franz S. Hover & Michael S. Triantafyllou (MIT OpenCourseWare) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.