Files
ruvnet--RuView/examples/research-sota/r12_1_pose_pabs_results.json
T
rUv 50a7c4a645 research(R12.1): pose-PABS closed loop — 9.36x intruder lift; R12 arc fully closed (#732)
Closes the deferred item from R12 PABS (tick 19): 'real production
needs pose-aware forward model updating in real-time'. R12.1 implements
the closed loop in synthetic form.

Method: 50-frame walking subject + intruder entering at T=25. Compare
two PABS pipelines:
(a) Fixed-expected (R12 PABS naive)
(b) Pose-updated (R12.1 closed loop, 5 cm pose noise matching ADR-079
    ~95% PCK@20 quality)

Results:

| Phase                | Fixed-expected | Pose-updated |
|----------------------|---------------:|-------------:|
| Pre-intruder (walking)|         6.02   |        0.30  |
| Post-intruder        |         7.76   |        2.84  |
| Intruder lift        |         1.29x  |        9.36x |

Pose updates suppress subject-motion noise by 20x (6.02 -> 0.30),
leaving the intruder as a clean 9.36x spike. False-alarm problem
from R12 PABS RESOLVED.

R12 thread fully closed (3 ticks):
- R12 (tick 5):    NEGATIVE  SVD eigenshift 0.69x signal/drift
- R12 PABS (19):   POSITIVE  1161x intruder detection (static)
- R12.1 (this):    CLOSED    9.36x intruder detection (dynamic)

Failure -> success with caveat -> success without caveat. The
multi-tick arc that justifies a long research loop.

Production roadmap (~80 LOC + 30 LOC plumbing):
  let pose = pose_tracker.estimate(csi_window)?;
  let expected_scene = body_model.from_pose(pose) + room_walls;
  let y_predicted = fresnel_forward.simulate(expected_scene);
  let pabs = (csi_window - y_predicted).norm_sq() / csi_window.norm_sq();
  if pabs > threshold { emit_structure_event(); }

Slot into existing vital_signs cog per-frame inference path.

Composes:
- R6.1 forward operator
- R7 mincut per-link PABS-after-pose-update = precise multi-link
  consistency quantity
- R14 V0 security feature (intruder detection) shippable
- R10/R11 wildlife/maritime variants need their own body models
- ADR-079/101 pose pipeline = critical path
- ADR-105/106/107/108 fully on-device

Honest scope:
- 5 cm pose noise matches ADR-079; worse without good signal
- Continuous-time tracking assumed (revert to baseline on failure)
- Single subject (multi-subject = data association work)
- Static walls (re-baselining needed for furniture changes)
- Synthetic data only; real CSI bench validation pending

Coordination: ticks/tick-29.md, no PROGRESS.md edit.

After this tick, all research-loop work substantively complete:
- 13 research threads (R1, R3, R5-R15)
- 4 ADRs in privacy chain (105, 106, 107, 108)
- 3 negative-result categories
- 2 explicit self-corrections
- 3 honest-scope findings
- 9-tick R6 placement family
- 3-tick R3 cross-room re-ID arc
- 3-tick R12 structure detection arc
2026-05-22 05:56:57 -04:00

135 lines
2.9 KiB
JSON

{
"config": {
"n_frames": 50,
"trajectory_start": [
2.0,
2.0
],
"trajectory_end": [
3.0,
3.5
],
"T_intrude": 25,
"intruder_pos": [
1.5,
1.5
],
"pose_tracker_std_m": 0.05
},
"pabs_fixed": [
0.0,
0.23976021993699137,
1.333289923835776,
4.7449972298645005,
16.132302954344752,
57.31864185847987,
34.59671192160786,
11.19613115945127,
5.077096413694479,
2.8125145174844848,
1.7357497400150317,
1.1422331113156927,
0.7902984026449109,
0.5844695055883886,
0.48864852071817233,
0.49495019610807023,
0.5992183799548572,
0.7707784100562064,
0.9509356710764513,
1.1010310944881865,
1.2286767924050106,
1.3666209606880533,
1.5555622650632148,
1.8511220775066175,
2.3569113678968043,
23.64420568922056,
24.766708919894374,
12.440097343342567,
5.835505088452743,
3.016239220001779,
1.6368370866065183,
0.8521752953170693,
0.35830915433305105,
0.06898386583751527,
0.11286933302231912,
1.49823836553597,
11.73405853896596,
15.012383585890914,
5.44051226107576,
2.450306678228625,
1.144765319492743,
0.43860379597713645,
0.6217089528021075,
40.28090119216048,
9.742961313951346,
2.4076884969330483,
0.8288916761760434,
0.12070720537158618,
0.66996511955866,
28.778255288508806
],
"pabs_pose_updated": [
0.0397808142334705,
0.5104513448136311,
0.8158108392380339,
0.9465194410415606,
0.5508926517254545,
0.6594979498306511,
2.0582347819010445,
0.6060528733141695,
0.12736172431501477,
0.5159119899356763,
0.01556708655354054,
0.007342537186192009,
0.002804857511672747,
0.020407791283141442,
0.00023421796933611544,
0.004093746595234462,
0.008881014219198688,
0.012739000996667617,
0.028360834638721005,
0.0004098514050666686,
0.00010859128727197401,
0.00016902339492389355,
0.054732157887574226,
0.0006514193522454603,
0.6018761650863446,
10.405708813283992,
1.6307427510614485,
0.7535171230661254,
0.6341883054891835,
1.1494872301598305,
0.4973417823824021,
0.5908828843636849,
0.19423577429400954,
1.4642997355851366,
0.08691356242442586,
1.3298358192934818,
3.4730881799534568,
0.11532793333150544,
1.7292922842852005,
2.527226823962975,
0.26166589945633334,
0.27967362635220994,
0.13730251197140705,
22.685535567483463,
0.8599415629887098,
1.0779487716387626,
1.9983295809816795,
1.2202290817498453,
1.0205655174952935,
14.910181149340993
],
"pre_intrude_means": {
"fixed": 6.018746107769026,
"pose": 0.30355570822863354
},
"post_intrude_means": {
"fixed": 7.756075151466307,
"pose": 2.841338490895822
},
"intruder_detection_lift": {
"fixed": 1.2886529872816415,
"pose": 9.360187978266477
}
}