Skip to content
Calibration

Stop waving a board at the rig. Let the room hold still.

Fix markers to the floor and up the masts, and every camera solves against the same constellation. Nothing moves, so nothing needs to be synchronised, and one still per camera is a complete calibration. Design the field here and prove it solves before you print a single sheet.

0–NCameras, no pairwise choreography
StaticNo blur, no rolling shutter, no sync
One stillPer camera, to recalibrate
ProvenConnectivity checked before printing
Process

Five steps, one of them repeatable forever

The whole procedure, end to end. Once the field is mapped, everything after it is one still per camera — including every recalibration you will ever do on this floor.

01

Print and mount

Generate the field below, print at 100%, measure one marker with a rule, and tape the sheets down — floor markers flat, mast markers facing across the volume. The measured edge length is the map’s metric scale, so it is the one number to get right.

02

Walk the field

One phone, thirty or more stills, sweeping the whole field from different positions and heights. The app guides live: which markers are still unseen, and which groups have never shared a photo. Thirty is not ritual — with ten stills on a short arc the far markers land ~25 mm off; with a thirty-still sweep, under 5 mm.

03

Solve and freeze

The map solves in seconds on the phone, anchors itself to the floor plane — gravity, level and height come from the floor markers — and reports the floor’s measured flatness, naming any marker sitting proud of the plane. The map then never changes.

04

One still per camera

Each rig camera photographs the field once. No synchronisation, no choreography, no overlap requirements between cameras — the field is the common reference. Each camera gets a verdict with its position known to ±millimetres, from the fit’s own covariance.

05

Recalibrate in one still

A bumped tripod is one more still for that camera — and by construction it cannot disturb the map or any other camera. If every camera suddenly fails its residual bound at once, the field moved, and the app says which of the two happened.

Plan

Design the field

Describe the rig and the tool lays out the markers, sizes them for the far corner of the volume, and tells you whether the result actually ties every camera into one solve.

Rig

32 cameras. Nothing here caps the count — the solver treats the rig as a graph, so one camera and sixty are the same problem at different sizes.

Marker field
Cameras

A marker on a wall has no board around it to corroborate a weak read, so it is held to a stricter standard than one inside a ChArUco square. Five pixels per module is dependable; three is where detection starts dropping frames.

Solid. Every camera sees at least 4 markers, the rig is one connected graph, and no single marker is holding it together.
12345678

Plan view, 5.2 m across. Click a camera to light up the markers it can actually use. Dim floor markers are seen by fewer than two cameras — paper you do not need to print.

Cameras
32 on 8 masts
Markers
20 floor + 32 mast
Marker size
110 mm · far corner 8.4 m
Markers per camera
4–9
Wasted markers
12 seen by <2
Print pack
52 × A4 · 1 per sheet
Why

What a fixed field buys you

The board method is not merely slower at scale. It fails in ways that are hard to see and hard to fix.

Cameras stop needing to agree

A waved board only links two cameras if both catch it in the same instant. Past four or five cameras most pairs never do, and the operator is choreographing overlap they cannot verify. With a fixed field every camera localises against the same markers, so two cameras that never share a view are still rigidly related.

Nothing moves, so nothing smears

A moving board on a rolling-shutter sensor is photographed at slightly different places down the frame, and two phones catch it at slightly different moments. Both errors go straight into the corner positions. A static field removes the entire class: calibration no longer depends on the sync you have not finished proving.

The floor becomes the world

Floor markers are coplanar by construction, which fixes the ground plane and with it gravity, level and the origin — the frame every downstream capture is expressed in. Getting that from a handheld board means inferring it; getting it from the floor means measuring it.

Recalibration stops being an event

Someone will knock a tripod. With a field, the fix is one still per camera and a re-solve, because the reference is still taped to the floor where it was. There is no session to re-run and no operator to re-book.

The catch, and the reason the planner leads with it: the field only works if the camera-to-marker graph is connected. Markers are the edges. A rig can have generous coverage everywhere and still split into two groups sharing no marker — each half solvable, their relative pose unknowable. Mast markers alone do exactly this, because each mast faces inward and is only ever seen from the far side.

Build

Printing and mounting

The field is a measuring instrument distributed across a room. It is only as good as the least careful thing you did to it.

Print at 100%, then measure one marker

Every print dialogue defaults to shrinking the page, and a driver can scale without telling the application. The printed edge length is what carries metric scale into the entire rig — get it wrong uniformly and every capture comes out the wrong size, perfectly shaped, with nothing visibly broken.

Matte, heavy, and flat

Gloss mirrors your lights into the corners the solver is trying to localise, and a curled floor marker is no longer the flat square its size implies. Mount floor markers on stiff board or laminate them; tape all four edges, not two.

Mast markers face across the volume

A marker on a mast is there for the cameras on the far side, so it faces inward. That is what rescues the low cameras, whose view of the floor is too grazing to use.

