docs(sensors): correct hardware mapping — nodes 1/2 are camera boards

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 <noreply@anthropic.com>
This commit is contained in:
arsen 2026-05-18 11:13:51 +07:00
parent 2538fa2fab
commit 831602b584
1 changed files with 53 additions and 32 deletions

View File

@ -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.