Spatial vector algebra cheat sheet

Spatial vector algebra is screw algebra with two conventions that are great for computations: we use spatial vectors rather than body vectors whenever possible, and Plücker transforms rather than affine transforms. Like with any other algebra, the more identities we swing, the more proficient we get at it. This cheat sheet lists the ones I have found useful so far. It references both spatial and body vectors. Because when a spatial vector formula resists intuition (not the rareliest occurrence), it can help to explicit all the frames involved.


We adopt the subscript right-to-left convention for transforms, and superscript notation to indicate the frame of a motion or force vector:

Quantity Notation
Affine transform from frame \(A\) to frame \(B\) \(\bfT_{BA}\)
Body angular velocity of frame \(A\) in frame \(B\) \({}^A \bfomega_{BA}\)
Plücker transform from frame \(A\) to frame \(B\) \(\bfX_{BA}\)
Position of frame \(B\) in frame \(A\) \({}^A \bfp_B\)
Rotation matrix from frame \(A\) to frame \(B\) \(\bfR_{BA}\)
Spatial angular velocity of frame \(A\) in frame \(B\) \({}^B \bfomega_{BA}\)
World frame (inertial) \(W\)

With these notations frame transforms can be read left to right, for example:

\begin{align} \bfX_{CA} & = \bfX_{CB} \bfX_{BA} & {}^{B} \bfomega & = \bfR_{BA} {}^{A} \bfomega & {}^B \bfp_C & = \bfR_{BA} {}^A \bfp_C + {}^B \bfp_A \end{align}

Note that we part from Roy Featherstone's notation \({}^B \bfX_A\) to be able to keep track of the original transforms in time derivatives. For example, the angular velocity \(\bfomega_{BA}\) that derivates from the rotation \(\bfR_{BA}\) satisfies:

\begin{equation*} \dot{\bfR}_{BA} = ({}^{B} \bfomega_{BA} \times) \bfR_{BA} = \bfR_{BA} ({}^{A} \bfomega_{BA} \times) \end{equation*}

The operator \(\bfv \mapsto \bfv \times\) turns a 3D vector \(\bfv\) into its \(3 \times 3\) cross-product skew-symmetric matrix. See below for some identities related to this operator.

Cross and dot products

Euclidean cross products

Name Formula
Vector triple product \(\bfa \times (\bfb \times \bfc) = (\bfa \cdot \bfc) \bfb - (\bfa \cdot \bfb) \bfc\)
Rotation of cross product \(\bfR (\bfa \times \bfb) = (\bfR \bfa) \times (\bfR \bfb)\)
Cross product by rotated vector \((\bfR \bfv) \times = \bfR (\bfv \times) \bfR^\top\)
Rotation of cross product matrix \(\bfR (\bfv \times) = (\bfR \bfv) \times \bfR\)
Rotation of cross product matrix \(\bfR_{BA} ({}^A \bfv \times) = {}^B \bfv \times \bfR_{BA}\)

Spatial cross products

Name Formula
Cross product by transformed vector \((\bfX \bfv) \times = \bfX (\bfv \times) \bfX^{-1}\)
Transform of cross product matrix \(\bfX (\bfv \times) = (\bfX \bfv) \times \bfX\)
Transform of cross product matrix \(\bfX_{BA} ({}^A \bfv \times) = {}^B \bfv \times \bfX_{BA}\)

Dot products

Property Formula
Invariance by rotation \((\bfR \bfa) \cdot (\bfR \bfb) = \bfa \cdot \bfb\)
Invariance by dual transforms \((\bfX \bfm) \cdot (\bfX^* \bff) = \bfm \cdot \bff\)


Transform matrices

Coordinates Transform Inverse
Homogeneous \(\bfT_{BA} = \begin{bmatrix} \bfR_{BA} & {}^B \bfp_A \\ \bfzero_{1 \times 3} & 1 \end{bmatrix}\) \(\bfT^{-1}_{BA} = \begin{bmatrix} \bfR_{BA}^T & -\bfR_{BA}^T {}^B \bfp_A \\ \bfzero_{1 \times 3} & 1 \end{bmatrix}\)
Motion vectors \(\bfX_{BA} = \begin{bmatrix} \bfR_{BA} & ({}^B \bfp_A \times) \bfR_{BA} \\ \bfzero_{3 \times 3} & \bfR_{BA} \end{bmatrix}\) \(\bfX_{BA}^{-1} = \begin{bmatrix} \bfR_{BA}^T & -\bfR_{BA}^T ({}^B \bfp_A \times) \\ \bfzero_{3 \times 3} & \bfR_{BA}^T \end{bmatrix}\)
Force vectors \(\bfX_{BA}^* = \begin{bmatrix} \bfR_{BA} & \bfzero_{3 \times 3} \\ ({}^B \bfp_A \times) \bfR_{BA} & \bfR_{BA} \end{bmatrix}\) \(\bfX_{BA}^{-*} = \begin{bmatrix} \bfR_{BA}^T & \bfzero_{3 \times 3} \\ -\bfR_{BA}^T ({}^B \bfp_A \times) & \bfR_{BA}^T \end{bmatrix}\)


