From 831602b5846d69810ec322f6519bcf88fa5dd96b Mon Sep 17 00:00:00 2001 From: arsen Date: Mon, 18 May 2026 11:13:51 +0700 Subject: [PATCH] =?UTF-8?q?docs(sensors):=20correct=20hardware=20mapping?= =?UTF-8?q?=20=E2=80=94=20nodes=201/2=20are=20camera=20boards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operator clarified: nodes 1 and 2 (.101 / .100) are ESP32-S3 + OV-camera boards (sensor_06, sensor_07 in the photo set), NOT YD-ESP32-23. Nodes 3-6 (.102 / .104 / .105 / .106) are the YD-ESP32-23 boards with u.FL external-antenna connectors (sensor_08, sensor_09). Impact: Pack E.2 (WiFlow camera-supervised retrain) is closer than previously assumed — the camera hardware is already deployed at nodes 1 and 2. Path becomes: 1. Extend FW with parallel camera_capture.c → stream MJPEG over UDP/HTTP 2. Run MediaPipe Pose on server (deps already installed in ~/.venv/ruview-train from earlier session) 3. Time-align with existing scripts/align-ground-truth.js 4. Retrain via scripts/train-wiflow-supervised.js --scale lite The 4 PCB-strip antennas in sensor_02 map 1:1 to nodes 3-6 — drop-in upgrade once each board is power-cycled to swap the antenna feed. README now lists the per-node board type, IP, camera/u.FL status, and which photos show each. No code changes. Co-Authored-By: Claude Opus 4.7 --- assets/sensors/README.md | 85 +++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 32 deletions(-) diff --git a/assets/sensors/README.md b/assets/sensors/README.md index be88d72b..4fb34452 100644 --- a/assets/sensors/README.md +++ b/assets/sensors/README.md @@ -1,42 +1,63 @@ # Sensor & antenna hardware inventory -Photos of the additional sensor + antenna hardware staged for ADR-120+ -experimentation in this deployment. Captured 2026-05-18. +Photos of the deployment's 6-node sensor mesh + external-antenna stock, +captured 2026-05-18. The fleet splits cleanly into two roles: two +**camera-bearing** nodes (1, 2) that can collect ground-truth keypoints +on-device, and four **antenna-upgradeable** nodes (3-6) that supply +spatial coverage. -| File | What it is | Role | +## Active sensor mesh (6 ESP32-S3 nodes) + +| node | IP | Board | Camera | u.FL | Photos | +|---|---|---|---|---|---| +| 1 | 192.168.0.101 | ESP32-S3 + OV camera + microSD + USB-OTG (FFC ribbon) | ✅ | — | [`sensor_06`](sensor_06.jpeg), [`sensor_07`](sensor_07.jpeg) | +| 2 | 192.168.0.100 | same as node 1 | ✅ | — | [`sensor_06`](sensor_06.jpeg), [`sensor_07`](sensor_07.jpeg) | +| 3 | 192.168.0.102 | YD-ESP32-23 V1.3, ESP32-S3-N16R8 + FTDI USB-serial + dual USB-C | — | ✅ | [`sensor_08`](sensor_08.jpeg), [`sensor_09`](sensor_09.jpeg) | +| 4 | 192.168.0.104 | same as node 3 | — | ✅ | same | +| 5 | 192.168.0.105 | same as node 3 | — | ✅ | same | +| 6 | 192.168.0.106 | same as node 3 | — | ✅ | same | + +## External antenna stock (for nodes 3-6) + +| File | What | Use | |---|---|---| -| [`sensor_01.jpeg`](sensor_01.jpeg) | 5× u.FL (IPEX-1) pigtail antennas, bare cable | External antenna feed for ESP32-S3 boards that have a u.FL connector but currently use the on-PCB chip antenna. Adds gain + diversity once attached. | -| [`sensor_02.jpeg`](sensor_02.jpeg) | 4× flat PCB-strip antennas (2.4 GHz, FR4 copper trace, 3M double-sided tape backing) + u.FL pigtails | Stick-on external antennas — better gain than the chip antenna, doubles as polarisation diversity if mounted perpendicular to one another. | -| [`sensor_03.jpeg`](sensor_03.jpeg) | **HLK-LD2402** 24 GHz mmWave radar module (V1.0, chip `S1KM0008` 2438 batch), TX/RX patch antennas, UART output | New modality. mmWave gives sub-mm range to a moving target — useful for vital-sign disambiguation alongside WiFi CSI. UART @ 256000 8N1. | -| [`sensor_04.jpeg`](sensor_04.jpeg) | CP2102 USB-to-UART bridge (AMS1117-3.3 LDO, USB-A) | Powers + reads the HLK-LD2402 from a Mac/Linux host. Pin map: GND / RXT / TXD / 3.3V / RTS / CTS. | -| [`sensor_05.jpeg`](sensor_05.jpeg) | The two boards from `sensor_03` + `sensor_04` wired together | Working HLK-LD2402 setup ready to receive on a USB tty (no firmware needed — module ships with its own factory firmware). | -| [`sensor_06.jpeg`](sensor_06.jpeg) | Back of ESP32-S3 dev board with **microSD slot**, marked "Camera / SD Card / PSRAM", dual USB-UART + USB-OTG | Different board family from the 6 already in service. SD slot + USB-OTG + on-board camera connector make it a candidate for **on-device camera ground-truth capture** (alternative to using the Mac webcam for ADR-079 / Pack E.2 retraining). | -| [`sensor_07.jpeg`](sensor_07.jpeg) | ESP32-S3-WROOM with **OV-camera mounted** + camera ribbon FFC connector | Same board family as `sensor_06`. Camera ribbon already attached. With WiFi CSI + onboard camera in one device, this could collect synchronised paired data (CSI + image) entirely without involving the Mac — the missing piece for the wiflow fine-tune Pack E.2. | -| [`sensor_08.jpeg`](sensor_08.jpeg) | Back of **YD-ESP32-23 2022-V1.3 (V2356)** dev board | Same board family as the 6 currently provisioned (nodes 1-6). Spare. | -| [`sensor_09.jpeg`](sensor_09.jpeg) | Front of **YD-ESP32-23**: ESP32-S3-N16R8 WiFi+BT module, FTDI USB-serial, RGB LED, dual USB-C | Confirms it's the **same hardware** we flashed for nodes 3-6 (FT232R serial chip on board, see `/dev/cu.usbserial-A5069RR4` during provisioning). | +| [`sensor_01.jpeg`](sensor_01.jpeg) | 5× u.FL (IPEX-1) pigtail antennas, bare cable | Direct feed via the u.FL connector on YD-ESP32-23 boards (nodes 3-6). Adds gain over the chip antenna; supports polarisation diversity if mounted perpendicular pairs. | +| [`sensor_02.jpeg`](sensor_02.jpeg) | 4× flat PCB-strip 2.4 GHz antennas with 3M double-sided tape backing + u.FL pigtails | Stick-on external antennas — better directivity than the bare pigtail. One per node 3-6 = full set. | + +## Auxiliary modality — mmWave radar (vitals ground truth) + +| File | What | Use | +|---|---|---| +| [`sensor_03.jpeg`](sensor_03.jpeg) | HLK-LD2402 24 GHz mmWave radar (V1.0, chip `S1KM0008` 2438 batch), TX/RX patch antennas | New sensing modality. mmWave gives sub-mm range to a moving target — ideal for vitals (breathing / pulse) ground truth alongside WiFi CSI. UART output @ 256000 8N1. | +| [`sensor_04.jpeg`](sensor_04.jpeg) | CP2102 USB-to-UART bridge (AMS1117-3.3 LDO, USB-A) | Powers + reads the HLK-LD2402 from the Mac. Pin map: GND / RXT / TXD / 3.3V / RTS / CTS. | +| [`sensor_05.jpeg`](sensor_05.jpeg) | HLK-LD2402 + USB-UART wired together | Plug-and-play setup; module ships with factory firmware, no flashing required. | ## Suggested next moves -* **u.FL antennas (`sensor_01`/`_02`)** — attach to the two - "near-AP" nodes (n1, n5) which currently sit at sep_ratio ~0.05 per - the ADR-118 audit. External antenna oriented perpendicular to the - body axis should pull more body modulation into the signal. -* **HLK-LD2402 mmWave (`sensor_03`–`05`)** — start as a **vitals - ground-truth reference** for the WiFi pipeline. Connect via the - USB-UART, log breathing rate at the same time as the WiFi vitals - detector, compare. Later fuse via `MultistaticFuser` if accuracy - improves materially (would warrant a fresh ADR). -* **Camera-bearing ESP32-S3 (`sensor_06`/`_07`)** — the cleanest path - to Pack E.2 (WiFlow camera-supervised retrain): collect synced - `(CSI, MediaPipe keypoints)` pairs entirely on-device. Avoids the - awkward "laptop is the camera AND the server AND in the sensing - zone" problem from the earlier session. -* **Spare YD-ESP32-23 (`sensor_08`/`_09`)** — flash with the same - build + `provision.py --node-id 7` if/when a 7-node deployment is - desired. Bring-up is 5 min per the ADR-117 OTA recipe. +* **External antennas for nodes 3-6** — the 4 PCB-strip antennas in + `sensor_02` map 1:1 to the 4 YD-ESP32-23 boards. Power-cycle each + to attach. Per the ADR-118 audit, nodes near the AP currently sit + at sep_ratio ~0.05 — external antennas perpendicular to the body + axis should pull more body modulation into the signal. +* **HLK-LD2402 as vitals ground truth** — connect via USB-UART, log + breathing rate alongside the WiFi vitals detector, compare bias. + Later fuse via `MultistaticFuser` if accuracy delta is material. + Would warrant a fresh ADR. +* **On-device camera capture for WiFlow Pack E.2 retrain** — nodes + 1 and 2 already have OV-cameras. Path is: + 1. Extend `firmware/esp32-csi-node/` with a parallel + `camera_capture.c` that grabs frames @ ~10 Hz and streams them + to the server as MJPEG over a new UDP port (or HTTP `multipart/x-mixed-replace`). + 2. Run MediaPipe Pose on the server (we already have it in + `~/.venv/ruview-train` from this session). + 3. Time-align CSI + keypoints via the existing + `scripts/align-ground-truth.js` infrastructure. + 4. Train via `scripts/train-wiflow-supervised.js --scale lite`. + This is the cleanest replacement for the awkward "laptop is the + camera AND the server AND in the sensing zone" workaround. --- -These are reference photos only — not used by any code path. Linked -from `docs/use-cases.md` and `CHECKLIST.md` Deferred section so future -sessions can see the available hardware at a glance. +These are reference photos. Linked from `docs/use-cases.md` and +`CHECKLIST.md` so future sessions see the available hardware at +a glance.