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:
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
There are no comments yet. Feel free to leave a reply using the form below.