Table of Contents

The NIST Cone Frustum on a C Axis 10 µm Off Centre: an Uncalibrated Controller Cuts Most of the Cone up to 18 µm Too Deep yet Only 3 µm Out of Round, a Calibrated One Cuts the Nominal Part

The NIST cone frustum is one of two five-axis test artifacts that an AI agent drew from a NIST paper's drawings and programmed itself. The part sits tilted 10° on the rotary table of a generic B/C table-table machine, so its cone side is finished with the side of a Ø12.7 mm end mill while all five axes move. HiNC wrote the Fanuc G43.4 (RTCP) program from the agent's cutter locations, and the case accepted it.

The paper's authors also traced the errors they measured on this cone frustum to the machine that cut it: the machine's C′ axis lay about 10 µm off in X (Moylan et al., ASPE 2011, p. 523). On this page the agent gives the case's machine that same error. The real centre of rotation of the C axis lies 10 µm in +X from where the controller's kinematic model puts it; ISO 230-7 calls this error EX0C. It is modelled as one branch of the machine chain, marked as an error term. Not one line of the program was changed. The frustum was cut four times at a 0.25 mm grid:

  • Error terms off: the nominal cut. The geometry differences of the other runs are measured against it.
  • Error terms off again, with the geometry difference: the control run. It measures the noise floor.
  • Error terms on, error marked: the controller does not know the error. This is what a controller with uncalibrated kinematics does.
  • Error terms on, mark cleared: the controller knows the error. This is what a controller with calibrated kinematics does.

Both runs with the error terms on had G54 X 50.010 typed in: the work offset that a touch-off at B = C = 0 would find on the real machine.

When the controller did not know the error, the tool tip on every one of the 35,513 cutting steps landed where the plan predicted, within 1.14 × 10⁻¹³ mm. The prediction is δ = (d(1 − cos C), −d·sin C, 0) with d = 10 µm. It gives no offset at C ≡ 0 and 20 µm at C ≡ 180°, and it depends neither on B, X, Y and Z nor on how far the part lies from the C axis. The results on the part, with θ the angle around the part's axis (0 on its +X side):

  • The cone side is cut too deep from θ ≈ ±44° all the way round the −X side, deepest at θ = 180°: −18.13 µm.
  • The +X side, cut at C = 0, did not move. At ±25.5° on either side of it, up to +1.0 µm of material is left.
  • The top face, the pedestal and the ring under the cone did not change beyond 0.1 mm from the cone's edges (±0.002 µm).
  • Measured on a circle at mid-height, the least-squares diameter is 16.25 µm smaller and the centre has moved 10.26 µm towards +x. The roundness, though, is only 2.98 µm: 16 % of the largest radial deviation, 18.77 µm.

When the controller knew the error, the tip stayed on the program to within 1.28 × 10⁻¹³ mm from step 86 on, and the frustum came out the same as the nominal one. B and C stayed as in the nominal and marked runs, bit for bit; X, Y and Z stood up to 20 µm from where the uncalibrated controller with the same touch-off put them. Everything here is simulated; no part was cut.

HiNC simulation: the whole program played with the error terms on and the error marked; the Ø12.7 mm end mill in its shrink-fit holder stands above and to the right of the cone frustum; the cone side is coloured by its deviation from the nominal cut, red at the front left, turning yellow and then green to the right, and the top face is all green

Error terms on and the error marked, the whole program played, the tool at its last retract point (isometric view). The T1 Ø12.7 mm end mill is in view in its shrink-fit holder (a Ø27 mm nose, 40 mm stick-out). The part carries the geometry difference: colour scale ±0.02 mm, red = cut too deep, blue = material left, green = 0, with both signs weighted alike. The red is the −X side, cut at C ≡ 180°; the green is the +X side, cut at C = 0. A HiNC 3.2.46 development build with error-term branches, 0.25 mm grid.

