Numbers that were measured

A calibration is a synthesis with more equations

The site's second field prescribes three input–output pairs and solves a 3 × 3 linear system for a linkage. This one measures thirty pairs and solves the same system in the least-squares sense. Same matrix, same coefficients, same closed form — and the only structural difference produces every question this field is about.

Assumes The coordinates the site already had.

The synthesis field prescribes three input–output pairs and finds the linkage that hits all three. This field measures thirty pairs off a machine and finds the linkage they came from.

Those sound like different problems and for the four-bar read by angle they are one system with a different word in front of it.

The identification Jacobian of a four-bar, read by protractor. One row for every number the instrument reads and one column for every parameter that might be wrong. Each cell is the derivative of that reading with respect to that parameter, drawn to the right of its centre line when positive and to the left when negative, with the largest entry in the whole matrix at 4.09e-1. 14 rows against 4 columns: far more equations than unknowns, which is what makes an identification a least-squares problem rather than a solve, and what makes the question of which combinations of columns cancel a real one. These are the same derivatives the tolerance field computes one at a time — the same matrix read down instead of across.
Fig. 1 Fourteen rows, four columns. Take three rows and it is a synthesis; take all fourteen and it is a calibration.

The same three columns

Freudenstein’s relation is

K₁ cos ψ − K₂ cos θ + K₃ = cos(θ − ψ)

Each pair of angles gives one row with coefficients (cos ψ, −cos θ, 1) and right-hand side cos(θ − ψ).

Three rows is a 3 × 3 system with one solution. That is freudenstein(pairs, { ground }), written for the synthesis side of this collection long before it had a metrology field, and used to design function generators.

Thirty rows is a 30 × 3 system with a least-squares solution. That is selfCalibration, written years of essays later for the identification side, and used to recover a machine that already exists.

Same coefficients. Same unknowns. Same closed form for the lengths afterwards. The only difference is the number of rows and where the angles came from.

What the extra rows buy

Three things, and every one of them is a question the square system cannot pose.

A residual. Three rows and three unknowns fit exactly by construction; the residual is zero whatever the data was, so a bad reading, a slipped encoder or a transcription error produces a perfectly consistent answer and no signal. The fourth row is the first one that can disagree, and everything a residual says becomes available with it.

A rank. A square system determines all of its unknowns or none, so is this parameter identifiable is not a question one can ask. A tall system can be blind in one direction and informative in the others, and that possibility is the field’s central object.

And a conditioning that depends on where the rows are. With three rows the answer is the answer; with thirty, the poses can be chosen, counted and scored, and choosing well is worth a third of the measurements.

The square case is not a special case of the tall one

A precision worth having, because three rows is a calibration with three poses is nearly right and is misleading.

A square system’s solution is the unique point where the residual is zero. A tall system’s least-squares solution is the point where the residual is smallest, which is generally not zero. When the tall system happens to be consistent — exact data, correct model — the least-squares solution is the exact one, so the two agree.

They stop agreeing the moment the data is inconsistent, which is always. And the square case does not degrade gracefully into the tall one: it has no residual to inspect, no rank question, and no conditioning that depends on where the rows are beyond whether the 3 × 3 is invertible.

So the square case is the degenerate member of the family rather than the simple one. Everything this field is about appears the moment there is one extra row and nothing about it appears before.

That is worth saying because three prescribed points is how synthesis is taught, and it teaches a habit of thinking about exactly-determined systems that has to be unlearned to think about measurement at all.

Where each field’s routine lives

For anybody following the correspondence, the two are separate routines rather than one shared with a row count, which is a decision worth defending.

freudenstein(pairs, { ground }) takes exactly three pairs and refuses any other number. It solves a 3 × 3 system, converts the K’s to lengths at the supplied ground length, and returns null when the coupler comes out imaginary.

selfCalibration(dims, { poses, noise }) builds the same rows for as many poses as it is given, forms the normal equations, and returns the K’s, the residual and the condition number.

