{
  "synthetic": true,
  "protocol_version": "1.0.0",
  "scope": "PC teaching exercises only",
  "cases": {
    "imu-baseline": {
      "synthetic": true,
      "scope": "single-axis roll exercise; not sensor or flight validation",
      "frame": "body FRD; no pitch/yaw; initial reference roll zero",
      "rows": 1001,
      "stationary_bias_window_ms": [
        0.0,
        1000.0
      ],
      "gyro_bias_deg_s": 0.5,
      "duration_s": 10.0,
      "dt_min_ms": 10.0,
      "dt_max_ms": 10.0,
      "dt_mean_ms": 10.0,
      "dt_std_ms": 0.0,
      "tau_s": 0.5,
      "norm_gate_m_s2": 0.3,
      "gated_accel_samples": 0,
      "rmse_deg": {
        "raw_gyro_roll_deg": 2.887792,
        "bias_corrected_roll_deg": 0.00063,
        "complementary_roll_deg": 0.004671,
        "gated_roll_deg": 0.004671
      }
    },
    "imu-motion": {
      "synthetic": true,
      "scope": "single-axis roll exercise; not sensor or flight validation",
      "frame": "body FRD; no pitch/yaw; initial reference roll zero",
      "rows": 1001,
      "stationary_bias_window_ms": [
        0.0,
        1000.0
      ],
      "gyro_bias_deg_s": 0.5,
      "duration_s": 10.0,
      "dt_min_ms": 10.0,
      "dt_max_ms": 10.0,
      "dt_mean_ms": 10.0,
      "dt_std_ms": 0.0,
      "tau_s": 0.5,
      "norm_gate_m_s2": 0.3,
      "gated_accel_samples": 51,
      "rmse_deg": {
        "raw_gyro_roll_deg": 2.887792,
        "bias_corrected_roll_deg": 0.00063,
        "complementary_roll_deg": 2.386747,
        "gated_roll_deg": 0.005033
      }
    },
    "messages": {
      "synthetic": true,
      "clock": "shared synthetic clock; one boot session",
      "sequence_bits": 16,
      "max_age_ms": 40,
      "rows": 12,
      "counts": {
        "accepted": 7,
        "duplicate": 1,
        "out_of_order": 1,
        "stale": 2,
        "future_timestamp": 1,
        "accepted_stream_gaps": 3
      },
      "gap_meaning": "gaps in the accepted stream; not a physical packet-loss measurement"
    },
    "control-healthy": {
      "synthetic": true,
      "scope": "one-axis PC model; no STM32, firmware, SITL or flight validation",
      "scenario": "healthy",
      "rows": 601,
      "nominal_period_ms": 10,
      "first_tick_dt": "nominal 10 ms; subsequent dt from actual start times",
      "ideal_sensor": "current plant state at tick start; zero acquisition latency/no sensor noise",
      "command_unit": "deg/s^2 in teaching plant; not ESC/motor command",
      "pid": {
        "kp": 4,
        "ki": 1,
        "kd": 2.5,
        "output_limit_deg_s2": 60,
        "integral_limit_deg_s": 20
      },
      "missed_deadlines": 0,
      "max_release_delay_ms": 0.0,
      "max_abs_dt_jitter_ms": 0.0,
      "output_limit_ticks": 1,
      "integral_hold_ticks": 1,
      "max_abs_integral_deg_s": 10.940764,
      "first_stop_ms": null,
      "stop_ticks": 0,
      "stop_policy": "latched STOP_SIM at data age >=120 ms; command zero in model only",
      "tracking_rmse_deg": 5.164592,
      "final_angle_deg": 16.321285
    },
    "control-overload": {
      "synthetic": true,
      "scope": "one-axis PC model; no STM32, firmware, SITL or flight validation",
      "scenario": "overload",
      "rows": 601,
      "nominal_period_ms": 10,
      "first_tick_dt": "nominal 10 ms; subsequent dt from actual start times",
      "ideal_sensor": "current plant state at tick start; zero acquisition latency/no sensor noise",
      "command_unit": "deg/s^2 in teaching plant; not ESC/motor command",
      "pid": {
        "kp": 4,
        "ki": 1,
        "kd": 2.5,
        "output_limit_deg_s2": 60,
        "integral_limit_deg_s": 20
      },
      "missed_deadlines": 15,
      "max_release_delay_ms": 2.0,
      "max_abs_dt_jitter_ms": 2.0,
      "output_limit_ticks": 1,
      "integral_hold_ticks": 1,
      "max_abs_integral_deg_s": 10.94041,
      "first_stop_ms": null,
      "stop_ticks": 0,
      "stop_policy": "latched STOP_SIM at data age >=120 ms; command zero in model only",
      "tracking_rmse_deg": 5.164284,
      "final_angle_deg": 16.321254
    },
    "control-saturation": {
      "synthetic": true,
      "scope": "one-axis PC model; no STM32, firmware, SITL or flight validation",
      "scenario": "saturation",
      "rows": 601,
      "nominal_period_ms": 10,
      "first_tick_dt": "nominal 10 ms; subsequent dt from actual start times",
      "ideal_sensor": "current plant state at tick start; zero acquisition latency/no sensor noise",
      "command_unit": "deg/s^2 in teaching plant; not ESC/motor command",
      "pid": {
        "kp": 4,
        "ki": 1,
        "kd": 2.5,
        "output_limit_deg_s2": 60,
        "integral_limit_deg_s": 20
      },
      "missed_deadlines": 0,
      "max_release_delay_ms": 0.0,
      "max_abs_dt_jitter_ms": 0.0,
      "output_limit_ticks": 36,
      "integral_hold_ticks": 36,
      "max_abs_integral_deg_s": 15.698988,
      "first_stop_ms": null,
      "stop_ticks": 0,
      "stop_policy": "latched STOP_SIM at data age >=120 ms; command zero in model only",
      "tracking_rmse_deg": 10.929962,
      "final_angle_deg": 32.040537
    },
    "control-data-loss": {
      "synthetic": true,
      "scope": "one-axis PC model; no STM32, firmware, SITL or flight validation",
      "scenario": "data-loss",
      "rows": 601,
      "nominal_period_ms": 10,
      "first_tick_dt": "nominal 10 ms; subsequent dt from actual start times",
      "ideal_sensor": "current plant state at tick start; zero acquisition latency/no sensor noise",
      "command_unit": "deg/s^2 in teaching plant; not ESC/motor command",
      "pid": {
        "kp": 4,
        "ki": 1,
        "kd": 2.5,
        "output_limit_deg_s2": 60,
        "integral_limit_deg_s": 20
      },
      "missed_deadlines": 0,
      "max_release_delay_ms": 0.0,
      "max_abs_dt_jitter_ms": 0.0,
      "output_limit_ticks": 1,
      "integral_hold_ticks": 291,
      "max_abs_integral_deg_s": 10.940764,
      "first_stop_ms": 3110.0,
      "stop_ticks": 290,
      "stop_policy": "latched STOP_SIM at data age >=120 ms; command zero in model only",
      "tracking_rmse_deg": 5.60171,
      "final_angle_deg": 19.135055
    }
  }
}
