22 minute read

The forward kinematics of an open-chain manipulator answers a single, concrete question: given the joint variables (revolute angles and prismatic displacements), what is the pose of the end-effector relative to the base? Although the question sounds elementary, the way one chooses to model joints, links, and reference frames profoundly affects the algebraic clarity, software implementation, and even the conceptual understanding of more advanced topics such as velocity kinematics, dynamics, and motion planning.

Two formulations dominate the literature. The classical Denavit-Hartenberg (DH) convention – developed in the mid-1950s and codified in nearly every robotics textbook from the 1980s onward (Spong, Craig) – represents each link transformation with a parsimonious set of four parameters built on top of a carefully assigned chain of coordinate frames. The modern Product of Exponentials (PoE) formula, due to Brockett (1984) and popularised by Lynch and Park’s Modern Robotics, takes an inherently geometric view: each joint is treated as a screw, and the forward kinematics is a product of matrix exponentials acting on a fixed home configuration.

This post develops both approaches in detail, works the same three-link planar manipulator through each, and concludes with a comparison of their relative merits.



Problem Statement: Forward Kinematics

Consider an open kinematic chain consisting of $n + 1$ links connected by $n$ one-degree-of-freedom joints. We label the links $0, 1, \ldots, n$, where link $0$ is the fixed base and link $n$ carries the end-effector (or “tool”). Joints are numbered $1, \ldots, n$ so that joint $i$ connects link $i - 1$ to link $i$. The motion of each joint is described by a single scalar joint variable $q_i$:

\[q_i = \begin{cases} \theta_i & \text{if joint } i \text{ is revolute}, \\ d_i & \text{if joint } i \text{ is prismatic}. \end{cases}\]

Let $\mathbf{q} = (q_1, \ldots, q_n)^\top$ denote the vector of joint variables, and let $T \in SE(3)$ denote the homogeneous transformation that expresses the pose of the end-effector frame with respect to the inertial base frame.

$\color{blue}{\mathbf{Definition.}}$ Forward Kinematics
The **forward kinematics** of an open chain is the map $$ T : \mathbb{R}^n \to SE(3), \qquad \mathbf{q} \;\mapsto\; T(\mathbf{q}) = \begin{bmatrix} R(\mathbf{q}) & \mathbf{p}(\mathbf{q}) \\ \mathbf{0}^\top & 1 \end{bmatrix}, $$ where $R(\mathbf{q}) \in SO(3)$ is the orientation of the end-effector frame in the base frame and $\mathbf{p}(\mathbf{q}) \in \mathbb{R}^3$ is the position of its origin.


The inverse problem – computing $\mathbf{q}$ from a desired $T$ – is inverse kinematics, and it will be treated in a separate post. The forward problem is always well-defined and (for serial chains) admits a closed-form expression; the principal task is to systematise its computation.


Links, Joints, and Frames

Before introducing either DH or PoE, we recall some standard modelling assumptions.

Single-DoF Joints

We restrict attention to one-degree-of-freedom joints, of which the most common are:

  • Revolute (R): allows pure rotation about a fixed axis. The joint variable is the angle $\theta_i$.
  • Prismatic (P): allows pure translation along a fixed axis. The joint variable is the displacement $d_i$.

This is no real loss of generality: a ball-and-socket joint (3 DoF) or a universal joint (2 DoF) can always be modelled as a succession of revolute joints connected by zero-length links. Both Spong and Craig adopt this simplification, and so do we.

A robot manipulator with $n$ such joints therefore has $n + 1$ links (numbered $0, 1, \ldots, n$, where link $0$ is the fixed base) and a configuration space of dimension $n$. The joint variables $(q_1, \ldots, q_n)$ furnish global coordinates on this $n$-dimensional configuration manifold. Joint $i$ is conventionally taken to be fixed with respect to link $i - 1$; equivalently, when joint $i$ is actuated, link $i$ (and everything distal to it) moves. Link $0$ never moves.

Each link is treated as a rigid body. We attach a body-fixed coordinate frame ${i}$ to link $i$. Once frames are fixed, the configuration of the entire chain is fully described by the sequence of homogeneous transformations $T_{i-1, i}$ relating frame ${i-1}$ to frame ${i}$. Composing these yields the end-effector pose:

