System designTroubleshooting

Static camera calibration accuracy: why moved parts drift off target

Static camera calibration accuracy drifts the moment the part moves or rotates: measure the residual, then fit the affine camera-to-robot map that fixes it.

LumaSpec Vision10 min read Share on LinkedIn

On this page 9 sections
  1. 01The decision
  2. 02Why the error hides at the taught pose
  3. 03Likely causes, in order of probability
  4. 04Two tests that localise the fault
    1. Can the camera see the miss?
  5. 05Worked example: 0.2° of rotation residual at a 150 mm lever
  6. 06The fix: fit all six affine parameters
  7. 07When the usual answer is wrong
  8. 08Prevention: keep the map valid
  9. 09Questions

A fixed 2D camera that guides a six-axis robot should put the tool centre point (TCP) on the same feature wherever the part sits in its tray. When the TCP lands dead-on at the taught position but visibly misses after the part is moved or rotated, the robot and the camera are both doing their jobs — the camera-to-robot map between them is incomplete. That is the classic static camera accuracy fault: exact at one pose, wrong everywhere else. You will localise it with two bench tests, compute the residual from the miss you can already see, and rebuild the map as an affine fit that holds across the whole tray.

The decision

If the touch point repeats exactly while the part is untouched and drifts when it moves or rotates, re-teaching the offset will never fix it. The taught offset is one constant, exact at one part pose; a moved or rotated part needs a map that carries translation, scale and rotation together. Rebuild the camera-to-robot map as a full affine fit taken with the part deliberately rotated, then release the cell when the measured residual at the tray corners and after 90° of part rotation stays under a third of the pick tolerance — 0.17 mm for a ±0.5 mm cell.

If the miss appears even when the part has not moved, the fault is on the vision side instead; vision pick error under rotation: diagnose position drift covers that case.

Why the error hides at the taught pose

Most static-camera set-ups end with one correction constant: the taught touch point minus the point vision reported at the taught pose. That constant absorbs every error in the chain — pixel scale, camera rotation, lens distortion, even a slightly wrong TCP — into a number that is exact at exactly one part position.

Move the part and two of the absorbed errors come back on their own:

  • A scale residual δs grows with distance d from the reference pose: miss = d × δs.
  • A rotation residual θ between pixel axes and robot axes grows with the lever r: miss = r × θ.
e_scale ≈ d · δs d in mm, δs as a fraction e_rotation ≈ r · θ r in mm, θ in radians

The rotation term is the one that surprises people. One degree is 0.0175 rad, so each degree of camera-to-robot misrotation costs 1.75 mm of miss per 100 mm of lever, and the cost climbs linearly with distance from where you calibrated. Rotating the part in place exposes the same term, with the feature's own radius as the lever.

Likely causes, in order of probability

Cause Signature Test that confirms it
Map fitted at a single pose (translation and pixel scale only) Exact at the taught pose; miss grows with distance and with part angle Grid test and rotation test below
TCP X/Y taught wrong, or the tool changed after teaching Same miss size and direction everywhere; direction follows the approach angle Touch a fixed reference pin from two approach angles
Detection reports a different physical point as the part turns The overlay marker sits off the feature in the live image Image overlay at each rotation step
Camera moved since the fit (bumped stand, loose bracket) Uniform offset everywhere — your taught pose repeats, so unlikely here Re-touch the reference target
Auto exposure or gain shifting the centroid Sub-pixel jitter, far under 0.1 mm Lock every auto mode and re-run

The exact repeat at the taught pose clears the robot, the TCP and the detection at that one point, which leaves cause 1 as the default for this symptom pattern.

Two tests that localise the fault

  1. Grid test (scale). Without rotating anything, place the part at five positions: tray centre plus four corners, say ±100 mm in X and Y. Touch the feature at each and log the miss against the distance from the taught pose. A miss that grows in a straight line from zero at the centre is a scale residual; a constant vector at every position means the camera itself moved.
  2. Rotation test (rotation term). Return the part to the taught pose and step it through the angles in order — 0°, 30°, 60°, 90°, 120°, 150°, 180°. A miss that grows with angle and whose direction rotates with the part means the map has no valid rotation term.
  3. Overlay (detection). At each pose, draw the detected pick point into the live image. Marker on the feature in the image but TCP lands elsewhere: the transform is at fault. Marker drifting off the feature in the image: fix detection or lighting first.

