Hyoungseo Son
Lie Groups & Manifolds
Contents · Lie Groups & Manifolds

Part 1 · Lie Algebra & Adjoint

  • The Lie Algebra, Twists, and the Adjoint

Part 2 · Manifold Optimization

Part 1 · Lie Algebra & Adjoint

The Lie Algebra, Twists, and the Adjoint

A rigid body's configuration lives on the group SE(3)SE(3), a curved manifold. Its velocity does not: at any pose the set of admissible velocities is a flat vector space, the tangent space. The tangent space at the identity is the Lie algebra se(3)\mathfrak{se}(3), and its elements are exactly the twists from the last article. The adjoint is the linear map that carries a twist from one frame's version of that flat space to another's.

The Lie algebra is the tangent space at the identity

Take a curve T(t)SE(3)T(t) \in SE(3) through the identity, T(0)=IT(0) = I. Its derivative T˙(0)\dot T(0) is a tangent vector at II, and it always has the form

T˙(0)=V^=[ω^v00],ω^=[0ωzωyωz0ωxωyωx0].\dot T(0) = \hat{\mathcal{V}} = \begin{bmatrix} \hat\omega & v \\ 0 & 0 \end{bmatrix}, \qquad \hat\omega = \begin{bmatrix} 0 & -\omega_z & \omega_y \\ \omega_z & 0 & -\omega_x \\ -\omega_y & \omega_x & 0 \end{bmatrix}.

The hat map \wedge sends a twist V=(v,ω)\mathcal{V} = (v, \omega) to this 4×44\times4 matrix. The set of all such matrices is se(3)\mathfrak{se}(3), a 66-dimensional vector space, and the matrix exponential T=exp(V^)T = \exp(\hat{\mathcal{V}}) integrates a constant twist back into a screw motion on the group. So a twist is not just a stacked pair of 33-vectors: it is a bona fide tangent vector, an element of the algebra whose bracket encodes how infinitesimal motions fail to commute.1

The adjoint moves a twist between frames

The same physical motion has different coordinates in different frames. Let TAB=(R,p)SE(3)T_{AB} = (R, p) \in SE(3) be the pose of frame BB measured in frame AA. A twist written in BB transports to AA by the adjoint AdTAB\mathrm{Ad}_{T_{AB}}, a linear map on twists whose action on V=(v,ω)\mathcal{V} = (v, \omega) is

VA=AdTABVB,AdT[vω]=[Rv+ω×pRω].\mathcal{V}_A = \mathrm{Ad}_{T_{AB}}\, \mathcal{V}_B, \qquad \mathrm{Ad}_{T}\begin{bmatrix} v \\ \omega \end{bmatrix} = \begin{bmatrix} R\,v + \omega \times p \\ R\,\omega \end{bmatrix}.

As a matrix this is the 6×66\times6 Plucker transform. Geometrically AdT\mathrm{Ad}_T does two things: it rotates each part into the new axes through RR, and it adds the ω×p\omega \times p coupling that appears because the two frame origins are offset by pp, exactly the rigid-body relation vP=vO+ω×rv_P = v_O + \omega \times r now promoted to act on the whole 66D twist at once. (Sign and stacking conventions for the adjoint vary between references; we fix the ordering (v,ω)(v, \omega) and the coupling +ω×p+\,\omega \times p throughout, and specialize to the plane below.)

The dual map AdT\mathrm{Ad}_T^{\top} transports wrenches the other way, so motions and forces stay a matched pair. This single change-of-frame is the engine of Featherstone's articulated-body algorithm: velocities are pushed outward from base to tips and forces gathered back inward, each hop a Plucker transform BXA{}^{B}X_A that is precisely Ad\mathrm{Ad} between adjacent link frames.2 The 6×66\times6 transform introduced as spatial algebra is the adjoint.

A worked transport in SE(2)

Drop to the plane, where ω\omega is a scalar and J=[0110]J = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} is the 9090^\circ rotation that realizes the cross product, ω×p=ωJp\omega \times p = \omega\, J p. With the twist ordered (vx,vy,ω)(v_x, v_y, \omega) the adjoint collapses to

AdT=[RJp01]=[cosϕsinϕpysinϕcosϕpx001],AdTV=[Rv+ωJpω].\mathrm{Ad}_{T} = \begin{bmatrix} R & J p \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} \cos\phi & -\sin\phi & -p_y \\ \sin\phi & \cos\phi & p_x \\ 0 & 0 & 1 \end{bmatrix}, \qquad \mathrm{Ad}_T \mathcal{V} = \begin{bmatrix} R v + \omega\, J p \\ \omega \end{bmatrix}.

Take a body frame rotated by ϕ=90\phi = 90^\circ and offset to p=(1,0)p = (1, 0), carrying the body twist VB=(v,ω)\mathcal{V}_B = (v, \omega) with v=(1,0)v = (1, 0) and ω=1\omega = 1. The rotation sends R(90)=JR(90^\circ) = J, so the pieces are

Rv=[0110][10]=[01],ωJp=1[0110][10]=[01],R v = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \qquad \omega\, J p = 1 \cdot \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \end{bmatrix},

and the full matrix product reads

VA=[010101001][101]=[021]=((0,2), 1).\mathcal{V}_A = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 1 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} 1 \\ 0 \\ 1 \end{bmatrix} = \begin{bmatrix} 0 \\ 2 \\ 1 \end{bmatrix} = \left( (0, 2),\ 1 \right).

The linear part is not Rv=(0,1)R v = (0,1): the spin about an origin one unit away adds the coupling ω×p=(0,1)\omega \times p = (0,1), pushing vAv_A to (0,2)(0,2). Slide pp back to the origin and that second term vanishes; the adjoint becomes a pure rotation of the parts.

Transporting a twist with the SE(2) adjointinteractive
worldbody
V_B linear
(1.00, 0.00)
R v_B
(0.00, 1.00)
ω × p
(0.00, 1.00)
V_A linear
(0.00, 2.00)
ω (both)
1.00
Yellow is the body linear velocity rotated into world axes (R v_B); red is the ω × p coupling from the offset origin p; green is their sum, the world twist V_A. The shared arc is ω. Move p or ω and the coupling term grows; drive p to the origin and V_A reduces to R v_B. Defaults show the worked example, V_A = ((0, 2), 1).

Because AdT\mathrm{Ad}_T is linear and invertible, transporting a twist there and back is exact: AdT1=AdT1\mathrm{Ad}_{T}^{-1} = \mathrm{Ad}_{T^{-1}}. That is what lets a recursive solver shuttle spatial velocities and forces across dozens of joints without ever leaving the flat, well-behaved world of the Lie algebra.

Footnotes

  1. Sola, Deray, Atchuthan, A micro Lie theory for state estimation in robotics (2018).

  2. Featherstone, Rigid Body Dynamics Algorithms (2008).