TelemetrySign in

Metric reference

One row per number the interface can show. Scope driver = shown by default; engineer = Engineer view only. Formulas are rendered on the methodology pages.

id label scope stored unit shown source parameters page
lap_time Lap time driver s s GPS positions (valid samples) and the start/finish gate lap_gate_min_halfwidth_m, lap_gate_spread_factor, lap_gate_heading_max_deg, lap_cross_min_speed_ms, lap_min_lap_s lap-detection
delta_to_fastest vs fastest driver s s lap times lap-detection
lap_spread Lap spread driver s s lap times of the racing laps lap-detection
lap_progress_time Lap time at position driver s s continuity-constrained projection of the lap onto the centerline centerline_ds_m, proj_sigma_s_m, proj_back_tol_m, proj_n_max_m track-progress
final_delta Lap delta driver s s lap progress t(s) of both laps delta_invariant_tol_s lap-delta
delta_t Time delta along the lap driver s s PCHIP progress interpolants t_A(s), t_R(s) on the 1 m centerline grid centerline_ds_m, delta_display_smooth_m, sg_polyorder, delta_low_confidence lap-delta
segment_delta Segment delta driver s s unsmoothed Δt(s) of the pair; segment boundaries as fractions of lap length segment_curvature_smooth_m, segment_corner_fraction, segment_blob_m, segment_min_length_m, segment_center_fraction lap-delta
speed Speed driver m/s mph GoPro reported 2-D GPS speed (receiver velocity solution) speed_cutoff_hz, speed_gap_fill_s, gps_gap_s speed
a_long_path Longitudinal acceleration (path) engineer m/s² g v_analysis sg_window_long_s, sg_polyorder, speed_cutoff_hz speed
cornering_g Cornering G driver m/s² g GPS only: v_analysis and the path heading from GPS positions sg_window_heading_s, sg_polyorder, speed_cutoff_hz, heading_min_speed_ms cornering-g
cornering_g_sustained Cornering G, sustained driver g g Cornering G inside the segment sustained_window_s cornering-g
chassis_load Chassis Lateral Load driver m/s² g accelerometer (specific force) rotated into the vehicle frame by the mount calibration imu_cutoff_hz, imu_hampel_window, imu_hampel_nsigma, imu_replace_clipped, imu_decimate_hz, calib_corr_good, calib_corr_ok, mount_drift_max_deg chassis-load
chassis_load_sustained Chassis Load, sustained driver g g Chassis Lateral Load inside the segment sustained_window_s chassis-load
min_speed Minimum speed driver m/s mph v_analysis inside the segment speed_cutoff_hz speed
entry_exit_speed Entry / exit speed driver m/s mph v_analysis at the segment boundaries speed
brake_point Brake point driver m (track position s) m a_long_path inside the segment brake_threshold_ms2, brake_sustain_s, sg_window_long_s speed
accel_point Acceleration point driver m (track position s) m a_long_path after the minimum speed accel_threshold_ms2, accel_sustain_s, sg_window_long_s speed
line_offset Line offset driver m m continuity-constrained projection onto the centerline proj_n_max_m, centerline_ds_m track-progress
gps_valid_fraction GPS valid driver fraction % GPS quality flags gps_fix_min, gps_dop_max, gps_prelock_valid_run_s, gps_jump_speed_factor, gps_jump_noise_m, gps_jump_speed_floor_ms, gps_speed_max_ms, gps_spike_accel_ms2, gps_spike_recovery_samples, gps_hampel_window, gps_hampel_nsigma, gps_hampel_min_ms gps-validation
proj_confidence Projection confidence engineer fraction continuity-constrained projection proj_n_max_m, proj_sigma_s_m, proj_min_window_m, proj_back_tol_m, proj_lost_limit track-progress
body_yaw_lateral Body-yaw lateral (gyro) engineer m/s² g gyroscope yaw rate in the vehicle frame and v_analysis lean_lowpass_hz, imu_cutoff_hz, imu_decimate_hz cornering-g
lean_est Lean estimate engineer rad ° Chassis Lateral Load, vertical specific force and Cornering G lean_lowpass_hz chassis-load
mount_confidence Mount calibration confidence engineer fraction stationary up-vector, lateral-axis fit, handedness test stationary_min_seconds, stationary_speed_max_ms, calib_corr_good, calib_corr_ok, handedness_agreement_min, handedness_min_lat_ms2, stationary_up_spread_max_deg chassis-load
gps_lag GPS lag engineer s s cross-correlation of low-passed f_body_x with a_long_path (yaw rate as cross-check) video-sync
sync_offset Video sync offset δ engineer s s video frame clock vs session clock video-sync

