docs: add box+# calibration target procedure to distortion spec

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
sjat 2026-06-11 08:51:48 +02:00
parent a94beccaad
commit 04fc642137

View file

@ -19,8 +19,8 @@ This is a **model** limitation, not a calibration-points problem.
- Camera is **permanently fixed** relative to the bed → calibration is one-time and durable.
- Correction strategy: **bend the overlay** to match the raw (curved) video. The camera
image is left untouched (no per-frame image rectification).
- Calibration budget: **~812 points** jogged to known machine X/Y across the bed,
including near the corners (where distortion is worst).
- Calibration budget: **~1216 points** jogged to known machine X/Y across the bed,
including near the corners (where distortion is worst). See *Calibration target* below.
- Keep the existing overlay pipeline shape: `machine-mm → image-point` for drawing, and
`image-point → machine-mm` for click-to-set-origin / drag-to-rotate.
@ -92,6 +92,32 @@ video click (px)
→ set work origin / rotation
```
## Calibration target (practical procedure)
A **box + "#"** drawn on the bed: lines at the thirds of each axis, i.e.
`x ∈ {0, ⅓, ⅔, 1}` and `y ∈ {0, ⅓, ⅔, 1}`. Their 16 intersections are the calibration
points — **12 on the perimeter** (4 corners + 2 per side) plus **4 interior crossings** at
the centre of the "#". Click all 16 in the feed.
The 4 interior points matter: a polynomial constrained only on the boundary can wiggle in
the interior, so the centre crossings pin the fit where edge points can't.
**Capture by jog-and-mark, not ruler-and-guess:** jog the spindle to each target
coordinate and mark at the tip, so the commanded machine coordinate is exact and the mark
sits exactly under the tip. Then click each mark in the video.
For the 2440×1220 bed the 16 targets are every combination of:
```
X: 0 813.3 1626.7 2440
Y: 0 406.7 813.3 1220
```
Interior four: (813.3, 406.7), (1626.7, 406.7), (813.3, 813.3), (1626.7, 813.3).
This 16-point spread also clears the degree-3 minimum, so escalating from degree 2 to 3
needs no extra capture.
## Migration
The committed default calibration in `dist/config.json` is a homography and **will not