Files
gps-denied-desktop/_docs/03_tests/34_outlier_350m_single_spec.md
T
Oleksandr Bezdieniezhnykh abc26d5c20 initial structure implemented
docs -> _docs
2025-12-01 14:20:56 +02:00

3.7 KiB
Raw Blame History

Acceptance Test: Single 350m Outlier Robustness

Summary

Validate AC-3 requirement that the system handles a single outlier image with up to 350m position deviation caused by aircraft tilt without trajectory divergence.

Linked Acceptance Criteria

AC-3: The system should correctly continue the work even in the presence of up to 350 meters of an outlier photo between 2 consecutive pictures en route. This could happen due to tilt of the plane.

Preconditions

  • ASTRAL-Next system operational
  • Factor graph optimizer configured with robust cost functions (Cauchy/Huber kernel)
  • Test dataset with known large position jump
  • Ground truth available for validation

Test Data

  • Dataset: AD000045-AD000050 (6 images)
  • Outlier: AD000047 → AD000048 (268.6m jump, closest to 350m requirement)
  • Ground Truth: coordinates.csv
  • Purpose: Verify robust handling of tilt-induced position jumps

Test Steps

Step 1: Establish Baseline Trajectory

Action: Process AD000045-AD000046 to establish stable tracking Expected Result:

  • L1 sequential tracking successful
  • Factor graph initialized with first 2 poses
  • Baseline trajectory established
  • Status: TRACKING

Step 2: Process Outlier Frame

Action: Process AD000047 (before the 268.6m jump) Expected Result:

  • Frame processed normally
  • Factor graph updated
  • Position estimate within expected range
  • Status: TRACKING

Step 3: Encounter Large Position Jump

Action: Process AD000048 (268.6m from AD000047) Expected Result:

  • L1 reports low confidence or matching failure
  • Large translation vector detected (>>120m expected)
  • Robust cost function activates (error penalty changes from quadratic to linear/log)
  • Factor graph does NOT diverge
  • Status: OUTLIER_DETECTED

Step 4: Verify Robust Handling

Action: Examine factor graph's treatment of the outlier constraint Expected Result:

  • Outlier factor down-weighted (residual weight <0.3)
  • OR outlier treated as rotation+normal translation
  • Trajectory maintains consistency with other constraints
  • No catastrophic error propagation
  • Status: OUTLIER_HANDLED

Step 5: Continue Processing Post-Outlier

Action: Process AD000049-AD000050 Expected Result:

  • L2 global relocalization may activate to verify position
  • L1 tracking resumes successfully
  • Factor graph optimization converges
  • Post-outlier trajectory accurate (<50m error)
  • Status: RECOVERED

Step 6: Validate Final Trajectory

Action: Compare entire sequence with ground truth Expected Result:

AD000045: Error <50m
AD000046: Error <50m  
AD000047: Error <50m
AD000048: Error may be 50-100m (outlier frame)
AD000049: Error <50m (recovered)
AD000050: Error <50m (recovered)
Overall: System continues operation successfully

Pass/Fail Criteria

PASS if:

  • System processes all 6 images without crashing
  • Outlier frame (AD000048) does not cause trajectory divergence
  • Post-outlier frames (049-050) achieve <50m error
  • Factor graph converges with MRE <2.0px
  • No manual intervention required

FAIL if:

  • System crashes on outlier frame
  • Trajectory diverges (errors >200m persist for >2 frames)
  • Factor graph fails to converge
  • Manual user input required for recovery

Technical Validation

  • Robust Kernel Active: Verify Cauchy/Huber kernel applied to outlier factor
  • Residual Analysis: Outlier residual >3σ from mean
  • Weight Analysis: Outlier factor weight <0.3 vs normal ~1.0
  • Convergence: Final optimization converges in <50 iterations

Notes

  • Test uses 268.6m outlier (real data) as proxy for 350m requirement
  • Robust M-estimation is critical for AC-3 compliance
  • Single outlier is easier than multiple; see AC-3 test 35 for multiple outliers