Commit Graph

2 Commits

Author SHA1 Message Date
ruv 56a6562e12 fix(firmware): v0.6.4-esp32 — Tmr Svc 16 KiB stack + version drift fix (#505)
Two bugs in the v0.6.3-esp32 release, both reported in #505:

1. **4 MB binary boot-loops with Tmr Svc stack overflow.** The
   adaptive_controller fast loop runs emit_feature_state() (lwIP
   sendto via stream_sender) AND apply_decision() (which can call
   rv_mesh_send_anomaly — another sendto) inside the FreeRTOS Timer
   Svc callback. The previous fix (a426ae386) bumped from the 2 KiB
   IDF default to 8 KiB; that absorbs the steady-state fast tick but
   not the worst case where a state transition fires the anomaly
   emit on top of an already-stacked feature_state emit. Bump to
   16 KiB across both sdkconfig.defaults.template (8 MB build) and
   sdkconfig.defaults.4mb so the two release variants stay in sync.

2. **All v0.6.3 binaries reported `App version: 0.6.2`.** version.txt
   was never bumped at the v0.6.3-esp32 tag. CMake reads version.txt
   into project(VERSION ...) which feeds esp_app_get_description()->
   version. Bump to 0.6.4 to match the new release tag.

Verified on ESP32-S3 (COM8, MAC d0:cf:13:44:01:84):
- 4 MB build flashed clean, 853 KiB binary, 54 % flash free
- Boot banner now reports `App version: 0.6.4`
- 70 s soak, 71 medium ticks, 0 stack overflow, 0 reboots
- 5 Hz feature_state emit confirmed (seq=299 at ~60 s)
- CSI capture active throughout (motion=1.00, presence=4-20)

Closes #505.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-07 13:14:15 -04:00
rUv 3733e54aef
feat: cross-node fusion + DynamicMinCut + RSSI tracking (v0.5.3)
* feat(server): cross-node RSSI-weighted feature fusion + benchmarks

Adds fuse_multi_node_features() that combines CSI features across all
active ESP32 nodes using RSSI-based weighting (closer node = higher weight).

Benchmark results (2 ESP32 nodes, 30s, ~1500 frames):

  Metric               | Baseline | Fusion  | Improvement
  ---------------------|----------|---------|------------
  Variance mean        |    109.4 |    77.6 | -29% noise
  Variance std         |    154.1 |   105.4 | -32% stability
  Confidence           |    0.643 |   0.686 | +7%
  Keypoint spread std  |      4.5 |     1.3 | -72% jitter
  Presence ratio       |   93.4%  |  94.6%  | +1.3pp

Person count still fluctuates near threshold — tracked as known issue.

Verified on real hardware: COM6 (node 1) + COM9 (node 2) on ruv.net.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(ui): add client-side lerp smoothing to pose renderer

Keypoints now interpolate between frames (alpha=0.25) instead of
jumping directly to new positions. This eliminates visual jitter
that persists even with server-side EMA smoothing, because the
renderer was drawing every WebSocket frame at full rate.

Applied to skeleton, keypoints, and dense body rendering paths.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: DynamicMinCut person separation + UI lerp smoothing

- Added ruvector-mincut dependency to sensing server
- Replaced variance-based person scoring with actual graph min-cut on
  subcarrier temporal correlation matrix (Pearson correlation edges,
  DynamicMinCut exact max-flow)
- Recalibrated feature scaling for real ESP32 data ranges
- UI: client-side lerp interpolation (alpha=0.25) on keypoint positions
- Dampened procedural animation (noise, stride, extremity jitter)
- Person count thresholds retuned for mincut ratio

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: update CHANGELOG with v0.5.1-v0.5.3 releases

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-30 21:55:44 -04:00