Definitions

lap_time — Lap time

Time between two consecutive accepted crossings of the start/finish gate. Each crossing time is interpolated between the two GPS samples that straddle the gate.

  • Formula: T = t_end − t_start; t_c = t[i−1] + (t[i] − t[i−1])·λ (λ = intersection parameter along the sample segment)
  • Algorithm: lap-detect-1.0.0+laps-1.0.0+centerline-1.0.0+projection-1.0.0
  • API: GET /sessions/{sid}/laps → laps[].lap_time_s
  • Confidence / quality: Crossing confidence = clip(1 − |lateral offset| / gate half-width) × clip(cos heading error); the lap keeps the lower of its two crossings. Resolution of order 5–10 ms (a fraction of a GPS sample interval).
  • Limitation: Only complete laps have gate-independent times.
  • Limitation: Receiver latency is common to both crossings and cancels.
  • Validation: engine/tests/unit/test_laps_geometry.py
  • Validation: engine/tests/synthetic (exact lap count and times on a synthetic oval)
  • Validation: regression goldens: lap times ±5 ms on both fixtures

delta_to_fastest — vs fastest

Lap time minus the fastest racing lap's time in this session. Positive means slower.

  • Formula: ΔT = T − T_fastest
  • Algorithm: lap-detect-1.0.0+laps-1.0.0+centerline-1.0.0+projection-1.0.0
  • API: GET /sessions/{sid}/laps → laps[].delta_to_fastest_s
  • Confidence / quality: Defined for racing and caution laps; partial, pit and invalid laps have no value.

lap_spread — Lap spread

Slowest racing lap time minus fastest racing lap time in the session; a quick measure of consistency.

  • Formula: max(T) − min(T) over racing laps; undefined with fewer than two racing laps
  • Algorithm: lap-detect-1.0.0+laps-1.0.0+centerline-1.0.0+projection-1.0.0
  • API: GET /sessions → lap_spread_s
  • Confidence / quality: Uses only laps classified racing.

lap_progress_time — Lap time at position

Seconds since the lap's start/finish crossing when the car reached track position s, from the lap's monotone progress interpolant on the 1 m grid.

  • Formula: t_rel(s): PCHIP through the running maximum of projected s, anchored at (0, 0) and (L, T)
  • Algorithm: speed-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → t_rel
  • Confidence / quality: Shown at the nearest 1 m grid point; low where the lap's projection confidence is low.

final_delta — Lap delta

How much slower (+) or faster (−) the comparison lap is than the reference lap over the whole lap. Equal to the difference of the two lap times by construction.

  • Formula: Δt(L) = t_A(L) − t_R(L) = T_A − T_R
  • Algorithm: delta-1.0.0
  • API: GET /sessions/{sid}/delta?lap=A&ref=R → final_delta_s
  • Confidence / quality: Endpoint invariant |Δt(L) − (T_A − T_R)| ≤ delta_invariant_tol_s (1 ms); pairs that fail are not written.
  • Validation: engine/tests/unit/test_delta_unit.py
  • Validation: property test over real lap pairs
  • Validation: regression goldens Δt at fixed s

delta_t — Time delta along the lap