Never move a marker mid-shoot

The field is the world frame. Move one marker between calibration and capture and you have silently redefined the coordinate system for every camera that could see it. If something gets kicked, re-shoot the field — it takes one still per camera.

Keep IDs unique, and keep the map

Two markers sharing an ID is the one failure that produces a confident, completely wrong answer, because the solver will fold two places in the room into one point. The generator allocates from a single range and the field file records where each ID went.

Leave the floor under the subject bare

Markers where the action happens get occluded exactly when every camera is looking, and get walked on. The keep-out radius exists for both reasons.

Intrinsics

One thing a field cannot do

Lens distortion is only constrained by data taken where distortion lives — near the edges of the frame, with the target close and steeply tilted. That is a board's job, once per camera, before the field ever comes out.

Shoot this board close in — half a metre to a metre and a half — filling much of the frame, tilted through both axes to about 45°, and reaching all four corners. Lock focus and stabilisation first: focus breathing moves the focal length and stabilisation moves the principal point, so a phone left on automatic has different intrinsics from frame to frame. Then leave them locked for the field and the shoot.

The board carries its own geometry in a QR, so pointing a camera at it is the whole configuration step. Get this pass right once and the field pass is only ever solving for where the cameras are.

Start from
Board
Sheet
Will it read at distance?

Comfortable — 30 mm squares clear the 20 mm needed at 2 m.

The chessboard corner is not the limit; the marker is. Its 5×5 payload plus border is seven modules across three-quarters of a square, so the ArUco decode gives out roughly twice as far away as the corner detector does.

100.0 mm — measure this. If it differs, the page was scaled.7 × 9 squares · square 30 mm · marker 22.5 mm · DICT_5X5_1000 · IDs 0–30Board outer edge 210 × 270 mm · 48 interior cornersMeasured W __________ mm ÷ 7 H __________ mm ÷ 9 — both must agree to 0.3%Print at 100% / Actual Size — never “fit to page”. Mount flat on a rigid, matte surface.
Markers
31 · IDs 030
Corners
48
Board
210.0 × 270.0 mm
Square / marker
30 / 22.5 mm
Sheet
A3 portrait · QR 22 mm
VVB1:{"cols":7,"id0":0,"mk":0.0225000,"rows":9,"sq":0.0300000}
After printing, measure it

Measure the outer edge of the printed board along both axes and enter them. Measuring the full span rather than one square divides your ruler error by the number of squares.

Manual

The same solve, from a folder of stills

Prefer to inspect before you trust? Skip the in-app compute entirely: photograph the field once from every camera, copy the files, and run the desktop tool. Same detector, same solver, same output — rerunnable forever.

Three steps, no ceremony

1. With the rig standing, take one still per camera — Beacon’s own files already carry the camera in the name (…_Still000_Node03.heic) and each still’s intrinsics in its .still.json sidecar, so copying the capture folder is the whole export.

2. Run the compute against the field file this page generated: vvFieldSolve --field field.json --stills ./stills --out ./session

3. Read the verdict — per camera: pass or a named reason, marker count, residual, and position known to ±millimetres. The output is calibration/transforms.json plus a COLMAP seed, byte-compatible with the on-device solve; downstream tooling cannot tell which path produced it.

Extra stills from any camera join the same joint solve as enrichment. A measured print size corrects every marker at once with --measured-size-mm; foreign images without sidecars take --fx. A camera whose still shows no markers fails by name — never silently absorbed.

Checking

What the numbers mean

A calibration should hand you numbers you can act on — and be honest about which number proves what.

The headline is millimetres, not pixels

The number the whole procedure exists to produce is the one-sigma error of a point triangulated in the middle of your volume — “a point at the subject lands within about 2 mm”. It is computed by propagating the fit’s own measured noise through the solved camera geometry, so it reflects the rig you actually built: cameras crowded on one side of a subject give a visibly worse figure than the same cameras spread around it, at identical pixel residuals.

What reprojection error can say

Expect roughly 0.2–0.5 px. Above ~1 px something is wrong — a bowed sheet, a kicked marker, motion in a still. And suspiciously low is also a finding: well under 0.1 px on a large rig usually means too few observations for the parameters, not a perfect calibration.

What it cannot say

A low residual means the solve agrees with itself — not that it is right. Markers printed 4% small give a perfectly self-consistent solve of a room 4% the wrong size, and published measurements on real lenses show systematic bias dominating while the residual sits below 0.1 px. That is why the printed edge length is measured with a rule, and why uncertainty is reported separately from residual.

Rules of thumb for a healthy rig: camera position known to better than 0.1% of its distance to the volume (8 mm at 8 m — a good rig manages 2–5), orientation to half a milliradian, and triangulation at the volume centre in low single-digit millimetres, improving roughly with the square root of the camera count.

Planning a rig?

Send the volume, the mast count and the cameras per mast — field layout is easier to get right before the hardware is bolted together.