\[T_{0,n}(\mathbf{q}) = T_{0,1}(q_1)\, T_{1,2}(q_2) \cdots T_{n-1,n}(q_n).\]

Without conventions for choosing the link frames, this formula is essentially trivial – the difficulty lies in choosing frames so that each $T_{i-1, i}$ is parameterised as economically as possible.

Recall from the chapter on rigid-body motions (and our previous post on homogeneous transformations) that the homogeneous transformation $T_{i-1, i} \in SE(3)$ is

\[T_{i-1, i} = \begin{bmatrix} R_{i-1, i} & \mathbf{o}_{i-1, i} \\ \mathbf{0}^\top & 1 \end{bmatrix},\]

so that the position of any point $\mathbf{p}i$ expressed in frame ${i}$ is mapped to frame ${i-1}$ via $\mathbf{p}{i-1} = R_{i-1, i}\,\mathbf{p}i + \mathbf{o}{i-1, i}$.


The Denavit-Hartenberg Convention

The DH convention exploits a geometric observation: any homogeneous transformation can be expressed as a product of four elementary screws – two rotations and two translations – provided the coordinate frames at either end satisfy two specific alignment constraints. The four scalar parameters $(\theta_i, d_i, a_i, \alpha_i)$ that result are called the DH parameters of link $i$.

This section follows the “distal” or standard form used by Spong; Craig (Chapter 3) employs the “proximal” variant, which differs only by relabelling. The end-result – the cumulative end-effector transform – is identical regardless of which variant one uses, provided one is consistent.

The Four Parameters

For two consecutive frames ${i-1}$ and ${i}$ assigned according to the rules below, the four DH parameters of link $i$ are:

$\color{blue}{\mathbf{Definition.}}$ DH Parameters (Standard / Distal Form)
- **Link length** $a_i$: the distance from $z_{i-1}$ to $z_i$ measured along $x_i$. - **Link twist** $\alpha_i$: the angle from $z_{i-1}$ to $z_i$ measured about $x_i$ (right-hand rule). - **Link offset** $d_i$: the distance from $o_{i-1}$ to the intersection of $x_i$ with $z_{i-1}$, measured along $z_{i-1}$. - **Joint angle** $\theta_i$: the angle from $x_{i-1}$ to $x_i$ measured about $z_{i-1}$. For a revolute joint $\theta_i$ is the joint variable and the remaining three are constants; for a prismatic joint $d_i$ is the variable and $\theta_i, a_i, \alpha_i$ are constants.


The geometric meaning of $a_i$ and $\alpha_i$ – the length and twist of the common normal between successive joint axes – captures the essential information about the link itself, while $d_i$ and $\theta_i$ describe how the next frame is offset and rotated relative to the previous one.

Once the four parameters are known, the homogeneous transformation between consecutive frames is

\[A_i = \mathrm{Rot}_{z, \theta_i}\,\mathrm{Trans}_{z, d_i}\,\mathrm{Trans}_{x, a_i}\,\mathrm{Rot}_{x, \alpha_i}.\]

Multiplying out the four elementary matrices yields the compact form

\[A_i(q_i) = \begin{bmatrix} c_{\theta_i} & -s_{\theta_i} c_{\alpha_i} & s_{\theta_i} s_{\alpha_i} & a_i c_{\theta_i} \\ s_{\theta_i} & c_{\theta_i} c_{\alpha_i} & -c_{\theta_i} s_{\alpha_i} & a_i s_{\theta_i} \\ 0 & s_{\alpha_i} & c_{\alpha_i} & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix},\]

where $c_\bullet = \cos\bullet$ and $s_\bullet = \sin\bullet$. We adopt the standard textbook notation $T_i^{i-1}$ for this transformation:

\[T_i^{i-1} \;\equiv\; A_i(q_i).\]

The forward kinematics of an $n$-joint serial chain is then

