Skip to content

Basler ChArUco Calibrator Setup

Calibrates the intrinsics (focal length, lens distortion) of one Basler tracking camera. Do this first, before any other calibration step — see Workflow.

You'll need a printed ChArUco calibration board and the Basler Pylon SDK installed (see Environment Setup).

Install

cd ~/src/basler-charuco-calibrator
uv sync

Run

uv run python -m basler_charuco_calibrator

If more than one Basler camera is connected, you'll be asked to pick one.

Before you start, set up the arena lighting: turn on only the lights mounted above the arena. The floor backlight isn't needed for this step — see Lighting during calibration for why, and how to switch the backlight off if it's on.

Move the ChArUco board around in front of the camera. A live overlay shows four coverage bars (horizontal position, vertical position, size, skew) — once all four reach 70%, press c to calibrate, then q to quit. The result is written as Basler-<camera serial>.yaml.

⚠️ Common failure: the app exits immediately with "Save directory does not exist" — the output folder (default ~/.config/strand-cam/camera_info) must already exist; the app won't create it for you. Create it first: mkdir -p ~/.config/strand-cam/camera_info.

Repeat this entire process once per tracking camera in the rig.

Full documentation

Basler ChArUco Calibrator README — full flag reference, config file format, and output YAML schema.