Robotic Systems

Robotic Systems · teaching-draft · v0.2.0

Frames, rigid transforms, and SO(3)

Lecture 3 · Week 2 · 90 minutes

Learning outcomes

  • Compose rigid transforms with explicit frame labels.
  • Distinguish point transforms from vector transforms.
  • Verify rotation and Jacobian conventions numerically.

Prerequisites: Linear algebra, ODEs, and earlier lectures in this sequence.

Frame labels are part of the quantity

Write RWBR_{WB} for the rotation mapping body components into world components:

pW=RWBpB+pWB.p^W=R_{WB}p^B+p_{WB}.
A point transform uses translation. A free vector such as angular velocity changes coordinates using rotation alone. Mixing these operations causes plausible-looking but incorrect geometry.

A rigid transform is

TWB=[RWBpWB01].T_{WB}=\begin{bmatrix}R_{WB}&p_{WB}\\0&1\end{bmatrix}.
Its inverse has rotation RWB⊤R_{WB}^\top and translation −RWB⊤pWB-R_{WB}^\top p_{WB}. Frame labels guide composition: TWC=TWBTBCT_{WC}=T_{WB}T_{BC}.

Rotation matrices

A proper rotation satisfies R⊤R=IR^\top R=I and det⁡R=1\det R=1. The first condition preserves lengths and angles; the determinant excludes reflections. A matrix close to orthogonal is not exactly on SO(3). Diagnose drift rather than silently treating the result as a rigid rotation.

Define [ω]×r=ω×r[\omega]_\times r=\omega\times r. World-frame angular velocity gives R˙=[ωW]×R\dot R=[\omega^W]_\times R. Body-frame angular velocity gives R˙=R[ωB]×\dot R=R[\omega^B]_\times. They agree because ωW=RωB\omega^W=R\omega^B.

Worked transform

A body is translated to (1,2,0)(1,2,0) and rotated 90∘90^\circ about world z. Its local point (1,0,0)(1,0,0) maps to (1,3,0)(1,3,0). Its local direction (1,0,0)(1,0,0) maps to (0,1,0)(0,1,0), without translation.

Composing rotations about different axes generally depends on order. Test nonparallel axes: two z rotations cannot expose an ordering bug.

MuJoCo mapping

After forward kinematics, body xpos and xmat describe world pose. Sites provide useful tool frames. The translational Jacobian maps qvel to world linear velocity for the queried point.

Some spatial APIs use rotational-before-linear ordering. In particular, mj_objectVelocity must not be interpreted as a generic six-vector ordered like a free-joint qvel without checking the convention. Frame, origin, and component order all matter.

When comparing with manipulation notes, translate frame conventions explicitly MIT differential IK. Matching variable names do not establish that two Jacobians mean the same thing.

Practice and exercise

Practice 2 checks a quaternion quarter-turn against its rotation matrix. Extend it with the point/vector example.

Check: Is R⊤pWR^\top p^W enough to recover body coordinates of a world point? Answer: only if the origins coincide. Generally, pB=R⊤(pW−pWB)p^B=R^\top(p^W-p_{WB}). Missing translation can produce correct orientation with systematically wrong tool position.

As a second test, compose a transform with its inverse and check both rotation and translation. A small rotation residual alone cannot detect a wrong inverse translation.

Reading and source connections

Advanced Robot Dynamics and Simulation — lecture series — CMU 16-715. Companion video series for modeling, integration, rigid-body dynamics, constraints, and contact.

Let's Pick (and Place)! — Russ Tedrake. Differential inverse kinematics and Jacobian-based manipulation.

MuJoCo API functions — MuJoCo contributors. Function-level reference. The lockfile fixes the executable version; stable documentation can move.