ENG-654 · Session 1 · Lecture 2

Exponentials, PoE & URDF

How does one geometric motion become a robot model that mathematics and simulation can share?

We will move from instantaneous motion, to finite rigid motion, to Product of Exponentials—and then read the same kinematic ideas directly from URDF.

The narrative

Three languages answer three different questions

The lecture follows one custom_3R robot through geometry, kinematics, and simulation.

1Screw motion

What instantaneous motion can one joint generate?

2PoE

How do joint motions compose into forward kinematics?

3URDF

How is the robot communicated to software?

Central idea: the exponential map is the bridge from velocity geometry to finite transformations.

Act I · Notation before use

A motion has a frame, a point, and a rate

These symbols will be used throughout the lecture; each has one job.

Frames and configuration

\(W\): fixed world frame.

\(B\): moving body frame.

\(q_i\): coordinate of joint \(i\).

\(\theta\): rotation travelled about an axis.

Velocity quantities

\(\boldsymbol\omega\in\mathbb R^3\): angular-velocity axis and rate.

\(\mathbf v\in\mathbb R^3\): linear component of a rigid-body twist.

\(\boldsymbol\xi=(\boldsymbol\omega,\mathbf v)\in\mathbb R^6\): twist coordinates.

Operators

\([\boldsymbol\omega]_\times\): skew matrix satisfying \([\boldsymbol\omega]_\times\mathbf p=\boldsymbol\omega\times\mathbf p\).

\(\widehat{\boldsymbol\xi}\in\mathfrak{se}(3)\): matrix form of a twist.

\(\exp(\cdot)\): matrix exponential.

Finite pose

\(R\in SO(3)\): orientation.

\(\mathbf t\in\mathbb R^3\): translation.

\(T\in SE(3)\): homogeneous transformation.

\(M\): home pose when all \(q_i=0\).

Act I · A 2D warm-up

Constant angular velocity naturally produces an exponential

Before using a \(3\times3\) or \(4\times4\) matrix exponential, follow one point and one frame rotating in the plane.

Define the \(90^\circ\) rotation generator

\[J=\begin{bmatrix}0&-1\\1&0\end{bmatrix},\qquad J\mathbf p=\hat z\times\mathbf p.\]

Instantaneous motion: \(\dot{\mathbf p}(t)=\omega J\mathbf p(t)\).

Accumulate small rotations: \(\mathbf p(t+\Delta t)\approx(I+\omega J\Delta t)\mathbf p(t)\).

Take the continuous limit:

\[\mathbf p(t)=e^{\omega Jt}\mathbf p(0)=e^{J\theta}\mathbf p(0),\qquad\theta=\omega t.\]

Takeaway: the exponential is not arbitrary notation—it is what repeated infinitesimal rotations converge to.

Act I · From rate to motion

The exponential answers a time-evolution question

If a matrix generator \(A\) produces the instantaneous change of a state, its exponential produces the finite change.

Begin with a constant linear differential equation.

\[\dot X(t)=A X(t),\qquad X(0)=I\]

The generator \(A\) tells us the tangent direction at each instant.

The unique finite evolution is

\[X(t)=e^{At}=I+At+\frac{(At)^2}{2!}+\cdots\]

For rigid motion, the generator lies in \(\mathfrak{se}(3)\), while the result lies in \(SE(3)\).

Takeaway: exponentiation converts an instantaneous motion rule into a finite motion.

Act I · Angular velocity

Angular velocity describes how orientation changes

Its direction is the instantaneous rotation axis; its magnitude is the angular speed.

For a point \(\mathbf p\) attached to a body rotating about an axis through the origin,

\[\dot{\mathbf p}=\boldsymbol\omega\times\mathbf p=[\boldsymbol\omega]_\times\mathbf p\]
Right-hand rule: curled fingers give positive rotation; the thumb gives \(\boldsymbol\omega\).
The cross product becomes a linear operator
\[[\boldsymbol\omega]_\times=\begin{bmatrix}0&-\omega_z&\omega_y\\\omega_z&0&-\omega_x\\-\omega_y&\omega_x&0\end{bmatrix}\]