At each track position s, the time the comparison lap needed to get there minus the time the reference lap needed. Rising = losing time, falling = gaining.

  • Formula: Δt(s) = t_A(s) − t_R(s); display trace = Savitzky–Golay smoothing over 10 m (order 2) re-anchored at both ends
  • Algorithm: delta-1.0.0
  • API: GET /sessions/{sid}/delta → delta_t (unsmoothed), delta_t_display (display), loss_rate (dΔt/ds)
  • Confidence / quality: Low-confidence where either lap's projection confidence < delta_low_confidence (0.5) or inside a GPS gap > 0.5 s; shaded on the chart. Continuity bound max|ΔΔt| ≤ Δs (1/v_min,A + 1/v_min,R).
  • Limitation: Projection jitter of 0.2–0.5 m gives ≈ 15 ms of local texture; the display trace is smoothed for reading only, all numbers use the unsmoothed series.
  • Validation: engine/tests/synthetic: prescribed time-difference profile recovered within 5 ms

segment_delta — Segment delta

The share of the lap delta accumulated inside one corner or straight: the delta at the segment's end minus the delta at its start. Segment deltas sum to the lap delta.

  • Formula: Δt_seg = Δt(s_end) − Δt(s_start), unwrapped through start/finish by adding Δt(L) per wrap
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → pairs[].segments[].delta_t_s
  • Confidence / quality: Each segment reports the fraction of its grid points that are low-confidence. A delta of 0.05 s or more is 'notable' (plan §19.2).
  • Validation: engine/tests/synthetic/test_segments_synthetic.py
  • Validation: tests/regression/test_phase10_segments.py

speed — Speed

The receiver's own speed with invalid samples removed, short gaps filled, and a zero-phase low-pass filter applied, resampled onto the track grid.

  • Formula: v_analysis = zero-phase Butterworth (order 2 forward+backward = effective order 4, cutoff speed_cutoff_hz) of v_valid
  • Algorithm: speed-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → v_analysis (also v_raw)
  • Display conversion: mph = m/s × 3600/1609.344
  • Confidence / quality: Uses only valid GPS samples; the position-derived speed is an independent witness (must agree within 1.5 m/s over 2 s windows in ≥ 95 % of moving windows).
  • Limitation: Receiver speed lags true motion by 0.15–0.40 s (measured gps_lag_s); constant over a session and common to both laps of a comparison.
  • Validation: Phase 6 filter selection on real files (docs/proofs/phase-06/filter_selection.md)
  • Validation: engine/tests/unit/test_speed_filters.py
  • Validation: regression goldens max/min/avg per racing lap

a_long_path — Longitudinal acceleration (path)

Rate of change of the filtered GPS speed along the path. Positive = accelerating. Drives the brake and acceleration points.

  • Formula: a_long_path = SG derivative of v_analysis (window sg_window_long_s, order sg_polyorder)
  • Algorithm: speed-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → a_long_path
  • Display conversion: g = m/s² / 9.80665

cornering_g — Cornering G

How hard the car's path is actually curving: speed times the rate of change of the path heading. Contains no gravity, banking or body roll by construction.

  • Formula: a_lat_path = v_analysis × ψ̇; ψ from SG derivatives of ENU position (window 1.0 s, order 2), unwrapped, zero-phase low-passed at 1 Hz; ψ̇ = SG derivative (1.0 s, order 2); masked below 3 m/s
  • Algorithm: speed-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → a_lat_path
  • Display conversion: g = m/s² / 9.80665
  • Confidence / quality: Undefined below heading_min_speed_ms (3 m/s). Noise 0.02–0.04 g (1σ) on straights with no corner bias (Phase 6). Corroborated per lap by the gyro: net rotation ∫r dt vs ∫ψ̇ dt agree within 5 % on every stable lap.
  • Limitation: Instantaneous gyro yaw rate differs from the path heading rate on dirt because the car runs at a slip angle; the gyro channel is a distinct 'body-yaw lateral' quantity, not a substitute.
  • Validation: Phase 6/8 proofs
  • Validation: engine/tests/synthetic: constant-speed circle a_lat = v²/R within 2 %
  • Validation: regression goldens cornering_g_sustained per corner ±0.02 g

cornering_g_sustained — Cornering G, sustained

The highest 1-second average of |Cornering G| inside the segment. A single spike cannot move it by more than its energy share.

  • Formula: max over t of mean |a| over [t, t + sustained_window_s], evaluated on a uniform 20 ms time axis
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].cornering_g_sustained
  • Confidence / quality: Edge-masked (first/last 0.5 s of a run excluded). Window is 8–16 % of a corner's duration on the fixtures.
  • Validation: Phase 8 spike test: one 5 g sample changes the sustained value by < 0.01 g
  • Validation: regression goldens per corner

chassis_load — Chassis Lateral Load

The sideways load the chassis experiences, in the car's own left axis. Includes the gravity component produced by banking and body roll; banking reduces it, which is what banking is for.

  • Formula: f_body_y = (accel_sign × R_{V←C} × f_C,filtered)_y; clipped samples replaced by an 11-sample rolling median, zero-phase Butterworth order 4 at 5 Hz, decimated to 50 Hz
  • Algorithm: imu-1.0.0+mount-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → imu.f_body_y
  • Display conversion: g = m/s² / 9.80665
  • Confidence / quality: Shown only when mount priority ≤ 3 (automatic confidence ≥ 0.5 or a manual override) and the lap is not flagged mount_moved. Confidence = min of stationary, correlation and handedness components.
  • Limitation: Depends on a rigid mount; a flexing pole mount gives 0.21 g RMS disagreement with a rigid camera in the same car.
  • Limitation: Only bank + roll relative to the parked attitude is observable.
  • Validation: Phase 8: stationary f_V = (0,0,g₀) ± 0.05 g; handedness ≥ 95 %; two-camera gyro lateral agreement 0.08–0.10 g RMS
  • Validation: engine/tests/unit/test_imu_conventions.py (S1–S5 closed-form cases)

chassis_load_sustained — Chassis Load, sustained

The highest 1-second average of |Chassis Lateral Load| inside the segment.

  • Formula: max over t of mean |f_body_y| over [t, t + sustained_window_s]
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].chassis_load_sustained
  • Confidence / quality: Same visibility rule as Chassis Lateral Load.

min_speed — Minimum speed

The lowest filtered speed inside the segment and where it occurs.

  • Formula: nanmin of v_analysis over the segment's grid points; min_speed_s = its position
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].min_speed_ms, min_speed_s
  • Display conversion: mph = m/s × 3600/1609.344

entry_exit_speed — Entry / exit speed

Filtered speed at the first and last grid point of the segment.

  • Formula: v[0], v[-1] of the segment's grid values
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].entry_speed_ms, exit_speed_ms
  • Display conversion: mph = m/s × 3600/1609.344

brake_point — Brake point

The first track position in the segment where the car decelerates harder than 2 m/s² for at least 0.3 s.

  • Formula: first s of the first run with a_long_path < −brake_threshold_ms2 lasting ≥ brake_sustain_s
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].brake_point_s (metres of s, not seconds)
  • Limitation: Braking that starts before the segment is reported at the segment start.

accel_point — Acceleration point

The first track position after the minimum speed where the car accelerates harder than 1 m/s² for at least 0.5 s.

  • Formula: first s after i_min with a_long_path > accel_threshold_ms2 sustained ≥ accel_sustain_s
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].accel_point_s
  • Limitation: Absent ('—') when the threshold is never sustained inside the segment.

line_offset — Line offset

Mean signed distance of the lap's GPS positions from the track centerline inside the segment. Positive = left of the direction of travel (inside on a left-turning oval).

  • Formula: nanmean of lat_offset over the segment's grid points
  • Algorithm: segments-1.0.0+segment-results-1.0.0
  • API: GET /sessions/{sid}/segments → laps[].segments[].lat_offset_mean_m; profile → lat_offset
  • Limitation: Absolute consumer-GPS position error is 2–3 m; the difference between two laps of the same session is much better because errors are correlated.

gps_valid_fraction — GPS valid

Share of GPS samples with no invalidating flag (no fix, high DOP, pre-lock, non-monotonic time, position jump, speed spike).

  • Formula: valid samples / all samples (session) or inside the lap (lap)
  • Algorithm: validate-gps-1.0.0
  • API: GET /sessions/{sid}/quality → gps.valid_fraction; laps[].gps_valid_fraction
  • Confidence / quality: Session blocked below gps_valid_fraction_min (0.8); lap invalid below lap_gps_valid_fraction_min (0.9).

