> ## Documentation Index
> Fetch the complete documentation index at: https://aegean.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Angular velocity

> Angular velocity in the plane and in space, and its skew-symmetric matrix.

[Rotation representations](/aiml-common/lectures/motion-algebras/rotation-representations/index) described the orientation of a body at one instant. This section describes how that orientation changes over time. It follows section 3.2.2 of Kevin Lynch and Frank Park, *Modern Robotics: Mechanics, Planning, and Control* (Kevin M. Lynch, 2017). You can [download the chapter as a PDF](https://artifacts.aegeanai.com/pdf/lynch-mr/body-motions.pdf).

The section starts in the plane, where angular velocity is a single number. It then moves to space, where angular velocity is a vector whose direction can change with time.

## Angular velocities in the plane

<video src="https://artifacts.aegeanai.com/manim/angular-velocity/PlanarAngularVelocity.mp4" controls loop muted playsInline width="100%" style={{ borderRadius: 8 }} />

*A body turns about the origin at the rate $\omega = \dot\theta$. A point $p$ on it moves on a circle. The quarter-turn matrix $G$ turns $p$ by $90^\circ$, and scaling $Gp$ by $\omega$ gives the velocity $\dot p$ (red), which is tangent to the circle with length $|\omega|\,\|p\|$. A negative $\omega$ reverses it. The orientation as a whole obeys $\dot R = [\omega] R$ with $[\omega] = \omega G$.*

A body turns in the plane about the origin. Its orientation is the rotation matrix $R(\theta)$ from [rotations in the plane](/aiml-common/lectures/motion-algebras/rotation-representations/index#rotations-in-the-plane), and the angle $\theta(t)$ changes with time. The *angular velocity* is the rate of that change, the scalar

$$
\omega = \dot\theta .
$$

Differentiate $R(\theta)$ entry by entry. Each entry depends on time only through the angle $\theta(t)$, so the chain rule applies: the derivative with respect to time is the derivative with respect to $\theta$ times $\dot\theta$. For the top-left entry,

$$
\frac{d}{dt} \cos\theta(t) = \frac{d \cos\theta}{d\theta} \, \frac{d\theta}{dt} = -\sin\theta \; \dot\theta .
$$

The other three entries work the same way, and every one of them picks up the same factor $\dot\theta$:

$$
\dot R = \dot\theta \begin{bmatrix} -\sin\theta & -\cos\theta \\ \cos\theta & -\sin\theta \end{bmatrix} .
$$

The matrix on the right equals $G R$, where $G$ is the quarter-turn matrix

$$
G = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} ,
$$

so $\dot R = \dot\theta\, G R$. Collect the rate and $G$ into one matrix:

$$
\dot R = [\omega]\, R , \qquad [\omega] = \omega G = \begin{bmatrix} 0 & -\omega \\ \omega & 0 \end{bmatrix} .
$$

The bracket notation $[\omega]$ means "the skew-symmetric matrix of $\omega$". The rest of the book uses it often. In the plane, $[\omega]$ belongs to $\mathfrak{so}(2)$, the tangent space at the identity in [SO(2) as a manifold](/aiml-common/lectures/motion-algebras/so2-manifold/index).

A point fixed on the body has coordinates $p_b$ in the body frame. They do not change, because the point moves with the body. In the fixed frame its coordinates are $p_s = R\, p_b$, and these do change. Differentiate, using $\dot p_b = 0$:

$$
\dot p_s = \dot R\, p_b = [\omega] R\, p_b = [\omega]\, p_s = \omega\, G p_s .
$$

Multiplying by $G$ turns a vector by $90^\circ$ counterclockwise. So the velocity is perpendicular to $p_s$, and its length is $|\omega| \, \|p_s\|$: the angular speed times the radius. This is the rule $v = \omega r$ of circular motion. Khan Academy covers it in [angular velocity and speed](https://www.khanacademy.org/science/in-in-class11th-physics/in-in-class11th-physics-motion-in-a-plane/uniform-circular-motion-introduction/v/angular-velocity-and-speed) and [relating angular and regular motion variables](https://www.khanacademy.org/science/in-in-class11th-physics/in-in-class11th-physics-motion-in-a-plane/in-in-class11-centripetal-acceleration/v/relating-angular-and-regular-motion-variables).

In space, two things change. The axis can point in any direction, not only out of the plane. And a point on the body need not lie in the plane of the circle it travels on. The cross product handles both, as the next part shows. From here on, $p$ without a subscript means the fixed-frame coordinates $p_s$. Lynch and Park make this argument for eq. 3.49 ([page 83](https://artifacts.aegeanai.com/pdf/lynch-mr/body-motions.pdf#page=25)), and Kleppner and Kolenkow make it in section 7.2 (Kleppner & Kolenkow, 1973).

## Angular velocities in space

### A fixed rotating axis

<video src="https://artifacts.aegeanai.com/manim/rotation-representations/FixedAxisVelocity.mp4" controls loop muted playsInline width="100%" style={{ borderRadius: 8 }} />

*The animation draws Figure 3.11 of Lynch and Park, and the derivation below goes through it step by step. A point $p$ on the body splits into $p_\parallel$ along the axis $\hat{\omega}$, which stays fixed, and $p_\perp$ across it, which sweeps a circle of radius $\|p\| \sin\phi$. A small turn $d\theta$ moves the point by $ds$ along the tangent $\hat{t}$. That gives $dp = (\hat{\omega} \times p)\, d\theta$, and dividing by $dt$ gives $\dot{p} = \omega \times p$ with $\omega = \hat{\omega}\dot\theta$.*

A rigid body turns about a fixed axis through the origin with unit direction $\hat{\omega}$, $\|\hat{\omega}\| = 1$. Let $p(t)$ be the position of a point on the body. Split it into a part along the axis and a part across it:

$$
p = p_\parallel + p_\perp , \qquad
p_\parallel = (\hat{\omega} \cdot p)\, \hat{\omega} , \qquad
p_\perp = p - (\hat{\omega} \cdot p)\, \hat{\omega} .
$$

The axis does not move, so $p_\parallel$ stays constant. The part $p_\perp$ turns in the plane perpendicular to $\hat{\omega}$. The point therefore moves on a circle about the axis. Let $\phi$ be the angle between $p$ and $\hat{\omega}$. The radius of the circle is $\|p_\perp\| = \|p\| \sin\phi$.

The projection $\hat{\omega} \cdot p$ is a dot product. Khan Academy's [dot product video](https://www.khanacademy.org/science/in-in-class11th-physics/in-in-class11th-physics-motion-in-a-plane/x7183bffa9768c609:scalar-and-vector-product-of-vectors/v/the-dot-product) reviews it.

Assume the point is not on the axis, so $p_\perp \neq 0$ and the circle has a nonzero radius.

When the body turns by a small angle $d\theta$, the point moves along the circle by the arc length

$$
ds = \|p\| \sin\phi \; d\theta .
$$

This is the arc length $s = r\theta$ of a circle of radius $r$, written for a small angle. Khan Academy derives it in [arc length from angular displacement](https://www.khanacademy.org/science/in-in-class11th-physics/in-in-class11th-physics-motion-in-a-plane/uniform-circular-motion-introduction/v/distance-or-arc-length-from-angular-displacement).

<Note>
  **The cross product.** For two vectors $a, b \in \mathbb{R}^3$, the cross product is the vector

  $$
  a \times b = \begin{bmatrix} a_2 b_3 - a_3 b_2 \\ a_3 b_1 - a_1 b_3 \\ a_1 b_2 - a_2 b_1 \end{bmatrix} .
  $$

  Geometrically, $a \times b$ is perpendicular to both $a$ and $b$. Its direction follows the right-hand rule: curl the fingers of your right hand from $a$ toward $b$, and your thumb points along $a \times b$. Its length is $\|a\|\,\|b\| \sin\phi$, where $\phi$ is the angle between the two vectors. Four of its properties matter on this page:

  * If $a$ and $b$ are parallel, then $a \times b = 0$.
  * If $a$ is a unit vector perpendicular to $b$, then $\|a \times b\| = \|b\|$.
  * The order matters: $b \times a = -\,a \times b$. This is why the matrix $[\omega]$ below is skew-symmetric.
  * It is linear in each argument, so a scalar moves freely: $(c\,a) \times b = c\,(a \times b)$.

  Khan Academy's [cross product 1](https://www.khanacademy.org/science/in-in-class11th-physics/in-in-class11th-physics-motion-in-a-plane/x7183bffa9768c609:scalar-and-vector-product-of-vectors/v/cross-product-1) and [cross product 2](https://www.khanacademy.org/science/in-in-class11th-physics/in-in-class11th-physics-motion-in-a-plane/x7183bffa9768c609:scalar-and-vector-product-of-vectors/v/cross-product-2) videos work through the definition and the right-hand rule.
</Note>

The point moves along the tangent to the circle. You can build the tangent direction from the two vectors you already have, $\hat{\omega}$ and $p_\perp$, using the cross product properties in the Note above:

* **Direction.** The vector $\hat{\omega} \times p_\perp$ is perpendicular to $\hat{\omega}$, so it lies in the plane of the circle. It is also perpendicular to $p_\perp$, the radius that points from the center to the point. On a circle, the direction perpendicular to the radius is the tangent.
* **Which way.** A tangent line can be followed in two opposite directions. The right-hand rule picks the one in which the point moves. With your thumb along $\hat{\omega}$, your fingers curl in the direction of a positive rotation, and $\hat{\omega} \times p_\perp$ points the same way.
* **Length.** $\hat{\omega}$ is a unit vector perpendicular to $p_\perp$, so $\|\hat{\omega} \times p_\perp\| = \|p_\perp\|$.

Any vector is its length times a unit vector in its direction. For the tangent vector $\hat{\omega} \times p_\perp$ this reads

$$
\hat{\omega} \times p_\perp = \|\hat{\omega} \times p_\perp\| \, \hat{t} = \|p_\perp\| \, \hat{t} .
$$

Dividing by $\|p_\perp\|$ gives the unit tangent:

$$
\hat{t} = \frac{\hat{\omega} \times p_\perp}{\|p_\perp\|} .
$$

For a small turn, the short arc is almost a straight segment along the tangent. So the displacement $dp$ has length $ds$ and direction $\hat{t}$:

$$
dp = ds \, \hat{t} .
$$

Substitute the arc length, $ds = \|p\| \sin\phi \; d\theta = \|p_\perp\| \, d\theta$, and the unit tangent. The radius $\|p_\perp\|$ cancels:

$$
dp = \left( \|p_\perp\| \, d\theta \right) \frac{\hat{\omega} \times p_\perp}{\|p_\perp\|} = (\hat{\omega} \times p_\perp)\, d\theta .
$$

The part $p_\parallel$ is parallel to $\hat{\omega}$, so $\hat{\omega} \times p_\parallel = 0$. Adding it back changes nothing:

$$
dp = (\hat{\omega} \times p)\, d\theta .
$$

This holds for an infinitesimal turn only. A finite turn $\Delta\theta$ carries the point along the arc, not along the straight tangent, so the finite displacement is not $(\hat{\omega} \times p)\,\Delta\theta$.

Now divide by $dt$. The cross product is linear, so the scalar $\dot\theta = d\theta/dt$ can move inside it:

$$
\dot{p} = (\hat{\omega} \times p)\, \dot\theta = (\hat{\omega} \dot\theta) \times p .
$$

The vector in parentheses is the *angular velocity* (Lynch and Park eq. 3.25):

$$
\omega = \hat{\omega} \, \dot{\theta} , \qquad \dot{p} = \omega \times p .
$$

Its direction is the rotation axis. Its magnitude $|\dot\theta|$ is the angular speed. Its sign follows the right-hand rule about $\hat{\omega}$. With $\dot\theta = 1$, this is Lynch and Park's eq. 3.49, $\dot{p} = \hat{\omega} \times p$.

The derivation assumed $p_\perp \neq 0$. A point on the axis has $p_\perp = 0$ and does not move. The result agrees: $p$ is then parallel to $\omega$, so $\omega \times p = 0$.

The speed of the point is $\|\dot{p}\| = |\dot\theta|\, \|p\| \sin\phi$, the angular speed times the radius of its circle. This is the planar rule $v = \omega r$ again. When $\hat{\omega} = \hat{z}$ and $p$ lies in the plane, $\omega \times p$ is exactly $\omega\, G p$.

### A rotating axis that changes with time

In general the axis of rotation can change with time. Suppose a frame with unit axes $\{\hat{x}, \hat{y}, \hat{z}\}$ is attached to a rotating body. Consider the time derivatives of these axes. The length of $\hat{x}$ is fixed, so only its direction can change. The same is true of $\hat{y}$ and $\hat{z}$. Between times $t$ and $t + \Delta t$, the orientation changes by a rotation through an angle $\Delta \theta$ about a unit axis $\hat{\omega}$ through the origin. The axis $\hat{\omega}$ is independent of coordinates and has not yet been expressed in a reference frame.

As $\Delta t$ approaches zero, the ratio $\Delta \theta / \Delta t$ approaches the rotation rate $\dot{\theta}$. The vector $\hat{\omega}$ becomes the instantaneous axis of rotation. Over that instant the body turns about a fixed axis, so the result above applies with

$$
\omega = \hat{\omega} \, \dot{\theta} .
$$

The tip of each unit axis is a point on the body. With $p = \hat{x}$, it moves with velocity $\omega \times \hat{x}$, which is perpendicular to both $\omega$ and $\hat{x}$.

A point on a rotating body has velocity $\dot{p} = \omega \times p$. Write out this cross product with the component formula from the Note above, for $\omega = (\omega_1, \omega_2, \omega_3)$ and $p = (p_1, p_2, p_3)$. Each component is a sum of terms in $p_1$, $p_2$ and $p_3$, so the whole product is a matrix times $p$:

$$
\omega \times p =
\begin{bmatrix} \omega_2 p_3 - \omega_3 p_2 \\ \omega_3 p_1 - \omega_1 p_3 \\ \omega_1 p_2 - \omega_2 p_1 \end{bmatrix}
=
\underbrace{\begin{bmatrix}
0 & -\omega_3 & \omega_2 \\
\omega_3 & 0 & -\omega_1 \\
-\omega_2 & \omega_1 & 0
\end{bmatrix}}_{[\omega]}
\begin{bmatrix} p_1 \\ p_2 \\ p_3 \end{bmatrix}
= [\omega]\, p .
$$

So a cross product with $\omega$ is a product with the matrix $[\omega]$. Its entries satisfy $[\omega] = -[\omega]^T$. The same rule turns any vector $v \in \mathbb{R}^3$ into a matrix $[v]$.

<Info>
  **The bracket notation.** Writing a vector inside square brackets turns it into a matrix. For a vector in $\mathbb{R}^3$, $[v]$ is the skew-symmetric matrix that computes the cross product, $[v]\,p = v \times p$. The rest of this chapter and the later chapters on kinematics and dynamics use it:

  * $\dot R = [\omega_s] R$ and $[\omega_b] = R^{-1} \dot R$ in the next paragraphs.
  * $e^{[\hat\omega]\theta}$, the rotation in [exponential coordinates](/aiml-common/lectures/motion-algebras/exponential-coordinates/index).
  * $[\mathcal{V}]$, the $4 \times 4$ matrix of a twist in [motion representations](/aiml-common/lectures/motion-algebras/motion-representations/index), built from $[\omega]$ and a linear velocity.
  * $[\mathcal{S}]$, the matrix of a screw axis, and the product of exponentials for robot arms.

  In the plane, $[\omega] = \omega G$. [Lie I](/aiml-common/lectures/motion-algebras/lie-theory/index) writes the same operation as $\tau^\wedge$ and its inverse as $(\cdot)^\vee$. When you see a vector in square brackets, read it as "the skew-symmetric matrix of this vector", the one that computes its cross product.
</Info>

<Note>
  **Why "skew-symmetric".** Mirror a matrix across its main diagonal, so that entry $(i, j)$ trades places with entry $(j, i)$. A *symmetric* matrix looks the same after the mirror: $a_{ij} = a_{ji}$, or $A = A^T$. A *skew-symmetric* matrix comes back with every sign flipped: $a_{ij} = -a_{ji}$, or $A = -A^T$. In $[\omega]$, the $-\omega_3$ above the diagonal faces the $\omega_3$ below it, and the same holds for the pairs $\omega_2, -\omega_2$ and $-\omega_1, \omega_1$. A diagonal entry is its own mirror image, so it must equal its own negative, and that forces it to be zero.

  The structure also explains why $[\omega]$ holds exactly one vector. With a zero diagonal and the lower triangle fixed by the upper one, a $3 \times 3$ skew-symmetric matrix has only three free entries, $\omega_1$, $\omega_2$ and $\omega_3$. A $2 \times 2$ one has a single free entry, which is why $\mathfrak{so}(2)$ is one-dimensional.
</Note>

The set of all $3 \times 3$ real skew-symmetric matrices is the Lie algebra $\mathfrak{so}(3)$. The matrix $[\omega]$ is the hat of $\omega$, so an angular velocity is an element of this Lie algebra.

Let $R(t)$ describe the orientation of the body frame relative to the fixed frame at time $t$. Its columns $r_1(t)$, $r_2(t)$ and $r_3(t)$ give $\hat{x}$, $\hat{y}$ and $\hat{z}$ in fixed-frame coordinates. Let $\omega_s$ be the angular velocity expressed in the fixed frame. Each column then moves according to

$$
\dot{r}_i = \omega_s \times r_i , \qquad i = 1, 2, 3 ,
$$

Stack the three columns side by side to form $\dot R$:

$$
\dot R = \begin{bmatrix} \omega_s \times r_1 & \omega_s \times r_2 & \omega_s \times r_3 \end{bmatrix} .
$$

Replace each cross product with the matrix product $[\omega_s] r_i$:

$$
\dot R = \begin{bmatrix} [\omega_s] r_1 & [\omega_s] r_2 & [\omega_s] r_3 \end{bmatrix} .
$$

A matrix times $R$ multiplies each column of $R$ separately, so $[\omega_s]$ factors out:

$$
\dot R = [\omega_s] \begin{bmatrix} r_1 & r_2 & r_3 \end{bmatrix} = [\omega_s] R .
$$

<video src="https://artifacts.aegeanai.com/manim/rotation-representations/FrameAngularVelocity.mp4?v=2" controls loop muted playsInline width="100%" style={{ borderRadius: 8 }} />

*The axis of $\omega$ changes with time, and the yellow curve traces the tip of $\omega(t)$. At each instant the columns $r_1$, $r_2$ and $r_3$ of $R$ move with $\omega_s \times r_i$ (red arrows). Because the axis moves, the tip of $r_1$ no longer stays on one circle. The matrix $[\omega]$ turns each cross product into a matrix product, $\omega \times r_1 = [\omega] r_1$. Stacking the three velocities then gives $\dot R = [\omega_s] R$.*

[Page 79 of Lynch and Park](https://artifacts.aegeanai.com/pdf/lynch-mr/body-motions.pdf#page=21) solves this equation for the angular velocity. In fixed-frame and body-frame coordinates,

$$
[\omega_s] = \dot{R} R^{-1} , \qquad [\omega_b] = R^{-1} \dot{R} ,
$$

with $R^{-1} = R^\top$. The second form is the $\mathcal{X}^{-1}\dot{\mathcal{X}}$ of [Lie I](/aiml-common/lectures/motion-algebras/lie-theory/index#the-tangent-space-and-the-lie-algebra).

The fixed-frame angular velocity $\omega_s$ is independent of the chosen body frame. Similarly, the body-frame angular velocity $\omega_b$ is independent of the chosen fixed frame. Both $R$ and $\dot{R}$ depend on $\{s\}$ and $\{b\}$. Their products remove one of these dependencies. The product $\dot{R} R^{-1}$ is independent of $\{b\}$, while $R^{-1} \dot{R}$ is independent of $\{s\}$.

The two angular velocities are the same vector written in two frames, so $\omega_s = R\, \omega_b$. This holds for any pair of frames. If $R_{cd}$ is the orientation of $\{d\}$ relative to $\{c\}$, then

$$
\omega_c = R_{cd}\, \omega_d .
$$

In the plane, $\omega_s = \omega_b = \dot\theta$, because every rotation is about the same axis and planar rotations commute.

The velocity formulas $\dot p = \omega \times p$ and $\dot R = [\omega_s] R$ hold at every instant, whether or not the axis of $\omega$ moves. A moving axis changes only what happens over a finite time, as [exponential coordinates](/aiml-common/lectures/motion-algebras/exponential-coordinates/index) shows.

<Note>
  **Examples in robotics where the rotation axis moves.**

  1. Take a robot arm whose base joint turns about the vertical axis $\hat{z}$ at rate $\dot\theta_1$. Its shoulder joint turns at rate $\dot\theta_2$ about a horizontal axis that sits on the base. The base carries that axis around, so after the base has turned by $\theta_1$ the shoulder axis points along $(-\sin\theta_1, \cos\theta_1, 0)$. The angular velocity of the upper arm adds the two joint rates, each along its own axis:

     $$
     \omega_s = \dot\theta_1\, \hat{z} + \dot\theta_2 \begin{bmatrix} -\sin\theta_1 \\ \cos\theta_1 \\ 0 \end{bmatrix} .
     $$

     Even with both joint rates constant, $\omega_s$ sweeps a cone about $\hat{z}$, as in the animation above. Every further joint adds another term whose axis is carried by the joints before it.

  2. A quadrotor that yaws while it banks, and the body of a walking legged robot, also have a moving rotation axis.

  3. The chassis of a [wheeled robot](/aiml-common/lectures/kinematics/wheeled-robots/index) on flat ground can only turn about the vertical axis, so $\omega = \dot\theta\, \hat{z}$ always points the same way, and its orientation is the planar $R(\theta)$ from [angular velocities in the plane](#angular-velocities-in-the-plane). Each wheel, however, spins about its axle while the axle turns with the chassis, so a wheel's own rotation axis does move.
</Note>

## References

* Kevin M. Lynch, F. (2017). *Modern Robotics*.
* Kleppner, D., Kolenkow, R. (1973). *An introduction to mechanics*.

***

<Callout icon="bug" iconType="regular">
  Found an error on this page? [Report an issue](https://github.com/aegean-ai/eaia-feedback/issues/new?template=page-issue.yml\&page=/aiml-common/lectures/motion-algebras/angular-velocity).
</Callout>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.