Skip to main content
Rotation representations 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. 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

A body turns about the origin at the rate ω=θ˙\omega = \dot\theta. A point pp on it moves on a circle. The quarter-turn matrix GG turns pp by 90∘90^\circ, and scaling GpGp by ω\omega gives the velocity p˙\dot p (red), which is tangent to the circle with length ∣ω∣ ∥p∥|\omega|\,\|p\|. A negative ω\omega reverses it. The orientation as a whole obeys R˙=[ω]R\dot R = [\omega] R with [ω]=ωG[\omega] = \omega G. A body turns in the plane about the origin. Its orientation is the rotation matrix R(θ)R(\theta) from rotations in the plane, and the angle θ(t)\theta(t) changes with time. The angular velocity is the rate of that change, the scalar ω=θ˙.\omega = \dot\theta . Differentiate R(θ)R(\theta) entry by entry. Each entry depends on time only through the angle θ(t)\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, ddtcos⁡θ(t)=dcos⁡θdθ dθdt=−sin⁡θ  θ˙.\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: R˙=θ˙[−sin⁡θ−cos⁡θcos⁡θ−sin⁡θ].\dot R = \dot\theta \begin{bmatrix} -\sin\theta & -\cos\theta \\ \cos\theta & -\sin\theta \end{bmatrix} . The matrix on the right equals GRG R, where GG is the quarter-turn matrix G=[0−110],G = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} , so R˙=θ˙ GR\dot R = \dot\theta\, G R. Collect the rate and GG into one matrix: R˙=[ω] R,[ω]=ωG=[0−ωω0].\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 so(2)\mathfrak{so}(2), the tangent space at the identity in SO(2) as a manifold. A point fixed on the body has coordinates pbp_b in the body frame. They do not change, because the point moves with the body. In the fixed frame its coordinates are ps=R pbp_s = R\, p_b, and these do change. Differentiate, using p˙b=0\dot p_b = 0: p˙s=R˙ pb=[ω]R pb=[ω] ps=ω Gps.\dot p_s = \dot R\, p_b = [\omega] R\, p_b = [\omega]\, p_s = \omega\, G p_s . Multiplying by GG turns a vector by 90∘90^\circ counterclockwise. So the velocity is perpendicular to psp_s, and its length is ∣ω∣ ∥ps∥|\omega| \, \|p_s\|: the angular speed times the radius. This is the rule v=ωrv = \omega r of circular motion. Khan Academy covers it in angular velocity and speed and 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, pp without a subscript means the fixed-frame coordinates psp_s. Lynch and Park make this argument for eq. 3.49 (page 83), and Kleppner and Kolenkow make it in section 7.2 (Kleppner & Kolenkow, 1973).

Angular velocities in space

A fixed rotating axis

The animation draws Figure 3.11 of Lynch and Park, and the derivation below goes through it step by step. A point pp on the body splits into p∥p_\parallel along the axis ω^\hat{\omega}, which stays fixed, and p⊥p_\perp across it, which sweeps a circle of radius ∥p∥sin⁡ϕ\|p\| \sin\phi. A small turn dθd\theta moves the point by dsds along the tangent t^\hat{t}. That gives dp=(ω^×p) dθdp = (\hat{\omega} \times p)\, d\theta, and dividing by dtdt gives p˙=ω×p\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}, ∥ω^∥=1\|\hat{\omega}\| = 1. Let p(t)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∥+p⊥,p∥=(ω^⋅p) ω^,p⊥=p−(ω^⋅p) ω^.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∥p_\parallel stays constant. The part p⊥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 pp and ω^\hat{\omega}. The radius of the circle is ∥p⊥∥=∥p∥sin⁡ϕ\|p_\perp\| = \|p\| \sin\phi. The projection ω^⋅p\hat{\omega} \cdot p is a dot product. Khan Academy’s dot product video reviews it. Assume the point is not on the axis, so p⊥≠0p_\perp \neq 0 and the circle has a nonzero radius. When the body turns by a small angle dθd\theta, the point moves along the circle by the arc length ds=∥p∥sin⁡ϕ  dθ.ds = \|p\| \sin\phi \; d\theta . This is the arc length s=rθs = r\theta of a circle of radius rr, written for a small angle. Khan Academy derives it in arc length from angular displacement.
The cross product. For two vectors a,b∈R3a, b \in \mathbb{R}^3, the cross product is the vectora×b=[a2b3−a3b2a3b1−a1b3a1b2−a2b1].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×ba \times b is perpendicular to both aa and bb. Its direction follows the right-hand rule: curl the fingers of your right hand from aa toward bb, and your thumb points along a×ba \times b. Its length is ∥a∥ ∥b∥sin⁡ϕ\|a\|\,\|b\| \sin\phi, where ϕ\phi is the angle between the two vectors. Four of its properties matter on this page:
  • If aa and bb are parallel, then a×b=0a \times b = 0.
  • If aa is a unit vector perpendicular to bb, then ∥a×b∥=∥b∥\|a \times b\| = \|b\|.
  • The order matters: b×a=− a×bb \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)×b=c (a×b)(c\,a) \times b = c\,(a \times b).
