Files
wehub-resource-sync 9740bc64c9
Continuous Deployment / Deploy to Production (push) Blocked by required conditions
Continuous Deployment / Rollback Deployment (push) Blocked by required conditions
Continuous Deployment / Post-deployment Monitoring (push) Blocked by required conditions
Continuous Deployment / Notify Deployment Status (push) Blocked by required conditions
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier1) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / QEMU Test (full-adr060) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / QEMU Test (tdm-3node) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / Swarm Test (ADR-062) (push) Has been skipped
npm packages / tools/ruview-mcp (node 22) (push) Failing after 1s
nvsim-server → ghcr.io / build-and-publish (push) Failing after 1s
ruview-swarm CI guard / tests (full+train) (push) Failing after 2s
Bench Regression Guard / bench compile-verify (--no-run) (push) Failing after 0s
Bench Regression Guard / bench fast-run (informational, non-gating) (push) Has been skipped
Firmware CI / Verify version.txt matches release tag (push) Has been skipped
Dashboard a11y + cross-browser / a11y (push) Failing after 0s
nvsim Dashboard → GitHub Pages / build-and-deploy (push) Failing after 2s
Firmware CI / Build firmware (esp32s3 / 4mb) (push) Failing after 15s
Firmware QEMU Tests (ADR-061) / Build Espressif QEMU (push) Failing after 1s
Firmware QEMU Tests (ADR-061) / Fuzz Testing (ADR-061 Layer 6) (push) Failing after 1s
Continuous Deployment / Pre-deployment Checks (push) Has been skipped
Continuous Deployment / Deploy to Staging (push) Waiting to run
Firmware CI / Build firmware (esp32c6 / c6-4mb) (push) Failing after 15s
Firmware CI / Build firmware (esp32s3 / 8mb) (push) Failing after 15s
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-max) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / QEMU Test (boundary-min) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / QEMU Test (default) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / QEMU Test (edge-tier0) (push) Has been skipped
Firmware QEMU Tests (ADR-061) / NVS Matrix Generation (push) Failing after 1s
Security Scanning / Security Policy Compliance (push) Failing after 0s
Security Scanning / Security Report (push) Waiting to run
Security Scanning / Dependency Vulnerability Scan (push) Failing after 0s
Security Scanning / Static Application Security Testing (push) Failing after 1s
Security Scanning / Infrastructure Security Scan (push) Failing after 1s
Security Scanning / Secret Scanning (push) Failing after 1s
npm packages / harness/ruview (node 22) (push) Failing after 17s
Security Scanning / License Compliance Scan (push) Failing after 1s
Security Scanning / Container Security Scan (push) Failing after 4s
three.js demos → GitHub Pages / build-and-deploy (push) Failing after 1s
Verify Pipeline Determinism / Verify Pipeline Determinism (3.11) (push) Failing after 1s
Fix-Marker Regression Guard / Verify fix markers (push) Failing after 1s
ADR-115 MQTT integration tests / mqtt-integration (push) Failing after 1s
npm packages / harness/ruview (node 20) (push) Failing after 1s
npm packages / tools/ruview-mcp (node 20) (push) Failing after 1s
npm packages / tools/ruview-cli (node 20) (push) Failing after 1s
npm packages / tools/ruview-cli (node 22) (push) Failing after 1s
BFLD MQTT Integration / cargo test --features mqtt (live mosquitto) (push) Failing after 29s
ruview-swarm CI guard / build train_marl bin (push) Failing after 2s
ruview-swarm CI guard / clippy (-D warnings, --no-deps) (push) Failing after 3s
ruview-swarm CI guard / tests (ruflo) (push) Failing after 1s
ruview-swarm CI guard / tests (train) (push) Failing after 2s
ruview-swarm CI guard / tests (default) (push) Failing after 2s
Point Cloud Viewer → GitHub Pages / build-and-deploy (push) Failing after 8s
ruview-swarm CI guard / ITAR / publish guard (push) Failing after 0s
wifi-densepose sensing-server → Docker Hub + ghcr.io / build · push · smoke-test (push) Failing after 1s
chore: import upstream snapshot with attribution
2026-07-13 11:59:54 +08:00

4.4 KiB

Medical Sensing Examples

Contactless vital sign monitoring using 60 GHz mmWave radar — no wearable, no camera, no physical contact.

Blood Pressure Estimator