They could have been one routine with a row count. They are not, because the two answer different questions about their output — the first asks whether a linkage exists, the second asks how well determined one is — and merging them would have produced a function whose return value depended on how many rows it got.

Two implementations of one computation is usually the fleet’s warning sign, and here it is deliberate, with the correspondence recorded in prose rather than enforced in code. What is shared is the arithmetic and what differs is the interrogation, which is the right split.

Which direction the arrow runs

The two problems differ in one more way and it is a difference of intent rather than of arithmetic.

Synthesis chooses the pairs. They are a demand — the function the mechanism is to compute — and the designer decides where they go. Where the precision points are put decides how the structural error is distributed between them, and choosing them well is a design decision with its own literature.

Calibration reads the pairs. They come off a machine, they are wherever the machine was driven, and the only choice is which configurations to visit.

Those two choices are the same choice. Precision-point placement and pose selection are one problem, and the objectives differ: synthesis places points to minimise the structural error between them, calibration places poses to maximise the smallest singular value. Both are optimisations over the same three columns evaluated at chosen angles.

That nobody has noticed the correspondence is unsurprising — the two literatures have no reason to meet — and the practical consequence is real. A pose set chosen by Chebyshev spacing, which is what the synthesis field uses, is a defensible calibration plan; a pose set chosen to maximise σ_min is a defensible precision-point set.

What 3 poses determine. The singular values of the identification Jacobian, on a log axis, with the rank cut at 1e-9 of the largest. 3 of 4 parameters are determined; 1 is not, and the one that is not sits at 1.55e-157 against the largest at 7.74e-1. That is not a small number, it is nought: the gap between the last kept value and the first discarded one is a factor of 7.5e+155, so the decision does not depend on where the cut is put. The condition number over the recovered directions is 6.63.
Fig. 2 Three rows: the square case, where the rank is full on the identifiable subspace and there is nothing left over.
What 30 poses determine. The singular values of the identification Jacobian, on a log axis, with the rank cut at 1e-9 of the largest. 3 of 4 parameters are determined; 1 is not, and the one that is not sits at 3.90e-15 against the largest at 2.42e+0. That is not a small number, it is nought: the gap between the last kept value and the first discarded one is a factor of 1.2e+14, so the decision does not depend on where the cut is put. The condition number over the recovered directions is 5.21.
Fig. 3 And thirty, where the same three directions are determined ten times better and the fourth is exactly as invisible.

Three rows chosen from thirty

There is an arrangement that sits between the two and is worth knowing about, because it is what somebody does when the arithmetic has to be simple.

Measure thirty poses, pick three of them, and solve the square system. That is a calibration by synthesis: it uses the design routine unchanged, it needs no least squares, and it returns an answer.

It is a bad idea for a reason that is now easy to state. Three of thirty readings is throwing away twenty-seven rows, and with them the residual, the rank check and the averaging. The answer is determined entirely by the noise on three readings rather than by the noise on thirty averaged down, so its error is √10 times larger than it needed to be.

It is also arbitrarily worse depending on which three. Three well-spread poses give a decent answer; three crowded ones give a nearly singular system and an answer dominated by noise. Nothing about the procedure says which three were taken.

The three-from-thirty shortcut buys a simpler line of code and pays a factor of three in accuracy, and it is worth naming because it is what an engineer with a synthesis routine and a set of measurements will reach for.

The exact solution and the fitted one differ

One thing that is not the same and it matters when the data is noisy.

With three exact pairs the two problems coincide entirely. With thirty noisy pairs the least-squares solution in K-space minimises the sum of squared residuals of Freudenstein’s algebraic relation, and a non-linear fit in length space minimises the sum of squared residuals of the output angle.

Those are different objectives. The first weights each pose by how strongly the relation responds there; the second weights every pose equally in angle. On clean data they agree; on noisy data they give slightly different answers, both defensible.

A report that says “identified by Freudenstein’s method” is under-specified, and the ambiguity is invisible unless somebody asks. The field’s own routines do both and say which.

