Wireless · DSP · Machine learning
GPS stops at the door. The version of this that went around last summer used one ESP32 and a router, so one link, and I wanted to know what a small network would do instead. Three nodes give nine directed links, and locate a person from nothing but the way their body disturbs the Wi-Fi packets crossing between them. No tag, no camera, nothing carried by the person being tracked.
ESP32 node .21 | (2.2, 0.5) · lower room, left |
|---|---|
ESP32 node .20 | (4.9, 1.7) · lower room, right |
ESP32 node .24 | (5.6, 5.5) · upper room, doubles as waypoint x |
| Router | (2.7, 7.1) · upper room, far corner |
| Doorway between halves | 1.4 m opening, waypoint c at (3.4, 4.6) |

Held out by location, not at random. CSI samples a fraction of a second apart are nearly identical, so a random split leaves almost every test sample with a near-duplicate in training and the reported error collapses to something impressive and meaningless.
| Median localization error | 0.79 m · recorded CSI |
|---|---|
| 90th percentile | 1.78 m |
| Evaluation protocol | Leave-location-out cross-validation, 178 locations |
| Nodes and links | 3 × ESP32, 9 directed links at 50 Hz |
| Link layer | ESP-NOW beacons streamed over UDP, connectionless so the rate holds |
| Routes | 40 directed routes over 12 waypoints |
| Training data | 40 routes × 3 sessions at 3 average walking speeds |
| Models | RandomForest + CNN, constant-velocity Kalman tracking |