# Derkachi camera

Camera model: **Topotek KHP20S30**
Daylight sensor: 1/2.8" CMOS (Sony IMX291-class, 2.13 MP)
Image resolution: Full HD 1920×1080 @ 30/60 fps
Lens: 20× optical zoom, f = 4.7 mm – 94 mm

## Calibration

**File**: [`khp20s30_factory.json`](./khp20s30_factory.json)
**Acquisition method**: `factory_sheet` (AZ-702 — factory-sheet approximation)
**Assumed zoom setting**: wide-angle (f = 4.7 mm), HFOV ≈ 59.5°

Per-unit checkerboard refinement is **deferred** (no hardware access to the
Derkachi unit). The factory-sheet calibration is the cheapest reasonable
starting point. The residual focal-length error is expected to be in the
**1–3 %** band; at high AGL this may push horizontal position error past the
AC-3 100 m budget, in which case AZ-699 (T3 real-flight validation) reports
the honest finding and a follow-up checkerboard task is filed.

### Why factory-sheet (not checkerboard or PnP-from-tlog)

* **Checkerboard**: needs physical access to the airframe + a known-geometry
  calibration target. Not in scope for AZ-696.
* **PnP-from-tlog back-computation**: would require a 5-point task in its own
  right; deferred as an AZ-696 follow-up if the residual budget proves
  insufficient.

### Replay-test wiring

`tests/e2e/replay/conftest.py::_calibration_path()` prefers this file when
present and falls back to `tests/fixtures/calibration/adti26.json` otherwise,
so dev environments that don't carry the calibration file still exercise the
AC-1 / AC-2 / AC-5 / AC-6 paths.
