5.7 KiB
5.7 KiB
MotorSignal — Telemetry Pipeline Architecture
This document describes the runtime sensor pipeline, coordinate frames, sampling frequencies, and state machine architecture of the MotorSignal application.
1. Pipeline Overview & Sampling Rates
MotorSignal uses an asynchronous dual-input sensor architecture with a high-rate fused telemetry output:
┌──────────────────────────────────────────────────────────┐
│ SENSING INPUTS │
│ │
│ GNSS Receiver (Google Fused Provider): │
│ • Interval: 100 ms (~10 Hz) │
│ • Accuracy: LocationAccuracy.bestForNavigation │
│ │
│ IMU (3-Axis Accelerometer & Gyroscope): │
│ • Interval: 20 ms (~50 Hz) │
│ • Sensors: Linear Acceleration, Gyroscope, Gravity │
└────────────────────────────┬─────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ SENSOR FUSION & FILTERING │
│ │
│ Speed Processing: │
│ • Dynamic Fast-Tracking EMA (α=0.90 accel, 0.75 cruise│
│ • Jitter Deadband (< 0.6 m/s treated as 0.0 MPH) │
│ │
│ Lean Angle Processing: │
│ • Roll/Pitch Complementary Filter (base α=0.94) │
│ • Dynamic Acceleration Decoupling (α=0.998 on launch) │
│ │
│ 3D G-Force Projection: │
│ • Phone linear acceleration projected into bike frame │
│ • Vibration Low-Pass Filter (α=0.40, gate 0.02g) │
└────────────────────────────┬─────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ TELEMETRY VALIDATION LAYER │
│ │
│ • Nan / Infinity Numeric Sanity Checks │
│ • Rate-of-Change & Physical Limit Bounds │
│ • Confidence Scoring (GPS, Speed, Lean, G-Force) │
│ • State Classification (Stationary, Accel, Braking) │
└────────────────────────────┬─────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ TELEMETRY OUTPUT STREAM │
│ │
│ • Heartbeat Rate: 50 ms (~20 Hz) │
│ • Event Dispatch: Immediate on GPS / IMU fixes │
│ • Consumer 1: Evolution / Classic UI Cockpit │
│ • Consumer 2: Drift SQLite (5-second batching) │
│ • Consumer 3: Black-Box Field Test Logger │
└──────────────────────────────────────────────────────────┘
Note on Terminology: GNSS input operates at
\approx 10\text{ Hz}(100\text{ms}interval) while the telemetry stream delivers\approx 20\text{ Hz}(50\text{ms}interval) updates by combining the latest filtered GNSS position with high-rate50\text{ Hz}IMU sensor fusion.
2. Coordinate Conventions
Screen & Vehicle Coordinate Systems
- Portrait Mount:
+X: Right lateral+Y: Forward longitudinal+Z: Upward vertical
- Landscape Left Mount:
+X: Forward longitudinal+Y: Left lateral (inverted to+Yright)+Z: Upward vertical
Angular Conventions
- Lean Angle (Roll):
0.0^\circ: Upright motorcycle.- Positive (
+\theta): Right-hand lean / cornering. - Negative (
-\theta): Left-hand lean / cornering.
- Pitch Angle:
- Positive (
+\phi): Wheelie / nose-up acceleration. - Negative (
-\phi): Stoppie / nose-down braking.
- Positive (
3. Database Persistence & Crash Resilience
- Batch Buffer: Telemetry samples are buffered in memory and flushed via
db.batchevery 5 seconds. - Bounded Capacity: The buffer is capped at 1,000 samples to protect memory during transient SQLite locks.
- Incremental Ride Summaries: Ongoing stats (distance, top speed, max lean, moving/stopped time) are incrementally written to the
Ridestable every 5 seconds. - Auto-Recovery: On startup, unfinished sessions (
endTime.isNull()) are recovered with the timestamp of the last recorded telemetry breadcrumb.