---
kind: concept
slug: product-of-exponentials
title: Product of exponentials
summary: >-
  Product of exponentials (PoE) writes a body's pose on a serial or tree chain as matrix exponentials of joint screws times a reference pose. Covers the path product with fixed screws, a body-frame form with reference transforms, and the loop-aware use for parallel robots, where each closed loop is cut to a tree. Both sources are author-reported and use a single robot example each.
tags: [kinematics, screw-theory, serial-chain, parallel-manipulators]
papers: ["2412.13638", "2412.13681"]
related: [multibody-dynamics, inverse-kinematics, constraint-embedding]
status: draft
updated_at: 2026-10-25
---

## Overview

A body's pose in a chain of joints can be written as a product of matrix
exponentials, one per joint on the path from the body to ground, multiplied
by a fixed reference pose. Each factor is built from one joint's screw and
its current value [arxiv:2412.13638 §3.1]. Body twists follow from the same
path: the joint screws on the path are stacked into a matrix, and the body
twist is that matrix times the joint rates [arxiv:2412.13681 §3.2].

Both sources apply this to a tree, not a single chain. A closed loop is
broken by removing one joint, and the loop's constraints are kept aside and
solved separately, so the tree stays a PoE chain [arxiv:2412.13638 §3.3,
§3.4] [arxiv:2412.13681 §3.3]. This is how the form is used for parallel
robots whose limbs contain loops.

## Variants

### Path product with fixed screws

Each body's pose is the product of exponentials of the joints on its path,
with the screws taken at zero configuration and a fixed reference matrix for
the body. The factors are ordered from the joint nearest ground outward
[arxiv:2412.13681 §3.2]. The same paper uses this form for every limb of a
Delta-type robot [arxiv:2412.13681 §9.1]. Card:
[Modular screw-theory model for complex-limb robots](/papers/2412.13681).

### Body-frame form with reference transforms

The paper writes the same pose with a reference transform between each pair
of consecutive joints, instead of one reference per body. It states that this
is equivalent to the path product [arxiv:2412.13638 §3.1, eq. 3]. The platform
pose uses the same pattern, followed by a platform reference shared by all
limbs [arxiv:2412.13638 eq. 4]. Card:
[Constraint-embedding dynamics for hybrid-limb parallel robots](/papers/2412.13638).

### Loop-aware product for hybrid limbs

For a limb with closed loops, one joint per loop is removed. The remaining
tree is a PoE chain, and each loop's constraints split the joint variables
into dependent and independent parts. A matrix H maps independent rates to
all joint rates, so the limb becomes a serial chain in its independent
coordinates [arxiv:2412.13638 §3.4, eq. 17, eq. 18] [arxiv:2412.13681
§3.3.2]. The loops themselves are solved numerically, either in a nested
scheme [arxiv:2412.13638 alg. 1, alg. 2] or in one combined step
[arxiv:2412.13638 alg. 3]. Both papers need each loop's dependent-variable
Jacobian to be square and invertible [arxiv:2412.13638 §3.4] [arxiv:2412.13681
§3.3.2].

## When to use which

The two sources give no comparison with other parametrisations, so the table
only covers the situations they address.

| Situation | Use | Why |
|---|---|---|
| Chain or limb with no closed loop | Path product with fixed screws | The tree is the whole chain, so no loop step is needed [arxiv:2412.13681 §3.2] |
| Hybrid limb (loops in series) with regular loop constraints | Loop-aware product with a numerical loop solve | Both papers give the derivation for this case [arxiv:2412.13638 §3.3] [arxiv:2412.13681 §2] |
| Loops well conditioned and inverse kinematics needed quickly | Combined step (alg. 3) instead of nested solve | Reported at about 3 iterations per step on the one example, but only justified for regular loop constraints [arxiv:2412.13638 §6.4.1] |
| Geometric inverse kinematics without a closed form | Jacobian step Δθ = H F Δx, repeated | The simple iteration is given without a stopping rule or maximum count [arxiv:2412.13681 §4.4] |
| Constraints redundant within one loop | Not covered as a recipe | The claim is made, but no rule for choosing constraints is given [arxiv:2412.13638 §7] [arxiv:2412.13638 §3.3] |
| Many structurally identical limbs | One representative limb in construction frames | The model is reused per limb, and only frames change [arxiv:2412.13681 §7] |

## Implementation sketch

Path product for one body, with a comment above each step. Joint values are
read in path order, from the body back toward ground:

```pseudocode
# Pose of body k: product of exponentials along its path  [arxiv:2412.13681 §3.2]
# Input:  path (joint indices, body k first, nearest-ground joint last)
#         theta[i] (joint value), Y[i] (screw at zero configuration)
#         A_k (fixed reference matrix of body k)
# Output: C_k (homogeneous transform of body k)

def body_pose(path, theta, Y, A_k):
    # Start from the reference matrix of the body  [arxiv:2412.13681 §3.2]
    C = A_k
    # Prepend one joint factor per joint on the path  [arxiv:2412.13681 §3.2]
    for i in path:
        C = expm(theta[i] * Y[i]) @ C    # expm: matrix exponential
    return C
```

Joint rates from independent rates, for one loop. The dependent block must
be square and invertible [arxiv:2412.13638 §3.4]:

```pseudocode
# Joint rates of one loop from its independent rates  [arxiv:2412.13638 eq. 18]
# G_y: Jacobian of the dependent joints (square, invertible)
# G_q: Jacobian of the independent joints

def loop_rate_map(G_y, G_q, dim_q):
    # Dependent rates: -G_y^-1 G_q applied to the independent rates
    # [arxiv:2412.13638 eq. 18]
    H_top = -solve(G_y, G_q)
    # Stack the dependent block above the identity on the independent rates
    # [arxiv:2412.13638 eq. 18]
    return stack(H_top, identity(dim_q))
```

Notes that apply to both sketches:

- Joint angles describe the body that follows a joint relative to its
  predecessor, in the direction of the edge. Sign conventions depend on the
  tree orientation [arxiv:2412.13681 §3.2].
- The choice of independent coordinates is not unique and sets the
  conditioning of G_y and H [arxiv:2412.13638 §3.4].

## Contradictions

None on the product-of-exponentials form itself: both sources state the same
path product. Only one of them states that the body-frame form is equivalent
[arxiv:2412.13638 §3.1, eq. 3]. The numbers the two sources report come from different robots and setups and
are not comparable [arxiv:2412.13638 §6.4] [arxiv:2412.13681 tab. 1].

## Papers

- [Constraint-embedding dynamics for hybrid-limb parallel robots](/papers/2412.13638): PoE tree kinematics with loop solves and a Jacobian-based inverse kinematics for one 2-DOF parallel robot.
- [Modular dynamics for complex-limb parallel robots](/papers/2412.13681): path product with fixed screws, loop-aware rate map, and representative-limb reuse for a Delta-type robot.
