Vehicle Dynamics – Coriolis’ Theorem and the Cross-product Matrix

One thing that can be puzzling when deriving the equations of motion for a rotating body is the Coriolis component (the cross product) term when differentiating body-fixed velocity:

\dot{\textbf{v}}_{\text{inertial}} = \dot{\textbf{v}}^{b} + \boldsymbol{\omega}_{n}^{b} \times \textbf{v}^{b}

This post won’t attempt to provide a mathematical proof of the theorem, but rather observe the phenomenon from a perspective that I think provides a bit more intuition in what is happening.

Let us take for example a generic coordinate frame (\hat{x}, \hat{y}, \hat{z}) which has an instantaneous angular velocity vector \boldsymbol{\omega} = [\omega_{x}, \omega_{y}, \omega_{z}] . We want to evaluate the following expression to find the derivative of a velocity vector, \textbf{v} , from the perspective of the body-fixed, rotating frame.

(\frac{d\textbf{v}}{dt})_{\text{inertial}} = \frac{d}{dt}(v_x \hat{x} + v_y \hat{y} + v_z \hat{z})

The Chain Rule

If the body’s orientation was constant, the derivative would simply be the derivative of the velocity magnitude in each x, y, z component of the reference frame. This is because the derivative of the unit vectors (\hat{x}, \hat{y}, \hat{z}) would be constants and their derivatives zero. With a rotating body you have to take into account the chain rule of derivation and the non-zero derivative of the reference frame’s unit vectors. In this scenario, the above equation is then expanded to:

(\frac{d\textbf{v}}{dt})_{\text{inertial}} = (\frac{dv_x}{dt}\hat{x} + \frac{dv_y}{dt}\hat{y} + \frac{dv_z}{dt}\hat{z}) + (v_x\frac{d\hat{x}}{dt} + v_y\frac{d\hat{y}}{dt} + v_z\frac{d\hat{z}}{dt})

The Derivative of Rotating Unit Vectors

Instead of starting from the derivatives of the unit vectors directly, let’s look at how rotations about each of the three unit vectors \vec{\omega} = \omega_x \hat{x} + \omega_y \hat{y} + \omega_z \hat{z} will be perceived from the rotating frame.

Evaluating Rotations One Axis at a Time

Looking back at the direction cosine matrices we derived in the Euler angle post we can represent the change from some initial set of unit vectors (\hat{x}, \hat{y}, \hat{z}) to a new set of unit vectors (\hat{x}', \hat{y}', \hat{z}') across some delta time, dt, as a rotation by an angle \theta_i = \omega_i dt, where i \in {x, y, z} .

Visualization of the rotation due to angular velocity about the z-axis unit vector (which is perpendicular to x and y and goes out of the page)
.

However from the perspective of the new (prime) frame, the past frame — and velocity vector within it — looks to be rotating in the negative direction. We want to see how much the frame is changing over time, so let’s imagine that dt is large enough that we can observe the original reference frame rotating away from the prime frame. We want to stay fixed with the rotating frame, so let’s try to express the past frame in terms of components of the current (prime) frame.

To undo the rotation from xyz to xyz’ we can take the transpose of the rotation matrix of the angle (\omega_z * dt) . So, for rotation about \hat{z} we would find at time t_0 + dt :

\begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}_{t=t0+dt} = \begin{bmatrix} \cos(\omega_z dt) & \sin(\omega_z dt) & 0 \\ -\sin(\omega_z dt) & \cos(\omega_z dt) & 0 \\ 0 & 0 & 1 \end{bmatrix}^{\intercal} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix} = \begin{bmatrix} \cos(\omega_z dt) & -\sin(\omega_z dt) & 0 \\ \sin(\omega_z dt) & \cos(\omega_z dt) & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix}

For rotation about \hat{y} :

\begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}_{t=t0+dt} = \begin{bmatrix} \cos(\omega_y dt) & 0 & -\sin(\omega_y dt) \\ 0 & 1 & 0 \\ \sin(\omega_y dt) & 0 & \cos(\omega_y dt) \end{bmatrix}^{\intercal} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix} = \begin{bmatrix} \cos(\omega_y dt) & 0 & \sin(\omega_y dt) \\ 0 & 1 & 0 \\ -\sin(\omega_y dt) & 0 & \cos(\omega_y dt) \end{bmatrix} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix}

For rotation about \hat{x} :

\begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}_{t=t0+dt} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(\omega_x dt) & \sin(\omega_x dt) \\ 0 & -\sin(\omega_x dt) & \cos(\omega_x dt) \end{bmatrix}^{\intercal} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(\omega_x dt) & -\sin(\omega_x dt) \\ 0 & \sin(\omega_x dt) & \cos(\omega_x dt) \end{bmatrix} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix}

Simplify with Small Angle Theorem

Now we care about the instantaneous change of the unit vectors as dt goes to zero. If we assume the resulting angles of rotation are small we can simplify the above expressions using the small angle theorem where