Inversion Formula
Rotation matrix \(\bfR_{AB} = \bfR_{BA}^{-1} = \bfR_{BA}^\top\)
Angular velocity \({}^A \bfomega_{AB} = -{}^A \bfomega_{BA}\)

Time derivatives

Quantity Spatial derivative Body derivative
Rotation matrix \({\dot{\bfR}}_{BA} = {}^{B} \bfomega_{BA} \times \bfR_{BA}\) \({\dot{\bfR}}_{BA} = \bfR_{BA} ({}^{A} \bfomega_{BA} \times)\)
Quantity Spatial vector algebra Screw algebra
Rotation matrix \({\dot{\bfR}}_{BA} = {}^{B} (\bfomega_{A} - \bfomega_{B}) \times \bfR_{BA}\) \({\dot{\bfR}}_{BA} = {}^{B} (\bfomega_{WA} - \bfomega_{WB}) \times \bfR_{BA}\)
Plücker transform \({\dot{\bfX}}_{BA} = {}^{B} (\bfv_{A} - \bfv_{B}) \times \bfX_{BA}\) \({\dot{\bfX}}_{BA} = {}^{B} (\bfv_{WA} - \bfv_{WB}) \times \bfX_{BA}\)
Plücker to world \({\dot{\bfX}}_{WA} = \bfv_{A} \times \bfX_{WA}\) \({\dot{\bfX}}_{WA} = {}^{W} \bfv_{WA} \times \bfX_{WA}\)

Proof notes

These notes go a bit beyond the cheat sheet. They check that the formulas are correct and consistent with each other.

Rotation time derivatives

We can check that \({}^B (\bfomega_{WA} - \bfomega_{WB}) = {}^B \bfomega_{BA}\) so that the formulas for the rotation time derivatives are consistent:

\begin{align} \dot{\bfR}_{BA} = {}^B \bfomega_{BA} \times \bfR_{BA} & = \frac{\rm d}{{\rm d} t} (\bfR_{BW} \bfR_{WA}) \\ & = \dot{\bfR}_{BW} \bfR_{WA} + \bfR_{BW} \dot{\bfR}_{WA} \\ & = {}^B \bfomega_{BW} \times \bfR_{BW} \bfR_{WA} + \bfR_{BW} \bfR_{WA} ({}^A \bfomega_{WA} \times) \\ & = {}^B \bfomega_{BW} \times \bfR_{BA} + \bfR_{BA} ({}^A \bfomega_{WA} \times) \\ & = (-{}^B \bfomega_{WB}) \times \bfR_{BA} + {}^B \bfomega_{WA} \times \bfR_{BA} \\ & = ({}^B \bfomega_{WA} - {}^B \bfomega_{WB}) \times \bfR_{BA} \end{align}

To go further

The reference book on spatial vector algebra is Roy Featherstone's Rigid Body Dynamics Algorithms. Its tables are cheat sheets of their own. The book itself is better as an implementation reference than for learning things, as it often assumes the reader is already familiar with screw theory. For first-time learners, Modern Robotics might be a better place to start, or A Mathematical Introduction to Robotic Manipulation for those who like their math fresh.

There are plenty of cheat sheets on the web, which says something about both the importance and the trickiness of Lie algebras ;-) Pinocchio has a useful SE(3) algebra cheat sheet. So does the Kindr library. For rotations, which are also a Lie algebra denoted by \(SO(3)\) rather than \(SE(3)\), Diebel's Representing attitude: Euler angles, unit quaternions, and rotation vectors is also a great cheat sheet. For spatial vector algebra specifically, Jan Carius has also started some nice notes on spatial velocities.


There are no comments yet. Feel free to leave a reply using the form below.

Post a comment

You can use Markdown with $\LaTeX$ formulas in your comment.

You agree to the publication of your comment on this page under the CC BY 4.0 license.

Your email address will not be published.

© Stéphane Caron — All content on this website is under the CC BY 4.0 license.