The direction no protractor can see. The measured null direction of the identification Jacobian against the four link lengths themselves, both normalised so the largest entry is one. They are the same vector to 1.3e-15. That is Euler's relation rather than a coincidence: the output angle depends only on the ratios of the lengths, a function homogeneous of degree zero is annihilated by its own argument, and the residual over all 24 rows is 7.61e-15. Scaling this four-bar by any factor whatever produces a machine no reading of its output angle can distinguish from it.
Fig. 4 The one thing the extra rows do not buy: a direction the columns cannot span, which is the same direction at three rows and at three hundred.
A machine measuring its own shape. A four-bar with an encoder at each end of its one freedom. Every pose gives one scalar equation — Freudenstein's, which is linear in the three invariants — so 40 poses make a three-column least squares with a condition number of 8.758 and no instrument outside the machine anywhere in it. With perfect encoders the invariants come back to 8.64e-15; with encoders good to a milliradian they come back to 5.40e-3, an amplification of about 6.26. What comes back is a shape and only a shape: the same three numbers describe this machine and one a quarter of the size, and nothing an encoder can read separates them.
Fig. 5 And the tall system in service: the same three columns, read off a machine’s own encoders rather than off a demand.

Structural error and measurement residual

Two quantities that look alike, sit in the same place on a plot, and are not the same thing at all. Keeping them apart is the main hazard of this correspondence.

Structural error is how far a synthesised linkage departs from the demanded function between its precision points. It is a property of the mechanism: a four-bar cannot compute a logarithm exactly, and the gap is real, present in a perfectly made machine measured by a perfect instrument. Where the precision points go distributes it.

Measurement residual is how far a fitted model departs from the readings. It is a property of the model and the data, and it is zero when the model matches the machine and the readings are exact.

Both are plotted against the input angle. Both are zero at some points and non-zero between. Both get called the error.

A calibrated function generator has both at once, and they are independent: a small residual and a large structural error is a machine that is perfectly understood and does not do what was wanted. Reading one as the other is the confusion this correspondence makes easiest, which is the reason to name it here rather than to leave the analogy tidy.

The other synthesis problems

The correspondence is exact for function generation and it is not exact for the others, which is worth stating so the analogy is not over-extended.

Path generation prescribes a curve rather than a relation between two angles. Its identification counterpart is measuring a traced path, and that problem has three exact answers where the function-generation problem has one — Roberts’s cognates, a discrete ambiguity with no analogue in the angle-only case.

Motion generation prescribes whole poses of the coupler plane. Its counterpart measures the coupler’s position and orientation, which recovers more parameters and is better conditioned in some directions and worse in others.

So the pairing holds across all three of the site’s synthesis problems, and only the first is linear. That is the reason this essay is about function generation: it is the case where the identity of the two problems is visible on the page rather than argued.

Reading the matrix as either problem

The figure at the top is the same object both fields build, and it repays being read twice.

As a synthesis matrix, its rows are candidate precision points. A designer picks three of them, inverts, and gets a linkage. Which three decides where the structural error goes, and a badly chosen three — two nearly together, say — gives a 3 × 3 system that is nearly singular and a linkage whose lengths swing wildly for a small change in the demand.

As an identification matrix, its rows are measured poses. All of them are used, the system is over-determined, and which poses were visited decides the conditioning.

Nearly singular and badly conditioned are the same words about the same matrix. A synthesis whose three precision points are nearly dependent and a calibration whose poses are crowded are one failure, and the site has had a name for it on one side only.

The synthesis field’s advice — spread the precision points — and this field’s measurement that spreading maximises the smallest singular value are the same advice with and without a number attached.

What each field learned that the other did not

The most useful part of the correspondence is what it transfers, and it transfers in both directions.

Synthesis knew the minimal parameterisation. Freudenstein wanted the fewest numbers a designer must choose; that set is exactly the set a measurement can recover, and this field had no need to derive it.

