Why calibrate the board shape
Use this page to see why MVIS can solve the shape of the calibration board, and what a flat solve does on ours. You need nothing to run here; the numbers come from our runs on VI-Rig recordings.
The answer first:
- Our board is not flat: an AprilGrid on a panel, it is a saddle 10–11 mm peak to peak on this VI-Rig mount.
- A flat solve hides it: camera-only fx comes out 0.4–1.0 % low on average; camera–IMU puts the gyro scale
about 1.1 % high and a lever about 9 mm off. No check fails; only the camera-only
board_point_biasdiagnostic hints at it. - What MVIS solves: with
estimate.board_points: true, one height per corner, in camera-only and camera–IMU runs. Kalibr and Basalt treat the board as flat. - The cost: 144 more unknowns. On these runs the solve took no longer, and fx repeated no worse.
- Off by default: we turn it on for VI-Rig.
How to turn it on: A board is never flat.
The board is an AprilGrid with 6 × 6 tags of 88 mm, 144 corners. The recordings are the VI-Rig 4 IMUs + 4 cameras
set, recordings 1–15, all on one mount of the board. Every solve in sections 1–4 ran on MVIS main f902d39
(2026-11-11), unless a line says otherwise.
1. The board is a saddle
Section titled “1. The board is a saddle”MVIS estimated the height of every corner four ways, with different cameras and solves:
- ELP left camera (rolling shutter), camera-only, recordings 3–5;
- T265 fisheye 1 (global shutter), camera-only, recordings 3–5;
- ELP stereo pair, camera-only, recordings 3–5;
- camera–IMU, the ELP stereo pair with the T265 and Xsens IMUs, recordings 3–5 with all corners (and recordings 1–15 with two corners per tag, for the recording-to-recording row).
| Measure | Value |
|---|---|
| Out of plane, peak to peak (all-corner estimates) | 10.5–11.0 mm |
| Out of plane, rms (all-corner estimates) | 2.3–2.4 mm |
| Shape | A ridge across the middle (+3 to +4.5 mm); two opposite corners sag to −5 to −6 mm |
| Agreement between the four estimates | 0.04–0.32 mm rms, correlation 0.991–0.9999 |
| Recording to recording | 0.05–0.16 mm rms; recordings 1–2 sit about 0.4 mm from the 15-recording mean |
Solves with two corners per tag report 1.6–2.7 mm rms and 9.1–11.7 mm peak to peak over all 144 heights, half of which have no data (section 4), so the first two rows leave them out.
- Agreement: the three estimates that use the ELP left camera agree within 0.04–0.13 mm. The T265 estimate, from a different camera and lens, is 0.23–0.32 mm from them. Each comparison removes the best-fit plane first.
- Not low-order: a biquadratic surface still leaves 0.9–1.0 mm rms and a biquartic 0.5 mm. So a few bending terms would not replace one height per corner.
- Per mount: the shape depends on how the board is mounted. On the 5 IMUs + 4 cameras recordings, a
different mount, a run on MVIS
644f7a2(2026-11-06) estimated 7.3 mm peak to peak, and that shape correlates only 0.60 with the stored 15-recording shape of this mount (from earlier regression rows, not recomputed against thef902d39shape).
2. Camera-only: a flat board pulls the focal length down
Section titled “2. Camera-only: a flat board pulls the focal length down”Same recordings, 3–5, equidistant model, all 144 corners, solved once with the shape and once with a rigid flat board:
| Camera | Board | Reprojection rms (px) | fx (px), mean ± std over 3 recordings | cy (px) |
|---|---|---|---|---|
| ELP left (rolling shutter) | shape | 0.445 | 428.12 ± 0.88 | 267.32 ± 0.28 |
| flat | 0.614 | 426.58 ± 1.17 | 270.57 ± 0.75 | |
| T265 fisheye 1 (global shutter) | shape | 0.427 | 286.72 ± 0.44 | 404.63 ± 0.47 |
| flat | 0.573 | 284.29 ± 0.63 | 406.63 ± 0.90 |
- Residual: estimating the shape cuts it by 27.5 % on the ELP and 25.5 % on the T265 (25–29 % across all camera-only arms, including two corners per tag and stereo).
- Focal length: the flat board reads fx 0.36 % low on the ELP and 0.85 % low on the T265, low on every recording (0.25–0.48 % and 0.77–0.93 %). With two corners per tag the gaps are 0.42 % and 0.99 % (up to 1.09 % on one recording).
- Principal point: flat also moves cy, by +3.3 px on the ELP and +2.0 px on the T265.
- Stereo too: the ELP stereo pair shows the same shift, fx 0.48 % low flat (two corners per tag). Flat also moves its baseline by 0.3 % (59.23 to 59.04 mm), the stereo rotation by 1.2–1.8 mrad (log(R), mostly about y) and the rolling-shutter readout by 0.16 ms.
- With the IMU: in the camera–IMU solves of section 3, on recordings 3–5, ELP left fx with the shape is 427.9 px (two corners per tag) and 428.2 px (all corners), against 428.1 px camera-only, so within 0.2 px. The flat-board fx bias there is smaller, 0.1–0.2 %: +0.4 ± 0.6 px over 15 recordings, with the opposite sign on 3 of them, and +0.8 px with all corners on recordings 3–5.
3. Camera–IMU: a flat board shows up as gyro scale and lever
Section titled “3. Camera–IMU: a flat board shows up as gyro scale and lever”15 recordings of the ELP stereo pair with the T265 and Xsens IMUs, camera–IMU, two corners per tag. Each is solved once with the shape estimated (starting from an earlier 7.7 mm estimate of the same board) and once with a rigid flat board. A good gyroscope reads a scale close to 1.
Mean ± std over the 15 recordings, with the range in brackets:
| Quantity | Flat board | With the shape |
|---|---|---|
| T265 gyro scale x | 1.0117 ± 0.0029 [1.0061–1.0161] | 1.0000 ± 0.0011 [0.9986–1.0021] |
| T265 gyro scale y | 1.0148 ± 0.0029 [1.0084–1.0188] | 1.0034 ± 0.0012 [1.0016–1.0058] |
| T265 gyro scale z | 1.0046 ± 0.0007 [1.0035–1.0066] | 1.0039 ± 0.0003 [1.0034–1.0044] |
| Xsens gyro scale x | 1.0115 ± 0.0032 [1.0050–1.0163] | 1.0008 ± 0.0012 [0.9991–1.0033] |
| ELP left lever z | −4.6 ± 3.3 mm [−8.5 to 0.9] | 4.6 ± 1.3 mm [1.9 to 6.7] |
| Reprojection rms | 0.61 ± 0.03 px [0.57–0.65] | 0.33 ± 0.02 px [0.30–0.39] |
- Gyro scale: with the shape, every axis of both IMUs is within 0.6 % of 1 (the largest is T265 y, 1.0058, on recording 11; the Xsens is within 0.33 %). Per recording the shape lowers T265 x and y by 1.17 ± 0.28 % and 1.13 ± 0.23 %, and the Xsens x by 1.07 ± 0.30 %, with the same sign on all 15. The T265 z axis reads about 0.4 % high either way.
- Accelerometer: the T265 accel scale z moves by −0.31 ± 0.20 %; x and y barely move.
- Lever: the shape moves ELP left lever z by +9.3 ± 2.7 mm per recording, and the lever repeats better between recordings (std 1.3 mm against 3.3 mm flat).
- Time offsets:
t_gamoves by −0.18 ms andtdby under 0.1 ms. - Start value and corner set: on recordings 3–5, solving all 144 corners from a flat start (instead of two per tag from the 7.7 mm estimate) gives nearly the same answer: gyro scale within about 0.1 % and lever z within 1 mm (on average 0.08 % and 0.9 mm), at about 1.5× the solve time. Both changed at once, so this run does not separate them.
- No alarm: the flat solves converged, and their residual (0.61 px) failed no check. In camera-only runs the
per-corner
board_point_biasin the output shows the twist (median 0.15–0.27 px flat against 0.06–0.13 px with the shape, in the section 2 runs); camera–IMU output has no such diagnostic.
On the other mount, on MVIS main as of 644f7a2 (2026-11-06), on 7 recordings of the 5 IMUs + 4 cameras rig,
turning the shape off moved the camera extrinsics by a median 6.8 mrad in rotation (gauge-free; 7.4–8.0 mrad
native), 1.3–2.2 mm in lever (over the EUCM and kb4 models and two lever frames) and 1.8 px in cy, over 28
camera rows. That run compared extrinsics only, not gyro scale or fx, and was not repeated on f902d39.
4. The cost
Section titled “4. The cost”- More unknowns: 144 heights. Each has a weak 3 mm prior (
board_height_sigma: 0.003, in m). - Solve time: not longer on these runs. Camera-only with all corners, shape against flat: ELP 21.7 against 22.7 min, T265 12.1 against 13.9 min, ELP stereo 34.0 against 33.9 min (means of 3, on 2 threads). Camera–IMU: +3 ± 35 s on 10–14 min solves.
- fx repeatability: no worse with the shape. Camera-only (3 recordings, too few to rank) the fx scatter with the shape is 0.55–0.93× the flat scatter (ELP 0.88 against 1.17 px, T265 0.44 against 0.63 px, all corners). Camera–IMU over 15 recordings it is 0.62 against 0.91 px. An earlier study on development code (2026-10-31), whose flat runs let each corner move under a 1 mm prior, found fx repeating 2–4× worse with the shape; these runs do not show that.
- Two corners per tag see half the heights: with
corner_subsample: two_anti(the camera-only default; our camera–IMU configs set it too, and the camera–IMU default isall), a solve observes 72 of the 144 corners. The other 72 heights have no data and stay near their start values.
Conclusion: on this mount, a flat solve differs from the shape solve by 0.4–1.0 % in camera-only fx (on
average), about 1.1 % in gyro scale and about 9 mm in lever, and no check fails; only the camera-only
board_point_bias hints at it. With the shape, the residual drops by about a quarter and the gyro scales sit
within 0.6 % of 1, so we read the flat numbers as biased. On these runs the shape cost no repeatability and no
solve time.
MVIS keeps estimate.board_points off by default. We turn it on for every VI-Rig solve, camera-only and
camera–IMU. Turn it on when your board is measurably not flat, for example when camera-only board_point_bias
shows a smooth pattern across the board or a straightedge shows a gap. Our other rigs keep it off. In a
camera–IMU run you can start from an earlier estimate with board.heights_file (for example the
<output>_board_shape.yaml a previous run wrote); camera-only runs do not read it yet. See
A board is never flat.
Limits
Section titled “Limits”There is no measured reference shape. The four estimates agree with each other, but none was checked against a metrology scan of the board. The MVIS authors ran every solve.
The gyro-near-1 argument is a prior, not a measurement. The same T265 reads its accel scale about 2 % high with or without the shape.
One board, one mount. Sections 1–4 use one mount of the board on one rig. The other mount appears
only in the shape comparison of section 1 and the extrinsic shifts at the end of section 3, both from
644f7a2; other mounts were not tested.
Small camera-only sets. Section 2 has 3 recordings per camera, with the equidistant model only. The stereo runs used the regression settings (two corners per tag, 5 Hz with the reference camera at 10 Hz, 15 iterations), not the mono settings (10 Hz, 30 iterations).
Not re-run with the shape on and off: the camera–IMU setup that also puts the T265 camera in the solve. Why the flat-board fx bias is smaller in camera–IMU than in camera-only runs was not tested.
Solve times are from 2-thread runs on a shared, loaded machine.
The recordings are the VI-Rig datasets on the Hub,
calibench-vi/datasets. The board config, with the shape
on, is in the 4 IMUs + 4 cameras example.
Licence CC BY-NC 4.0, gated; commercial use by request. Please cite the VI-Rig dataset and MVIS.