The whole program at 0.25 mm on a HiNC 3.2.46 development build with error-term branches Predicted before the first play Error marked: the controller does not know it Mark cleared: the controller knows it
How far the tool tip is from the program δ(C): 0 at C ≡ 0, 20 µm at C ≡ 180° on δ to within 1.14 × 10⁻¹³ mm on all 35,513 cutting steps; at most 20.000 µm, on the finishing loop within 1.28 × 10⁻¹³ mm from step 86 on
Cone side, the −X side (θ = 180°), median deviation −18.126 µm −18.126 µm within 0.0005 µm, as is the whole cut
Cone side, most material left (θ = ±25.5°) +0.995 µm +0.997 µm within 0.0005 µm
Cone side, where the sign changes about ±44° ±43.73°: about 272.5° of the circumference is cut too deep —
Top face, ring under the cone and pedestal 0 within ±0.002 µm beyond 0.1 mm from the cone's edges within 0.0005 µm, two artefact vertices aside (dilemma 7)
Circle at mid-height: diameter change, centre shift towards +x, roundness −16.3 µm, 10.3 µm, 3.0 µm −16.25 µm, 10.26 µm, 2.98 µm not fitted; the cut is within 0.0005 µm of the nominal
Machine coordinates compared with the nominal run with the mark cleared, B and C unchanged and X, Y and Z up to 20 µm from their nominal positions exactly 10.000 µm at every step from step 86 on: the typed G54 X 50.010 turned by RTCP exactly 10.000 µm at every step from step 86 on: where the C axis really is; up to 20 µm compared with the marked run (dilemma 5)
Server time and peak memory of the run about 5 min and under 9 GB (the plan's estimate) 195.2 s, 5.61 GiB 195.2 s, 5.31 GiB

The case

The frustum's own case page tells how the agent drew the frustum from the paper's drawing, wrote the five-axis flank-milling cutter locations itself, and had HiNC solve the axes of the generic B/C machine GenericBC, write the G43.4 program and replay it for acceptance. That case used the machine as designed. This page adds one measured geometric error to the same machine and asks two questions:

  • What does the error look like on the part, and how large is it?
  • What changes between a controller that knows the error and one that does not, that is, between calibrated and uncalibrated kinematics?

What the agent was given:

  • The accepted project and its program.
    • The case's project: the frustum, Ø200 mm with a 15° half-angle and 25.4 mm tall, sits on a Ø180 × 12.7 mm pedestal, tilted 10° about Y. Program zero lies on the part's axis in its bottom face, 50 mm from the C axis in +X.
    • NC/frustum-10deg.cls.nc: the program HiNC wrote from the cutter locations, 5,333 lines in 7 passes of 760 motion blocks each, with G43.4 H1. B stays between −25° and −5°. Each pass goes once round the cone and 3° more; with the lead-in and lead-out, C turns about 388° per pass. Over the program, C runs from 9.5496° all the way to −2,538.1627°, about seven turns.
  • The error the paper names: “previous measurements on this machine indicate a location error of the C′-axis in the machine's X-direction of approximately 10 µm” (p. 523).
  • HiNC's error terms. An axis or the spindle of the machine chain can be given an error term, a static branch of its own just before the axis's branch. The controller is XyzabcSolver, which turns NC and cutter locations into machine coordinates, RTCP included. It always solves on the nominal chain: the same chain with every marked branch left out. While the project's Enable Error Terms switch is on, the simulated machine keeps the branch in place when it moves, cuts and checks collisions. So the error is cut into the part, as on a real machine whose controller does not know it (Error-Term Branches).
  • Touch-off and P0. With a single translation upstream of the C axis, the table moves by the error even at C = 0. On a real machine, the G54 found by touching off already contains that shift. HiNC's P0 measures on the nominal chain, so it does not. To reproduce a real machine's result, the manual recommends typing in the work offset a touch-off would find (Work offsets on a machine with error terms).
  • The request. HiNC's product owner asked for error-term showcases built on accepted cases, from both product cases and paper cases, with the heavy runs on a shared server.

What nothing states:

  • The sign of the error. The paper does not give it. The agent took +X, which cuts too deep; with −X, the same shape would come out as material left of the same size.
  • The G54 a touch-off would find. The manual only says to type it in. With +X, the table stands 10 µm further in +X at C = 0, so a touch-off at B = C = 0 would find G54 = (50.010, 0, −55.7418). The agent derived this from the machine chain.
  • Whether a 0.25 mm grid can read the error. 10 µm is 4 % of a cell, and even the deepest deviation, 18 µm, only 7 %.
  • That the paper used another machine. The paper's machine is a non-orthogonal one, its B′ axis inclined 45° from the Y axis; this case's machine is an orthogonal B/C one. So the paper's numbers can be compared with this page's in shape, not in size.

What the agent built

Each value is marked read (from the paper or the base case), derived (computed from what was read) or chosen (the agent's decision).

Item Value Source
What the error is The real centre of rotation of the C axis lies off its design position in +X. The design position is the one the controller's kinematic model uses. In ISO 230-7 this is EX0C, the location error of the C axis in the X direction read: the paper, p. 523 (a location error in X); derived: the ISO 230-7 name EX0C; chosen: +X
Size 0.010 mm, in the coordinates of the B anchor; at B = 0 that is the machine's X direction read: the paper's “approximately 10 µm”; chosen: the sign
Where it sits Directly upstream of the C axis branch. A new anchor Cerr splits the segment B→C in two. The first part, B→Cerr, is named EX0C, carries a Static Translation (0.010, 0, 0) and is marked as an error term. The C axis' Dynamic Rotation (rotation axis (0, 0, −1), pivot (0, 0, 0)) moves whole onto Cerr→C, and Axis C is bound to it again with its values unchanged chosen, following the owner's ruling of 2026-10-06 that an error goes only upstream of a role branch, meaning an axis or the spindle (dilemma 1)
Machine chain [O][base][frame][B][Cerr][C][w];[base][X][Y][Z][S][t] read back after the build
Work offset G54 = (50.010, 0, −55.7418) in the two runs with the error on, which is what a touch-off at B = C = 0 would find; the case's own (50, 0, −55.7418) in the nominal and control runs derived, as the manual recommends

Why this error: it is the one the paper names for the machine that cut the frustum, at the size measured there. The program runs under G43.4, and only under RTCP or a tilted plane does a marked error (an uncalibrated controller) cut differently from an unmarked one (a calibrated controller) (What a mark changes). So one case can show both.

The machine cluster GeneralMechanism of the topology graph on HiNC's Equipment page: along the top O → base → frame → B → Cerr → C → w, the branch EX0C (StaticTranslation) between B and Cerr drawn thick with an orange Error term badge, and C (DynamicRotation) on Cerr → C labelled Machine Tool · Axis C; along the bottom base → X → Y → Z → S → t

The machine cluster (GeneralMechanism) in the Topology column of the Equipment page. A new anchor, Cerr, sits between B and C. EX0C, a Static Translation from B to Cerr, is drawn thick and carries the orange Error term badge. The C axis' Dynamic Rotation now runs from Cerr to C and is still bound to Axis C. A HiNC 3.2.46 development build with error-term branches, English interface.

Where the tip goes: the prediction written in the plan. The controller assumes the part turns about the C axis' design centre. In fact it turns about a centre d = 10 µm away. At C = 0, the extra distance d the table moves is already contained in the touched-off G54, so the tip lands on the program. At any other C, the part has moved further than the controller thinks. In program coordinates, the tip is off by

δ = (I − RZ(C))·d = (d(1 − cos C), −d·sin C, 0).

It is 0 at C ≡ 0 and 2d = 20 µm at C ≡ 180°. δ depends on C alone: not on B, not on X, Y and Z, and not on the 50 mm between the part and the C axis. How far the surface moves is the part of δ along the surface normal, n(θ)·δ, where θ is the angle around the part's axis:

  • θ = 0, on the part's +X side, is cut at C = 0, so it does not move.
  • θ = 180°, on the −X side, is cut at C ≡ 180° and B = −25°. The surface normal there lies 25° from horizontal (the cone's 15° half-angle plus the 10° tilt), so the deepest deviation is 2d·cos 25° = 18.1 µm.
  • In between, the plan wrote +1.0 µm of material left at ±25.5°, the largest, a sign change at about ±44°, and −7.4 µm at ±90°.
  • At mid-height, a least-squares circle 16.3 µm smaller in diameter, its centre moved 10.3 µm towards +x, and a roundness of only 3.0 µm, so that roundness alone would show about a sixth of the largest error.
  • The top face, the ring under the cone and the pedestal: 0.
  • With the mark cleared, the plan wrote: machine B and C as in the nominal run, X, Y and Z up to 20 µm from their nominal positions, and the tip back on the program. What the machine coordinates actually did is in the results and in dilemma 5.

The runs:

Run Grid Error-terms switch EX0C G54 Purpose
Nominal, trimmed 1 mm off marked (not in effect) (50, 0, −55.7418) trimmed: nominal
Marked, trimmed 1 mm on marked (50.010, 0, −55.7418) trimmed: the controller unaware, with the geometry difference
Unmarked, trimmed 1 mm on mark cleared (50.010, 0, −55.7418) trimmed: the controller aware, with the geometry difference
Nominal 0.25 mm off marked (not in effect) (50, 0, −55.7418) exports the cut used as the ideal geometry
Control 0.25 mm off marked (not in effect) (50, 0, −55.7418) the geometry difference, for the noise floor
Marked 0.25 mm on marked (50.010, 0, −55.7418) the geometry difference; exports its cut
Unmarked 0.25 mm on mark cleared (50.010, 0, −55.7418) the geometry difference; exports its cut
Marked, replayed 0.25 mm on marked (50.010, 0, −55.7418) played again, with the geometry difference, for the pictures of the tool and its holder

Common to every run:

  • Physics off. This case is about geometry only, so cutting force and deflection are outside it.
  • Collision detection on, without pausing on a failure.
  • The program only. The NC entry NC/frustum-10deg.cls.nc is on; the cutter-location entry is off.
  • The geometry difference (Geometry Validation): detection radius 1 mm, colour scale (DiffVisualRadius) ±0.02 mm.
  • The case's own stock record is off. The base case's Record Meshed Geometry command (Read On First Or Write, on the file Cache/frustum-10deg-stock.wct) is disabled in the error-term project (dilemma 2).
  • The recorded stock. The full control, marked and unmarked runs each recorded their final stock to a file of their own. The pictures put that stock back on the canvas.

How the agent managed the work

  • Criteria and predictions first. The plan, its predictions and eight criteria were committed before the first play.
  • Trimmed runs first. The whole program ran at 1 mm three times: nominal, marked and unmarked. These runs checked that the build was right, that the per-step formula held, that the touch-off G54 was derived right, and that the tip came back to the program with the mark cleared. Only then did the 0.25 mm runs start.
  • Four full runs, one at a time. Before each one, the HiNC instance was restarted and the project reloaded from its file. This case played one run at a time. While the control, marked and unmarked runs and the holder replay played, though, another instance on the same server was playing another case, so those wall times include that load (see “What the runs cost”).
  • The nominal cut as the ideal geometry. The nominal run exported its cut, about 2.51 million triangles, and that cut became the ideal geometry. The geometry difference then shows only what the error changes, not the marks the toolpath itself leaves.
  • Every number from the records. The agent's analysis script computes every number on this page from the run records, plus the base case's program and set-up numbers, and keeps each with its source, so the analysis can be run again. The per-step series and the vertex distances it reads are regenerated by replaying the matching run and measuring the mesh again.
  • Pictures in both interface languages. The comparison pictures put each run's recorded stock back on the canvas with its geometry difference, so no run had to be played again for them; the pictures of the tool and its holder come from one more play of the marked run (dilemma 6).
  • Where a person stepped in. HiNC's product owner asked for error-term showcases built on accepted cases. The same day, after looking at the interface, the owner ruled that an error term goes only upstream of a role branch, meaning an axis or the spindle. That ruling changed the design from a pair of translations to one translation and a typed work offset (dilemma 1). The error, the predictions and the criteria are the agent's.

The criteria as committed before the first play:

# Criterion
1 Build: the error-term project, saved and reopened, shows no load message; the chain is [O][base][frame][B][Cerr][C][w];[base][X][Y][Z][S][t]; EX0C is a marked Static Translation (0.010, 0, 0); Axis C is bound to Cerr→C with the values it had; the roles check is empty; the case's files outside the error-term folder are unchanged
2 Every run ends Finished with more than 0 steps, contact (IsTouched) peaking at 1 and all 5,333 lines executed; only the expected messages (Sys-Init--FileLines, and Diff--TargetNotClosed with a geometry difference); no collision, no rapid cutting, no stroke alarm
3 The nominal, control and unmarked runs have the same number of steps; the marked run is within 1 % of the nominal
4 Marked: on every step, the tip minus the nominal tip minus δ within 1 × 10⁻⁹ mm; on the steps at C ≡ 0, the tip within 1 × 10⁻⁹ mm of the nominal (the touch-off G54 derived right); on the finishing loop, the largest offset 2d ± 0.1 %
5 Unmarked: on every step, the tip within 1 × 10⁻⁶ mm of the nominal; machine B and C within 1 × 10⁻⁹° of the nominal
6 Control: the geometry difference and the mesh distance all within the noise (at least 99 % of the area within 1 µm)
7 Marked, the geometry difference: a crescent of over-cut on the part's −X side, deepest −18 µm ± 3 µm by mesh distance; the +X side (θ ≈ 0) within 2 µm; the top face, the pedestal and the bottom ring within 2 µm
8 Cost: wall time and peak memory (VmHWM) recorded for every run; a 0.25 mm run that passes 15 minutes or 12 GB is stopped and reported

The dilemmas

Each one is told as its situation, the risk if it had been missed, how it was noticed, the resolution, and the evidence that the resolution held.

1. A pair of translations, or one translation and a touch-off work offset

  • Situation. The designer agent, the agent that drafted this study, first proposed a translation on each side of C: +d before it and −d after it. At the touch-off pose, B = C = 0, the two cancel, so neither G54 nor P0 needs a change, and the four runs differ only in the switch and the mark.
  • Risk. The same day, after looking at the interface, the product owner ruled that an error term goes only upstream of a role branch, meaning an axis or the spindle. The translation after C is not upstream of a role branch, so under the new rule the roles check would warn about it. Had the agent used one translation but kept the case's original G54, the side cut at C = 0 would also be 10 µm off, and the simulated part would not look like a part from a machine that was touched off.
  • How noticed. The ruling already stood when the study was designed, but the interface and REST changes it called for were not live yet, and the brief the designer agent worked from still allowed the pair. So the design kept the pair and noted among its doubts: “if that step goes live first, switch to the single-segment form”. The plan followed the ruling and used one segment.
  • Resolution. EX0C goes before C only. The two runs with the error terms on have the G54 a touch-off at B = C = 0 would find typed in, (50.010, 0, −55.7418); the nominal and control runs keep (50, 0, −55.7418). The design had derived that this gives exactly the same δ as the pair of translations.
  • Evidence. In the 1 mm trimmed runs, every cutting step's tip offset meets the formula to within 1.14 × 10⁻¹³ mm, and the programmed steps at C ≡ 0 lie within 5.1 × 10⁻¹⁴ mm of the nominal, so the touch-off G54 is right.

2. The case's own stock record would mix two grids

  • Situation. The case's mission has a Record Meshed Geometry command set to Read On First Or Write on the file Cache/frustum-10deg-stock.wct: it reads the file when it exists and nothing has run yet, and otherwise writes the current stock.
  • Risk. The 1 mm trimmed runs, played first, would write a 1 mm stock, and the 0.25 mm full runs would then read it in and start cutting from a stock of the wrong grid. The base case met the same mechanism the other way round, a 1 mm play reading a 0.25 mm stock (on its page, the dilemma After a rebuild the coarse numbers moved).
  • How noticed. While writing the plan, against the base case's dilemmas.
  • Resolution. The command is disabled in the error-term project, as the plan states. The full control, marked and unmarked runs each record their final stock to a file of their own, used only to put it back on the canvas for the pictures.
  • Evidence. The build record lists the command as disabled. None of the eight recorded plays shared a cache file; the first replay for the holder pictures, which was discarded, started from a recorded stock (dilemma 6).

3. Whether a real 10 µm error shows on a 0.25 mm grid

  • Situation. The deepest deviation, 18 µm, is only 7 % of a cell.
  • Risk. The designer agent expected it to fall below the voxel noise. It proposed enlarging the error 50 times for the geometry-difference pictures of both the marked and the unmarked run, with a run at the real value as an option. The plan cut that down to one ×50 run (0.5 mm, G54 X 50.5), added only if needed and only for the pictures. Those pictures would have needed an explanation of the scaling, and the case another 0.25 mm run.
  • How noticed. A trial run of another error-term case of the batch, part 4 of the RPTU benchmark with an X–Y squareness error at 0.25 mm, found the distance of the cut mesh proportional to the error and still readable at ±2.7 µm. The full runs of this case also read the predicted values straight off the mesh.
  • Resolution. No enlargement. Every number and every picture shows the real 10 µm, with a colour scale of ±0.02 mm.
  • Evidence. Over all vertices, the 1st percentile is −18.04 µm (the predicted deepest is −18.1) and the 99th +0.95 µm (the predicted largest material left is +1.0). The medians per 2° agree with the prediction within 0.011 µm, and on the side, measured minus predicted lies within −0.18…+0.22 µm for 1–99 % of the vertices.

4. The first 86 steps do not follow the formula

  • Situation. In the marked and unmarked runs, the tip on the first 86 steps differs from the nominal by up to 10.0 µm, where the formula gives almost 0.
  • Risk. It could be read as a wrongly derived touch-off G54, or as a fault in the model. And criteria 4 and 5 say “every step”.
  • How noticed. Comparing every step as the plan wrote: the 86 steps with large residuals all lie on lines 6 and 10.
  • Resolution. The cause was found. Step 0 is the tool-change position of T1 M06 on line 6, fixed in machine coordinates at (0, 0, 600, 0, 0), which the extra 10 µm in the G54 cannot move; measured against the part, which that G54 places 10 µm further, the tip there differs by −10 µm. Steps 1 to 86 are the first G00 of line 10, interpolated outward from the tool-change position, and the difference falls step by step to 0. G43.4 is already active from line 9, so the cause is not that RTCP was not on yet. None of the 86 steps touches the stock. The verdicts are recorded as not met as written, and checked again on the cutting steps and on the steps from 86 on.
  • Evidence. From step 86 on, the residual is at most 1.17 × 10⁻¹³ mm. Taking each run's own machine coordinates through the nominal chain, subtracting the typed G54 and adding δ, all 37,020 steps, these 86 included, agree within 8.0 × 10⁻¹² mm.

5. Which run to compare the machine coordinates with

  • Situation. For the unmarked run, the plan predicted “machine X, Y and Z move up to 20 µm further”, compared with the nominal run. The documentation also says that each step's machine coordinates are the same with the switch on and off.

  • Risk. Writing the result as predicted would contradict the measurement, and so would writing “the marked run's machine coordinates equal the nominal run's, bit for bit”.

  • How noticed. While comparing the three runs' machine coordinates step by step: the nominal run uses the case's G54 X 50.000, the two runs with the error terms on the touch-off's X 50.010.

  • Resolution. The page states what was measured, and each comparison gets its own formula:

    • Unmarked minus nominal is exactly 10 µm at every step from step 86 on: RY(−B)·d, where the C axis really is.
    • Marked minus nominal is also exactly 10 µm at every step from step 86 on: RY(−B)RZ(−C)·d, the extra 10 µm typed into the touch-off G54, turned by RTCP.
    • Unmarked minus marked is up to 20 µm: what calibration adds with the same touch-off.

    The plan's sentence came from the paired design, in which all four runs used one G54. With one translation and a touch-off G54, the run to compare with is the marked one. “The switch does not change the machine coordinates” holds only when the work offsets are the same.

  • Evidence. The residuals of the three comparisons are 1.1–1.4 × 10⁻¹³ mm, and B and C are the same in the three runs, bit for bit.

6. The replay for the holder pictures started from a stock already cut

  • Situation. To picture the tool and its holder, the marked run was played once more, so that the tool would stand at its last retract point.
  • Risk. The geometry difference in the picture might not come from that play, or the tool might stand in the wrong place.
  • How noticed. That replay took only 65 s and 36,981 steps; the full marked run took 195 s and 37,020 steps.
  • Resolution. The step that switched the mission's entries around the capture restored them by their position in the list, not by the entries themselves, so the replay started from the stock already cut. 36,981 is also exactly the step count of the base case's cutter-location file played on the machine: restored by position, the two program entries are of the same type, so the cutter-location entry took over the program's “on”, and that replay most likely played the wrong program as well; this was not looked into further. With the entries restored by the entries themselves, the replay was played again, and both problems were gone.
  • Evidence. The holder replay took 195.2 s and 37,020 steps, and its eight Diff--Stats numbers equal the marked run's.

7. Two vertices that read −164.5 µm

  • Situation. The cut meshes exported by the marked and the unmarked run each have two vertices that read −164.5 µm. They sit at (10, ±86, 24.03) in program coordinates, a mirrored pair in the plane of the top face, about 7 mm from its edge.
  • Risk. They would become the minimum of every statistic, −164.5 µm against a true deepest −18.4 µm, and suggest that the top face was cut wrong.
  • How noticed. While gathering the statistics: the minimum over all vertices lay far below the predicted deepest, −18.1 µm. Apart from these two, every vertex of the unmarked cut lies within 0.0005 µm of the nominal, and the same two vertices read exactly the same in the marked run.
  • Resolution. The two vertices are left out of every statistic and listed apart. The cause was not established. The distance search may look only at the centroids of the 12 nearest triangles and miss a large coplanar triangle of the reference mesh, or the exported mesh may have long, thin triangles there. What is certain is that they do not come from the cut.
  • Evidence. The analysis results list the two vertices and their readings apart from the statistics.

Results and benefits

Measured on a HiNC 3.2.46 development build with error-term branches, at 0.25 mm with physics off. The per-step numbers are the same, bit for bit, in the 1 mm trimmed runs (see below).

# Verdict Measured
1 met The chain matches the plan character for character. EX0C is on B→Cerr, a marked Static Translation (0.01, 0, 0). C is the Dynamic Rotation on Cerr→C, bound to Axis C, with the same values as before the move. The roles check is empty, and the project saved under its new name reloads with no message. All four full runs loaded the error-term project from its file on a restarted instance, with EX0C in place and the roles check empty, and played to the end. The two items first left without a record were measured at 23:15 on 2026-10-06: reloaded from its file, the error-term project with EX0C shows no load message and an empty roles check, with EX0C in place and marked; in the case's working copy on the server, git reports no change to any of the case's files outside the error-term folder (among them the shared machine file GenericBC.mt and the case's project file), only the new error-term folder
2 met All 8 plays ended Finished, each with 37,020 steps. In the 7 runs with a per-step series, IsTouched peaks at 1. Line 6 and every motion line of lines 10–5329 have steps; lines 5330–5333 (M09, G49, M30, %) make none by nature. At warning level and above, the nc, step and ncManip message sinks were empty, and shell held one Diff--TargetNotClosed in each of the 6 runs with a geometry difference, because the ideal geometry is an exported open mesh. The records keep only warnings and above, so Sys-Init--FileLines does not show, and executedLineCount was not recorded: “all 5,333 lines executed” is inferred from every motion line having steps
3 met Every run has 37,020 steps, the three trimmed runs included: a difference of 0. IsTouched and LineNo are the same at every step
4 not met as written; met on the cutting steps The 36,934 steps from step 86 on, all 35,513 cutting steps among them, within 1.17 × 10⁻¹³ mm. The 14 programmed steps at C ≡ 0 within 5.1 × 10⁻¹⁴ mm. On the finishing loop, the largest offset is 20.000 µm, 2d to a relative −2 × 10⁻¹³. The first 86 steps (the tool-change position on line 6 and the first G00 on line 10, none touching the stock) differ by up to 10.0 µm (dilemma 4)
5 not met as written; met on the cutting steps From step 86 on, within 1.28 × 10⁻¹³ mm. The first 86 steps differ by up to 10.0 µm, for the reason given under criterion 4. Machine B and C equal the nominal run's bit for bit
6 met, judged on the pictures and the series The control run exported no mesh, so three pieces of evidence decide instead: its per-step series equals the nominal run's bit for bit; its eight Diff--Stats numbers equal the unmarked run's; and read by hue, 100 % of the pixels of the four views' geometry-difference pictures lie within ±1 µm, at most 0.91 µm. The unmarked run's mesh lies within 0.0005 µm of the nominal, two artefact vertices aside (dilemma 7)
7 met The median at θ = 180° is −18.126 µm, and the lowest side vertex reads −18.39 µm. Within ±15° of θ = 0, the deviation is at most 0.80 µm. The top face, the bottom ring and the pedestal lie within 0.002 µm beyond 0.1 mm from the cone's edges. The shape is larger than “a crescent”: the over-cut runs from ±43.7° all the way round the −X side, about 272.5°, most of the circumference
8 met 185–195 s per 0.25 mm run, VmHWM 3.92–5.61 GiB (see “What the runs cost”, below)

The tool tip on every step

Here the tool tip means each step's CL: the actual tip position in program coordinates. A cutting step is a step on which the tool touches the stock (IsTouched 1): 35,513 of the 37,020. The runs have the same number of steps, so they can be lined up step by step and subtracted:

Comparison Over Largest difference
Marked minus nominal, minus δ 35,513 cutting steps 1.14 × 10⁻¹³ mm
The same the 36,934 steps from step 86 on 1.17 × 10⁻¹³ mm
Marked minus nominal the 14 programmed steps at C ≡ 0 5.1 × 10⁻¹⁴ mm
Marked minus nominal, length of the offset the finishing loop (lines 4572–5328) 20.000 µm, which is 2d
Tool axis, marked minus nominal every step 4.4 × 10⁻¹⁶
Unmarked minus nominal from step 86 on 1.28 × 10⁻¹³ mm
Control minus nominal every step 0: the two series are identical bit for bit

Tool-tip offset against the C-axis angle: blue dots δx and orange dots δy, one per 100 cutting steps, all on the black lines d(1 − cos C) and −d·sin C; δx reaches 20 µm at C = ±180°, δy is +10 µm at C = −90° and −10 µm at C = +90°

Error terms on, error marked: the tool-tip offset of every cutting step (its CL minus the nominal run's, in program coordinates), against the C angle wrapped to ±180°. Dots are measured, one per 100 cutting steps, and the black lines are the formula. All 35,513 steps lie on the formula, within 1.1 × 10⁻¹³ mm. The vertical axis is symmetric, ±22 µm. 0.25 mm, a HiNC 3.2.46 development build with error-term branches.

Why the first 86 steps differ by up to 10.0 µm.

  • Step 0 is the tool-change position of T1 M06 on line 6. That is a fixed machine position, (0, 0, 600, 0, 0), and the extra 10 µm typed into the G54 cannot move it.
  • Steps 1 to 86 are the first G00, on line 10, interpolated outward from the tool-change position. The difference falls step by step from 10 µm to 0 and meets the formula at step 86, where the move reaches the programmed point.
  • None of these 86 steps touches the stock.

A second check takes each run's own machine coordinates through the forward kinematics of the nominal chain, subtracts the typed G54 and adds δ. All 37,020 steps, these 86 included, agree to within 8.0 × 10⁻¹² mm. So on the machine with EX0C, every step moves the tip by δ from where the nominal chain puts it.

The 1 mm trimmed runs and the 0.25 mm full runs have the same per-step series, bit for bit. The nominal and control runs equal the trimmed nominal run, the marked run equals the trimmed marked run, and the unmarked run the trimmed unmarked run (compared by the md5 of the unpacked JSON). Here the steps, the tip, the machine coordinates and the contact flag IsTouched did not depend on the voxel resolution, so 1 mm was enough to check the per-step formula.

The part: most of the cone side cut too deep

How it was measured: the marked run's exported cut has 1,380,159 vertices. Each one was given its signed distance to the nominal cut (positive = material left, blue in the geometry difference; negative = cut too deep, red). Only the cone side changed.

Normal deviation around the cone side against θ: the blue dots (median of the mesh distance per 2°) and the pale blue band (5–95 %) lie on the orange prediction line, black circles the table predicted beforehand; 0 at θ = 0, about +1 µm at ±25°, a sign change at ±44°, −18.1 µm at ±180°; vertical axis ±20 µm

Normal deviation once round the cone side. Blue dots are the medians of the mesh distance per 2°, and the band the 5–95 % range of each 2° bin; the side within 1 mm of its upper and lower edges is left out. Orange is the prediction computed from the per-step tip offset and the analytic normal, and the black circles are the table predicted before the first play. Blue and orange agree within 0.011 µm. Negative = cut too deep (red in the geometry difference), positive = material left (blue). The vertical axis is symmetric, ±20 µm. 0.25 mm, a HiNC 3.2.46 development build with error-term branches.

θ Table predicted beforehand Predicted from the per-step tip Measured (+θ / −θ, median within ±0.5° of the angle)
0 (the +X side) 0 0 0.000 / 0.000 µm
±15° +0.68 +0.684 +0.685 / +0.685 µm
±25.5° (most material left) +0.995 +0.995 +0.997 / +0.997 µm
±44° 0 (sign change) −0.024 −0.025 / −0.025 µm
±60° −2.11 −2.107 −2.108 / −2.111 µm
±90° −7.41 −7.412 −7.414 / −7.414 µm
±120° −12.8 −12.796 −12.791 / −12.792 µm
±150° −16.7 −16.704 −16.697 / −16.696 µm
180° (the −X side, deepest) −18.126 −18.126 −18.126 µm

The table predicted beforehand is the designer agent's table multiplied by 10 µm. The plan quoted five of its values, at 0, ±25.5°, ±44°, ±90° and 180° (as 0, +1.0, a sign change at about ±44°, −7.4 and −18.1 µm).

  • The medians per 2° differ from the per-step prediction (the orange line) by at most 0.011 µm, rms 0.005 µm.
  • The sign changes at ±43.73°; the formula gives 43.76°. From there the over-cut runs all the way round the −X side, about 272.5°.
  • At θ = ±25.5°, where |C| is about 61° (derived from the finishing loop's per-step series), the tip is already about 10 µm off. Most of that offset slides along the surface, though, and only +1.0 µm of it lies along the normal.
  • The two sides, +θ and −θ, are symmetric within 0.002 µm. Along one slant line of the cone, from the bottom to the top, the deviation changes by at most 0.02 µm: the whole tool is shifted, so each slant line moves as one.
  • The 361,981 side vertices more than 0.5 mm from the sharp edges read −18.39…+1.16 µm. Each vertex's measured value minus the prediction at its azimuth lies within −0.18…+0.22 µm for 1–99 % of them (rms 0.08 µm). That is the noise of this way of measuring, on the side.
  • Over all vertices, the two artefact vertices aside, the 1st percentile is −18.04 µm and the 99th +0.95 µm.

Mesh distance per feature: the cone side from −18.4 to +1.2 µm with a median of −8.3 µm, within the orange predicted range; the top face, the ring under the cone, the pedestal side and the pedestal bottom all at 0; horizontal axis ±20 µm

The mesh distance of each feature (error terms on, error marked): minimum–maximum, 1–99 % and median, with orange boxes for the predicted ranges. Only the cone side moved; the top face, the ring under the cone and the pedestal stay within ±0.002 µm beyond 0.1 mm from the cone's edges. The mesh's edge bands along the cone's sharp edges (0.5 mm on the side, 0.1 mm on the faces) and the two artefact vertices are left out. The horizontal axis is symmetric, ±20 µm.

The mesh distance per feature (seven rows)
Feature Vertices Min…max 1–99 % Median Predicted
Cone side, more than 0.5 mm from the sharp edges 361,981 −18.386…+1.156 µm −18.12…+1.03 µm −8.26 µm −18.1…+1.0 µm
Cone side, within 0.5 mm of the sharp edges 14,452 −18.342…+8.971 µm −18.12…+1.05 µm −6.20 µm the same; the mesh pulls the reading off the prediction by up to +18.0 µm
Top face, more than 0.1 mm from the edge 404,173 −0.002…+0.002 µm 0…0 0 0
Top face, within 0.1 mm of the edge 952 −0.225…+0.143 µm 0…0 0 0
Ring under the cone (Ø180–Ø200), more than 0.1 mm from the edges; the edge band holds another 702 vertices reading −0.031…0 µm 92,572 0…+0.001 µm 0…0 0 0
Pedestal side 121,959 0 0 0 0
Pedestal bottom 383,346 0 0 0 0

One circle at mid-height: the error lies in the diameter and the centre

The paper notes that the draft standard of the time prescribed only one measurement for the frustum, the roundness of the machined surface, and that each part was measured at about mid-height (p. 522). The same was done on the mesh:

  • The horizontal circle at part height 12.7 mm, radius 96.597 mm.
  • The 14,851 side vertices within ±0.5 mm of that height, their normal deviation turned into a radial deviation (divided by cos 15°).
  • The median per 1°, then a least-squares circle.
Measured Predicted from the per-step tip Beforehand (plan, design)
Diameter change −16.25 µm −16.26 µm −16.3 µm
Centre shift towards the part's +x 10.26 µm 10.26 µm 10.3 µm
Roundness RONt 2.98 µm 2.96 µm 3.0 µm
Largest radial deviation 18.77 µm 18.77 µm 18.8 µm
Harmonics h2 / h3 / h4 0.70 / 0.52 / 0.34 µm 0.70 / 0.53 / 0.34 µm 0.70 / 0.53 / 0.34 µm

The roundness is only 16 % of the largest radial deviation, about a sixth. The error shows mainly as a diameter 16 µm smaller and an axis moved 10 µm; a check of roundness alone misses most of it.

Fitted to all the vertices instead of the 1° medians, the circle gives a diameter change of −16.20 µm, a centre shift of 10.32 µm and a roundness of 3.29 µm; the extra is the vertices' own noise.

The paper's own 10° artifact shows this shape too: a CMM out-of-roundness of 7 µm point by point, and on the ballbar an out-of-roundness of 6 µm with the trajectory's centre about 12 µm off (pp. 522–523). That was another machine with other errors as well, so the shape is compared, not the size.

Polar plot of the circle at mid-height: the radial deviation drawn from −45 µm at the centre, the grey ring at 0; the blue dots and the orange prediction coincide on a small circle shifted towards +x, the green line the measured least-squares circle; a box gives diameter −16.3 / −16.3 µm, centre towards +x 10.3 / 10.3 µm, roundness 3.0 / 3.0 µm and largest radial error 18.8 µm; a note below gives the paper's 10° artifact: CMM roundness 7 µm, ballbar centre offset about 12 µm

The radial deviation on the horizontal circle at mid-height (12.7 mm), as a CMM would trace it. Blue dots are the medians of the mesh distance per 1° (every second one drawn), orange is the prediction, and green the measured least-squares circle. The centre of the plot stands for −45 µm and the grey ring for 0. The numbers of the paper's 10° artifact come from another machine and are compared in shape only. 0.25 mm, a HiNC 3.2.46 development build with error-term branches.

The controller that knows the error

This run clears EX0C's mark but leaves the switch on, and it types in the same G54 X 50.010 as the marked run. The machine is still the one with EX0C, but now the controller's model contains the error: a controller with calibrated kinematics. Under G43.4, the controller takes the C axis' offset into account and makes up for it with the linear axes (What the Controller Sees).

  • Tool tip: from step 86 on, within 1.28 × 10⁻¹³ mm of the nominal.
  • Part: the exported cut lies within 0.0005 µm of the nominal, the two artefact vertices aside. Its eight Diff--Stats numbers equal the control run's, and the geometry-difference pictures from the four cameras equal the control run's pixel for pixel.
  • Machine coordinates: B and C equal the nominal run's and the marked run's, bit for bit. The differences in X, Y and Z fall into three groups, each matching its own formula:
Comparison Formula and meaning Measured Residual
Unmarked minus marked (both with the touch-off G54 X 50.010) RY(−B)(I − RZ(−C))·d: what calibration adds 0–20 µm long; ΔX up to 18.13, ΔY ±10.00, ΔZ down to −8.45 µm 1.4 × 10⁻¹³ mm
Unmarked minus nominal (the nominal run with G54 X 50.000) RY(−B)·d: where the C axis really is exactly 10.000 µm at every step from step 86 on; ΔX 9.06–9.96, ΔY 0, ΔZ −0.87…−4.23 µm 1.1 × 10⁻¹³ mm (from step 86 on)
Marked minus nominal RY(−B)RZ(−C)·d: the touch-off's extra 10 µm, turned by RTCP exactly 10.000 µm at every step from step 86 on 1.1 × 10⁻¹³ mm (from step 86 on)

The plan predicted “unmarked: machine X, Y and Z move up to 20 µm further”, compared with the nominal run. What was measured: compared with the nominal run, exactly 10 µm at every step from step 86 on; only compared with the marked run, which has the same touch-off, is it up to 20 µm (dilemma 5). The last row also shows that the switch itself does not change the machine coordinates: the whole difference between the marked and the nominal run comes from their different work offsets.

Left: unmarked minus marked ΔX, ΔY and ΔZ against C, ΔX reaching 18.1 µm at C = ±180°, ΔY ±10 µm at ±90°, ΔZ down to −8.5 µm; right: unmarked minus nominal ΔX, ΔY and ΔZ against B, ΔX 9.1–10 µm, ΔY 0, ΔZ −0.9 to −4.2 µm; the dots lie on the black prediction lines

What the linear axes did instead when the controller knows the error (unmarked). Left: compared with the controller that does not know it, with the same touch-off, up to 20 µm apart (at C ≡ 180°). Right: compared with the nominal machine, exactly 10 µm at every step, in a direction that turns with B. B and C are unchanged, and the tip is back on the program. Dots are measured, black lines predicted. A HiNC 3.2.46 development build with error-term branches.

In-place comparison from the left: in the “Controller unaware (marked)” frame the cone side red to yellow; in the “Controller aware (unmarked)” frame all green

The geometry difference from the left (from −X), alternating in place between two runs on the same machine with EX0C: the controller unaware of the error (marked) and aware of it (unmarked). With the controller aware, the cut comes back to the design, and the picture equals the control run's pixel for pixel. Colour scale ±0.02 mm (red = cut too deep, blue = material left, green = 0, both signs weighted alike); 0.25 mm; a HiNC 3.2.46 development build with error-term branches.

In-place comparison in the isometric view: in the “Controller unaware (marked)” frame the cone side red at the front left, turning yellow and then green to the right; in the “Controller aware (unmarked)” frame all green

The isometric view, alternating in place between the controller unaware of the error (marked) and aware of it (unmarked). Scale, grid and build as above.

The control run and the comparison pictures

The control run (switch off, with the geometry difference) is the nominal run played again: its per-step series equals the nominal run's bit for bit.

Read by hue, the pictures give values too. On the Df colour bar, blue is +0.02 mm, green 0 and red −0.02 mm, so 1° of hue is 0.17 µm. In all four views, 100 % of the control run's pixels lie within ±1 µm, at most 0.91 µm (front view).

Each of the four pictures below alternates, in place and at one camera, between the error terms on (marked) and off (control).

  • The pictures come from putting the recorded stock back on the canvas with its geometry difference. Nothing was played again.
  • The canvas shows no interface text, so the English and the Chinese canvas captures are identical byte for byte. Only the labels follow the language.
  • The cameras are HiNC's default front, left, top and isometric views, zoomed with the mouse wheel. The red −X side sits where it should: facing the left view, which looks from −X, and on the left of the front view, which looks from −Y.

In-place comparison from the left: in the “Error terms on” frame the cone side red to yellow all across; in the “Error terms off” frame all green

The geometry difference from the left (from −X), alternating in place between error terms on (marked) and off (control). With the error terms on, the cone side is cut too deep (red) from θ ≈ ±44° all the way round the −X side, deepest, −18 µm, on the −X side facing the camera; with them off, everything is green. Colour scale ±0.02 mm (red = cut too deep, blue = material left, green = 0, both signs weighted alike); 0.25 mm; a HiNC 3.2.46 development build with error-term branches.

In-place comparison in the isometric view: in the “Error terms on” frame the cone side red at the front left, turning yellow and then green to the right, the top face green; in the “Error terms off” frame all green

The isometric view, alternating in place between error terms on (marked) and off (control). With the error terms on, the −X side is cut too deep (red) and the +X side unchanged (green); with them off, everything is green. Scale, grid and build as above.

In-place comparison from the top: the cone side only a narrow ring seen from above; in the “Error terms on” frame dark red on the left and green on the right; in the “Error terms off” frame green all round

The top view, alternating in place between error terms on (marked) and off (control). Seen from the top, the cone side is only a narrow ring: with the error terms on, red on the left (−X) and green on the right (+X); with them off, green all round. Scale, grid and build as above.

In-place comparison from the front: in the “Error terms on” frame the tilted cone side red on the left, turning yellow and then green to the right; in the “Error terms off” frame all green

The front view (from −Y), alternating in place between error terms on (marked) and off (control). With the error terms on, the cone side, tilted 10°, is red on the left (−X) and turns yellow and then green towards the right (+X); with them off, everything is green. Scale, grid and build as above.

Diff--Stats of the full runs with a geometry difference and the holder replay
Run Reported leaves Surface leaves before comparison Expanded on demand New nodes NaN leaves Measured wires Unmeasured wires Target triangles
Marked, and the holder replay 1,287,023 1,257,052 16,156 46,127 2 5,141,547 1,950 2,514,298
Control, and unmarked 1,287,250 1,257,199 16,194 46,245 4 5,142,589 1,772 2,514,298

The nominal run makes no geometry difference. The control and unmarked runs have the same eight numbers, and the holder replay has the same as the marked run.

HiNC simulation, front view: the whole program played with the error terms on and the error marked; the tool and its shrink-fit holder stand above the right of the tilted frustum; the cone side red on the left, turning yellow and then green to the right

Error terms on and the error marked, the whole program played, the tool at its last retract point (front view). The T1 Ø12.7 mm end mill and its shrink-fit holder are in view; the part carries the geometry difference, red on the −X side and green on the +X side. Colour scale ±0.02 mm; 0.25 mm; a HiNC 3.2.46 development build with error-term branches.

HiNC simulation, left view: the whole program played with the error terms on and the error marked; the tool and its shrink-fit holder directly above the frustum; the −X side of the cone, facing the camera, red all across

The same moment from the left: the −X side faces the camera and is cut too deep (red) all across; the tool and its shrink-fit holder stand above. Scale, grid and build as above.

What the runs cost

All runs used private instances of a HiNC 3.2.46 development build with error-term branches, on the shared 32-thread server. This case's runs played one at a time. While the control, marked and unmarked runs and the holder replay played, though, another instance on the same server was playing another case (its 1 mm trimmed and 0.5 mm full runs), so those four wall times include that load. By the start and end times both records kept, the overlap covered the whole of the control and marked runs, the first 2.4 minutes or so of the unmarked run and almost the whole holder replay. The nominal run ran almost alone, overlapping only for its last 9 s or so. VmHWM is each instance's own peak, so it is not affected.

Play Grid Steps Wall time Peak memory (VmHWM)
Nominal, trimmed 1 mm 37,020 80.1 s 2.59 GiB (cumulative on one instance)
Marked, trimmed 1 mm 37,020 80.1 s 4.54 GiB (cumulative on one instance)
Unmarked, trimmed 1 mm 37,020 80.1 s 5.37 GiB (cumulative on one instance)
Nominal 0.25 mm 37,020 185.2 s 3.92 GiB
Control 0.25 mm 37,020 190.2 s 4.72 GiB
Marked 0.25 mm 37,020 195.2 s 5.61 GiB
Unmarked 0.25 mm 37,020 195.2 s 5.31 GiB
Marked, replayed for the holder pictures 0.25 mm 37,020 195.2 s 4.79 GiB
  • Peak memory. VmHWM is the process's high-water mark of resident memory. Each full run started on a restarted instance, so its VmHWM is that run's own peak, including the geometry difference, the export and the stock record. The three trimmed runs ran one after the other on one instance, so their VmHWM is the peak up to that point. GiB = bytes ÷ 2³⁰.
  • Wall time runs from the start of the play to the first poll that read Finished.
  • In all, the eight plays took 1,201 s, about 20 minutes. The full runs took less than the plan's estimate of about 5 minutes and under 9 GB each. The trimmed runs took 80 s each, more than the half minute the plan estimated (the base case's 1 mm plays with physics on took 20–35 s). The stop rule, 15 minutes or 12 GB for one run, was never reached.
  • The holder replay peaked lower than the marked run, 4.79 against 5.61 GiB. It recorded no stock; whether it exported a cut, the records do not say.

What it means

For a machining engineer.

  • A C axis only 10 µm off centre cuts a frustum, machined in simultaneous five axes, 18 µm too deep on the side cut at C ≡ 180°, while the side cut at C = 0 does not move at all. A touch-off can only take out the offset of one pose, here C = 0.
  • A controller with calibrated kinematics, whose RTCP knows where the C axis really is, takes the whole error out. Its X, Y and Z do the correcting: they stand up to 20 µm from where an uncalibrated controller with the same touch-off puts them.
  • In HiNC, a constant error measured on a machine can go into the model, and its shape and size on your own part show before the part goes on the machine.

For a teacher or a student.

  • How the location error of a rotary axis becomes the tool-tip offset (I − R(C))·d, and why that offset does not depend on how far the part lies from the axis.
  • A surface keeps only the part of the offset along its normal: at θ = ±25.5° the tip is about 10 µm off, but the surface only 1 µm.
  • Roundness alone shows only 16 % of the largest error; the diameter and the centre carry most of it. This is the very shape the paper saw on its 10° artifact.
  • How a real machine's touch-off differs from HiNC's P0, which measures on the nominal chain.

For someone weighing the approach.

  • Cost. The build and eight plays took about 20 minutes of server time, at most 5.61 GiB per run.
  • Predictions. They were written before the first play:
    • The tip formula holds on the cutting steps, step by step, to within 1.14 × 10⁻¹³ mm.
    • The deviation table written beforehand matches the measurement within 0.03 µm, and the circle's numbers within 0.05 µm (diameter −16.3 against −16.25 µm, centre 10.3 against 10.26 µm).
    • Against the prediction computed from each step's C with the same formula, the mesh's medians per 2° agree within 0.011 µm.
  • Misses. Where the predictions missed, the page says what was measured: which run the unmarked machine coordinates should be compared with, and that the “crescent” runs most of the way round.

Honest limits

  • One error only. This case has only EX0C. A real five-axis machine has several errors at once, for example a location error of the C axis in Y, or a tilt and a squareness between B and C, and the paper's machine had more than this one. An error term holds only constant errors. It cannot express errors that vary with position (positioning, straightness, volumetric error tables), backlash, servo mismatch or thermal growth (Machine Geometric Error).
  • The sign is chosen. The paper does not give it. With −X, the same shape would come out as material left of the same size.
  • The machine is not the paper's. This is a generic orthogonal B/C table-table machine; the paper's is non-orthogonal, its B′ axis inclined 45° from Y, so C relates to θ differently there. The paper's 7 µm and 12 µm can therefore be compared in shape only.
  • Geometry only. Physics was off, so there is no cutting force, deflection or chatter. The dent the paper measured at the entry point and the chatter on its 15° artifact are not part of this case.
  • The touch-off is typed in. HiNC's P0 measures on the nominal chain and does not take the error in the way a real touch-off does. The G54 X 50.010 of the two runs with the error on is derived, not measured by a touch-off in the simulation.
  • Next to sharp edges, the reading is off. Within 0.5 mm of the cone's sharp edges on the side, and within 0.1 mm of the edges on the flat faces, the 0.25 mm mesh pulls the reading away from the prediction, by up to 18 µm. These edge bands are listed apart and left out of the side's statistics. The two −164.5 µm artefact vertices are left out too (dilemma 7).
  • The control run has no cut of its own. Its noise floor is judged on three pieces of evidence: the pictures' hue (1° of hue is 0.17 µm, and dark or anti-aliased pixels may be a few degrees off), the per-step series and Diff--Stats.
  • Gaps in the records. executedLineCount and the messages below warning level were not kept; the records hold only warnings and above.
  • The wall times were polled every 5 s, so each can be up to 5 s late; four of them also include another case's load (see “What the runs cost”, above).

What a reader can take to their own case

  • Put the error on a branch of its own, directly upstream of the axis it belongs to. Keep the axis' own motion, its values and its role as they were (Where an Error Term Goes).
  • Type in the work offset a touch-off would find. HiNC's P0 measures on the nominal chain, while a real touch-off absorbs the shift the error causes at its pose. Derive the offset from the chain, then check it on the steps at the touch-off pose: here the 14 programmed steps at C ≡ 0 came out within 5.1 × 10⁻¹⁴ mm of the nominal (Program Zero Alignment).
  • Predict the tip offset before the first play, in closed form where one exists. A rotary axis' location error gives δ = (I − R(C))·d. It depends on C alone, so every step can be checked against it.
  • Read the part along the surface normal. A surface keeps only the part of the offset along its normal: at θ = ±25.5° the tip is about 10 µm off, but the surface only +1.0 µm.
  • Do not judge a rotary axis by roundness alone. Here the roundness at mid-height is 2.98 µm, while the diameter is 16.25 µm smaller and the centre 10.26 µm off. Measure the diameter and the centre too.
  • Start a per-step comparison where the program reaches its first programmed point. A tool-change position is a fixed machine position that a typed work offset does not move, so the steps before the first programmed point do not follow the offset's formula (dilemma 4).
  • Compare two runs step by step only after showing that their steps line up. Here every run had 37,020 steps, with the same line and contact at each one. Otherwise compare by time or by machine coordinates, as the manual says.
  • Compare machine coordinates with a run that has the same work offset. Only then does “the switch does not change the machine coordinates” hold.
  • Make the nominal cut the ideal geometry. Then the geometry difference shows the error, not the toolpath's own marks.
  • Switch off a stock record that reads on first use when one project plays at two grids. A stock written at 1 mm and read at 0.25 mm starts the fine run from the wrong cut (dilemma 2).
  • Check a replay made for pictures by its step count and its statistics. Here 36,981 steps instead of 37,020 showed that the replay was not the run it was meant to be (dilemma 6).
  • Check every extreme in the vertex data before naming its cause. Here the two −164.5 µm vertices read the same in a run that cut the nominal part (dilemma 7).
  • Prove the per-step formula on a coarse grid, and keep the fine grid for the part and the pictures. At 1 mm and at 0.25 mm the per-step series were identical, bit for bit.

Source and licence

  • Source. S. Moylan, D. Blumenfeld, M. McGlauflin, R. Fesperman and M. A. Donmez, Evaluation of Proposed Test Artifacts for Five-Axis Machine Tools, Proceedings of the ASPE 2011 Annual Meeting, vol. 52, pp. 520–523 — https://tsapps.nist.gov/publication/get_pdf.cfm?pub_id=909384. If the link moves, search for Moylan "Evaluation of proposed test artifacts for five-axis machine tools". What this page uses from it:

    • the C′ axis' location error in X of approximately 10 µm (p. 523);
    • that the draft standard prescribed only the frustum's roundness, and that each part was measured at about mid-height (p. 522);
    • the 10° artifact's CMM out-of-roundness of 7 µm, and its ballbar out-of-roundness of 6 µm with a centre offset of about 12 µm (pp. 522–523).
  • Licence. An official contribution of the National Institute of Standards and Technology (NIST), not subject to copyright in the United States; see NIST's copyright statement. The paper's first-page footnote reads:

    Official contribution of the National Institute of Standards and Technology (NIST); not subject to copyright in the United States. The full descriptions of the procedures used in the paper require the identification of certain commercial products. The inclusion of such information should in no way be construed as indicating that such products are endorsed by NIST or are recommended by NIST that they are necessarily the best materials, instruments, software or suppliers for the purposes described.

  • Attribution. “Artifact dimensions and cutting conditions after Moylan et al., National Institute of Standards and Technology (NIST), ASPE 2011. NIST does not endorse this case, HiNC, or any product used here.” The material is provided as is, without warranty.

  • What was used and changed.

    • No figure of the paper is reproduced on this page, and no NIST logo appears on it.
    • Every picture is a HiNC capture, and the charts are drawn from HiNC's per-step results and cut meshes.
    • The part, the stock, the toolpath and the program were made by the base case from the paper's drawings and cutting conditions; the fixture and the generic B/C machine are the base case's own choices, as its page tells.
    • The error's size is the paper's; where it sits, its sign and the touch-off are the agent's choices.
    • Everything on this page is simulated; no part was cut. The reader fetches the paper from NIST.

See Also