Khan Academy’s cross product 1 and cross product 2 videos work through the definition and the right-hand rule.
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⊥p_\perp, using the cross product properties in the Note above:
  • Direction. The vector ω^×p⊥\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⊥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 ω^×p⊥\hat{\omega} \times p_\perp points the same way.
  • Length. ω^\hat{\omega} is a unit vector perpendicular to p⊥p_\perp, so ∥ω^×p⊥∥=∥p⊥∥\|\hat{\omega} \times p_\perp\| = \|p_\perp\|.
Any vector is its length times a unit vector in its direction. For the tangent vector ω^×p⊥\hat{\omega} \times p_\perp this reads ω^×p⊥=∥ω^×p⊥∥ t^=∥p⊥∥ t^.\hat{\omega} \times p_\perp = \|\hat{\omega} \times p_\perp\| \, \hat{t} = \|p_\perp\| \, \hat{t} . Dividing by ∥p⊥∥\|p_\perp\| gives the unit tangent: t^=ω^×p⊥∥p⊥∥.\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 dpdp has length dsds and direction t^\hat{t}: dp=ds t^.dp = ds \, \hat{t} . Substitute the arc length, ds=∥p∥sin⁡ϕ  dθ=∥p⊥∥ dθds = \|p\| \sin\phi \; d\theta = \|p_\perp\| \, d\theta, and the unit tangent. The radius ∥p⊥∥\|p_\perp\| cancels: dp=(∥p⊥∥ dθ)ω^×p⊥∥p⊥∥=(ω^×p⊥) dθ.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∥p_\parallel is parallel to ω^\hat{\omega}, so ω^×p∥=0\hat{\omega} \times p_\parallel = 0. Adding it back changes nothing: dp=(ω^×p) dθ.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 (ω^×p) Δθ(\hat{\omega} \times p)\,\Delta\theta. Now divide by dtdt. The cross product is linear, so the scalar θ˙=dθ/dt\dot\theta = d\theta/dt can move inside it: p˙=(ω^×p) θ˙=(ω^θ˙)×p.\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): ω=ω^ θ˙,p˙=ω×p.\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 θ˙=1\dot\theta = 1, this is Lynch and Park’s eq. 3.49, p˙=ω^×p\dot{p} = \hat{\omega} \times p. The derivation assumed p⊥≠0p_\perp \neq 0. A point on the axis has p⊥=0p_\perp = 0 and does not move. The result agrees: pp is then parallel to ω\omega, so ω×p=0\omega \times p = 0. The speed of the point is ∥p˙∥=∣θ˙∣ ∥p∥sin⁡ϕ\|\dot{p}\| = |\dot\theta|\, \|p\| \sin\phi, the angular speed times the radius of its circle. This is the planar rule v=ωrv = \omega r again. When ω^=z^\hat{\omega} = \hat{z} and pp lies in the plane, ω×p\omega \times p is exactly ω Gp\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 {x^,y^,z^}\{\hat{x}, \hat{y}, \hat{z}\} is attached to a rotating body. Consider the time derivatives of these axes. The length of x^\hat{x} is fixed, so only its direction can change. The same is true of y^\hat{y} and z^\hat{z}. Between times tt and t+Δtt + \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 Δt\Delta t approaches zero, the ratio Δθ/Δt\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=x^p = \hat{x}, it moves with velocity ω×x^\omega \times \hat{x}, which is perpendicular to both ω\omega and x^\hat{x}. A point on a rotating body has velocity p˙=ω×p\dot{p} = \omega \times p. Write out this cross product with the component formula from the Note above, for ω=(ω1,ω2,ω3)\omega = (\omega_1, \omega_2, \omega_3) and p=(p1,p2,p3)p = (p_1, p_2, p_3). Each component is a sum of terms in p1p_1, p2p_2 and p3p_3, so the whole product is a matrix times pp: ω×p=[ω2p3−ω3p2ω3p1−ω1p3ω1p2−ω2p1]=[0−ω3ω2ω30−ω1−ω2ω10]⏟[ω][p1p2p3]=[ω] 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 [ω]=−[ω]T[\omega] = -[\omega]^T. The same rule turns any vector v∈R3v \in \mathbb{R}^3 into a matrix [v][v].
The bracket notation. Writing a vector inside square brackets turns it into a matrix. For a vector in R3\mathbb{R}^3, [v][v] is the skew-symmetric matrix that computes the cross product, [v] p=v×p[v]\,p = v \times p. The rest of this chapter and the later chapters on kinematics and dynamics use it:
  • R˙=[ωs]R\dot R = [\omega_s] R and [ωb]=R−1R˙[\omega_b] = R^{-1} \dot R in the next paragraphs.
  • e[ω^]θe^{[\hat\omega]\theta}, the rotation in exponential coordinates.
  • [V][\mathcal{V}], the 4×44 \times 4 matrix of a twist in motion representations, built from [ω][\omega] and a linear velocity.
  • [S][\mathcal{S}], the matrix of a screw axis, and the product of exponentials for robot arms.
