Skip to content

2012-06-15 benchmark loss: heading drift during 461-second GPS blackout #63

Description

@manankharwar

Summary

FusionCore ATE RMSE 3D: 49.2 m. robot_localization EKF: 18.2 m. This is one of two sequences where RL wins.

Root cause

This is the lowest-GPS-density sequence in the benchmark set. 15,594 GPS fixes vs 30,000-46,000 on other sequences. It contains a 461-second GPS blackout (7.7 minutes) around t=35-42 min.

During that window the filter dead-reckons on encoder and IMU alone. FusionCore's coast mode inflates process noise to let chi2 accept the returning GPS fix after drift. The problem: heading error accumulated during 7.7 minutes of inertial-only integration exceeds what the bias-estimation pipeline fully corrects within that duration.

The encoder WZ bias (B_EWZ) is calibrated from GPS heading cross-covariance before the blackout. During the blackout, the filter subtracts this estimated bias. But if the true B_EWZ drifts slightly (temperature, load), the residual heading error compounds over 7.7 minutes. At 100 Hz with a small uncorrected heading rate error, the lateral position error grows quadratically.

Why does RL win here? RL-EKF runs in 2D mode (two_d_mode: true). Its state is lower-dimensional and heading drift accumulates more slowly in the absence of full 3D IMU integration. This is a structural advantage for RL on GPS-sparse, flat-terrain sequences.

Per-minute analysis

Time window FC error Status
0 - 35 min 2 - 8 m Normal GPS coverage
35 - 42 min grows to ~40-50 m 461-second blackout, heading drift accumulates
42 - 55 min partially recovers to ~20-30 m GPS returns, but heading error leaves a position offset

Sequence characteristics

  • Duration: 55 min (shortest in the set)
  • GPS fixes: 15,594 (vs 30,000-46,000 elsewhere)
  • Blackout duration: 461 seconds
  • Terrain: flat campus, low dynamic range for heading observability

What would fix this

The heading error during blackout is fundamentally an observability problem: without GPS, heading is only constrained by encoder WZ and gyro, both of which have biases that cannot be separated from true angular velocity without an external reference.

Two approaches under investigation:

  1. Tighter coast_q_factor for heading specifically. The current coast mode inflates all process noise uniformly. Heading drift is the dominant error source; inflating heading noise less aggressively would reduce drift at the cost of slower outlier reacquisition.

  2. Magnetometer integration. A heading measurement during blackout would close the observability gap directly. This requires a magnetometer input and soft-iron calibration, which adds setup complexity.

The coast_q_factor tradeoff is the active area of investigation. Any increase that helps 2012-06-15 risks hurting blackout recovery on sequences with adversarial GPS at the blackout boundary (see the companion issue for 2012-08-20).

Reproduce

bash benchmarks/run_one.sh 2012-06-15

Results write to benchmarks/nclt/2012-06-15/results_full/.

Metadata

Metadata

Assignees

No one assigned

    Labels

    benchmarkRelated to benchmark results or methodologybugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions