# 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