The common normal, and where it is
Assumes A dimension is a measurement.
A serial arm is described by four numbers per joint and the four numbers are not arbitrary. They are read off a specific line, and the line has to exist.
The construction
Given two lines in space that are not parallel, there is exactly one line meeting both at right angles. It is the common normal, its direction is the cross product of the two axes’ directions, and its position is fixed by requiring it to meet both.
Denavit and Hartenberg’s four parameters are all read off it:
a, the length of the common normal — the shortest distance between the axes. α, the angle between the axes, measured about the common normal. d, where the common normal’s foot sits along the first axis. θ, the angle from the previous common normal to this one, about the first axis.
That is an elegant construction and it is the standard description of every serial arm in the field. Four numbers per joint rather than six, because two of the six are absorbed by putting the frames on the axes and the common normal in the first place.
The construction has a hole in it
Two parallel axes have no unique common normal. Their cross product is zero, so the direction is undefined, and geometrically every perpendicular to both meets both at right angles — there is a whole one-parameter family of them.
So for parallel axes, a and α are still well defined — the distance between the lines and the angle, which is zero — and d and θ are not. The convention supplies them, usually by setting d = 0, and the choice is arbitrary in the strict sense that any value describes the same geometry.
That is a well-known limitation and it is usually filed as an edge case: parallel axes are a measure-zero condition, nothing is exactly parallel, so in practice there is always a common normal.
That reasoning is exactly backwards and the rest of this field’s chart essays are about why.
Nearly parallel is the bad case
Take two axes one unit apart, nominally parallel, and tilt the second by half a degree in the plane of the two and by a twentieth of a degree out of it.
Nothing about that machine is unusual. It is a well-made arm with an ordinary assembly tolerance. Every physical quantity — the distance between the axes, the angle between them, where the links are — is within a hair of nominal.
Its common normal crosses the first axis 11.35 units from the joint, and the machine’s link is one unit long.
At a tenth of a degree of twist it is 229 units away. At a hundredth, 1,102. The construction has not failed — there is exactly one common normal and it is unique and well defined — it is simply somewhere else, and the parameters read off it bear no resemblance to anything a person looking at the arm would call a description of it.
And a and θ go with it
The offset is the most dramatic number and it is not the only one.
At half a degree of twist the “link length” a — the shortest distance between the axes — reads 0.995 for two axes designed one unit apart. At a tenth of a degree it reads 0.894. At a hundredth, 0.196.
The angle θ, which says which way round the first axis the common normal points, swings from 0.57° at five degrees of twist to 26.6° at a tenth and 78.7° at a hundredth.
So all four parameters move, and they move because they are all read off a line whose position depends on the ratio of two small angles. The parameters of a nearly-parallel pair are functions of a quotient of two things that are nearly zero, which is precisely the arrangement in which small changes produce large ones.
The arithmetic, in closed form
The numbers above come from a construction and they also have a formula, which is worth writing down because it says where the divergence comes from.
Put the first axis along z through the origin and the second through the point (A, 0, 0), tilted by α in one plane and β in the other. The common normal’s direction is the cross product of the two axis directions, whose magnitude is √(sin²α cos²β + sin²β) — small when both angles are small. Its foot along the first axis works out to
d = −A cos α cos β sin β / (sin²α cos²β + sin²β)
which for small angles is −Aβ/(α² + β²).
That is a quotient of a small thing by a sum of two squares of small things, so it is large. Its largest magnitude over β occurs at β = α and is exactly A/2α — which says the worst case scales as one over the twist, and puts a number on how bad bad gets.
Both routes are computed: the extraction from the geometry, which knows nothing about the formula, and the closed form. They agree to 5 × 10⁻¹⁶ relative over three decades, which is what a second route is for and is how the extraction was found to be right.
Why parallel axes are common
The reasoning that files this as an edge case has one flaw and it is decisive.
Parallel axes are not rare in serial arms. They are designed in, deliberately, on the majority of industrial arms: the shoulder and elbow of a six-axis arm are parallel, and so are the two rotary joints of a SCARA. The reason is that parallel axes give a planar sub-chain whose reach and workspace are easy to reason about and whose inverse kinematics has a closed form.
So a nominally-parallel pair is not an unlucky accident; it is the standard architecture. And nominally parallel means parallel on the drawing and not on the machine — a real arm’s axes are out by whatever the assembly holds, which is a fraction of a degree.
The condition the convention cannot describe is the one the design deliberately aims at. That is why this is a defect rather than a curiosity, and it is Hayati’s observation from 1983.
Where exactly parallel is refused
This field’s routine for extracting the parameters refuses the exactly-parallel case rather than returning the convention’s answer, and the refusal is deliberate.
Handed two exactly parallel axes it returns nothing, with the reason: there is no common normal, so d and θ are not defined. A routine that returned zero would be returning a choice, and this field’s whole subject is the difference between a number that was determined and a number that was supplied.
That is not pedantry about a measure-zero case. It is the same discipline the whole site applies to a configuration that does not exist: the honest answer to where is it when it is not anywhere is nothing, and a routine that manufactures a plausible value has removed the one signal a caller had.
It also makes the refusal available as a test. The site’s own gate hands the routine two parallel axes and requires it to refuse — an assertion that has to be able to fail, which is what makes the extraction’s other answers worth believing.
An axis is a line, not an arrow
A small precision that removes a common confusion about the sign of these numbers.
A revolute’s axis is a line in space. Which way along it counts as positive is a convention, and reversing it flips the sign of α and of the offset. So two people describing the same arm can produce two sets of DH parameters that differ in signs, and both are correct.
That matters here because the divergence has a sign — the offset runs to −1,102 rather than +1,102 — and the sign is a consequence of which way the axes were oriented and which way the tilt was applied. Its magnitude is the content and its sign is bookkeeping.
It also matters for the more general point. A chart is a choice at several levels: which construction, which orientation, which reference for θ. The one that fails near parallel is the construction, and reorienting an axis does not rescue it — the magnitude is unchanged.
The machine is fine
Nothing in this essay is a statement about the arm.
The arm moves smoothly. Its forward kinematics is a product of well-conditioned transforms. Its workspace is what it should be, its Jacobian is unremarkable, and every position it reaches is exactly where the geometry says. A physical measurement of where the axes are, in any sensible coordinates, gives four numbers near their nominal values.
What has broken is a coordinate system on the space of geometries, and it has broken in the way coordinate systems break: it is singular somewhere, and near the singularity it stretches enormously.
That is a familiar situation in other parts of this site. A screw’s pitch runs to infinity for a pure translation; Euler angles are singular at a pole. Every one of those is a chart failing rather than an object misbehaving, and the diagnosis is the same each time: find where the chart is singular, and see whether the design puts the machine there.
A chart is not a model
One distinction that keeps the criticism aimed at the right thing.
A model says what a machine is: which joints, which links, which axes. A chart says how to write that down as a list of numbers. Two charts of one model describe the same machine and disagree only about which numbers to print.
Everything in this essay is about a chart. The model — a serial chain of revolutes with axes in stated positions — is untouched, and every prediction it makes is unchanged. What changes between charts is whether the numbers are interpretable, whether small changes in the machine produce small changes in the numbers, and whether a fit can move from a nominal to a real one.
That distinction is easy to lose because a model is usually given as a chart. An arm arrives with a DH table, and the table looks like the model rather than like a presentation of it. The table is a presentation, and where the presentation is singular the machine is not.
The evidence that it is the chart
The clean way to establish it is to describe the same two axes another way and see whether anything is difficult.
Describe the second axis by two small rotations from the first — α about x, β about y — and keep the offset where the nominal design puts it. Four parameters again, all of them O(1), none of them read off a common normal.
The identification Jacobian in that chart has a condition number of 7.5501 at thirty degrees of twist and 7.5501 at a hundredth of a degree — flat to five figures over three and a half decades.
A quantity that runs from 0.003 to 1,102 in one description and does not move in another is a property of the description. That is the next essay’s subject and it is what turns this from a complaint into a measurement.
Four numbers per joint, and why four
Before leaving the construction, it is worth saying why it produces four rather than six, because the answer is the same argument this field keeps making.
A rigid transform between two frames is six numbers. Two consecutive joint axes need fewer, because the frames are not arbitrary: the convention puts each frame’s z along its joint axis and each frame’s x along the common normal. Having done that, a rotation of a frame about its own z is the joint variable rather than a parameter, and a translation along the common normal is a rather than a free choice.
Two of the six are absorbed and four are left. That is a minimal parameterisation of a pair of axes and its minimality is exactly what makes it attractive — a model with redundant parameters returns arbitrary numbers along the redundant directions, which is the failure at the other end of the same axis.
So the convention is minimal, and the construction that achieves the minimality is the construction that fails. The two are the same thing: the common normal is what removes the two extra freedoms, and a pair of axes with no unique common normal is a pair whose two extra freedoms have not been removed.
That is the clearest statement of the trade. Minimality is bought by pinning the frames to a geometric construction, and every geometric construction has degenerate cases.
What it means for a calibration
Three practical consequences, all of which follow from the numbers above.
A nominal DH model of a parallel pair cannot be perturbed to the real one. The nominal has d = 0 by convention; the real machine has d = −1,102. A calibration started at the nominal and taking small steps has no route there, and a linearised correction is meaningless.
The parameters are not interpretable. A calibration that did somehow arrive at d = −1,102 has reported a number that no measurement of the arm would confirm, because there is nothing 1,102 units away.
And two parameters trade against each other without limit. A tiny change in the twist produces a huge compensating change in the offset, so the two are nearly dependent and the fit’s conditioning in those two coordinates is dreadful.
Every one of those disappears in a chart with a β in it, which is why every serious calibration of an industrial arm uses one.
The same defect in the other direction
The essay so far has taken two axes and asked for their parameters. The reverse direction is worth checking because it is what a forward-kinematics routine does, and it behaves completely differently.
Given the four numbers — including d = −1,102 — the transform they describe is computed by composing a rotation, two translations and a rotation. Every one of those is a well-conditioned operation on a number, and the composition returns exactly the right transform. The map from parameters to geometry is fine.
What is ill-conditioned is the map from geometry to parameters. A small change in the axes produces a huge change in the numbers, and the huge changes cancel when the numbers are put back together.
That asymmetry is characteristic of a bad chart and it explains why the defect is invisible to anybody who only ever uses the model forwards. A simulation, a controller, an offline programming package — all of them take the parameters as given and compose them, and all of them work perfectly with d = −1,102 in the table.
The defect appears only when somebody tries to go the other way: to fit the parameters to measurements, to compare two arms’ tables, or to interpret a number as a length. Calibration is the operation that runs the chart backwards, which is why the defect belongs to this field and not to the fields that built the models.
What this does not say
Two things, to keep the criticism proportionate.
Denavit and Hartenberg’s convention is not wrong. It is a minimal, elegant description with a well-defined domain, and outside a neighbourhood of parallel it is excellent — the parameters are meaningful, the count is minimal, and the transforms compose cleanly. This site uses it wherever the axes are not nearly parallel.
And the repair is not a new theory. Adding a fifth parameter to the parallel pairs, or switching to a rotation-based chart, is a change of coordinates. The mechanism, the forward kinematics and everything a user cares about are untouched.
What the essay is about is that a chart’s domain has to be checked against where the machine actually is, and a chart chosen for its elegance can be singular exactly where a design aims. That is a question worth asking of any parameterisation, and this field’s whole contribution to serial arms is asking it.
The site has one more instance of the same question and has answered it the other way round. A four-bar’s four lengths are a perfectly good chart on the space of four-bars — no singularity anywhere, every parameter meaningful — and they are not minimal for what a protractor measures. So one chart is minimal and singular where the design lives, and the other is non-minimal and everywhere well behaved. Neither problem is visible from inside its own chart, and both are found by asking what a measurement determines.
What this makes readable
Essays that name this one as a prerequisite.
- A number that runs away Numbers that were measured
About the same objects
Not linked from either essay — found by the objects both name.
- An arm's parameters and its poses calibration · identifiable · serial chain
- A machine that measures itself calibration · identifiable
- A platform that measures itself calibration · identifiable
- A ruler and a protractor calibration · identifiable
- Four indices, four answers calibration · identifiable
- Grashof is a shape test calibration · identifiable
What links here
Essays that link to this one from their own argument.
- Six per joint is two too many Numbers that were measured
The objects this essay names
Each one links to every other essay that touches it.
CalibrationCommon normalDH parametersIdentifiableJoint axisParallel axis defectParameter chartSerial chain