Clamp the part to a manual stage for the rotation steps:

Camera standsManual XY + rotation stage, 60 mm, dia. 60 mm base (LS-MNT-0220)LS-MNT-0220
Type
Rotary stages
$269.00View partBuild a system with it

Can the camera see the miss?

Keep one pixel no larger than a third of the tolerance: 0.17 mm per pixel for a ±0.5 mm cell. A 300 mm tray at that scale needs about 1,800 pixels across (300 ÷ 0.17), so any current 5 MP or 12 MP sensor resolves the fault with room to spare.

Camera resolution for the smallest feature
Units
Pixels needed
–
Sensor size
– MP
Smallest sensor that fits
–
Pixel on the part
– mm
Pixels across the feature, that sensor
–

Pixels needed = field / feature × pixels per feature on each axis (field incl. margin). The lens must resolve the pixels too: Nyquist = 1000 / (2 × pixel µm) lp/mm.

Find cameras with enough pixels Open the full calculator

The LS-CMR-0166 is a 12 MP USB3 area scan camera with a 4000 × 3000 sensor.

Area scan cameras12 MP USB3 area scan camera, IMX226, 1/1.7" rolling shutter, 30 fps, 4000 × 3000 resolution (LS-CMR-0166)LS-CMR-0166
Sensor format
1/1.7"
Interface
USB3
Resolution
12 MP
Shutter
Rolling
$560.00View partBuild a system with it

At a 300 mm field that sensor gives 0.075 mm per pixel, so detection noise sits near 0.01 mm — about fifty times tighter than the tolerance. The sensor is never the limit in this fault; the map is.

Worked example: 0.2° of rotation residual at a 150 mm lever

Inputs and where each comes from:

  • Lever r = 150 mm: a pick feature sitting 150 mm from the taught reference pose, partway across a mid-size tray (the moved-part case).
  • Rotation residual θ = 0.2°: an example value in the range a single-pose set-up leaves behind; read your own as miss ÷ lever straight off the rotation test.
  • Pick tolerance e_tol = ±0.5 mm: a common release target for tray picking.

Rule: a residual misrotation displaces any feature in proportion to its distance from the reference pose.

Arithmetic: θ = 0.2° × π ÷ 180 = 0.00349 rad, so miss = 150 mm × 0.00349 = 0.524 mm — call it 0.5 mm, enough to see and enough to fail.

Scale cross-check in the same cell: a 0.5% scale residual at 200 mm gives 200 × 0.005 = 1.0 mm of miss.

Decision: the acceptance limit is θ_max = e_tol ÷ r = 0.5 ÷ 150 = 0.0033 rad = 0.19°. A translation-only map cannot meet that, because it never fits rotation at all. Tighten the tolerance to ±0.2 mm at the same lever and the limit drops to 0.08°, reachable only with a real fit that includes the corner points.

The fix: fit all six affine parameters

Replace the single correction constant with the affine map from detected pixels (u, v) to robot base coordinates (x, y):

x = a·u + b·v + c y = d·u + e·v + f

Six unknowns, two equations per touched point, three non-collinear points as the mathematical minimum. In practice:

  1. Mark one feature the camera sees from the home pose — a scribe mark, a hole, a tooling ball.
  2. Touch it with the TCP across nine to twelve part poses: tray corners and at least three part angles between them.
  3. Least-squares fit the six coefficients; a spreadsheet line fit or your vision library's affine estimator both work.
  4. Publish the fitted map as the static transform the robot reads at pick time. Robot hand-eye calibration: how nine-point alignment works shows the point-taking mechanics, and publish eye-to-hand calibration as a static camera transform shows the publishing step.
  5. Re-run the grid and rotation tests against the fitted map and release at a corner residual under a third of tolerance; eye-to-hand calibration: verify the camera-to-base result is the acceptance procedure.

