Background
The acute fast-path detector (design discussion #58; epics #28 / #37) needs training and test data, and real labelled falls are scarce. Good news: a fall/crash is physically describable — rigid-body kinematics projected into the body frame yields accelerometer (≈ 2nd derivative + gravity) and gyro (angular velocity) traces. We already have a simulation scaffold in app/test/sim/.
The task
Build a generator that synthesises labelled sensor windows for the target events:
- Classes: bike crash · pedestrian slip (with quick recovery → a negative) · fall on stairs · hard-sit / phone-drop (hard negatives) · normal activity.
- Signals: accelerometer + gyroscope (+ barometer for the stairs altitude drop, speed/GPS for bike).
- Domain randomisation (the important part — this is what closes the sim-to-real gap): randomise sensor noise/bias/quantisation, sampling jitter, and phone placement/orientation (pocket / hand / bag), plus body/device variance.
- Emit a common, documented format that the benchmark and training scripts consume.
Acceptance criteria
Guardrails / notes
- Purely synthetic — no real user data. This is the off-device raw-trace stand-in used for training/eval only; on-device the
LivenessSource boundary still emits only a verdict.
- Generating plausible data is easy; generating data that transfers to a real phone is the point — lean hard on domain randomisation, and don't over-claim realism (the honest-metrics rule).
Why this is a good first issue / help wanted
Self-contained, no GPU or ML depth needed, and it unlocks the benchmark and training work. Part of the on-device acute-detector epic.
Background
The acute fast-path detector (design discussion #58; epics #28 / #37) needs training and test data, and real labelled falls are scarce. Good news: a fall/crash is physically describable — rigid-body kinematics projected into the body frame yields accelerometer (≈ 2nd derivative + gravity) and gyro (angular velocity) traces. We already have a simulation scaffold in
app/test/sim/.The task
Build a generator that synthesises labelled sensor windows for the target events:
Acceptance criteria
app/test/sim/.Guardrails / notes
LivenessSourceboundary still emits only a verdict.Why this is a good first issue / help wanted
Self-contained, no GPU or ML depth needed, and it unlocks the benchmark and training work. Part of the on-device acute-detector epic.