Running Calibrations
The Run calibration workspace (⌘5) drives a calibration end to end without leaving the app: choose a dataset, review the manifest and the configuration, click Run. It runs any of the seven problem types and all four target detectors; the manifest it edits is the dataset manifest.
Choosing a Dataset
Presets
A card grid of public datasets. Two are built in:
kuka_1: single-camera hand-eye, a KUKA arm with a 17×28 chessboard;ds8: a three-camera rig hand-eye dataset, published as open data (doi:10.15482/USDA.ADC/1340592).
The app carries no dataset. The first click on a card downloads the sample from its publisher into the platform cache (VISION_CALIBRATION_DATA overrides the location), checks every file against its SHA-256 and reuses it afterwards, so the cards work in an installed app as well as in a checkout; the first click needs a network connection, and a failed download is reported in the status banner. Clicking a card loads its manifest and applies the configuration overrides the preset carries. Some datasets need non-default settings that the topology's schema defaults do not give, for example Scheimpflug sensors or an eye-to-hand rig; the preset states them. The registry lives in app/src/workspaces/RunWorkspace/presets.ts.
Sniff Folder
Pick an arbitrary dataset folder and the app infers a draft manifest with the folder sniffer. It reads file names and structure only. Fields it cannot determine are left unresolved and block Run until you fill them in; a red badge marks each one. This is the unresolved-fields rule of the manifest in action.
Reviewing the Setup
The Manifest and Calibration config sections are collapsible, schema-driven forms generated from the same JSON Schema the Rust types derive. Every field shows its default and description. An Advanced JSON editor is available for anything the forms do not expose.
Editing the form clears the preset selection, so nothing silently reverts your edits. To re-run with different settings, edit the config and click Run again.
Run
While the solve runs, a stage checklist (detecting features, solving, exporting) with a live elapsed clock replaces a plain spinner; beside the active stage it shows the images detected so far, then the calibration step and its solver iteration with the cost. A Cancel button stops the run at its next image or solver iteration. A cancelled run shows a distinct "Run cancelled" banner, not an error, and produces no export.
On success the app flashes a status banner and navigates to Diagnose after a short delay, with the fresh export loaded. With a project open, the run is first saved as the project's next runs/run-NNN/ and the export is loaded from there; the banner names the run. Detection goes through the detection cache, so a second run on the same images skips it.
When the runner meets an ambiguity it refuses to guess (a hand-eye dataset with no pose_pairing, for example), a modal dialog asks you to pick one of the suggested options instead of continuing. Validation failures and other errors appear inline.
Walkthrough: Calibrate the KUKA Dataset
- Open the Run workspace and click the KUKA handeye preset card.
- Review the manifest (a chessboard of 17x28 corners with 20 mm squares and
by_indexpairing) and the config (eye-in-hand is the default). - Click Run.
- On success you land in Diagnose with the export loaded: the intrinsics, the hand-eye transform and the reprojection error (well under a pixel on this dataset) are in the numbers, and the residual heatmap is on the images.
Laser Datasets
Laser datasets run in two stages (rig_handeye, then rig_laserline_device); the manifest shape is described in Laser Datasets. Such setups usually need non-default configuration (Scheimpflug sensors, eye-to-hand mounting, point-to-plane laser residuals); set it in the config form, or put it in a preset.