\[T_n^0(\mathbf{q}) \;=\; T_1^0(q_1)\, T_2^1(q_2) \cdots T_n^{n-1}(q_n) \;=\; \prod_{i=1}^{n} A_i(q_i).\]
$\color{green}{\mathbf{Property.}}$ Why Four Parameters Suffice
A general rigid-body transformation in $SE(3)$ has six independent parameters (three for rotation, three for translation). The DH convention reduces this to four by *constraining* the choice of frame so that two of the six degrees of freedom are absorbed into the alignment rules: - **(DH1)** $x_i$ is perpendicular to $z_{i-1}$. - **(DH2)** $x_i$ intersects $z_{i-1}$. Spong shows that under (DH1) and (DH2) the rotation matrix $R_i^{i-1}$ has $r_{31} = 0$ and the translation vector $o_i^{i-1}$ is a linear combination of $z_{i-1}$ and $x_i$, so exactly four scalars are needed.


Frame Assignment Procedure

The single most error-prone step in applying the DH convention is the assignment of link frames. The standard algorithm (Spong Section 3.2.2) proceeds as follows.

  1. Locate joint axes. For each joint $i$, identify the axis of rotation (revolute) or translation (prismatic) and label it $z_{i-1}$. Thus $z_0$ is the axis of joint 1, $z_1$ is the axis of joint 2, and so on.
  2. Establish the base frame. Choose any point on $z_0$ as the origin $o_0$, then pick $x_0$ and $y_0$ freely to form a right-handed frame.
  3. For $i = 1, \ldots, n-1$:
    1. If $z_i$ and $z_{i-1}$ are not coplanar, the unique common normal between them defines $x_i$, and $o_i$ is the foot of that normal on $z_i$.
    2. If $z_i$ and $z_{i-1}$ intersect, set $o_i$ at the intersection and choose $x_i$ normal to the plane of $z_{i-1}$ and $z_i$.
    3. If $z_i$ is parallel to $z_{i-1}$, choose $o_i$ on $z_i$ in any convenient location (often so that $d_i = 0$); pick $x_i$ along the common normal that passes through $o_{i-1}$.
  4. Choose $y_i$ by the right-hand rule.
  5. Establish the tool frame ${n}$ at the end-effector. By convention, $z_n$ is the approach direction $\mathbf{a}$, $y_n$ is the sliding direction $\mathbf{s}$, and $x_n = \mathbf{s} \times \mathbf{a}$ is the normal $\mathbf{n}$.
  6. Read off the DH table $(a_i, \alpha_i, d_i, \theta_i)$ for each link.

Following these steps will always produce a chain that satisfies (DH1) and (DH2) at every joint.


Worked Example: Planar 3R Manipulator via DH

We apply the DH algorithm to a planar three-revolute (3R) manipulator with link lengths $L_1, L_2, L_3$, the same arm that Modern Robotics uses as its motivating example (Figure 4.1). All joint axes are parallel and out of the page, so we expect every $\alpha_i = 0$ and every $d_i = 0$.

Frame Assignment

  • $z_0, z_1, z_2$ all point out of the page (joint rotation axes).
  • The base origin $o_0$ is at joint 1; $x_0$ points along the first link in the home configuration.
  • For each subsequent frame we place $o_i$ at joint $i+1$ and align $x_i$ with link $i$ in the home configuration.
  • The tool frame ${3}$ sits at the tip of link 3.

DH Table

Link $i$ $a_i$ $\alpha_i$ $d_i$ $\theta_i$
1 $L_1$ 0 0 $\theta_1^\star$
2 $L_2$ 0 0 $\theta_2^\star$
3 $L_3$ 0 0 $\theta_3^\star$

(The starred quantities are the joint variables.)

With $c_i \equiv \cos\theta_i$ and $s_i \equiv \sin\theta_i$, the three DH transformations are

\[T_1^0 = \begin{bmatrix} c_1 & -s_1 & 0 & L_1 c_1 \\ s_1 & c_1 & 0 & L_1 s_1 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \quad T_2^1 = \begin{bmatrix} c_2 & -s_2 & 0 & L_2 c_2 \\ s_2 & c_2 & 0 & L_2 s_2 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix},\] \[T_3^2 = \begin{bmatrix} c_3 & -s_3 & 0 & L_3 c_3 \\ s_3 & c_3 & 0 & L_3 s_3 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}.\]

Step-by-Step Chain Product

The cumulative transform from base to frame ${2}$ is

\[T_2^0 = T_1^0 T_2^1 = \begin{bmatrix} c_{12} & -s_{12} & 0 & L_1 c_1 + L_2 c_{12} \\ s_{12} & c_{12} & 0 & L_1 s_1 + L_2 s_{12} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix},\]