\cos(\theta) \approx 1 \quad \text{and} \quad \sin(\theta) \approx \theta .

The expressions then become,

For rotation about \hat{z} :

\begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}_{t=t0+dt} = \begin{bmatrix}1 & -\omega_z dt & 0 \\ \omega_z dt & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix}

For rotation about \hat{y} :

\begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}_{t=t0+dt} = \begin{bmatrix} 1 & 0 & \omega_y dt \\ 0 & 1 & 0 \\ -\omega_y dt & 0 & 1 \end{bmatrix} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix}

For rotation about \hat{x} :

\begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}_{t=t0+dt} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & -\omega_x dt \\ 0 & \omega_x dt & 1 \end{bmatrix} \begin{bmatrix} \hat{x}' \\ \hat{y}' \\ \hat{z}' \end{bmatrix}

Find the Derivative from the Delta over dt

Now let’s try to express the delta in the unit vectors as a result of these rotations by subtracting the change in unit vectors over time dt . At time t_0 the xyz and xyz’ unit vectors are equivalent, so we can simply substitute one for the other. Taking the rotation \omega_z , we can write out the following set of equations:

d\hat{x} = (\hat{x})_{t_0+dt} - (\hat{x})_{t_0} \quad = (\hat{x}' -\omega_z dt \hat{y}') - (\hat{x}') \quad = -\omega_z dt \hat{y}'

d\hat{y} = (\hat{y})_{t_0+dt} - (\hat{y})_{t_0} \quad = (\omega_z dt \hat{x}' + \hat{y}') - (\hat{y}') \qquad = \omega_z dt \hat{x}'

d\hat{z} =(\hat{z})_{t_0+dt} - (\hat{z})_{t_0} \quad = (\hat{z}') - (\hat{z}') \hspace{80pt} = 0

Dividing both sides of the equation by dt and expressing the result back in matrix form, we get the following derivatives due to the angular velocity about \hat{z} :

\begin{bmatrix} \frac{d\hat{x}}{dt} \\ \frac{d\hat{y}}{dt} \\ \frac{d\hat{z}}{dt} \end{bmatrix} =  \begin{bmatrix} 0 & -\omega_{z} & 0 \\ \omega_{z} & 0 & 0  \\ 0 & 0 & 0  \end{bmatrix} \begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix} .

\quad

Doing the same operation for the other axes results in:

\begin{bmatrix} \frac{d\hat{x}}{dt} \\ \frac{d\hat{y}}{dt} \\ \frac{d\hat{z}}{dt} \end{bmatrix} =  \begin{bmatrix} 0 & 0 & \omega_{y} \\ 0 & 0 & 0 \\ - \omega_{y} & 0 & 0  \end{bmatrix} \begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix} \quad \text{ for rotation about } \hat{y}

and

\begin{bmatrix} \frac{d\hat{x}}{dt} \\ \frac{d\hat{y}}{dt} \\ \frac{d\hat{z}}{dt} \end{bmatrix} = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & -\omega_{x} \\ 0 & \omega_x & 0  \end{bmatrix} \begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix} \quad \text{ for rotation about } \hat{x} .

Combine Rotations for All 3 Axes Together

For the general case where we have instantaneous angular velocity about all 3 axes, then it is straightforward to see the combination as:

\begin{bmatrix} \frac{d\hat{x}}{dt} \\ \frac{d\hat{y}}{dt} \\ \frac{d\hat{z}}{dt} \end{bmatrix} = \begin{bmatrix} 0 & -\omega_{z} & \omega_{y} \\ \omega_{z} & 0 & -\omega_{x} \\ -\omega_{y} & \omega_{x} & 0 \end{bmatrix} \begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix} = [\boldsymbol{\omega} \times] \begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \end{bmatrix}

The resulting matrix, represented by [\boldsymbol{\omega}\times], is a skew-symmetric matrix known as the cross-product matrix of the angular velocity vector \boldsymbol{\omega}. This is just a helpful notation as the matrix multiplication of this matrix with a vector \vec{v} is equivalent to the cross product expression \vec{\omega} \times \vec{v} .

Back to the Chain Rule Expression

When we combine this result for unit vector derivatives with the chain rule derivation from above, we arrive at Coriolis’ Theorem for the change in velocity in a moving reference frame.

(\frac{d\textbf{v}}{dt})_{\text{inertial}} = (\frac{dv_x}{dt}\hat{x} + \frac{dv_y}{dt}\hat{y} + \frac{dv_z}{dt}\hat{z}) + (v_x\frac{d\hat{x}}{dt} + v_y\frac{d\hat{y}}{dt} + v_z\frac{d\hat{z}}{dt})

= \dot{\textbf{v}}^{b} +  [\boldsymbol{\omega} \times] (v_x \hat{x} + v_y \hat{y} + v_z \hat{z}) = \dot{\textbf{v}}^{b} + \boldsymbol{\omega}_{n}^{b} \times \textbf{v}^{b}

Leave a comment or ask a question: