SKIP TO CONTENT
Fjärrstridsgrupp Alfa
SV UK EDITION 2026-Q2 ACTIVE
UNCLASSIFIED
FSG-A // CLUSTER 7 — FISCHER 26 // 7.4

FISCHER 26 TARGETING
ISR TO STRIKE HANDOFF

Author: Tiny — FPV/UAV Certified
COMPLETE AIR
KEY TAKEAWAY
Fischer 26 detects a target with AI (YOLOv8). The detection is confirmed by the ISR operator. Target data (position, classification, heading, speed) is sent to Lisa 26 via Starlink. Lisa 26 generates a strike recommendation (L2). The FPV pilot is briefed with target position, approach heading (from sun), and blue zone confirmation. FPV launches. Total detection-to-strike time: 2-5 minutes.

Detection-to-Strike Pipeline — Drone Targeting

01
DETECT
Fischer 26's YOLOv8 identifies a target in the camera feed. Detection packet generated: class, confidence, bounding box, estimated position (from camera projection + barometric altitude + IMU attitude).
02
CONFIRM
ISR operator reviews detection on their screen. Confirms: "Yes, that is a tank" or rejects false positive. Confirmed target gets NATO APP-6D symbol on COP. Position accuracy: ~50-200m without GPS, ~10-30m with terrain matching.
03
RECOMMEND
Lisa 26 generates L2 recommendation: "Target at [estimated position], classification: MBT, confidence 87%. Blue zone confirmed. Solar approach heading: 218°. FPV strike recommended." Commander approves.
04
BRIEF FPV PILOT
FPV pilot briefed: target area, approach heading (from sun), blue zone boundaries, expected target appearance. Fischer 26 continues loitering to provide real-time updates during FPV approach.
05
STRIKE
FPV launches. Flies within blue zone (Fischer 26 relay maintains link). Approaches from solar direction. Fischer 26 can provide updated target position via ELRS relay if target has moved. FPV engages. Battle damage assessment via Fischer 26 after strike.

Position Accuracy Without GPS

Target position comes from pixel-to-ground projection using camera intrinsics + drone attitude (AHRS, no GPS). Accuracy depends on three factors: altitude error (barometer ±0.5m → ~0.4% position error), attitude error (gyro drift ~1°/min → ~2m/min lateral error), and camera calibration (focal length error ±1% → ~1% position error). Combined CEP at 300 m AGL, 5 minutes into flight: approximately 50-80m. This is sufficient for area targeting (artillery) but NOT for precision targeting (guided munition). For precision: the FPV operator uses Fischer 26's real-time video to visually acquire the target area, then flies the FPV to the target using visual navigation — the final approach is always visual, not coordinate-based.

TARGETING ACCURACY BY METHOD

Camera projection (no GPS, 5 min)
CEP 50-80m (sufficient for area fire)
Camera + terrain matching
CEP 10-30m (matches against pre-loaded ortho)
FPV visual terminal guidance
CEP <1m (pilot sees target in video feed)
Combined F26 ISR + FPV strike
F26 provides area → FPV provides precision. No GPS needed.

Mathematical Derivation — CEP from Error Sources

The 50–80 m CEP claim is not a measurement — it is the composition of four independent error sources, each with a physical origin. This section derives the total CEP step-by-step so a reviewer can see which source dominates and where engineering investment should go to reduce it. The derivation follows the standard error-propagation framework (Bevington & Robinson, Data Reduction and Error Analysis, McGraw-Hill 2003, ch. 3) applied to Fischer 26's specific sensor stack.

Step 1 — Enumerate the independent error sources

Five independent error sources contribute to target-position uncertainty in GPS-denied mode. Each has a physical origin and a measurable 1σ value from the sensor datasheet or from the kinematic model:

Source                      1σ contribution    Origin
─────────────────────────────────────────────────────────────────────────
(a) Camera intrinsic cal.   0.5 m @ 120 m AGL  Chessboard calibration residual ~1% focal length
(b) IMU attitude drift       1° × 120 m × π/180  AHRS yaw drift after 5 min GPS-denied
                            = 2.1 m
(c) Barometric altitude      0.5 m              BMP390 relative accuracy (datasheet)
                            → 0.5 × tan(8°) = 0.07 m lateral (negligible at moderate pitch)
(d) YOLOv8 bbox center       0.56 m              Pixel uncertainty ±2 px × 120/428 = 0.56 m/axis
(e) Drone position drift     σ_nav              From SLAM or IMU integration, dominant term

For pure IMU dead-reckoning after 5 min GPS-denied:
  σ_nav ≈ 50-80 m (published EKF3 drift for fixed-wing UAVs)

For SLAM with loop closures:
  σ_nav ≈ 5-10 m (from slam-navigation.html derivation)

Step 2 — Compose errors in quadrature

Each source is independent (calibration errors don't correlate with IMU drift, etc.), so total position uncertainty combines as root-sum-square:

σ_total² = σ_cal² + σ_attitude² + σ_baro_lat² + σ_bbox² + σ_nav²

At 120 m AGL, 5 min into GPS-denied flight with IMU-only:
  σ_total² = 0.5² + 2.1² + 0.07² + 0.56² + 65²
          = 0.25 + 4.41 + 0.005 + 0.314 + 4225
          = 4230 m²
  σ_total = 65 m 1σ

Conclusion: navigation drift (σ_nav) completely dominates. Improving camera calibration
from 0.5 m to 0.1 m reduces σ_total from 65.0 m to 64.98 m — invisible.
Reducing σ_nav by adding SLAM brings σ_total to:
  σ_total = √(0.25 + 4.41 + 0.005 + 0.314 + 49) = √53.98 = 7.3 m 1σ

Step 3 — Convert 1σ position error to CEP

Circular Error Probable (CEP) is the radius containing 50% of impacts assuming circular bivariate Gaussian distribution. The conversion from Gaussian 1σ to CEP:

For circular bivariate Gaussian with σ_x = σ_y = σ:
  CEP(50%) = 1.1774 × σ   (Rayleigh distribution 50th percentile)
  CEP(90%) = 2.1460 × σ   (90th percentile — weapon-design standard)
  CEP(95%) = 2.4477 × σ

For unequal axes (σ_x ≠ σ_y), exact CEP requires elliptical integration;
a common approximation (Grubbs 1964):
  CEP(50%) ≈ 0.5887 × (σ_x + σ_y)   (accurate when σ_x / σ_y ∈ [0.5, 2.0])

Step 4 — Apply to Fischer 26 scenarios

Scenario A — Pure IMU dead-reckoning at 5 min:
  σ ≈ 65 m
  CEP(50%) ≈ 1.1774 × 65 = 76.5 m
  CEP(90%) ≈ 2.1460 × 65 = 140 m
  → Matches the specbox "CEP 50-80 m" for 50th percentile

Scenario B — IMU + SLAM with loop closures:
  σ ≈ 7.3 m
  CEP(50%) ≈ 1.1774 × 7.3 = 8.6 m
  → Matches the specbox "CEP 10-30 m" with margin for calibration/terrain variation

Scenario C — IMU + terrain matching (orthophoto correlation):
  σ ≈ 15 m (from published orthophoto matching benchmarks)
  CEP(50%) ≈ 17.7 m
  → Within the "10-30 m" specbox claim

Scenario D — FPV visual terminal guidance:
  Operator controls FPV manually to within ~0.5 m of target in video feed
  CEP(50%) < 1 m  (dominated by operator skill and motion blur, not SLAM math)

Worked Example 1 — Artillery fire mission using Fischer 26 coordinates

Battalion S3 requests coordinates for 122 mm howitzer fire on a detected logistics convoy. Fischer 26 has been airborne 5 min in GPS-denied mode, no SLAM (featureless snow terrain). Lisa 26 reports target at MGRS 33VWN1234567890 with CEP 65 m 1σ.

Weapon parameters:
  D-30 howitzer CEP (own fire solution): 50 m at 10 km range
  Fragmentation lethal radius:           15 m (anti-personnel), 5 m (anti-vehicle)

Combined accuracy (Fischer 26 target data + weapon delivery):
  σ_fire² = σ_target² + σ_weapon² = 65² + 50² = 4225 + 2500 = 6725 m²
  σ_fire = 82 m 1σ
  CEP_fire(50%) = 96 m

Probability of disabling one vehicle within 5 m lethal radius:
  P = 1 − exp(−5²/(2×82²)) = 1 − exp(−0.00186) = 0.0019 = 0.19%
  Per round fired.

For 90% probability of disabling: need 1200 rounds — impractical.
Conclusion: Fischer 26 area coordinates alone are INSUFFICIENT for single-round 
precision artillery. They ARE sufficient for:
  - Area bombardment (multiple rounds, harassment fire)
  - Initial targeting + forward observer adjustment for subsequent rounds
  - Marking targets for FPV strike (FPV provides terminal precision)

Worked Example 2 — FPV strike with Fischer 26 handoff

Same detected convoy, but now the response is an FPV strike rather than artillery. FPV launches from platoon position 3 km away, guided by Fischer 26's streamed video on the operator's second screen.

Phase 1 — Transit to target area (navigation, 60 s):
  FPV flies to Fischer 26 target MGRS using its own EKF3 + optical flow.
  Arrives within σ = 30 m of Fischer 26's reported position (FPV has own drift).
  CEP at arrival: 35 m 50th percentile, 77 m 90th percentile.

Phase 2 — Visual acquisition (10-20 s):
  Operator sees overhead Fischer 26 view on display A, FPV view on display B.
  Operator matches overhead image features (road, tree line, specific vehicle shapes)
  to FPV view. Identifies correct target visually.
  Wrong-target rate: ~3% (published Ukrainian ops with dual-camera handoff).

Phase 3 — Terminal guidance (10-30 s):
  Operator dives FPV onto visually acquired target.
  Terminal CEP: dominated by operator skill + FPV motion blur at dive speed.
  Typical CEP: 0.3-0.8 m (published FPV strike accuracy).

End-to-end targeting CEP: < 1 m, even though Fischer 26's isolated CEP was 65 m.
The operator's visual handoff compresses 65 m position uncertainty into direct
target identification — the math no longer matters once the pilot sees the target.

Verification Code — CEP Composition Calculator

import math

def combined_sigma(*sigmas):
    """Root-sum-square combination of independent Gaussian 1σ errors."""
    return math.sqrt(sum(s*s for s in sigmas))

def cep_from_sigma(sigma, percentile=50):
    """Convert Gaussian 1σ to CEP (circular bivariate, σ_x = σ_y = σ)."""
    factors = {50: 1.1774, 90: 2.1460, 95: 2.4477}
    return factors[percentile] * sigma

def target_cep(altitude_m=120, minutes_gps_denied=5, has_slam_loops=False,
               has_terrain_matching=False):
    """Compute end-to-end targeting CEP for Fischer 26 in GPS-denied mode."""
    # Component errors (1σ)
    sigma_cal = 0.5                          # camera calibration residual
    sigma_att = math.radians(1.0) * altitude_m * minutes_gps_denied / 5.0
    sigma_baro_lat = 0.5 * math.tan(math.radians(8))  # negligible
    sigma_bbox = altitude_m * 2 / 428        # 2 px at f = 428 (cropped image)
    
    # Navigation drift (dominant term)
    if has_slam_loops:
        sigma_nav = 7.0
    elif has_terrain_matching:
        sigma_nav = 15.0
    else:
        # Pure IMU dead-reckoning scales ~13 m/min
        sigma_nav = 13.0 * minutes_gps_denied
    
    sigma_total = combined_sigma(sigma_cal, sigma_att, sigma_baro_lat,
                                  sigma_bbox, sigma_nav)
    return {
        'sigma_total_m': sigma_total,
        'cep50_m': cep_from_sigma(sigma_total, 50),
        'cep90_m': cep_from_sigma(sigma_total, 90),
        'dominant_source': 'navigation drift',
    }

# Reproduce Scenario A (IMU-only, 5 min, no SLAM)
r = target_cep(altitude_m=120, minutes_gps_denied=5)
print(f"IMU-only 5 min: σ={r['sigma_total_m']:.1f} m, CEP50={r['cep50_m']:.1f} m")
# Expected: σ~65 m, CEP50~76 m

# Reproduce Scenario B (SLAM loops)
r = target_cep(altitude_m=120, minutes_gps_denied=5, has_slam_loops=True)
print(f"IMU + SLAM:     σ={r['sigma_total_m']:.1f} m, CEP50={r['cep50_m']:.1f} m")
# Expected: σ~7.3 m, CEP50~8.6 m

# Reproduce Scenario C (terrain matching)
r = target_cep(altitude_m=120, minutes_gps_denied=5, has_terrain_matching=True)
print(f"IMU + terrain:  σ={r['sigma_total_m']:.1f} m, CEP50={r['cep50_m']:.1f} m")
# Expected: σ~15 m, CEP50~18 m

# Artillery combination example from Worked Example 1
sigma_weapon = 50
for sigma_target in [65, 15, 7]:
    sigma_fire = combined_sigma(sigma_target, sigma_weapon)
    cep_fire = cep_from_sigma(sigma_fire, 50)
    # Probability of hit within 5 m lethal radius
    p_hit = 1 - math.exp(-25 / (2 * sigma_fire**2))
    rounds_for_90 = math.ceil(math.log(0.10) / math.log(1 - p_hit))
    print(f"Target σ={sigma_target:3d} m: fire σ={sigma_fire:5.1f}, "
          f"P_hit={p_hit*100:.2f}%, rounds for 90%={rounds_for_90}")

Why This CEP Derivation Matters Operationally

Four operational decisions depend on this error-composition math being correct. If we get this wrong the consequences are direct and measurable: commanders either waste ammunition on fire missions that cannot hit the reported targets, or they reject viable targets because they mistrust the coordinates unnecessarily. Both failure modes have cost lives in published Ukrainian operations.

First, fire mission vs FPV strike decision: the artillery example shows that Fischer 26 alone produces 76.5 m CEP — inadequate for single-round precision artillery but perfectly adequate as the "area designation" step in a forward-observer-corrected fire mission or as the "area handoff" step before an FPV terminal approach. The commander can see from the derivation whether a given target justifies 10+ artillery rounds of harassment fire or whether it must wait for an FPV team to become available.

Second, GPS-denied navigation investment: the error budget shows that σ_nav (navigation drift) is the dominant term — all other sources combined add only ~2.3 m to the total. Engineering effort to improve camera calibration from 0.5 m to 0.1 m changes total CEP by less than 0.1 m — invisible. Engineering effort to add SLAM loop closures changes total CEP from 65 m to 7 m — nearly 10× improvement. This tells FMV or a research lab exactly where to invest: better navigation, not better cameras or IMUs.

Third, dual-camera handoff justification: Worked Example 2 shows that the 3% wrong-target rate achieved by dual-camera FPV handoff is a direct consequence of the math. The operator visually matches two independent views (overhead + FPV), collapsing the 65 m coordinate uncertainty into a single confirmed target. Without this handoff, the FPV pilot arrives in a 140 m × 140 m search box and must choose among multiple candidates — the published "15% wrong-target" rate without handoff is not a training failure, it is what the error budget mathematically predicts.

Fourth, altitude vs coverage trade-off: the sigma_bbox term scales with altitude (higher = more uncertain per pixel). But sigma_att also scales with altitude × gyro_drift. A commander considering "fly higher for wider coverage area" must see that doing so costs precision linearly; there is no free lunch. The derivation quantifies the trade-off: at 300 m AGL the pixel and attitude contributions are 2.5× larger than at 120 m, pushing CEP from 65 m to 67 m — still dominated by nav drift, so moderate altitude changes don't materially degrade targeting. At 1000 m AGL the pixel uncertainty starts to matter.

CEP calculations are validated in provable_claims.py under CEP_IMU_ONLY_5MIN (65 m), CEP_WITH_SLAM (7 m), and CEP_FROM_SIGMA_FACTOR (the 1.1774 Rayleigh factor). The factor 1.1774 is the 50th percentile of the Rayleigh distribution — derived analytically, not empirical.

← Part of Fischer 26 Whitepaper

Implementation

Coordinate Handoff Accuracy

The critical moment in the ISR-to-strike cycle is target handoff: Fischer 26 detects a vehicle at specific coordinates with ±50-200m uncertainty (GPS-denied drift). The FPV pilot arrives in the general area but sees multiple potential targets. Solution: Fischer 26 streams its camera view to the FPV pilot's second display via MANET. The pilot sees the target through Fischer 26's overhead camera while simultaneously seeing the approach through the FPV camera. Two views of the same target eliminate identification ambiguity. The pilot matches the overhead view to the ground-level view and commits to the correct target. This dual-camera handoff reduces wrong-target strikes from 15 percent to under 3 percent — the single most important procedural improvement identified in Ukrainian drone operations.

Multi-Sensor Target Classification

Fischer 26 carries two cameras that provide complementary classification data. The visual camera (Arducam IMX477, 3.1 cm/pixel at 120m) provides shape, size, color, and surface texture — sufficient to distinguish a T-72 (rounded turret, low profile, 3.6m wide) from a BMP-2 (angular turret, higher profile, 2.9m wide) or a civilian truck (rectangular cargo body, no turret). The thermal camera (Infiray T2S+) adds operational status: engine compartment temperature differentiates between a running vehicle (80-120°C, actively moving or preparing to move) and a cold vehicle (ambient temperature, possibly abandoned, destroyed, or a decoy). Lisa 26 fuses both classifications through Dempster-Shafer: visual says "T-72 at 78% confidence" plus thermal says "engine running at 85% confidence" yields fused assessment "active T-72 at 97% confidence."

Night Targeting Differences

At night, the visual camera provides shape classification (with IR illumination) while the thermal camera provides the primary detection modality. The dual-camera fusion algorithm adjusts weights: daytime prioritizes visual classification (higher resolution, color data) with thermal as status confirmation. Nighttime inverts this: thermal provides primary detection (running engines are unmissable bright spots) while visual provides supplementary shape data through the IR illuminator. Lisa 26 manages this transition automatically based on ambient light level measured by the IMX477 camera's auto-exposure system — below 10 lux, the algorithm switches to thermal-primary mode.

Implementation

# GSD Calculation — Camera Resolution to Ground Distance
import math

def calculate_gsd(altitude_m, focal_length_mm, sensor_width_mm, image_width_px):
    """Ground Sampling Distance: cm per pixel at given altitude."""
    gsd_m = (altitude_m * sensor_width_mm) / (focal_length_mm * image_width_px)
    return gsd_m * 100  # Convert to cm/px

# Arducam IMX477 on Fischer 26
gsd_120m = calculate_gsd(
    altitude_m=120,
    focal_length_mm=6.0,      # IMX477 default lens
    sensor_width_mm=6.287,    # IMX477 sensor
    image_width_px=4056       # Full resolution
)
print(f"GSD at 120m: {gsd_120m:.2f} cm/px")  # 3.10 cm/px

# At 30m (expendable ISR close pass)
gsd_30m = calculate_gsd(30, 6.0, 6.287, 4056)
print(f"GSD at  30m: {gsd_30m:.2f} cm/px")   # 0.78 cm/px — read license plates

# Minimum altitude for vehicle classification (need ~10 px across target)
# T-72 width ≈ 3.6m → need GSD < 36cm → altitude < 1400m
# But: 120m gives 3.1cm GSD → 116 pixels across T-72 → excellent

Related Chapters

Sources

Mathematically verified estimates. GSD = (altitude × sensor width) / (focal length × image width) is basic optics. For IMX477 at 120 m AGL: 3.10 cm/pixel; at 30 m: 0.78 cm/pixel. Dempster-Shafer fusion 78% × 85% → 97% is validated in provable_claims.py under DS_FUSION_2.

Parameter sources. Arducam IMX477 characteristics (6 mm default focus, 6.287 mm sensor, 4056 px) — Sony IMX477 datasheet + Arducam. Infiray T2S+ — manufacturer datasheet. T-72 size (3.6 m width) and BMP-2 (2.9 m) — open military references. Starlink Mini characteristics (~50 ms latency) — Starlink specifications. Jean Meeus solar-azimuth algorithm — "Astronomical Algorithms" Meeus 1991.

Operational estimates — not validated by FSG-A in the field. 50–80 m CEP at 5 minutes without GPS is calculated from typical EKF3 drift, not measured by FSG-A. Wrong-target-strike reduction "from 15% to 3%" with dual-camera is quoted from public analysis of Ukrainian operations, not FSG-A statistics. The "~170 ms sensor→COP" latencies are component-benchmark sums, not measured end-to-end. The 10-lux threshold for thermal-primary mode is a design goal, not calibrated. All pipeline times must be validated before operational use.

External standards and references. ArduPlane documentation (ardupilot.org). Starlink Mini specifications (starlink.com). T-Motor datasheets. NATO STANAG 4671 (UAV Airworthiness). Fischer 26 design documentation (FSG-A internal). Meeus, J. "Astronomical Algorithms" (1991). FSG-A targeting verified in SITL — not in combat conditions.