CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

Vehicles/Rdd2/NavigationEstimator.mo

Download original .moGitHub source

Documentation: Vehicles.Rdd2.NavigationEstimator

within Vehicles.Rdd2;

block NavigationEstimator
  "RDD2 eFMU implementation of the stable navigation estimator boundary"
  extends Estimation.StrapdownINS.ESKF.Estimator(
    samplePeriod = 0.01,
    // RDD2 supplies a calibrated local field and its body-frame covariance.
    // Keep its tilt information as well as heading; heading-only corrections
    // cannot arrest roll/pitch drift driven by gyroscope noise during hover.
    useEquivariantMagnetometer = true,
    // Condition startup uncertainty on the vectors used to align the attitude.
    useGeometricAlignment = true,
    // Flight-log tuning of the generic strapdown defaults, applied only to
    // the RDD2 deployment through these extends modifiers. The values come
    // from replaying a recorded RDD2 flight through the exported estimator
    // and scoring the aided solution against the GPS fixes.
    processNoise = Estimation.StrapdownINS.ProcessNoise(
      // Gyroscope angular-random-walk density. Raised from the generic
      // 1e-5 because the flight's turn dynamics needed more attitude
      // process noise than the bench default carried for the fixes to keep
      // yaw locked to the ground course.
      gyroscope_rad2_s = identity(3) * 1.0e-4,
      // Accelerometer velocity-random-walk density. The generic 1e-3 left
      // the velocity sigma near 0.05 m/s against a GPS velocity floor of
      // about 0.1 m/s, so each fix was applied with an effective gain near
      // 0.19 and the solution stayed overconfident; 3e-2 opens the gain so
      // the fixes actually move the state, cutting aided horizontal error.
      accelerometer_m2_s3 = identity(3) * 3.0e-2,
      // Gyroscope-bias random-walk density. Lowered from the generic 1e-8
      // to 1e-10 so the gyroscope-bias state cannot chase the per-fix yaw
      // innovations; holding the bias steady kept yaw within about 14
      // degrees of the flown course.
      gyroscopeBias_rad2_s3 = identity(3) * 1.0e-10,
      // Accelerometer-bias random-walk density held at the generic default.
      accelerometerBias_m2_s5 = identity(3) * 1.0e-6),
    initialVariances = Estimation.StrapdownINS.InitialVariances(
      // Position, velocity, attitude, and accelerometer-bias initial
      // variances held at the generic defaults.
      position_m2 = fill(1.0, 3),
      velocity_m2_s2 = fill(1.0, 3),
      attitude_rad2 = fill(0.25, 3),
      // Initial gyroscope-bias variance tightened from the generic 1e-4 to
      // 1e-6 so the filter starts from the well-characterized turn-on bias
      // of the flight IMU rather than admitting a wide early bias swing
      // that the flight data showed disturbing the initial heading.
      gyroscopeBias_rad2_s2 = fill(1.0e-6, 3),
      accelerometerBias_m2_s4 = fill(1.0e-2, 3)),
    // Automatic recovery re-seed enabled for this deployment. On the flight
    // log a 60 s GNSS outage while moving left the solution hundreds of
    // metres off, and every returning fix was gate-rejected, so the ladder
    // stalled at the divergent stage and never recovered. Six seconds is one
    // second beyond the five-second divergent window, so the covariance
    // inflation is given its full span to readmit a good fix on its own
    // before the estimator re-seeds position and velocity from the first
    // fresh fix; on the log this re-anchored within about ten seconds of
    // each outage.
    aidingReseedWindow_s = 6.0,
    initialAlignmentWindow_s = 0.3,
    initialAlignmentTimeout_s = 5.0,
    pseudoPositionVariance_m2 = 100.0,
    zeroVelocityVariance_m2_s2 = 9.0e-2);

  annotation(Documentation(info = "<html>
    <p>Export this block as the default RDD2 estimator eFMU. Alternate filter
    blocks extend <code>Avionics.PartialNavigationEstimator</code>
    and therefore replace this artifact without changing any sensor input,
    navigation output, status field, or controller wiring.</p>
    <p>The process-noise and initial-variance modifiers, the enabled
    automatic re-seed window, the 0.3-second quasi-static alignment window,
    and the synthetic hold-position (10 m sigma) and zero-velocity (0.3 m/s
    sigma) updates that keep an unaided indoor filter bounded are RDD2
    flight-log tuning of the generic strapdown defaults. The calibrated
    magnetic-vector update observes tilt as well as heading, and geometric
    alignment conditions startup uncertainty on the measured vectors; the defaults in
    <code>Estimation.StrapdownINS.PartialEstimator</code> are unchanged, so
    every other consumer of the filter keeps them.</p>
  </html>"));
end NavigationEstimator;