Expand description
High-level entry crate for the calibration-rs camera calibration library.
This crate provides a unified API for camera calibration workflows:
- Single-camera intrinsics calibration (Zhang’s method with distortion)
- Single-camera intrinsics calibration with Scheimpflug tilt
- Single-camera hand-eye calibration (camera on robot arm)
- Multi-camera rig extrinsics calibration
- Multi-camera rig + hand-eye calibration
§Quick Start
use vision_calibration::prelude::*;
use vision_calibration::planar_intrinsics::{step_init, step_optimize};
// Create calibration session
let mut session = CalibrationSession::<PlanarIntrinsicsProblem>::new();
session.set_input(dataset)?;
// Option 1: Step-by-step (recommended for inspection)
step_init(&mut session, None)?;
step_optimize(&mut session, None)?;
// Option 2: Pipeline function (convenience)
// run_planar_intrinsics(&mut session)?;
// Export results
let result = session.export()?;§Module Organization
§High-Level Calibration Workflows
session- Session framework (CalibrationSession,ProblemType)planar_intrinsics- Single-camera intrinsics (Zhang’s method)single_cam_handeye- Single camera + hand-eye calibrationrig_extrinsics- Multi-camera rig extrinsicsrig_handeye- Multi-camera rig + hand-eyelaserline_device- Single camera + laser plane devicescheimpflug_intrinsics- Single-camera planar intrinsics with Scheimpflug tilt
§Foundation Crates (Advanced Users)
core- Math types, camera models, RANSAC primitiveslinear- Closed-form initialization algorithmsoptim- Non-linear least-squares optimizationsynthetic- Synthetic data generation for testing
§Session API
All calibration workflows use the session::CalibrationSession state container.
Each problem type has its own set of step functions — see the table below
and the per-module documentation for details.
The common pattern is:
- Create a session for the problem type
- Set input data with
set_input - Optionally configure with
update_config - Run the problem-specific step functions (or a convenience
run_calibration) - Export results with
export
§Available Problem Types
| Problem Type | Input | Steps |
|---|---|---|
PlanarIntrinsicsProblem | PlanarDataset | step_init → step_optimize |
SingleCamHandeyeProblem | SingleCamHandeyeInput | step_intrinsics_init → step_intrinsics_optimize → step_handeye_init → step_handeye_optimize |
RigExtrinsicsProblem | RigExtrinsicsInput | step_intrinsics_init_all → step_intrinsics_optimize_all → step_rig_init → step_rig_optimize |
RigHandeyeProblem | RigHandeyeInput | step_intrinsics_init_all → step_intrinsics_optimize_all → step_rig_init → step_rig_optimize → step_handeye_init → step_handeye_optimize |
LaserlineDeviceProblem | LaserlineDeviceInput | step_init → step_optimize |
ScheimpflugIntrinsicsProblem | PlanarDataset | step_init → step_optimize |
Modules§
- common
- Step-option types shared across problem modules.
- core
- Core math types, camera models, and RANSAC primitives.
- laserline_
device - Single laserline device calibration (camera + laser plane).
- linear
- Closed-form initialization algorithms.
- optim
- Non-linear optimization vocabulary.
- planar_
intrinsics - Planar intrinsics calibration (Zhang’s method with Brown-Conrady distortion).
- prelude
- Minimal re-exports for planar “hello world” calibration.
- rig_
extrinsics - Multi-camera rig extrinsics calibration.
- rig_
handeye - Multi-camera rig hand-eye calibration.
- rig_
laserline_ device - Rig-level laserline calibration.
- scheimpflug_
intrinsics - Single-camera planar intrinsics with Scheimpflug/tilted sensor refinement.
- session
- Session framework for structured calibration workflows.
- single_
cam_ handeye - Single-camera hand-eye calibration (intrinsics + hand-eye transform).
- synthetic
- Deterministic synthetic data generation for testing.
Enums§
- Error
- Typed error returned by all public calibration step functions.
Errors returned by
vision-calibration-pipelinepublic APIs.
Functions§
- compute_
laserline_ feature_ residuals - Per-feature residual helpers from
vision-calibration-optimre-exported for convenience:handeye_observer_se3_target(used by hand-eye exports) andcompute_*_feature_residuals(used by laser exports). Compute per-pixel laser residual records for every laser observation in the dataset, indexed pose-major. - compute_
rig_ laserline_ feature_ residuals - Per-feature residual helpers from
vision-calibration-optimre-exported for convenience:handeye_observer_se3_target(used by hand-eye exports) andcompute_*_feature_residuals(used by laser exports). Compute per-pixel laser residual records for every laser observation in a rig dataset, indexed pose-major then by camera then by pixel. - handeye_
observer_ se3_ target - Per-feature residual helpers from
vision-calibration-optimre-exported for convenience:handeye_observer_se3_target(used by hand-eye exports) andcompute_*_feature_residuals(used by laser exports). Derive per-view “observer-to-target” poses from a hand-eye chain. - pixel_
to_ gripper_ point - Map a laser pixel in a specific camera to a 3D point in the robot gripper frame. Map a laser pixel in a specific camera to a 3D point in the robot gripper frame.