Because the matrix is skew-symmetric, \([\boldsymbol\omega]_\times^T=-[\boldsymbol\omega]_\times\).

Act I · Linear velocity

A screw couples rotation and translation

Every instantaneous rigid-body motion is a rotation about an axis combined with translation along that axis.

Let the axis pass through point \(\mathbf r\), with unit direction \(\boldsymbol\omega\), and pitch \(h\).

\[\mathbf v=-\boldsymbol\omega\times\mathbf r+h\boldsymbol\omega\]

The first term locates the axis; the second adds translation along it.

Revolute

\(\|\boldsymbol\omega\|=1,\ h=0\)

Helical

\(\|\boldsymbol\omega\|=1,\ h\neq0\)

Prismatic

\(\boldsymbol\omega=\mathbf0,\ \|\mathbf v\|=1\)

Here \(\mathbf v\) is not generally the velocity of the body-frame origin; it is the linear part of the twist representation.

Act I · Twist coordinates

The hat operator turns six numbers into a generator

The matrix form is chosen so it acts on homogeneous points and exponentiates into a homogeneous transformation.

\[\boldsymbol\xi=\begin{bmatrix}\boldsymbol\omega\\\mathbf v\end{bmatrix}\in\mathbb R^6\]

A six-vector is convenient for storage and Jacobians.

\[\widehat{\boldsymbol\xi}=\begin{bmatrix}[\boldsymbol\omega]_\times&\mathbf v\\\mathbf0^T&0\end{bmatrix}\in\mathfrak{se}(3)\]

The hat matrix is convenient for applying the exponential map.

\[T(\theta)=e^{\widehat{\boldsymbol\xi}\theta}\in SE(3)\]

Act II · Interactive screw motion

One twist generates a family of poses

Change angle and pitch. Watch rotation around the axis and translation along it remain coupled.

Try it: set pitch to zero, then increase it. What part of the transformation changes?

Act II · Rodrigues derivation 1/3

The skew generator has only three independent powers

Let \(K=[\boldsymbol\omega]_\times\), where \(\|\boldsymbol\omega\|=1\). We first simplify powers of \(K\) before expanding the exponential.

Apply \(K^2\) to any vector \(\mathbf p\).

\[ K^2\mathbf p =\boldsymbol\omega\times(\boldsymbol\omega\times\mathbf p) =\boldsymbol\omega(\boldsymbol\omega^T\mathbf p)-\mathbf p \]

The vector triple-product identity gives

\[K^2=\boldsymbol\omega\boldsymbol\omega^T-I.\]

Multiply once more by \(K\).

\[ K^3=K(\boldsymbol\omega\boldsymbol\omega^T-I) =(K\boldsymbol\omega)\boldsymbol\omega^T-K. \]

Because \(K\boldsymbol\omega=\boldsymbol\omega\times\boldsymbol\omega=\mathbf0\),

\[\boxed{K^3=-K},\qquad \boxed{K^4=-K^2}.\]

Consequence: every higher power reduces to either \(K\) or \(K^2\).

Act II · Rodrigues derivation 2/3

Regroup the exponential into odd and even powers

Substitute \(K^3=-K\) and \(K^4=-K^2\) into the Taylor series.

\[ \begin{aligned} e^{K\theta} &=I+K\theta+\frac{K^2\theta^2}{2!} +\frac{K^3\theta^3}{3!} +\frac{K^4\theta^4}{4!}+\cdots\\[2mm] &=I+ K\left(\theta-\frac{\theta^3}{3!}+\frac{\theta^5}{5!}-\cdots\right) +K^2\left(\frac{\theta^2}{2!}-\frac{\theta^4}{4!} +\frac{\theta^6}{6!}-\cdots\right). \end{aligned} \]
Odd coefficient
\[\theta-\frac{\theta^3}{3!}+\frac{\theta^5}{5!}-\cdots=\sin\theta\]
Even coefficient
\[\frac{\theta^2}{2!}-\frac{\theta^4}{4!}+\frac{\theta^6}{6!}-\cdots=1-\cos\theta\]