proj_confidence — Projection confidence

Per sample: how close the GPS point is to the centerline and to its predicted progress; per lap: the mean.

  • Formula: c = clip(1 − |n|/proj_n_max_m) × clip(1 − |s − s_pred|/window)
  • Algorithm: lap-detect-1.0.0+laps-1.0.0+centerline-1.0.0+projection-1.0.0
  • API: GET /sessions/{sid}/laps → laps[].proj_confidence_mean, proj_lost_count; profile → proj_confidence
  • Confidence / quality: A lap mean below 0.9 raises a data-quality warning (plan §19.2); grid points below delta_low_confidence (0.5) are low-confidence in the delta.

body_yaw_lateral — Body-yaw lateral (gyro)

Speed times the body yaw rate (corrected for lean). On dirt this leads Cornering G at corner entry because the car runs at a slip angle; the difference is the slip-angle rate.

  • Formula: a_lat_gyro = v_analysis × r_V / cos(λ̂), λ̂ = low-passed lean estimate (0.5 Hz)
  • Algorithm: imu-1.0.0+mount-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → imu.a_lat_gyro
  • Display conversion: g = m/s² / 9.80665
  • Confidence / quality: Net rotation per lap ∫r dt agrees with ∫ψ̇_gps dt within 5 % on stable laps; instantaneous RMS vs Cornering G is 0.47–0.74 g on dirt (slip), so it is a corroboration of the lap's rotation, not a point-by-point check.

lean_est — Lean estimate

Bank plus body roll relative to the parked attitude, from the steady-turn inverse. Positive = leaning into a left turn.

  • Formula: λ_est = atan2(f_body_z, f_body_y) − atan2(g₀, a_lat_path); undefined below 8 m/s
  • Algorithm: imu-1.0.0+mount-1.0.0
  • API: GET /sessions/{sid}/profile/{lap} → imu.lean_est; segments → lean_angle_mean_deg; imu → corners[].lean_mean_deg
  • Limitation: Exact only for a steady planar turn; transient roll and suspension motion add 6–9° per-sample scatter (lap means are stable to < 1°).

mount_confidence — Mount calibration confidence

The weakest of: stationary evidence (1.0 with ≥ 30 s stationary, else 0.6), lateral-axis correlation (1.0 / 0.7 / 0.4 by corr_lat ≥ 0.8 / ≥ 0.6 / below) and handedness (1.0 pass, 0.3 fail, 0.7 untestable). Manual overrides are fixed at 0.75.

  • Formula: confidence = min(conf_stat, conf_corr, conf_hand); method = auto if ≥ 0.8 else auto_low_confidence
  • Algorithm: imu-1.0.0+mount-1.0.0
  • API: GET /sessions/{sid}/mount-calibration → confidence, method, priority
  • Confidence / quality: Priority 1: auto ≥ 0.8. Priority 2: auto 0.5–0.8 (warning). Priority 3: manual. Priority 4: hidden vehicle-frame channels.

gps_lag — GPS lag

How far the GPS-derived channels trail the IMU clock. Applied before any IMU comparison and used in the video-sync model.

  • Formula: lag = argmax of the cross-correlation over ±2.5 s in 0.05 s steps
  • Algorithm: imu-1.0.0+mount-1.0.0
  • API: GET /sessions/{sid}/mount-calibration → gps_lag_s
  • Limitation: Measured −0.15 s (HERO11) to −0.40 s (HERO9) on the fixtures.

sync_offset — Video sync offset δ

Per-chapter offset between the video clock and the telemetry clock: t_video = t_session − t_chapter_start + δ. Default 0; measured per camera by matching visible bumps with the vertical accelerometer.

  • Formula: t_video = t_session − t_chapter_start + δ_k
  • Algorithm: normalize-1.0.0
  • API: GET /sessions/{sid}/video-url → sync_offset_s, t_chapter_start_s
  • Confidence / quality: Measured median δ: +0.05 s (HERO11, spread 0.33 s), +0.85 s (HERO9, spread 1.3 s, GPS time buffered by the camera). The default of 0 is labelled 'unverified' in the interface.