RuView 主动感知(Active Sensing)架构解析:从被动观测到闭环射频实验控制(ADR-309)
【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView
导读
本文以 docs/adr/ADR-309-active-sensing.md 为技术主体,系统讲解 RuView 如何从"被动接收环境偶然产生的 RF 流量"升级为"主动选择测量配置、观测响应、再优化下一次测量"的闭环射频实验控制机制。这篇技术指南覆盖 ADR-309 提出的五大可控自由度(ExperimentControl词汇表)、闭环控制环路、治理与诚实性边界,并结合仓库中真实的 Rust 实现(ruview-activecrate)与测试用例,说明该设计在源码层是如何落地的。读完本文,你将掌握主动感知闭环在 RuView 感知基座(Perception Substrate)中的定位、其与 ADR-280/311/314/320 的协作关系,以及当前实现的能力边界与退化策略。
1. 背景:RuView 的默认姿态为什么是"被动"的
ADR-309 是 docs/adr/ADR-300-perception-substrate-program.md(RuView 感知基座——21 项原语的阶段化程序)的子 ADR,拥有原语 #9 active sensing(主动感知)。在 ADR-300 的阶段划分(Phase 1 证书主轴 → Phase 2 集成与运维 → Phase 3 高上限研究前置)中,它是Phase-3原语,建立在 ADR-311(真实传感器融合)产生的融合世界状态之上,并由 ADR-314(信息增益调度器)的信息预算驱动。
文档指出了一个根本现状:RuView 当前所有路径的默认姿态都是被动的——
RF traffic happens for its own reasons (a device transmits, a beacon fires), RuView observes whatever CSI/CIR arrives, and the pipeline extracts what it can from that incidental signal.
即"RF 发生 → 观察"的模型:无论设备出于什么原因发射、信标如何触发,RuView 只能接受"恰好出现"的 CSI/CIR,然后尽力从中提取信息。ADR-300 的战略评估给出的下一步是将其转变为"RuView 控制 RF → 观察响应 → 优化下一次测量",让感知变成一个闭环实验:系统选择测量什么来消解当前的不确定性,而非接受环境偶然提供什么。
ADR-309 的一个核心立场是:大量控制面脚手架已经存在且必须复用/扩展而非重建。它明确点名了 docs/adr/ADR-280-active-sensing-programmable-perception.md 中已经实现(在ruview-unified/src/control.rs)的治理控制面,包括:
SensingTask(证据感知、fail-closed 准入的任务契约);SensingAction+InformationGoal(针对明确假设的证据采集行为,受PrivacyClassP0–P5 上限约束);ActiveSensingPlanner(基于信息年龄的调度器);CoherentSensorGroup(相干融合,fail-closed);request_actuation→ActuationReceipt(对 RIS/可移动/流体天线的受治理执行)。
ADR-280 同时明确记录了其未实现项——信息增益估计:"the planner uses staleness heuristics, not mutual information; RIS drivers, actual multi-AP coherence measurement, and OTFS waveform control are hardware-dependent roadmap items." 换言之,ADR-280 建好了"执行表面"但缺少"闭环":一个能读取融合状态不确定性、选出期望信息增益最高的可控测量配置、经 ADR-280 治理表面请求执行、观察响应并更新信念的控制器。这正是 ADR-309 要补的缺口。
2. 备选方案与决策:为什么是闭环实验控制
ADR-309 记录了对三条候选路线的评估:
- 保持被动,仅调度保留哪些偶然观测。这基本是现有
ActiveSensingPlanner(按区域的 staleness 优先级)。被否决为终点:它优化的是对不可控 RF 的注意力分配,而不是测量本身。但它保留为"无任何可控轴时可用的回退方案"。 - 开环测量脚本(固定的信道/带宽扫描)。被否决:固定扫描无论已知什么都以同样的方式消耗 RF/能量/隐私预算,无法把测量集中到不确定性真正所在的位置。
- 闭环实验控制——读取不确定性,选择"单位成本/隐私下期望信息增益最高"的可控配置,通过 ADR-280 治理表面执行,观察、更新、重复。被选中。
决策结论是:采用闭环射频实验控制作为一个 Phase-3 控制器层,叠加在 ADR-280 表面之上。
3. 可控自由度:ExperimentControl词汇表与源码级实现
ADR-309 定义了一套ExperimentControl词汇表,覆盖 RuView 在暴露相应能力(capability)的硬件上可影响的配置轴。文档强调每个轴都是可选的、按能力门控的:由 ADR-320 的 HAL(传感器硬件抽象层)决定某部署真正能设置哪些轴——一个纯 ESP32 的部署其可控集为空,直接退化到被动规划器。
文档列出的五类自由度:
- 信道 / 频段与带宽(探测哪段频谱;复用 ADR-292 的宽频子载波无关元数据);
- 报文时序 / 节奏(cadence)(何时请求一次 sounding、以什么速率);
- 天线 / 链选择(激活分布式孔径的哪个子集——受 ADR-280
CoherentSensorGroup兼容性证明约束); - 波束 / RIS 配置(哪些房间与人员变得可观测——按 ADR-280 §6 的要求经
request_actuation与ActuationReceipt治理); - 802.11bf 测量参数(TB/non-TB、上报配置——待 ADR-310 将标准化感知暴露为原生测量类型后启用)。
3.1ruview-activecrate:词汇表的 Rust 落地
在源码层,这套词汇表由v2/crates/ruview-active实现,crate 根文档自述为:
ruview-active— closed-loop RF experiment control (ADR-309, ADR-300 primitive 9)。SYNTHETIC / L0 research-forward model scaffold。它把感知从RF-happens → observe变为RuView-controls-RF → observe the response → optimize the next measurement。
词汇表文件 v2/crates/ruview-active/src/control.rs 中把 ADR-309 的ExperimentControl具体化为两组核心类型:
ControlCapability——描述某部署"当前真正能设置什么",四轴对应channels、bandwidths、cadences、antennas;每轴去重、按"探索性从低到高"排序,空能力(ControlCapability::none())即触发被动退化。ControlAction——一次提议的测量配置(提议下一步请求设置哪些轴);每个轴是Option,为None表示该部署不可控该轴(保持硬件默认)。
关键边界常量(文件头部):
| 常量 | 值 | 语义 |
|---|---|---|
MAX_AXIS_VALUES | 64 | 单个控制轴最多可列值数,约束从不可信输入构造能力集的分配 |
MAX_CHAINS | 16 | 合成孔径可建模的最大天线链数 |
MIN_CADENCE_MS | 1 | 建模的最小 sounding 间隔(最快节奏),毫秒 |
MAX_CADENCE_MS | 60_000 | 建模的最大 sounding 间隔(最慢节奏),毫秒 |
值得强调的是设计红线:ControlAction是计划(plan),绝不是发射(emission)。文件文档注释明确写道:
This is a plan, never an emission.Nothing here drives a radio, changes pairing state, or transmits — a
ControlActionis data describing what a governed actuationwouldrequest through the ADR-280 fail-closed surface.
3.2 每个轴的构造期校验(fail-closed at the boundary)
control.rs为每个轴提供强类型枚举或校验构造器,让畸形配置在边界处被拒绝而不是抵达执行器:
Channel:Band枚举(Ghz24/Ghz5/Ghz6)+ 信道号。Channel::new校验号是否属于该频段合法集——2.4 GHz 仅允许 1..=14;5 GHz 仅允许标准信道表(36–64、100–144、149–165,文件内硬编码GHZ5_CHANNELS);6 GHz(Wi-Fi 6E)仅允许 1..=233 的奇数。不合法即返回ControlError::InvalidChannel。Bandwidth:仅识别 20 / 40 / 80 / 160 / 320 MHz(320 MHz 对应 Wi-Fi 7);Bandwidth::from_mhz(33)返回InvalidBandwidth。更宽 = 更"探索性"。Cadence:由 sounding 间隔(毫秒)构造,必须在[1, 60_000]内;更短间隔 = 更快节奏 = 更"探索性"。AntennaSelection:激活链索引集合,非空、索引必须< num_chains且num_chains ≤ MAX_CHAINS、去重排序保证 canonical;AntennaSelection::new([4], 4)会返回AntennaChainOutOfRange。激活更多链 = 孔径更大 = 更"探索性"。
ControlCapability::new会对每轴做去重、边界裁剪(>MAX_AXIS_VALUES返回AxisTooLarge)以及"least-exploratory-first"排序(带宽升序、节奏由慢到快、天线由少链到多链),从而把标量探索水平确定性地映射到具体值上。
证据提示:以上校验行为都有对应单元测试,例如
v2/crates/ruview-active/src/lib.rs测试模块中的invalid_control_values_are_rejected(覆盖 2.4G 无 15 信道、5G 无 37 信道、33 MHz 非法宽度、越界 cadence、空/越界天线选择)与oversized_capability_axis_is_rejected(超过MAX_AXIS_VALUES被拒)。
4. 闭环环路:从 ADR-309 框图到ClosedLoopController
4.1 ADR-309 定义的环路
ADR-309 用如下框图给出闭环结构:
fused-state uncertainty (ADR-311) │ ▼ info-gain ranking of ExperimentControl options (ADR-314) │ select argmax E[ΔI] / (cost, energy, privacy ceiling) ▼ governed request (ADR-280 admit_task / request_actuation, fail-closed) │ ▼ observe response → update belief (ADR-311) → repeat文档特别声明:控制器从不绕过ADR-280 的准入与执行门控——每一次主动 solicited measurement 都是一个SensingTask/SensingAction,每一次环境改变都对应一份ActuationReceipt,每一步都与 ADR-277 策略引擎组合。信息增益由ADR-314提供(即 ADR-280 推迟实现的互信息估计),而 ADR-309 拥有的是消费该估计并驱动硬件的控制环。
4.2 源码中的控制器:ClosedLoopController
ADR-309 文档把这个控制器命名为ExperimentControl词汇表驱动的闭环,而实现则落在 v2/crates/ruview-active/src/policy.rs 的ClosedLoopController上。它把一个区域的信念(ZoneBelief)映射为一个决策(ControlDecision),其输入由三部分构成:
Uncertainty:[0, 1]标量(0.0 完全消解,1.0 最大不确定),构造时 clamp;非有限值一律映射为最大不确定性(1.0)——"一个不可用的估计被当作什么都不知道,绝不静默地当零"。这与 ADR-300 非协商规则 1(UNKNOWN 是一等输出,永不静默持有陈旧值)一致,测试non_finite_uncertainty_is_maximal_not_zero直接验证 NaN/Infinity/-5.0/2.0 的行为。LastResponse:上一次 solicited measurement 的结果——Observed { evidence_level, residual }(可解释响应到达并留下残余不确定性)、Unknown(上次返回不可解释——一等 UNKNOWN,不是错误、不是零不确定性)、None(尚未发起测量,环启动态)。cycle:确定性循环计数器,只用于跨周期轮流扫描信道,由调用方注入、绝不由时钟采样(保证确定性)。
step()是全函数(total):任何输入不 panic、完全确定(controller_is_deterministic测试验证相同输入必然得到相同决策与计划)。
其核心决策逻辑为:
- 空能力判断:
capability.is_empty()时直接返回ControlDecision::Passive { reason: PassiveReason::NoControllableAxes }——ESP32 纯部署的退化路径,不制造任何虚假增益估计(测试empty_capability_degrades_to_passive)。 - 计算探索水平:
exploration = clamp(uncertainty + (last_response == Unknown ? unknown_widen : 0), 0, 1)。即UNKNOWN 响应会把探索水平向上加宽(默认unknown_widen = 0.3),而不是对一个当前无法分辨的目标承诺一个窄的、剥削性的配置(测试unknown_last_response_widens_exploration:0.4 的不确定性在 observed 时为 Exploit,加宽到 0.7 后越过阈值翻转为 Explore)。 - 意图判定:
exploration >= explore_threshold(默认 0.5)→ControlIntent::Explore(加宽测量以消解高不确定性),否则ControlIntent::Exploit(收窄以利用已消解的区域)。 - 选出动作(
select_action):信道是可分类轴——Explore 时按cycle % channels.len()确定性轮转扫描,Exploit 时锚定首个信道(测试channel_sweeps_when_exploring_and_anchors_when_exploiting验证 36→40→44→36 轮转与 Exploit 时固定 36);带宽、节奏、天线是梯度轴,通过graded_pick把探索水平[0,1]映射到"least-exploratory-first"排序后向量上的索引——高不确定驱动最宽带宽、最快 cadence、最宽孔径(测试high_uncertainty_drives_exploratory_action与convergence_reduces_exploration:0.95→Bw160/fastest/4-chains/Explore,0.05→Bw20/Exploit)。 - 打上诚实证据标签:每个 proposal 携带
EvidenceLevel::L1(启发式/合成)与固定 provenanceSemanticProvenance::declared(MODEL_VERSION),其中MODEL_VERSION = "ruview-active@synthetic-l0"——任何下游都不能把该合成规划输出静默升级为实测结果。
plan(&[ZoneBelief])提供多区域批量版:逐区域step,proposal 按探索水平降序(平分时按区域 id 升序)排序,"最稀缺的预算先花在不确定性最高的地方",而所有被动回退区域单独收集于MeasurementPlan::passive(测试plan_orders_by_exploration_and_collects_passive)。整个MeasurementPlan可无损 serde 往返(plan_serde_round_trips),保证输出可被下游统一消费。
4.3 一个可运行的用法示例
v2/crates/ruview-active/src/lib.rs的 crate 文档给出了"一行闭环"示例(一个可控制信道宽度与天线孔径的部署):
use ruview_active::*; use ruview_ontology::ZoneId; // 一个可改变信道宽度和天线孔径的部署 let cap = ControlCapability::new( vec![Channel::new(Band::Ghz5, 36).unwrap()], vec![Bandwidth::Bw20, Bandwidth::Bw160], vec![], vec![ AntennaSelection::new([0], 4).unwrap(), AntennaSelection::new([0, 1, 2, 3], 4).unwrap(), ], ) .unwrap(); let ctrl = ClosedLoopController::new(cap, ControllerConfig::default()); // 一个认知度差的区域会驱动探索性(最宽)测量 let uncertain = ZoneBelief::new( ZoneId::new("kitchen").unwrap(), Uncertainty::new(0.95), LastResponse::None, ); let decision = ctrl.step(&uncertain); let p = decision.proposal().unwrap(); assert_eq!(p.intent, ControlIntent::Explore); assert_eq!(p.action.bandwidth, Some(Bandwidth::Bw160)); // widest注意该 crate 有意不依赖ruview-infogain(后者实现 ADR-314 的互信息估计)——两者共享"期望增益"的概念,但并行构建、各自定义自己的控制词汇,避免单点阻塞。从仓库 crates 清单(v2/crates/)可见ruview-infogain/、ruview-hal/、ruview-fusion/等兄弟 crate 均独立存在。
5. 治理与诚实性边界:闭环不能越过的红线
ADR-309 的 §3 明确了两条硬约束,二者在实现中都有对应物:
(a)执行与 solicitation 保持 fail-closed 且受隐私上限约束。一个闭环实验:
- 不能加宽其服务的任务的 P0–P5 隐私上限(隐私类阶梯 P0 原始信号 → P5 身份绑定,定义于
v2/crates/ruview-unified/src/control.rs的PrivacyClass,源自 ADR-262 词汇); - 不能把波束指向未授予该目的的区域(ADR-280 的
actuation_requires_policy_authorization)。
这一治理表面在 ADR-280 的实现v2/crates/ruview-unified/src/control.rs中已经 fail-closed:admit_task(engine, task)对"raw export 请求"(ADR-277 结构上禁止)、身份任务缺 consent 引用、非法置信度/分辨率/延迟等分支一律拒绝;validate_representation强制按用途上限(如 Presence/Diagnostics ≤ P2 且排除 identity+vitals)执行语义压缩的泄漏检查。ADR-309 的控制器负责把 proposal 交回这条路径,而不是另开门户。
(b)证据分级。闭环带来的任何精度或"流量削减"声明,只有附具名复现器与既定场景时才能标记MEASURED;模拟孔径标记SYNTHETIC;其余一律CLAIMED。真实的 multi-AP 相干测量与 RIS 执行仍属hardware-dependent,按 CLAUDE.md 要求在宣称任何硬件能力前必须有真硅片证据(一段采集的运行日志)。
这与 crate 的 L0/SYNTHETIC 定位完全一致:ruview-active的全部探索数值都是模拟量级而非测量信息增益;每次 proposal 都是EvidenceLevel::L1+"ruview-active@synthetic-l0"出处;当无可控轴时返回PassiveReason::NoControllableAxes而非虚构增益。
6. 依赖关系与退化语义:闭环的强度上限
ADR-309 的 Consequences 段诚实地点明:
The loop is only as strong as its two dependencies: ADR-311 must expose a usable uncertainty surface and ADR-314 must produce trustworthy information-gain estimates. Where either is absent, the controller degrades to the ADR-280 staleness planner rather than acting on a fabricated gain estimate.
- 上限一:不确定性表面。环路的输入来自 docs/adr/ADR-311-real-sensor-fusion.md 的融合世界状态(多观测解析为一个带不确定性、逐观测 provenance、contradiction flag 的
WorldState,绝不退化为"N 条 feed 的画布拼接")。如果融合层没有可用不确定度,闭环无从选择。 - 上限二:信息增益估计的可靠性。docs/adr/ADR-314-information-gain-scheduler.md 为每个候选传感器/模态计算
value ≈ expected uncertainty reduction / (compute + energy + bandwidth),成本项由 ADR-320 HAL 的成本描述符读出,且在预算分配上提供"采样下限"防止低价值传感器被饿死。缺少可信的互信息估计时,闭环退化到 ADR-280 的 staleness 规划器,而不是基于伪造的增益行事。 - 可控性受硬件限制。普通 ESP32 传感器上可控集可能只有 cadence(
cadence_only_capability_controls_only_cadence测试验证:单轴部署仍能在自己那一根轴上闭环,其余轴保持None且is_noop() == false);完整的带宽/天线/波束环路需要 NIC/RIS 暴露这些轴,经 ADR-320 HAL 呈现。
7. 验证计划:设计级验收与源码测试的对应
ADR-309 定义了三条验证线,可在源码测试中找到一一对应:
- 设计级验收(Phase-3):在合成场景上,闭环应比(a)被动的 ADR-280 staleness 规划器和(b)开环固定扫描以更少终端融合态不确定性收敛,且预算相等——结果标记SYNTHETIC并附场景与种子。源码侧目前以行为测试覆盖其机理:
high_uncertainty_drives_exploratory_action、convergence_reduces_exploration、unknown_last_response_widens_exploration、channel_sweeps_when_exploring_and_anchors_when_exploiting验证"不确定性驱动探索、收敛降低探索"这一闭环内核。 - 治理测试:环路中的每次 solicited measurement 与 actuation 都经 ADR-280 fail-closed 路径准入;任何会超出任务隐私上限或转向未授权区域的步骤被拒绝。这属于跨 ADR 约束——闭环输出的
ControlProposal明确只是计划,由 fielded caller 提交给 ADR-280 的admit_task/request_actuation。 - 退化测试:可控集为空(纯 ESP32)时控制器无错回退到 staleness 规划器、不产生虚构增益——正是
empty_capability_degrades_to_passive与plan_orders_by_exploration_and_collects_passive断言的行为。
带宽/天线/波束执行的硬件验证被明确排除在范围之外,直到真硅片暴露这些轴并产出采集日志为止——这与 docs/adr/ADR-320-sensor-hal.md 中"真实设备产出Observation的采集启动/运行日志才是硬件证据;构建通过或模拟器运行不是硬件证据"的纪律同源。
8. 直接相关的文档与代码地图
若要在仓库中继续深挖这条技术主线,建议按以下顺序阅读:
- 决策源头:docs/adr/ADR-300-perception-substrate-program.md(21 原语程序、Phase 划分、四条非协商规则)
- 治理表面(被复用而非重建):docs/adr/ADR-280-active-sensing-programmable-perception.md,其实现位于 v2/crates/ruview-unified/src/control.rs
- 本文主题:docs/adr/ADR-309-active-sensing.md
- 上游依赖:docs/adr/ADR-311-real-sensor-fusion.md(不确定性表面)、docs/adr/ADR-314-information-gain-scheduler.md(信息增益)、docs/adr/ADR-320-sensor-hal.md(能力门控与成本描述符)
- 闭环实现:v2/crates/ruview-active/src/control.rs(
ControlAction/ControlCapability词汇与校验)、v2/crates/ruview-active/src/policy.rs(ClosedLoopController、ControllerConfig、探索映射)、v2/crates/ruview-active/src/lib.rs(crate 文档与测试模块)
范围说明:截至本文所依据的仓库状态,ruview-active是 ADR-282/L0 级的合成规划模型脚手架(SYNTHETIC research-forward scaffold)——它产出"计划",不驱动任何射频、不改配对状态、不发射;闭环对真实硬件的完整价值(带宽/天线/波束轴)有待真硅片能力的暴露与采集日志证据。ADR-280 在合成场景记录过约 95% 的感知流量削减(对比均匀刷新,20 区域/100 tick 单热点区域),那是ADR-280 规划器的实测且对场景浓度敏感,不是ADR-309 闭环自身的测量结果;ADR-309 的三项验证在本仓库中体现为可复现的设计级测试机理,而非已产出的收敛数据。
【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考