Act II · Rodrigues derivation 3/3

Rodrigues’ formula is the closed-form exponential

Insert the sine and cosine series, then interpret how the three terms act on a vector.

\[ \boxed{ R(\theta)=e^{[\boldsymbol\omega]_\times\theta} =I+\sin\theta[\boldsymbol\omega]_\times +(1-\cos\theta)[\boldsymbol\omega]_\times^2 } \]
\(I\mathbf p\)

starts from the original vector

\(\sin\theta\,(\boldsymbol\omega\times\mathbf p)\)

moves in the tangential direction

\((1-\cos\theta)\boldsymbol\omega\times(\boldsymbol\omega\times\mathbf p)\)

supplies the radial correction

Check: at \(\theta=0\), \(R=I\); differentiating at zero gives \(\left.\frac{dR}{d\theta}\right|_0=[\boldsymbol\omega]_\times\).

Act II · From rotation to rigid transformation

The same exponential generates the full pose

Rodrigues provides the rotational block; integrating the twist’s linear component provides the translation.

\[ e^{\widehat{\boldsymbol\xi}\theta} = \begin{bmatrix} R(\theta)&G(\theta)\mathbf v\\ \mathbf0^T&1 \end{bmatrix} \]
\[ G(\theta)=I\theta+(1-\cos\theta)K+(\theta-\sin\theta)K^2. \]

Using \(K=[\boldsymbol\omega]_\times\), the same translation can be written as

\[ G(\theta)\mathbf v =(I-R)(\boldsymbol\omega\times\mathbf v) +\boldsymbol\omega\boldsymbol\omega^T\mathbf v\,\theta. \]
Pure translation: if \(\boldsymbol\omega=\mathbf0\), then \(R=I\) and \(\mathbf t=\mathbf v\theta\).

Act II · The adjoint map

One physical motion, different twist coordinates

The adjoint is the \(6\times6\) coordinate-change matrix induced by a rigid transformation. It rotates both components and accounts for the shift of origin.

Notation

\({}^{A}\boldsymbol\xi=[{}^{A}\boldsymbol\omega;\,{}^{A}\mathbf v]\): twist coordinates expressed in \(A\).

\({}^{A}T_B=(R,\mathbf t)\): pose of \(B\) expressed in \(A\).

\(\operatorname{Ad}_T\): adjoint representation of \(T\).

\[ \operatorname{Ad}_{T} = \begin{bmatrix} R&0\\ [\mathbf t]_\times R&R \end{bmatrix}, \qquad {}^{A}\boldsymbol\xi = \operatorname{Ad}_{{}^{A}T_B}\,{}^{B}\boldsymbol\xi. \]

Why the lower-left block? Moving the coordinate origin changes linear velocity by \(\mathbf t\times\boldsymbol\omega\), even though the rigid-body motion is unchanged.

Change screw coordinates

Express a joint axis from its local URDF frame in world or tool coordinates.

Relate Jacobians

Convert between space and body Jacobians: \(J_s=\operatorname{Ad}_{T}J_b\).

Transform velocities

Move spatial or body twists between sensor, base, and end-effector frames.

Move forces dually

Wrenches use the inverse transpose: \(\mathcal F_A=\operatorname{Ad}_{T}^{-T}\mathcal F_B\).

Act II · Interactive frame transformation

Move the observer, not the screw

The red screw is fixed in world geometry. Move frame \(B\) and observe how the same screw’s coordinates change.

Takeaway: the adjoint gives portability between motion coordinates and frame transformations.

Act III · Notation before PoE

PoE stores one screw per joint and one home pose

We use the space form: every screw axis is expressed in the fixed world frame at the home configuration.

\(\boldsymbol\xi_i\)

Space screw of joint \(i\), expressed in \(W\), evaluated at \(q=\mathbf0\).

\(q_i\)

Joint displacement: radians for revolute, metres for prismatic.