which already exposes the planar nature of the manipulator: orientations of all intermediate frames are pure $z$-axis rotations whose angles add, and positions are the obvious sum of in-plane link-length vectors.

End-Effector Pose

Adopting the abbreviations $c_{12} \equiv \cos(\theta_1 + \theta_2)$ and $c_{123} \equiv \cos(\theta_1 + \theta_2 + \theta_3)$ (similarly for sines), the chain product is

\[T_3^0 = T_1^0 T_2^1 T_3^2 = \begin{bmatrix} c_{123} & -s_{123} & 0 & L_1 c_1 + L_2 c_{12} + L_3 c_{123} \\ s_{123} & c_{123} & 0 & L_1 s_1 + L_2 s_{12} + L_3 s_{123} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}.\]

Reading off the position of the end-effector,

\[x = L_1 \cos\theta_1 + L_2 \cos(\theta_1 + \theta_2) + L_3 \cos(\theta_1 + \theta_2 + \theta_3),\] \[y = L_1 \sin\theta_1 + L_2 \sin(\theta_1 + \theta_2) + L_3 \sin(\theta_1 + \theta_2 + \theta_3),\] \[\phi = \theta_1 + \theta_2 + \theta_3,\]

which matches the elementary trigonometric derivation given by Lynch and Park (equations 4.1-4.3).


Drawbacks of the DH Convention

Despite its long-standing dominance in textbooks and pedagogy, the DH parameterisation has several practical drawbacks that have driven the community toward alternative formulations.

  1. Non-uniqueness of frames. Even when (DH1) and (DH2) are respected, the placement of $o_i$, the direction of $x_i$, and even the sign of $z_i$ may be ambiguous. Two engineers analysing the same arm can produce different DH tables that both happen to be correct. This is a constant source of confusion, especially when collaborating across teams.
  2. Two competing conventions. Spong’s “distal” form ($T_i^{i-1}$ from $\mathrm{Rot}z \mathrm{Trans}_z \mathrm{Trans}_x \mathrm{Rot}_x$) and Craig’s “proximal” form ($T{i+1}^i$ from $\mathrm{Rot}_x \mathrm{Trans}_x \mathrm{Rot}_z \mathrm{Trans}_z$) coexist in textbooks and software libraries. Mixing them silently is a notorious bug source.
  3. Singularities of the parameterisation. When successive joint axes are nearly parallel, the common normal between them is ill-conditioned: a small perturbation can produce a large change in the DH parameters, which complicates calibration.
  4. No direct geometric meaning of joint motion. Each $A_i$ packages rotation about $z_i$ together with the link geometry; the screw axis of joint $i$ as a geometric entity in space is not directly visible.
  5. Cost of attaching a frame to every link. The DH procedure forces a body-fixed frame on every link, even when the user is only interested in the end-effector. This is wasted effort for many modern applications such as direct kinematics from URDF, model-based RL, or differentiable simulation.
  6. Hidden coupling between link geometry and joint motion. In each $A_i$, the joint variable $\theta_i$ (or $d_i$) appears multiplied by trigonometric functions of $\alpha_i$ and offsets involving $a_i$. As a result, taking derivatives – needed for the Jacobian – mixes the structural and motion parts in a way that obscures the underlying geometry. The PoE formulation cleanly separates these: $\mathcal{S}_i$ is purely geometric, $\theta_i$ is purely the motion variable, and the matrix exponential combines them.

The Product of Exponentials formulation, to which we now turn, addresses each of these issues.


Product of Exponentials: Space Form

The PoE formulation rests on a single geometric insight: a one-DoF joint generates a screw motion of the rigid body it carries, and a screw motion in $SE(3)$ is the matrix exponential of a twist (an element of the Lie algebra $\mathfrak{se}(3)$).

Twists and Screw Axes

A unit twist or screw axis is a 6-vector $\mathcal{S} = (\boldsymbol{\omega}, \mathbf{v}) \in \mathbb{R}^6$ that admits the matrix form

\[[\mathcal{S}] = \begin{bmatrix} [\boldsymbol{\omega}] & \mathbf{v} \\ \mathbf{0}^\top & 0 \end{bmatrix} \in \mathfrak{se}(3),\]