Synthesis knew the branch trap. The synthesis essays here record that a linkage built from three correct pairs and assembled from a generic guess reaches none of them and reports no error — 98.42° wanted, 40.46° delivered. That is exactly the calibration failure, written down here long before anything on this site was calibrated, from the design side.

And identification knows about conditioning. The synthesis field places precision points to control structural error and has never asked how sensitive the resulting linkage’s parameters are to the prescribed angles. That is a condition number of the same 3 × 3 matrix, it is computable in advance, and a badly placed precision-point set produces a linkage whose lengths are wildly sensitive to a small change in the demand.

That last one is a result the synthesis field does not have, and it comes for free from a matrix it already builds.

The tolerance field is the third reading

Having established two, it is worth completing the set, because the same matrix has a third use on this site and all three were built separately.

Read one row at a time and ask how far the output moves when a length changes, and it is a sensitivity. That is the tolerance field, which computes exactly these derivatives one configuration at a time and never stacks them.

So one matrix, three fields, arrived at independently:

prescribe three rows, invert         synthesis        design
one row at a time, read across       tolerance        prediction
stack many rows, decompose           metrology        measurement

Each field built what it needed and none of them knew it was building the same object. That is not inefficiency — the three implementations differ in detail, and the tolerance field’s implicit route is the one this field reuses — and it is the sort of coincidence that says the object is real rather than an artefact of one field’s convenience.

A matrix that three independent lines of argument arrive at is worth naming, which is what the identification Jacobian’s essay does.

What a designer gets from the other direction

The transfer this essay makes possible is worth stating as a recommendation rather than as an observation, because it is actionable and nobody does it.

A synthesis returns a linkage. Before building it, decompose the same 3 × 3 matrix the synthesis inverted and read its condition number. That number says how sensitive the returned lengths are to the prescribed angles — how much the machine changes if the demand is revised by a degree, or if the demand was itself specified to a tolerance.

On a well-spread set of three precision points it is small and the linkage is robust to a revised demand. On a badly-spread set it is large, and the linkage that comes back is a precise answer to a demand nobody stated that precisely.

That is a free diagnostic on an operation the synthesis field performs constantly, it uses a matrix already built, and it answers a question a designer has: how much does this linkage depend on the exact numbers the demand stated.

The site does not currently compute it. It is recorded as an unanswered question rather than a gap, since nothing in the synthesis field is wrong without it — but it is the clearest thing this field has to offer back to the one it borrowed from.

The one thing more rows cannot supply

Worth ending the comparison with the limit, because more rows is better is the essay’s refrain and it has an exception.

More rows buy a residual, a rank, conditioning and averaging. They do not buy a direction the columns cannot span. The three columns of Freudenstein’s matrix span a three-dimensional space, and no number of rows makes them span four — which is the scale direction, invisible at three rows and invisible at thirty thousand.

So the tall system is better than the square one at everything except the one thing this field spends most of its time on. That is not a paradox: rank deficiency is a property of the columns and rows have nothing to do with it.

A synthesis and a calibration have exactly the same blind spot, and neither field noticed because the square case never asks. A designer prescribing three input-output pairs and getting a linkage back has also been handed a shape and a ground length they supplied, and the routine’s signature says so — it takes a ground argument — without anybody reading it as the statement it is.

The general form

Strip out the four-bar and what remains is a statement about problems rather than about mechanisms.

A design problem prescribes as many conditions as the model has free numbers and solves. A measurement problem reads more conditions than the model has free numbers and fits. The system is the same system; the difference is its shape, and every question about identifiability, conditioning and uniqueness exists only in the tall case.

That is why this field could be built with no new solver. The matrices were all here, built for the other direction, and reading them downwards rather than across was the whole of the work.

About the same objects

Not linked from either essay — found by the objects both name.

What links here

Essays that link to this one from their own argument.

The objects this essay names

Each one links to every other essay that touches it.

CalibrationFreudenstein equationFreudenstein invariantsIdentification jacobianLeast-squaresMeasurement residualPrecision positionStructural error