In the plane, [ω]=ωG[\omega] = \omega G. Lie I 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.
Why “skew-symmetric”. Mirror a matrix across its main diagonal, so that entry (i,j)(i, j) trades places with entry (j,i)(j, i). A symmetric matrix looks the same after the mirror: aij=ajia_{ij} = a_{ji}, or A=ATA = A^T. A skew-symmetric matrix comes back with every sign flipped: aij=−ajia_{ij} = -a_{ji}, or A=−ATA = -A^T. In [ω][\omega], the −ω3-\omega_3 above the diagonal faces the ω3\omega_3 below it, and the same holds for the pairs ω2,−ω2\omega_2, -\omega_2 and −ω1,ω1-\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×33 \times 3 skew-symmetric matrix has only three free entries, ω1\omega_1, ω2\omega_2 and ω3\omega_3. A 2×22 \times 2 one has a single free entry, which is why so(2)\mathfrak{so}(2) is one-dimensional.
The set of all 3×33 \times 3 real skew-symmetric matrices is the Lie algebra so(3)\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)R(t) describe the orientation of the body frame relative to the fixed frame at time tt. Its columns r1(t)r_1(t), r2(t)r_2(t) and r3(t)r_3(t) give x^\hat{x}, y^\hat{y} and z^\hat{z} in fixed-frame coordinates. Let ωs\omega_s be the angular velocity expressed in the fixed frame. Each column then moves according to r˙i=ωs×ri,i=1,2,3,\dot{r}_i = \omega_s \times r_i , \qquad i = 1, 2, 3 , Stack the three columns side by side to form R˙\dot R: R˙=[ωs×r1ωs×r2ωs×r3].\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 [ωs]ri[\omega_s] r_i: R˙=[[ωs]r1[ωs]r2[ωs]r3].\dot R = \begin{bmatrix} [\omega_s] r_1 & [\omega_s] r_2 & [\omega_s] r_3 \end{bmatrix} . A matrix times RR multiplies each column of RR separately, so [ωs][\omega_s] factors out: R˙=[ωs][r1r2r3]=[ωs]R.\dot R = [\omega_s] \begin{bmatrix} r_1 & r_2 & r_3 \end{bmatrix} = [\omega_s] R . The axis of ω\omega changes with time, and the yellow curve traces the tip of ω(t)\omega(t). At each instant the columns r1r_1, r2r_2 and r3r_3 of RR move with ωs×ri\omega_s \times r_i (red arrows). Because the axis moves, the tip of r1r_1 no longer stays on one circle. The matrix [ω][\omega] turns each cross product into a matrix product, ω×r1=[ω]r1\omega \times r_1 = [\omega] r_1. Stacking the three velocities then gives R˙=[ωs]R\dot R = [\omega_s] R. Page 79 of Lynch and Park solves this equation for the angular velocity. In fixed-frame and body-frame coordinates, [ωs]=R˙R−1,[ωb]=R−1R˙,[\omega_s] = \dot{R} R^{-1} , \qquad [\omega_b] = R^{-1} \dot{R} , with R−1=R⊤R^{-1} = R^\top. The second form is the X−1X˙\mathcal{X}^{-1}\dot{\mathcal{X}} of Lie I. The fixed-frame angular velocity ωs\omega_s is independent of the chosen body frame. Similarly, the body-frame angular velocity ωb\omega_b is independent of the chosen fixed frame. Both RR and R˙\dot{R} depend on {s}\{s\} and {b}\{b\}. Their products remove one of these dependencies. The product R˙R−1\dot{R} R^{-1} is independent of {b}\{b\}, while R−1R˙R^{-1} \dot{R} is independent of {s}\{s\}. The two angular velocities are the same vector written in two frames, so ωs=R ωb\omega_s = R\, \omega_b. This holds for any pair of frames. If RcdR_{cd} is the orientation of {d}\{d\} relative to {c}\{c\}, then ωc=Rcd ωd.\omega_c = R_{cd}\, \omega_d . In the plane, ωs=ωb=θ˙\omega_s = \omega_b = \dot\theta, because every rotation is about the same axis and planar rotations commute. The velocity formulas p˙=ω×p\dot p = \omega \times p and R˙=[ωs]R\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 shows.
Examples in robotics where the rotation axis moves.
  1. Take a robot arm whose base joint turns about the vertical axis z^\hat{z} at rate θ˙1\dot\theta_1. Its shoulder joint turns at rate θ˙2\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 θ1\theta_1 the shoulder axis points along (−sin⁡θ1,cos⁡θ1,0)(-\sin\theta_1, \cos\theta_1, 0). The angular velocity of the upper arm adds the two joint rates, each along its own axis: ωs=θ˙1 z^+θ˙2[−sin⁡θ1cos⁡θ10].\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, ωs\omega_s sweeps a cone about z^\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 on flat ground can only turn about the vertical axis, so ω=θ˙ z^\omega = \dot\theta\, \hat{z} always points the same way, and its orientation is the planar R(θ)R(\theta) from 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.

References

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

Found an error on this page? Report an issue.