\(M\)

End-effector pose \({}^{W}T_E\) at \(q=\mathbf0\).

\(T(q)\)

End-effector pose after applying all joint motions.

\[T(q)=e^{\widehat{\boldsymbol\xi}_1q_1}e^{\widehat{\boldsymbol\xi}_2q_2}\cdots e^{\widehat{\boldsymbol\xi}_nq_n}M\]

Act III · Build custom_3R

Read each screw directly from the home geometry

For a revolute joint through \(\mathbf r_i\) with unit axis \(\boldsymbol\omega_i\), use \(\mathbf v_i=-\boldsymbol\omega_i\times\mathbf r_i\).

Joint\(\boldsymbol\omega_i\)Point \(\mathbf r_i\) on axis\(\mathbf v_i\)
1\([0,0,1]^T\)\([0,0,0.5]^T\)\([0,0,0]^T\)
2\([0,1,0]^T\)\([1,0,1]^T\)\([-1,0,1]^T\)
3\([0,0,1]^T\)\([3,1.25,1]^T\)\([1.25,-3,0]^T\)
\[M=\begin{bmatrix}I&[4.5,\ 1.25,\ 1.25]^T\\0&1\end{bmatrix}\]

Act III · custom_3R forward kinematics

Compose the three joint exponentials

Move the joint coordinates and inspect each factor, the end-effector path, and the resulting \(T(q)\).

Act IV · From equation to model file

PoE computes motion; URDF describes the mechanism

A simulator needs names, topology, geometry, limits, mass properties, and interfaces—not only forward kinematics.

\[T(q)=\prod_{i=1}^{n}e^{\widehat{\boldsymbol\xi}_iq_i}M\]

Compact and geometric, but it does not say which STL belongs to which link or how much a link weighs.

<robot name="custom_3r">
  <link name="base_link"/>
  <joint name="joint_1" type="revolute">
    ...
  </joint>
</robot>

URDF is a machine-readable kinematic tree with physical metadata.

Act IV · URDF anatomy

A URDF robot is a rooted graph of links and joints

Declare the structure before reading individual XML tags.

base_link
joint_1
link_1
joint_2
link_2
joint_3
link_3
fixed
tool0
Link

A rigid body and its visual, collision, and inertial descriptions.

Joint

The allowed relative motion from one parent link to one child link.

Origin

The joint or property frame relative to its parent, using xyz and rpy.

Act IV · Link contents

One link carries three different models

Rendering, contact, and dynamics have different requirements, so URDF keeps them separate.

<visual>Appearance

Geometry, mesh scale, local origin, color, or named material.

<mesh filename="...stl"/>
<material name="teal"/>
<collision>Contact geometry

Often simplified boxes, cylinders, spheres, or low-resolution meshes.

<box size="1 .2 .2"/>
<inertial>Dynamics

Mass, centre of mass, and the symmetric inertia tensor in the inertial frame.

<mass value="2.4"/>
<inertia ixx="..." .../>

Act IV · Joint contents

A joint defines topology, motion, and admissible range

Each child has one parent; the joint origin is the child joint frame at zero displacement.

<joint name="joint_2" type="revolute">
  <parent link="link_1"/>
  <child link="link_2"/>
  <origin xyz="1 0 .5" rpy="0 0 0"/>
  <axis xyz="0 1 0"/>
  <limit lower="-3.14" upper="3.14"
         effort="100" velocity="2"/>
</joint>
Types

fixed, revolute, continuous, prismatic, floating, planar

Dynamics

damping and friction describe simple joint losses.

Mimic

Relates one scalar joint coordinate to another.

Safety/calibration

Optional controller-oriented metadata.

Act IV · Actuation and validation

Transmission is related to URDF, but not kinematics

A transmission maps actuator effort and motion to a joint interface; simulators and control frameworks interpret it.

<transmission name="joint_2_drive">
  <type>transmission_interface/
        SimpleTransmission</type>
  <joint name="joint_2">...</joint>
  <actuator name="motor_2">
    <mechanicalReduction>80</mechanicalReduction>
  </actuator>