where $[\boldsymbol{\omega}] \in \mathfrak{so}(3)$ is the $3 \times 3$ skew-symmetric form of $\boldsymbol{\omega}$. For a revolute joint of axis direction $\hat{\boldsymbol{\omega}}$ passing through a point $\mathbf{q}$ (in the fixed base frame),

\[\boldsymbol{\omega} = \hat{\boldsymbol{\omega}}, \qquad \mathbf{v} = -\hat{\boldsymbol{\omega}} \times \mathbf{q}.\]

For a prismatic joint of direction $\hat{\mathbf{v}}$,

\[\boldsymbol{\omega} = \mathbf{0}, \qquad \mathbf{v} = \hat{\mathbf{v}}.\]

The matrix exponential $e^{[\mathcal{S}] \theta} \in SE(3)$ rigidly displaces a body by an amount $\theta$ along the screw $\mathcal{S}$.

Derivation of the Space-Form PoE

Choose a fixed base frame ${s}$ and let $M \in SE(3)$ denote the home configuration of the end-effector frame ${b}$ relative to ${s}$ – that is, the value of the end-effector pose when all joint variables are zero. Let $\mathcal{S}_i$ be the screw axis of joint $i$, expressed in ${s}$ when the chain is in its home configuration.

Lynch and Park derive the formula by a chain of observations. First, if only joint $n$ moves,

\[T = e^{[\mathcal{S}_n] \theta_n} M.\]

If we now also let joint $n - 1$ move while keeping the rest fixed, the rigid sub-chain consisting of link $n - 1$ and link $n$ is displaced by a screw motion about $\mathcal{S}_{n-1}$:

\[T = e^{[\mathcal{S}_{n-1}] \theta_{n-1}}\, e^{[\mathcal{S}_n] \theta_n}\, M.\]

Continuing recursively for all $n$ joints yields the space form of the PoE.

$\color{red}{\mathbf{Theorem.}}$ Product of Exponentials Formula (Space Form)
For an $n$-joint open chain with screw axes $\mathcal{S}_1, \ldots, \mathcal{S}_n$ expressed in the fixed base frame at the home configuration $M \in SE(3)$, $$ T(\boldsymbol{\theta}) \;=\; e^{[\mathcal{S}_1] \theta_1}\, e^{[\mathcal{S}_2] \theta_2} \cdots e^{[\mathcal{S}_n] \theta_n}\, M. $$


To use the formula one needs only three ingredients:

  1. The home configuration $M$,
  2. The list of screw axes $\mathcal{S}_1, \ldots, \mathcal{S}_n$ in the fixed frame at the home configuration,
  3. The joint values $\boldsymbol{\theta} = (\theta_1, \ldots, \theta_n)$.

No intermediate link frames are required.


Product of Exponentials: Body Form

There is a dual formulation in which the screw axes are expressed in the end-effector (body) frame at the home configuration. The key tool is the adjoint map, which transforms twists between frames. For $T = \begin{bmatrix} R & \mathbf{p} \ \mathbf{0}^\top & 1 \end{bmatrix} \in SE(3)$,

\[\mathrm{Ad}_T = \begin{bmatrix} R & 0 \\ [\mathbf{p}] R & R \end{bmatrix} \in \mathbb{R}^{6 \times 6},\]

acting on a twist $\mathcal{V} = (\boldsymbol{\omega}, \mathbf{v}) \in \mathbb{R}^6$. The adjoint encodes how a screw axis seen in one frame appears in another. Using the matrix identity $e^{M^{-1} P M} = M^{-1} e^P M$ for any $P \in \mathfrak{se}(3)$ and any $M \in SE(3)$ (Lynch & Park, Proposition 3.10), one can push each $M$ to the left:

\[\begin{aligned} T(\boldsymbol{\theta}) &= e^{[\mathcal{S}_1] \theta_1} \cdots e^{[\mathcal{S}_n] \theta_n}\, M \\ &= M e^{M^{-1} [\mathcal{S}_1] M \theta_1} \cdots e^{M^{-1} [\mathcal{S}_n] M \theta_n} \\ &= M e^{[\mathcal{B}_1] \theta_1}\, e^{[\mathcal{B}_2] \theta_2} \cdots e^{[\mathcal{B}_n] \theta_n}, \end{aligned}\]

