Environment
- Hardware: 3x ESP32-S3-WROOM (16MB Flash, 8MB PSRAM)
- Firmware: v0.6.4-esp32
- Server: ruvnet/wifi-densepose Docker (latest)
- Host OS: macOS (MacBook Pro)
- WiFi channel: 3 (locked via --channel 3)
- Edge tier: 1 and 2 (both tested)
- TDM: enabled (--tdm-slot 0/1/2 --tdm-total 3)
- pres-thresh: 15, vital-win: 30, vital-int: 2, subk-count: 16
- Docker env: CSI_SOURCE=esp32, MAX_FPS=10, MAX_PERSONS=1
Bugs observed
Bug 1 — Ghost person: 2 persons detected with only 1 person present
Occurs with 1 ESP32 and with 3 ESP32 nodes. Persists on both edge-tier 1 and edge-tier 2. MAX_PERSONS=1 Docker env var does not resolve it. Suspected cause: subcarrier group clustering splitting single person's reflections into 2 clusters (as noted in issue #104).
Bug 2 — FPS shows "Infinity" in UI with 3 ESP32 nodes
MAX_FPS=10 Docker env var fixes it with 1 node but not with 3 nodes. With 3 nodes active the frame flood overwhelms the rate limiter and FPS counter overflows to Infinity.
Bug 3 — Pose skeleton flickering too fast
Skeleton keypoints jump rapidly between positions making it impossible to track posture. Occurs on both edge-tier 1 and 2 with 3 nodes. TDM provisioning did not resolve this.
Bug 4 — Vitals (BR, HR) readings are very jumpy
Values change erratically every second even with --vital-win 30 and --vital-int 2. Not stable enough for real use. Tested with single stationary subject within 2m of ESP32.
Steps to reproduce
- Flash v0.6.4 firmware (8MB variant) to 3x ESP32-S3
- Provision each node separately (one at a time, unplugged others):
python provision.py --port /dev/cu.usbmodem1101 \
--ssid "SSID" --password "PWD" --target-ip 192.168.1.10 \
--edge-tier 1 --channel 3 --node-id 1 \
--tdm-slot 0 --tdm-total 3 \
--pres-thresh 15 --vital-win 30 --vital-int 2 --subk-count 16
- Run Docker:
docker run -e CSI_SOURCE=esp32 -e MAX_FPS=10 -e MAX_PERSONS=1 \
-p 3000:3000 -p 3001:3001 -p 5005:5005/udp \
ruvnet/wifi-densepose:latest
- Open http://localhost:3000/ui/index.html
- Stand alone in room with 3 ESP32s in 3 corners
Result: persons=2, FPS=Infinity, skeleton flickering, jumpy vitals
Serial log sample (1 node, edge-tier 1)
I (944120) csi_collector: CSI cb #18500: len=128 rssi=-58 ch=3
E (960790) task_wdt: Task watchdog got triggered.
E (960790) task_wdt: - IDLE1 (CPU 1)
E (960790) task_wdt: CPU 1: edge_dsp
Backtrace: 0x4037890F:0x3FC9D6A0 0x4037746D:0x3FC9D6C0 0x4200D225:0x3FCC9F10
I (968100) csi_collector: CSI cb #18700: len=384 rssi=-52 ch=3
Questions for maintainers
- Is MAX_PERSONS=1 env var actually implemented in the server? (had no effect)
- Is there a server-side person deduplication setting for multi-node setups?
- What is the correct way to rate-limit WebSocket frame delivery to the UI?
- Is vital-win/vital-int smoothing applied server-side or only on ESP32?
- Is the task_wdt: edge_dsp watchdog fixed in v0.6.4 for edge-tier 1?
Expected vs actual
- Expected: 1 person detected, stable ~10 FPS, smooth skeleton, stable vitals
- Actual: 2 ghost persons, FPS=Infinity (3 nodes), flickering skeleton, jumpy vitals
Environment
Bugs observed
Bug 1 — Ghost person: 2 persons detected with only 1 person present
Occurs with 1 ESP32 and with 3 ESP32 nodes. Persists on both edge-tier 1 and edge-tier 2. MAX_PERSONS=1 Docker env var does not resolve it. Suspected cause: subcarrier group clustering splitting single person's reflections into 2 clusters (as noted in issue #104).
Bug 2 — FPS shows "Infinity" in UI with 3 ESP32 nodes
MAX_FPS=10 Docker env var fixes it with 1 node but not with 3 nodes. With 3 nodes active the frame flood overwhelms the rate limiter and FPS counter overflows to Infinity.
Bug 3 — Pose skeleton flickering too fast
Skeleton keypoints jump rapidly between positions making it impossible to track posture. Occurs on both edge-tier 1 and 2 with 3 nodes. TDM provisioning did not resolve this.
Bug 4 — Vitals (BR, HR) readings are very jumpy
Values change erratically every second even with --vital-win 30 and --vital-int 2. Not stable enough for real use. Tested with single stationary subject within 2m of ESP32.
Steps to reproduce
Result: persons=2, FPS=Infinity, skeleton flickering, jumpy vitals
Serial log sample (1 node, edge-tier 1)
Questions for maintainers
Expected vs actual