</transmission>
  • Kinematics: links, joints, origins, axes.
  • Dynamics: mass, inertia, friction, damping.
  • Actuation: transmissions and simulator/control extensions.
  • Validation: collision geometry and joint limits.

Act IV · Bidirectional URDF laboratory

Edit the model—or drag its frames

Upload any rooted URDF tree or edit the XML directly: every declared link and joint origin is rebuilt as a synchronized frame graph.

Try it: add a link and its parent joint, edit an xyz value, or drag any non-root frame. The source and rendering update immediately.

Act V · URDF to DH

PUMA 560 reveals why conversion is not mechanical

URDF joint frames may be placed for CAD convenience; DH frames must satisfy geometric rules between consecutive axes.

URDF gives

  • A parent-to-child joint origin \(T_{\mathrm{origin},i}\)
  • A joint axis expressed in the joint frame
  • Mesh frames unrelated to DH placement

DH requires

  • \(z_{i-1}\) coincident with joint axis \(i\)
  • \(x_i\) along a common normal
  • Special choices for intersecting or parallel axes
1 propagate axes to one frame2 find common normals3 choose signs and offsets4 verify FK numerically

For the PUMA wrist, three axes intersect: the DH model is compact, but several valid frame choices can describe the same geometry.

Act V · URDF to PoE

PoE extraction follows the geometry directly

No common-normal construction is required: place every joint axis in a shared reference frame at the home pose.

1 · Traverse URDF

Compute each joint-frame pose \({}^{W}T_{J_i}\) at \(q=0\).

2 · Transform axis

\(\boldsymbol\omega_i={}^{W}R_{J_i}\mathbf a_i\), where \(\mathbf a_i\) is the URDF axis.

3 · Form screw

\(\mathbf r_i={}^{W}\mathbf t_{J_i}\), \(\mathbf v_i=-\boldsymbol\omega_i\times\mathbf r_i\).

4 · Store home pose

\(M={}^{W}T_E(0)\).

\[\boxed{\text{URDF origins + axes}\quad\Longrightarrow\quad\{\boldsymbol\xi_i\}_{i=1}^{n},\ M}\]

Act V · Honest limitations

URDF is a tree language, not a universal mechanism language

URDF handles branched rooted trees well, but one child cannot have two parents—so closed kinematic loops cannot be represented directly.

Well represented

Serial robots, branched trees, mobile manipulators, sensors, rigid attachments, standard one-DOF joints.

Needs curated modelling

Parallel mechanisms and closed loops; rolling contact; antiparallelogram couplings; cable or tendon constraints; nonstandard multi-body joint laws.

Approximation strategies include mimic joints, equivalent trees plus external constraints, simulator-specific plugins, or a richer multibody description format.

Synthesis · Choose the representation for the question

Minimal, geometric, and executable are complementary

No single representation dominates every stage of robot design and validation.

DH

Minimal kinematic structure

Four scalars per link expose design conditions and enable synthesis.

\(a_1=0\) immediately means an axis intersection; inequalities such as \(a_1>\sqrt{d_2^2+a_2^2}\) can expose workspace or topology boundaries.

PoE

Geometric motion structure

Screw axes are coordinate-portable through the adjoint and connect naturally to velocities and the Jacobian.

\(T(q)=\prod_i e^{\widehat\xi_iq_i}M\)

URDF

Unified simulation language

Geometry, topology, limits, collision, and inertia support kinematic/dynamic validation and digital twins.

model + geometry + physics metadata

Conclusion

One robot, three useful abstractions

1
Exponentials integrate twists.

They turn angular and linear velocity geometry into finite homogeneous transformations.

2
PoE composes joint motions.

It provides a direct geometric forward-kinematics model and prepares us for Jacobians.

3
URDF communicates the physical model.

It makes the kinematic tree, geometry, limits, and dynamic metadata available to software.

4
Representation choice is an engineering decision.

Use DH for compact synthesis, PoE for motion geometry, and URDF for simulation and validation.