v0.5.3-esp32

ruvnet/RuViewv0.5.3-esp32Mar 31, 2026by ruvnet

AI Summary

Introduces Cross-Node Mesh Fusion and DynamicMinCut for ESP32-S3 firmware, enabling multi-node networking with RSSI-weighted feature fusion and motion-responsive skeleton tracking.

Key Highlights

  • Cross-Node Mesh Fusion with RSSI weighting
  • DynamicMinCut person separation algorithm
  • Motion-responsive skeleton animation (arm swing, leg kick)
  • Per-Node State tracking (ADR-068) with independent vitals
  • 72% reduction in keypoint jitter

New Features

  • RSSI-weighted feature fusion across multiple nodes
  • DynamicMinCut person separation via temporal correlation graph
  • Motion-driven skeleton animation driven by real CSI data
  • Per-node state management with max aggregation
  • Client-side lerp interpolation for fluid skeleton

Full Release Notes

## What's Changed

### Cross-Node Mesh Fusion
- **RSSI-weighted feature fusion** across multiple ESP32 nodes — closer node gets higher weight
- **DynamicMinCut person separation** via `ruvector_mincut` on subcarrier temporal correlation graph
- **RSSI-based skeleton position tracking** — walk between nodes and the skeleton follows
- **Motion-responsive skeleton** — arm swing (0-80px), leg kick (0-50px), walking bob, head nod all driven by real CSI data

### Per-Node State (ADR-068)
- Each ESP32 gets independent classification, vitals, person count
- Stale node eviction after 60s inactivity
- Multi-node aggregation: max(per_node_counts)

### RuVector Signal Processing (Phases 1-3)
- Subcarrier importance weighting via mincut partition
- Temporal EMA keypoint smoothing with coherence gating
- Skeleton kinematic constraints (Jakobsen relaxation, 12-bone COCO-17 tree)
- Compressed pose history for trajectory matching

### Smoothing & Quality
- Client-side lerp interpolation (alpha=0.15) for fluid skeleton
- Server EMA (alpha=0.15) for temporal blending
- Dampened procedural animation, recalibrated for real ESP32 data
- Vital sign filtering: larger median window (31), faster EMA, looser jump filter

### Hardware Benchmarks (2 ESP32 nodes, 30s)
| Metric | v0.5.2 (baseline) | v0.5.3 (fusion) | Improvement |
|--------|------------------|-----------------|-------------|
| Keypoint jitter | std=4.5px | std=1.3px | **-72%** |
| Feature noise | 109.4 | 77.6 | **-29%** |
| Feature stability | std=154.1 | std=105.4 | **-32%** |
| Confidence | 0.643 | 0.686 | **+7%** |
| Presence accuracy | 93.4% | 94.6% | **+1.3pp** |

### Bug Fixes
- RSSI byte offset (#332), stack overflow, stale node leak, unsafe pointer removed
- Person count: sum→max aggregation, recalibrated thresholds
- Firmware CI: IDF v5.4, xxd→od

### Binaries
| File | Flash Size | Description |
|------|-----------|-------------|
| `esp32-csi-node.bin` | 8MB | Main firmware |
| `esp32-csi-node-4mb.bin` | 4MB | For 4MB flash boards |
| `bootloader.bin` | — | Bootloader |
| `partition-table.bin` | 8MB | Partition table |
| `partition-table-4mb.bin` | 4MB | Partition table (4MB) |
| `ota_data_initial.bin` | — | OTA data |

**Full Changelog**: https://github.com/ruvnet/RuView/compare/v0.5.2-esp32...v0.5.3-esp32