mirror of
https://github.com/ruvnet/RuView
synced 2026-08-06 19:51:43 +00:00
719875ea1d
First deferred follow-up from R6. Productises R6's Fresnel forward model into a 2D placement-search CLI: given a room + target occupancy zones, recommend Tx/Rx positions that maximise first-Fresnel coverage. Benchmark on 5x5 m bedroom (bed 3 m^2 + chair 0.64 m^2, 2900 pairs evaluated at 2.4 GHz): - OPTIMAL: 51.1% coverage (Tx 1.25,0; Rx 4.75,5; diagonal 6.10 m link) - MEDIAN: 0.5% coverage - WORST: 0.0% coverage - 93x improvement, median to optimal Counter-intuitive insight: longer links cover MORE space. Fresnel envelope width = sqrt(d * lambda) / 2 grows with link length, so the 6.10 m diagonal beats wall-parallel 5.00 m links. Up to the R10 link-budget gate. Per-cog deployment recommendations: - cog-person-count: diagonal across longest axis - cog-pose: zone inside ~50% midpoint envelope - AETHER re-ID: Tx near doorway, Rx diagonal - cog-maritime-watch: vertical diagonal through cabin - cog-wildlife (future): Tx/Rx opposite trees, threading clearing midline Improvements come from physics, not algorithms - no model retraining needed. Existing customers can re-mount seeds today for 10-100x better sensing. Honest scope: 2D approximation, free-space, rectangular zones, single-pair only, perimeter-only candidates, no link-budget gate. CLI shape ready for productisation as 'wifi-densepose plan-antennas'. Also surfaces as a deferred MCP tool 'ruview_placement_recommend'. Composes with: - R6 (direct 2D extension) - R1 (placement x precision = full geometry budget) - R10 (sets the link-budget gate this ignores) - R11 (same recipe in steel cabins) - R14 (determines whether V1/V2/V3 see the right occupant) - ADR-105 (better placement = faster epsilon convergence) Next R6.2 follow-ups catalogued: R6.2.1 (3D), R6.2.2 (N-anchor union), R6.2.3 (pose-trajectory target zones). Coordination: ticks/tick-16.md, no PROGRESS.md edit.
56 lines
1.1 KiB
JSON
56 lines
1.1 KiB
JSON
{
|
|
"room": {
|
|
"width_m": 5.0,
|
|
"height_m": 5.0
|
|
},
|
|
"frequency_ghz": 2.4,
|
|
"wavelength_m": 0.12491666666666666,
|
|
"target_zones": [
|
|
{
|
|
"name": "bed",
|
|
"x0": 1.5,
|
|
"y0": 0.5,
|
|
"width": 2.0,
|
|
"height": 1.5
|
|
},
|
|
{
|
|
"name": "chair",
|
|
"x0": 3.5,
|
|
"y0": 3.5,
|
|
"width": 0.8,
|
|
"height": 0.8
|
|
}
|
|
],
|
|
"best": {
|
|
"score": 0.510989010989011,
|
|
"tx": [
|
|
1.25,
|
|
0.0
|
|
],
|
|
"rx": [
|
|
4.75,
|
|
5.0
|
|
],
|
|
"link_length_m": 6.103277807866851,
|
|
"result": {
|
|
"total_coverage_fraction": 0.510989010989011,
|
|
"total_area_m2": 3.6400000000000006,
|
|
"covered_area_m2": 1.8600000000000003,
|
|
"per_zone": {
|
|
"bed": {
|
|
"area_m2": 3.0000000000000004,
|
|
"covered_m2": 1.3050000000000002,
|
|
"coverage_fraction": 0.435
|
|
},
|
|
"chair": {
|
|
"area_m2": 0.6400000000000001,
|
|
"covered_m2": 0.5550000000000002,
|
|
"coverage_fraction": 0.8671875000000001
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"median_score": 0.005494505494505495,
|
|
"worst_score": 0.0,
|
|
"n_pairs_evaluated": 2900
|
|
} |