where each body-frame screw axis $\mathcal{B}_i$ is related to its space-frame counterpart by the adjoint map

\[\mathcal{B}_i \;=\; \mathrm{Ad}_{M^{-1}}\, \mathcal{S}_i, \qquad i = 1, \ldots, n.\]
$\color{red}{\mathbf{Theorem.}}$ Product of Exponentials Formula (Body Form)
For the same open chain with body-frame screw axes $\mathcal{B}_i = \mathrm{Ad}_{M^{-1}} \mathcal{S}_i$, $$ T(\boldsymbol{\theta}) \;=\; M\, e^{[\mathcal{B}_1] \theta_1}\, e^{[\mathcal{B}_2] \theta_2} \cdots e^{[\mathcal{B}_n] \theta_n}. $$


The interpretation differs: in the space form, $M$ is transformed first by the most distal joint and progressively moved inward; in the body form, $M$ is transformed first by the most proximal joint and progressively moved outward. The two are algebraically equivalent.


Worked Example: Planar 3R Manipulator via PoE

We now redo the same 3R manipulator using the PoE formula, replicating Example 4.2 in Lynch & Park.

Home Configuration

When $\theta_1 = \theta_2 = \theta_3 = 0$, all three links lie along the $\hat{x}_s$-axis of the base frame, so

\[M = \begin{bmatrix} 1 & 0 & 0 & L_1 + L_2 + L_3 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}.\]

Screw Axes in the Fixed Frame

Every joint rotates about a vertical axis ($\hat{\boldsymbol{\omega}}_i = (0, 0, 1)$), passing through a known point on the $x$-axis. Using $\mathbf{v}_i = -\hat{\boldsymbol{\omega}}_i \times \mathbf{q}_i$,

$i$ $\boldsymbol{\omega}_i$ $\mathbf{v}_i$
1 $(0, 0, 1)$ $(0, 0, 0)$
2 $(0, 0, 1)$ $(0, -L_1, 0)$
3 $(0, 0, 1)$ $(0, -(L_1 + L_2), 0)$

Forward Kinematics

For a screw axis $\mathcal{S}_i = (\hat{\mathbf{z}}, \mathbf{v}_i)$ representing planar rotation about a vertical line through $\mathbf{q}_i$, the matrix exponential evaluates (using Rodrigues’ formula) to

\[e^{[\mathcal{S}_i] \theta_i} = \begin{bmatrix} c_i & -s_i & 0 & \mathbf{q}_{i,x}(1-c_i) + \mathbf{q}_{i,y} s_i \\ s_i & c_i & 0 & \mathbf{q}_{i,y}(1-c_i) - \mathbf{q}_{i,x} s_i \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix},\]

which is just a planar rigid-body transform that rotates by $\theta_i$ about the point $\mathbf{q}_i$. Substituting into

\[T(\boldsymbol{\theta}) = e^{[\mathcal{S}_1]\theta_1}\, e^{[\mathcal{S}_2]\theta_2}\, e^{[\mathcal{S}_3]\theta_3}\, M\]

with $\mathbf{q}_1 = (0,0)$, $\mathbf{q}_2 = (L_1, 0)$, $\mathbf{q}_3 = (L_1 + L_2, 0)$, and carrying out the multiplication yields exactly the same end-effector pose as the DH derivation:

\[T(\boldsymbol{\theta}) = \begin{bmatrix} c_{123} & -s_{123} & 0 & L_1 c_1 + L_2 c_{12} + L_3 c_{123} \\ s_{123} & c_{123} & 0 & L_1 s_1 + L_2 s_{12} + L_3 s_{123} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}.\]

The intermediate steps look different – one does not see “link transformations” $A_i$ but rather screw exponentials – yet the final result is identical, as it must be. The PoE derivation requires only the home configuration and the screw axes, both of which can be read directly off a CAD drawing without assigning frames to intermediate links.

A Second PoE Example: 3R Spatial Open Chain

To highlight the geometric flavour of PoE in the more general 3D setting, consider the 3R spatial open chain in Example 4.1 of Lynch & Park: joint 1 is a rotation about the world $\hat{z}_s$-axis, joints 2 and 3 rotate about horizontal axes, and the home configuration places the end-effector at $(L_1, 0, -L_2)$. The home configuration is

