Technology

Two signals carry the whole of kinematic telematics.

Both come free from data the preparation stage already produces — no human labelling anywhere in this path. The engineering is in what happens after them.

a_long = dv/dt

Longitudinal acceleration

Braking and acceleration. Speed is smoothed over 0.5 s before differentiation — long enough to reject CAN quantisation noise, short enough to preserve a real one-second brake application. Differentiating raw speed turns sensor noise into events that never happened.

a_lat = v² · κ

Lateral acceleration

Cornering, from curvature and speed. The square matters: the same 100 m radius bend is 1.0 m/s² at 36 km/h and 6.25 m/s² at 90 km/h. A curvature-only detector flags both or neither, and is wrong either way.

debounce

Manoeuvres, not samples

A threshold crossing lasting one frame is a sensor dropout. Two brake applications 0.3 s apart are one manoeuvre. Crossings under 0.2 s are discarded; same-kind events within 1 s are merged.

÷ distance

Exposure normalisation

Rates are per 100 km, never raw counts. Counting events alone ranks the driver who drives the most, not the driver who drives the worst.

per trip

Trip boundaries are respected

Every trip is processed independently. Concatenating two clips puts a 30 → 2 m/s step at the seam, which differentiates into a spectacular braking event that never occurred. Enforced and covered by tests.

v² · κ ≤ 12

Unit guards

A steering angle is not curvature without the steering ratio and wheelbase. Feed one in as the other and you get event counts that look merely high rather than obviously broken, so implied lateral acceleration is checked against what tyres can physically deliver before anything is scored.

Verification

Signals derived from ego-motion are verified against a second, independent derivation.

Curvature comes from fused ego-pose. A sign or axis error there does not crash — it silently produces confident numbers that are backwards. So it is cross-checked against curvature recomputed from the position track alone, which is geometrically independent.

CheckExpectedMeasured
Trajectory vs yaw-rate curvature correlation≈ −0.9−0.927
Same check, 551-segment reference run≈ −0.9−0.917
GNSS speed vs position-track speed≈ +1.0pass
Implied lateral acceleration plausibilityp99 < 12 m/s²pass

A mirrored axis inverts turn direction while every magnitude stays perfectly plausible. The verifier is written to reject that case specifically, and there is a test that fails if it ever certifies one.

Testing philosophy

The test suite targets the places where a bug produces a plausible-looking number rather than a crash — because those are the ones that reach production. Circular paths of known radius pin the curvature derivations. Yaw unwrapping is tested across the ±π branch cut. Sequence boundaries are tested to make sure a stack or a derivative never spans two trips. Compression round-trips content and labels through every storage format, so packing cannot quietly desynchronise data from its labels.