wearable-activity-fall
:::warning [UNTESTED] — v0.9 paper-correct
The two cores (motion_features, fall_detect) are host-unit-tested on native_sim/native/64; the full app runs end-to-end on native_sim with synthetic motion (incl. an injected fall). No model ships (stub + deterministic fallback); the fall detector needs no model. HiL on a real wearable + a trained model is bench-gated.
:::
Body-worn IMU edge node: read a 6-axis IMU, classify coarse activity (idle/walk/run/stairs) with a small NPU model, and detect falls with a rule-based 3-phase detector. Targets wearables / elder-care / lone-worker safety.
Source: examples/ai/wearable-activity-fall/.
Honest scope
Body-worn motion sensing. Detects falls + coarse activity. Not medical-grade, not a certified fall alarm, no gait/health diagnostics. The fall detector is a physics heuristic (tunable thresholds: free-fall → impact → stillness), not a guarantee.
Pipeline
ICM-42670 accel+gyro (I2C, 100 Hz, +/-16 g)
| every sample -> fall_detect (free-fall -> impact -> stillness)
| 256-sample window -> motion_features (RMS/SMA/cadence/jerk/tilt)
| -> <alp/inference.h> activity classifier (deterministic fallback)
-> WACT record per window
The IMU runs at ±16 g so fall impacts (several g) do not clip.
board.yaml
som:
sku: E1M-AEN701
preset: e1m-evk
supported_boards:
- e1m-evk
- e1m-x-evk
pins:
- { e1m: E1M_I2C0, macro: EVK_I2C_BUS_SENSORS, doc: "ICM-42670 IMU bus" }
cores:
a32_cluster:
os: "off"
m55_hp:
app: ./src
inference:
default_arena_kib: 64
libraries:
- tflite_micro
peripherals:
- i2c # ICM-42670 link
chips:
- icm42670 # 6-axis IMU; accel + gyro
diagnostics:
log_level: info
Flip som.sku to E1M-V2M101 for the DEEPX DX-M1 path.
Expected output
# WACT,t_s,activity,confidence,fall,impact_g
WACT,2.56,WALK,0.91,0,0.0
WACT,12.80,IDLE,0.74,1,4.8
See also
<alp/inference.h>·<alp/chips/icm42670.h>rail-predictive-maintenance— same IMU, infrastructure survey- Examples overview