\[M = \begin{bmatrix} 0 & 0 & 1 & L_1 \\ 0 & 1 & 0 & 0 \\ -1 & 0 & 0 & -L_2 \\ 0 & 0 & 0 & 1 \end{bmatrix},\]

and the three screw axes (in the fixed frame at the home configuration) are

$i$ $\boldsymbol{\omega}_i$ $\mathbf{v}_i$
1 $(0, 0, 1)$ $(0, 0, 0)$
2 $(0, -1, 0)$ $(0, 0, -L_1)$
3 $(1, 0, 0)$ $(0, -L_2, 0)$

The forward kinematics is $T(\boldsymbol{\theta}) = e^{[\mathcal{S}_1]\theta_1}\, e^{[\mathcal{S}_2]\theta_2}\, e^{[\mathcal{S}_3]\theta_3}\, M$. By contrast, an equivalent DH analysis would require labelling four coordinate frames, choosing twist angles for each link, and producing a 3-row DH table whose physical meaning is far less transparent than reading “joint 1 rotates about $\hat{z}_s$ through the origin” directly off Figure 4.3 of Modern Robotics.


Advantages of the PoE Formulation

  1. No intermediate link frames. Only the base frame ${s}$ and the end-effector frame ${b}$ are required. This makes PoE substantially less error-prone than DH for hand calculations and substantially easier to automate from a URDF or CAD model.
  2. Direct geometric meaning. Each $\mathcal{S}_i$ is the screw axis of joint $i$, an intrinsic geometric object. The user sees the joint axes directly rather than as artefacts of a four-parameter encoding.
  3. Uniform treatment of revolute and prismatic joints. Both joint types are screws (of zero pitch and of infinite pitch respectively); there is no need to switch between $A_i$ formulas based on joint type.
  4. Tight integration with velocity kinematics. Differentiating the PoE formula with respect to $\boldsymbol{\theta}$ leads directly to the space Jacobian $J_s(\boldsymbol{\theta})$, whose columns are simply the screw axes after they have been transformed by the leading product. The same is true for the body Jacobian $J_b(\boldsymbol{\theta})$ from the body form. The DH formulation, in contrast, requires substantial extra bookkeeping to extract the Jacobian.
  5. Suits modern software. Libraries such as ROS, Drake, Pinocchio, and the Modern Robotics Python toolbox all internally use a representation closer to PoE than to DH, because the screw representation matches the data layout in URDF (each joint has an axis and an origin in its parent frame).
  6. Well-defined under all geometries. PoE has no special cases for parallel or intersecting joint axes; the formula is uniform.

A common counter-argument is that PoE uses $6n$ scalars (for the $n$ screw axes) plus the $6$ scalars in $M$, whereas DH uses only $3n + n = 4n$ scalars (three structural parameters per link plus one joint variable). Both are correct: DH is minimal while PoE is redundant but geometric. For modern computational work the redundancy is rarely a concern; for highly constrained hand-derivation of inverse kinematics the parsimony of DH retains some pedagogical value.


Connection to URDF and Modern Robot Software

In modern robotics middleware – most prominently ROS and tools like Drake or Pinocchio – robots are described in URDF (Unified Robot Description Format) files. A URDF describes the robot as a tree of links connected by joints; each joint specifies its parent and child link, its type (revolute, prismatic, fixed, continuous), its axis as a unit vector in the child’s frame, and an origin (an RPY orientation plus an XYZ translation) that fixes the child link’s frame relative to the parent’s frame when the joint variable is zero.

This data structure is directly aligned with the PoE formulation:

  • The product of all “origin” transforms along the chain, with each joint variable set to zero, gives the home configuration $M$.
  • Each joint’s “axis” (in the world frame at the home configuration, computed by forward-walking the chain) furnishes the unit angular component $\hat{\boldsymbol{\omega}}_i$ of the screw axis $\mathcal{S}_i$; combined with the joint origin location $\mathbf{q}_i$, one obtains $\mathbf{v}_i = -\hat{\boldsymbol{\omega}}_i \times \mathbf{q}_i$.

Lynch & Park give an explicit walk-through of this conversion for the UR5 6R robot arm in Section 4.2; the same conversion is what software libraries such as pinocchio or modern_robotics perform internally. The DH parameters, by contrast, are not directly encoded in URDF and must be reverse-engineered if one insists on using them.