Resist re-teaching after a miss: every re-teach re-absorbs the whole residual at the new pose and moves it everywhere else — which is exactly how the cell passed on day one and drifted on day two.

When the usual answer is wrong

Three patterns point away from the affine fix:

  • The same miss everywhere, rotated poses included. The map is fine and the TCP is not, or the tool changed after teaching. Touch a fixed reference pin from two approach angles; symmetric misses mean re-teach the TCP. The gap between a taught TCP and measured accuracy is a documented failure mode on industrial robots — one TCP calibration versus actual accuracy drift investigation walks the measurement end to end.
  • A uniform offset that grows over weeks. Something physical moved: stand, bracket, or the robot's own mastering. Re-run the single-reference-target check in robot cell vision recalibration with one reference target. If the target reads moved, recalibrate the camera; if it reads unchanged while picks still miss, suspect robot axis calibration — the same commanded-versus-measured drift is analysed for servo axis accuracy drift on a CNC mill.
  • The marker leaves the feature in the image as the part turns. Detection is latching onto a different physical point — a glare edge, an asymmetric fillet — and no transform can fix that. Change the lighting angle or the feature model first, then repeat the tests.

Prevention: keep the map valid

  • Bolt the camera to a rigid stand and mark every joint with paint. A moved mark voids the map on sight.
  • Lock the focus and iris mechanically after the fit so pixel scale cannot drift; camera focus during calibration: set a repeatable position covers the procedure.
  • Turn every auto mode off — exposure, gain, white balance. Brightness drift nudges centroids and quietly ruins residual trending, as laid out in camera image brightness drifts over time: turn every auto mode off.
  • Start each shift with a one-reference-target touch and log the residual. Recalibrate when the trend breaks, not when a pick fails.
  • Keep the rotation test in the acceptance run, and repeat it after any collision, lens cleaning or lighting change.

For the mount itself:

Camera standsMachine vision camera stand, professional slide-table type, height 700 mm, 400 x 450 mm base (LS-MNT-0040)LS-MNT-0040
Type
Camera stands
$629.00View partBuild a system with it

To choose hardware for the cell, start at the area scan cameras and camera stands categories, or go straight to the camera step of the configurator. More system-level fault finding sits on the systems topic page, and we are reachable through the contact page if you want a residual log reviewed before release.

Questions

How many reference points does an affine camera-to-robot fit need?

Three non-collinear points are the mathematical minimum: each touched point supplies two equations and the fit has six unknowns. Use nine to twelve pairs spread over both position and rotation so detection noise averages out, and include at least one point at a tray corner — corner points anchor the scale terms that single-pose set-ups leave unfitted.

What rotation residual is acceptable for a 0.5 mm pick tolerance?

Divide the tolerance by the longest lever in the workspace. For ±0.5 mm with features up to 150 mm from the reference pose, 0.5 ÷ 150 = 0.0033 rad, about 0.19°. At a 100 mm lever the same tolerance allows 0.29°, and halving the tolerance halves the limit. Treat the result as a hard acceptance number for the rotation test.

Can I fix the drift by re-teaching the touch offset at each new position?

You can, but it does not scale. Each re-teach absorbs the whole residual into a constant that is exact at that one pose and wrong everywhere else, so a tray of many positions needs a re-teach per position and none of them survive part rotation. One affine fit replaces every one of those constants.

Does camera resolution set the accuracy limit of a static pick?

Almost never. Sub-pixel edge detection locates a feature to roughly a tenth of a pixel, so a sensor at 0.075 mm per pixel contributes about 0.01 mm of noise — fifty times tighter than a 0.5 mm tolerance. In this fault the map, not the sensor, sets the accuracy limit.

How often should the camera-to-robot map be rechecked?

Touch one reference target at every shift start and after any collision, lens cleaning, lighting change or stand adjustment — seconds per check. Re-run the full grid and rotation fit only when the target reads moved or the corner residual trends upward across shifts. A map on a rigid, undisturbed mount holds for months; a bumped one is void the same day.