Skip to content

External Calibration Adapters

Calibrex keeps external calibration implementations behind a ROS-independent, subprocess/import boundary. It does not import UniCalib, Koide's direct visual-LiDAR calibration implementation, model weights, ROS, CUDA, or GPL code into src/calibrex.

Every Koide or UniCalib adapter result includes an external_calibration_run mapping. Set external_run_output to materialize the same mapping as a standalone slac.external_calibration_run/v0.1 YAML/JSON artifact:

pipeline:
  factors:
    unicalib_lidar_camera:
      enabled: true
      options:
        result_path: outputs/unicalib/transform.yaml
        input_paths:
          - inputs/fixed_split_manifest.yaml
        expected_result_sha256: "<sha256>"
        external_run_output: outputs/unicalib/external_run.yaml
        tool_version: "wacv-2026"
        source_repository: https://github.com/han-15/UniCalib
        source_commit: "<full commit>"
        license_spdx: MIT
        training_isolation_declared: true
        training_isolation_evidence: "checkpoint training split excludes evaluation sequence"

Commands may be a string or argv list. Placeholders are substituted per argv element and no shell is enabled:

command:
  - /opt/unicalib/run
  - --dataset
  - "{dataset_path}"
  - --output
  - "{result_path}"
execute: true
timeout_sec: 600

Supported placeholders are {dataset_path}, {result_path}, {camera_streams}, and {lidar_streams}. Container execution should declare execution_mode: container and a content-addressed container_digest.

The imported transform format is deliberately adapter-neutral:

transforms:
  T_camera0_lidar0:
    convention: T_parent_child
    parent: camera0
    child: lidar0
    translation_m: [0.0, 0.0, 0.0]
    rotation_quat_xyzw: [0.0, 0.0, 0.0, 1.0]

External objective values can be recorded under external_metrics, but the schema labels them non-comparable with Calibrex holdout evidence by default. The normal calibration pipeline recomputes its camera-LiDAR evidence after the adapter transform is applied; an external training loss never substitutes for those gates.

License and provenance gate

Release-ready runs pin tool version, source commit, SPDX identifier, adapter version, input/output SHA-256 digests, frame/time conventions, execution mode, and training-data isolation. Missing fields remain schema-valid but produce a WARN provenance metric. Digest mismatch makes the external-run artifact failed.

All allowed execution modes are out-of-process execution or result import. There is no in-process external-code mode. GPL tools therefore remain separate executables or containers and are never copied into the Calibrex core.