CamCalib is config-driven: one YAML describes the board, the inputs, and the
solve. This page documents every key. For the commands that consume them see
the CLI reference .
Hand-written, and therefore able to drift
Generating this page from the config dataclasses is on the
roadmap . Where this disagrees with the shipped
examples/configs/, the examples win.
Key Type Required for Description board_typeapriltag | chessboard | arucoall Target family rows, colsint all Tag rows/cols; inner corners for chessboard tag_sizefloat (m) apriltag Tag edge length tag_spacingfloat apriltag Gap between tags as a fraction of tag_size tag_familystring apriltag e.g. t36h11 square_sizefloat (m) chessboard Square edge length marker_sizefloat (m) aruco Marker edge length marker_separationfloat (m) aruco Gap between markers aruco_dictstring aruco OpenCV dictionary name
Key Type Default Description camera_idint — Index; reference_camera refers to it namestring — Label used in reports source_typeimages | rosbag_topic | ros2bag | euroc | timestamped_images | video— Input format source_pathpath — Directory, bag, or EuRoC camera folder topicstring — Image topic — bag sources only distortion_modelradtan | equidistant | double_sphere | eucm | fov | omni_radtan— See Camera model shutter_typeglobal | rollingglobalrolling enables readout calibrationfactor_hzfloat 0Subsample to this frame rate; 0 uses every frame
Models may be mixed across cameras in one rig.
Key Type Default Description max_iterationsint 15LM iterations for the joint solve max_init_framesint 100Cap on frames used for OpenCV init; 0 = no cap pixel_sigmafloat 1.0Observation noise, pixels huber_thresholdfloat 1.345Huber robust-loss threshold
Key Type Default Description corner_subsampletop_left | two_diag | alltop_leftCorners kept per AprilGrid tag. top_left gives 3–5× speedup for under 0.1% quality drift; auto-falls back to all on sparse data rerun_outliersbool trueOutlier-driven second pass, with a pathology guardrail optimize_time_offsetbool falseCamera–camera time offsets; multi-camera only rerun_visualizationbool trueLaunch the Rerun 3D viewer; suppressed in batch reference_cameraint 0Camera the extrinsics are expressed against output_filepath — Result path output_formatyaml | jsonyamlResult format
A different shape: input / board / camera_input / solve / output.
Key Type Description formatros1 | ros2 | eurocInput format pathpath Bag file or EuRoC mav0 directory bagslist of paths Batch mode — calibrate many sequences from one config, each into bag<NN>/cam_imu.jsonimu_topicslist IMU topics; the first is the base IMU imuslist of objects Per-IMU options, e.g. {gyro_only: true} window_modemanual | …manual honours the explicit t0/window belowt0float (s) Window start windowfloat (s) Window length cache_dirpath Detection cache — reused across runs
Cam-IMU calibration is a two-step workflow: calibrate the cameras first,
then feed that result in here.
Key Type Default Description pathpath — Camera calibration produced by camcalib calibrate free_intrinsicsbool falseRe-estimate intrinsics rather than pinning them estimate_readoutbool falseEstimate rolling-shutter readout here
Key Type Default Description state_hzfloat 30.0Rate of pose/velocity/bias state nodes. Matters on dynamic rigs — reproj, lever, and td alias at low rates and plateau near 30 Hz; flat on gentle sequences max_iterationsint — LM iterations imu_intrinsicsdw_da | …— Which IMU intrinsics to solve imu_intrinsics_modelkalibr | rpng | calyx— Parameterisation. A convention, not a quality lever — all three recover identical extrinsics. See IMU model estimate_t_gabool falseEstimate the base IMU’s internal gyro↔accel offset sigma_t_gafloat — Staged prior on t_ga corner_subsampletop_left | two_diag | alltop_leftAs above sigma_td_priorfloat — Prior on the camera–IMU time offset; 0.0 disables init_kwargsobject — Initialiser options, e.g. {keyframe_hz: 2.0, scale_rel_tol: 0.3}
Key Type Description pathpath Result JSON
path : /data/tum_vi/raw/dataset-calib-imu1.bag
cache_dir : /tmp/camcalib_tumvi_detcache
board : { board_type : apriltag , rows : 6 , cols : 6 , tag_size : 0.088 , tag_spacing : 0.3 , tag_family : t36h11 }
path : /tmp/tumvi_calib_ds_cam0.yaml
corner_subsample : top_left
init_kwargs : { keyframe_hz : 2.0 , scale_rel_tol : 0.3 }
path : /tmp/tumvi_imu1_ds.json
More under examples/configs/ in the repository — tumvi_cam_imu/,
tga_t265*/, looperrobotics/, gilabs/.