This alignment with software is, in the present author’s view, the single most decisive reason why PoE has supplanted DH as the dominant formulation in research code over the past decade.


Summary and Comparison

The following table contrasts the two conventions side by side.

Aspect DH (Spong / Craig) PoE (Lynch & Park)
Origin Denavit & Hartenberg, 1955 Brockett, 1984
Parameters per joint 4 ($a_i, \alpha_i, d_i, \theta_i$) 6 (screw axis $\mathcal{S}_i$)
Number of frames $n + 1$ (or more, with a tool frame) 2 (base ${s}$ and body ${b}$)
Per-joint transform $A_i = \mathrm{Rot}_z\mathrm{Trans}_z\mathrm{Trans}_x\mathrm{Rot}_x$ $e^{[\mathcal{S}_i]\theta_i}$ (matrix exponential)
End-effector pose $T_n^0 = A_1 A_2 \cdots A_n$ $T = e^{[\mathcal{S}_1]\theta_1} \cdots e^{[\mathcal{S}_n]\theta_n} M$
Joint-type handling Different parameter is “variable” for R vs P Uniform; $\boldsymbol{\omega} = 0$ for prismatic
Geometric transparency Indirect (encoded in link/joint parameters) Direct (screw axis is the joint axis)
Parallel-axis singularity Yes, the common normal is ill-defined No, formula is uniform
Velocity kinematics Requires extra derivation Jacobian columns are transformed screws
Software fit Older toolboxes (Robotics Toolbox for MATLAB) URDF, ROS, Drake, Pinocchio, modernrobotics.org

Concretely, for the same planar 3R arm both methods produce

\[\mathbf{p}(\boldsymbol{\theta}) = \begin{bmatrix} L_1 c_1 + L_2 c_{12} + L_3 c_{123} \\ L_1 s_1 + L_2 s_{12} + L_3 s_{123} \\ 0 \end{bmatrix},\]

confirming that the two formulations are equivalent in their output. The choice between them is a matter of derivation style, software ecosystem, and downstream use:

  • For closed-form inverse kinematics of 6-DoF arms with a spherical wrist, the DH formulation – and the kinematic decoupling it exposes – remains the textbook approach (Spong Chapter 4, Craig Chapter 4).
  • For velocity kinematics, dynamics, control, and any computational pipeline in which the chain is described by URDF, the PoE formulation is more natural and is the modern default.

A mature robotics engineer is comfortable with both. The remainder of this series will use PoE as the primary tool but will refer back to DH where it sharpens the geometric picture.

It is also worth emphasising what both formulations have in common. Whichever framework one adopts, the forward-kinematics map $T(\mathbf{q})$ is a smooth function of the joint variables: it is a polynomial in $\cos\theta_i$ and $\sin\theta_i$ (for revolute joints) and a polynomial in $d_i$ (for prismatic joints), composed in a strictly serial manner. This smoothness underlies the differentiation that gives rise to the manipulator Jacobian (next post), and underpins gradient-based motion planning and trajectory optimisation. The choice of parameterisation affects the shape of the analytical expressions, but not the fact that they exist or that they are well-conditioned away from kinematic singularities.


Reference

[1] M. W. Spong, S. Hutchinson, and M. Vidyasagar. Robot Dynamics and Control, 2nd edition, 2004. Chapter 3, “Forward Kinematics: The Denavit-Hartenberg Convention.”
[2] K. M. Lynch and F. C. Park. Modern Robotics: Mechanics, Planning, and Control. Cambridge University Press, 2017. Chapter 4, “Forward Kinematics,” and Appendix C, “Denavit-Hartenberg Parameters.”
[3] J. J. Craig. Introduction to Robotics: Mechanics and Control, 3rd edition. Pearson, 2005. Chapter 3, “Manipulator Kinematics.”
[4] J. Denavit and R. S. Hartenberg. “A kinematic notation for lower-pair mechanisms based on matrices.” ASME Journal of Applied Mechanics, 22:215-221, 1955.
[5] R. W. Brockett. “Robotic manipulators and the product of exponentials formula.” In Mathematical Theory of Networks and Systems, pp. 120-129, Springer, 1984.

Leave a comment