rUv
66e2fa0835
feat: ADR-063/064 mmWave sensor fusion + multimodal ambient intelligence ( #269 )
...
* docs: ADR-063 mmWave sensor fusion with WiFi CSI
60 GHz mmWave radar (Seeed MR60BHA2, HLK-LD2410/LD2450) fusion
with WiFi CSI for dual-confirm fall detection, clinical-grade
vitals, and self-calibrating CSI pipeline.
Covers auto-detection, 6 supported sensors, Kalman fusion,
extended 48-byte vitals packet, RuVector/RuvSense integration
points, and 6-phase implementation plan.
Based on live hardware capture from ESP32-C6 + MR60BHA2 on COM4.
Co-Authored-By: claude-flow <ruv@ruv.net>
* feat(firmware): ADR-063 mmWave sensor fusion — full implementation
Phase 1-2 of ADR-063:
mmwave_sensor.c/h:
- MR60BHA2 UART parser (60 GHz: HR, BR, presence, distance)
- LD2410 UART parser (24 GHz: presence, distance)
- Auto-detection: probes UART for known frame headers at boot
- Mock generator for QEMU testing (synthetic HR 72±2, BR 16±1)
- Capability flag registration per sensor type
edge_processing.c/h:
- 48-byte fused vitals packet (magic 0xC5110004)
- Kalman-style fusion: mmWave 80% + CSI 20% when both available
- Automatic fallback to CSI-only 32-byte packet when no mmWave
- Dual presence flag (Bit3 = mmwave_present)
main.c:
- mmwave_sensor_init() called at boot with auto-detect
- Status logged in startup banner
Fuzz stubs updated for mmwave_sensor API.
Build verified: QEMU mock build passes.
Co-Authored-By: claude-flow <ruv@ruv.net>
* fix(firmware): correct MR60BHA2 + LD2410 UART protocols (ADR-063)
MR60BHA2: SOF=0x01 (not 0x5359), XOR+NOT checksums on header and
data, frame types 0x0A14 (BR), 0x0A15 (HR), 0x0A16 (distance),
0x0F09 (presence). Based on Seeed Arduino library research.
LD2410: 256000 baud (not 115200), 0xAA report head marker,
target state byte at offset 2 (after data_type + head_marker).
Auto-detect: probes MR60 at 115200 first, then LD2410 at 256000.
Sets final baud rate after detection.
Co-Authored-By: claude-flow <ruv@ruv.net>
* feat: ADR-063 Phase 6 server-side mmWave + CSI fusion bridge
Python script reads both serial ports simultaneously:
- COM4 (ESP32-C6 + MR60BHA2): parses ESPHome debug output for HR, BR, presence, distance
- COM7 (ESP32-S3): reads CSI edge processing frames
Kalman-style fusion: mmWave 80% + CSI 20% for vitals, OR gate for presence.
Verified on real hardware: mmWave HR=75bpm, BR=25/min at 52cm range,
CSI frames flowing concurrently. Both sensors live for 30 seconds.
Co-Authored-By: claude-flow <ruv@ruv.net>
* docs: ADR-064 multimodal ambient intelligence roadmap
25+ applications across 4 tiers from practical to exotic:
- Tier 1 (build now): zero-FP fall detection, sleep monitoring,
occupancy HVAC, baby breathing, bathroom safety
- Tier 2 (research): gait analysis, stress detection, gesture
control, respiratory screening, multi-room activity
- Tier 3 (frontier): cardiac arrhythmia, RF tomography, sign
language, cognitive load, swarm sensing
- Tier 4 (exotic): emotion contagion, lucid dreaming, plant
monitoring, pet behavior
Priority matrix with effort estimates. All P0-P1 items work with
existing hardware (ESP32-S3 + MR60BHA2 + BH1750).
Co-Authored-By: claude-flow <ruv@ruv.net>
* fix(ci): add ESP_ERR_NOT_FOUND to fuzz stubs
mmwave_sensor stub returns ESP_ERR_NOT_FOUND which wasn't
defined in the minimal esp_stubs.h for host-based fuzz testing.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-15 16:10:10 -04:00
rUv
523be943b0
feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) ( #260 )
...
9-layer QEMU testing platform (ADR-061) and YAML-driven swarm
configurator (ADR-062) for ESP32-S3 firmware testing without hardware.
12 commits, 56 files, +9,500 lines. Tested on Windows with
Espressif QEMU 9.0.0 — firmware boots, mock CSI generates frames,
14/16 validation checks pass. 39 bugs found and fixed across
2 deep code reviews.
Closes #259
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-14 13:39:51 -04:00
ruv
8b57a6f64c
docs: update README with ADR-045–048, Observatory, adaptive classifier, AMOLED display
...
- Update ADR count from 44 to 48
- Add adaptive classifier (ADR-048) to Intelligence features
- Add Observatory visualization (ADR-047) and AMOLED display (ADR-045) to Deployment features
- Update screenshot to v2-screen.png
- Add ADR-045 (AMOLED), ADR-046 (Android TV), ADR-047 (Observatory), DDD deployment model
- Add AMOLED display firmware (display_hal, display_task, display_ui, LVGL config)
- Add Observatory UI (13 Three.js modules, CSS, HTML entry point)
- Add trained adaptive model JSON
- Update .gitignore for managed_components, recordings, .swarm
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-05 10:20:48 -05:00
ruv
4b1005524e
feat: complete vendor repos, add edge intelligence and WASM modules
...
- Add 154 missing vendor files (gitignore was filtering them)
- vendor/midstream: 564 files (was 561)
- vendor/sublinear-time-solver: 1190 files (was 1039)
- Add ESP32 edge processing (ADR-039): presence, vitals, fall detection
- Add WASM programmable sensing (ADR-040/041) with wasm3 runtime
- Add firmware CI workflow (.github/workflows/firmware-ci.yml)
- Add wifi-densepose-wasm-edge crate for edge WASM modules
- Update sensing server, provision.py, UI components
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-02 23:53:25 -05:00
rUv
915943cef4
feat: ESP32 CSI MAC address filtering with NVS/Kconfig support ( #101 )
...
* feat: add MAC address filter for ESP32 CSI collection
In multi-AP environments, CSI frames from different access points get
mixed together, corrupting the sensing signal. Add transmitter MAC
filtering so only frames from a specified AP are processed.
Implementation:
- csi_collector: filter in wifi_csi_callback by comparing info->mac
against configured MAC; log transmitter MAC in periodic debug output
- csi_collector_set_filter_mac(): runtime API to enable/disable filter
- Kconfig: CSI_FILTER_MAC option (format "AA:BB:CC:DD:EE:FF")
- NVS: "filter_mac" 6-byte blob overrides Kconfig at runtime
- nvs_config: parse Kconfig MAC string at boot, load NVS override
- main: apply filter from config after csi_collector_init()
When no filter is configured (default), behavior is unchanged —
all transmitter MACs are accepted for backward compatibility.
Fixes #98
Co-Authored-By: claude-flow <ruv@ruv.net>
* chore: add CLAUDE.local.md to .gitignore
Local machine configuration (ESP-IDF paths, COM port, build
instructions) should not be committed to the repository.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-02 17:08:27 -05:00
rUv
92a5182dc3
feat(adr-018): ESP32-S3 firmware, Rust aggregator, and live CSI pipeline
...
Complete end-to-end WiFi CSI capture pipeline verified on real hardware:
- ESP32-S3 firmware: WiFi STA + promiscuous mode CSI collection,
ADR-018 binary serialization, UDP streaming at ~20 Hz
- Rust aggregator CLI binary (clap): receives UDP frames, parses with
Esp32CsiParser, prints per-frame summary (node, seq, rssi, amp)
- UDP aggregator module with per-node sequence tracking and drop detection
- CsiFrame bridge to detection pipeline (amplitude/phase/SNR conversion)
- Python ESP32 binary parser with UDP reader
- Presence detection confirmed: motion score 10/10 from live CSI variance
Hardware verified: ESP32-S3-DevKitC-1 (CP2102, MAC 3C:0F:02:EC:C2:28),
Docker ESP-IDF v5.2 build, esptool 5.1.0 flash, 20 Rust + 6 Python tests pass.
Co-Authored-By: claude-flow <ruv@ruv.net>
2026-02-28 13:22:04 -05:00