# 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.

## Notations

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$$

## Kinematics

### 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}$$

### Inversions

 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.

## Discussion

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