Estimates blood pressure in real-time from heart rate variability (HRV) captured by a Seeed MR60BHA2 60 GHz mmWave radar module connected to an ESP32-C6.

How It Works

The radar detects microscopic chest wall displacement caused by:

  • Respiration: 0.1-1.0 mm displacement at 12-25 breaths/min
  • Cardiac pulse: 0.01-0.1 mm displacement at 60-100 bpm

Modern 60 GHz FMCW radar resolves displacement down to fractions of a millimeter. Once the signal is isolated and filtered, the heartbeat-by-heartbeat pattern is remarkably clear.

From there, the estimator:

  1. Extracts beat-to-beat intervals from the HR time series
  2. Computes HRV metrics: SDNN (overall variability), LF/HF ratio (sympathetic/parasympathetic balance)
  3. Estimates blood pressure using the correlation between HR, HRV, and cardiovascular tone:
    • Higher HR → higher BP (sympathetic activation)
    • Lower HRV (SDNN) → higher BP (reduced parasympathetic)
    • Higher LF/HF ratio → higher BP (sympathetic dominance)

Hardware Required

Component Cost Role
ESP32-C6 + Seeed MR60BHA2 ~$15 60 GHz mmWave radar (HR, BR, presence)
USB cable Power + serial data

That's it. Total cost: ~$15.

Quick Start

pip install pyserial numpy

# Basic (uncalibrated — shows trends)
python examples/medical/bp_estimator.py --port COM4

# Calibrated (take a real BP reading first, then enter it)
python examples/medical/bp_estimator.py --port COM4 \
  --cal-systolic 120 --cal-diastolic 80 --cal-hr 72

Sample Output (Real Hardware, 2026-03-15)

  Contactless Blood Pressure Estimation (mmWave 60 GHz)

   Time    HR   SBP   DBP             Category  Samples
  -------------------------------------------------------
   15s |  64 | 117/78 | Normal    | SDNN  22ms | n=4
   20s |  65 | 117/78 | Normal    | SDNN  28ms | n=5
   25s |  71 | 119/79 | Normal    | SDNN  88ms | n=9
   30s |  77 | 122/81 | Elevated  | SDNN 108ms | n=14
   35s |  80 | 123/82 | Elevated  | SDNN 106ms | n=18
   40s |  80 | 123/82 | Elevated  | SDNN  98ms | n=22
   45s |  82 | 124/83 | Elevated  | SDNN  97ms | n=26
   50s |  83 | 125/83 | Elevated  | SDNN  95ms | n=29
   55s |  83 | 125/83 | Elevated  | SDNN  92ms | n=32
   60s |  84 | 125/83 | Elevated  | SDNN  91ms | n=35

  RESULT: 125/83 mmHg | HR 84 bpm | SDNN 91ms | 35 samples

Accuracy

Condition Accuracy
Uncalibrated, stationary ±15-20 mmHg (trend tracking)
Calibrated, stationary ±8-12 mmHg
Moving subject Not reliable — wait for subject to be still

Accuracy improves with:

  • Longer recording duration (60s minimum, 120s recommended)
  • Calibration with a real cuff reading
  • Stationary subject within 1m of sensor
  • Minimal environmental RF interference

AHA Blood Pressure Categories

Category Systolic Diastolic
Normal < 120 < 80
Elevated 120-129 < 80
High BP Stage 1 130-139 80-89
High BP Stage 2 140+ 90+

Disclaimer

This is NOT a medical device. Blood pressure estimates from heart rate variability are approximations based on population-level correlations. Individual variation is significant. Always use a validated cuff-based sphygmomanometer for clinical decisions.

This tool is intended for:

  • Research into contactless vital sign monitoring
  • Wellness trend tracking (is my BP going up or down over days?)
  • Technology demonstration
  • Educational purposes

How This Connects to RuView

This example is part of the RuView ambient intelligence platform. When combined with WiFi CSI sensing:

  • WiFi CSI provides through-wall presence detection and room-scale activity recognition
  • mmWave radar provides clinical-grade heart rate, breathing rate, and BP estimation
  • Sensor fusion (ADR-063) combines both for zero false-positive fall detection and comprehensive health monitoring
  • RuVector dynamic min-cut analysis treats physiological signals as a coherence graph, automatically separating noise, motion artifacts, and environmental interference

The result: cheap sensors ($15-24 per node), local computation (no cloud), real physiological understanding.