RuView 主动感知(Active Sensing)架构解析:从被动观测到闭环射频实验控制(ADR-309)
2026/9/9 20:26:35 网站建设 项目流程

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_actuationActuationReceipt(对 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 记录了对三条候选路线的评估:

  1. 保持被动,仅调度保留哪些偶然观测。这基本是现有ActiveSensingPlanner(按区域的 staleness 优先级)。被否决为终点:它优化的是对不可控 RF 的注意力分配,而不是测量本身。但它保留为"无任何可控轴时可用的回退方案"。
  2. 开环测量脚本(固定的信道/带宽扫描)。被否决:固定扫描无论已知什么都以同样的方式消耗 RF/能量/隐私预算,无法把测量集中到不确定性真正所在的位置。
  3. 闭环实验控制——读取不确定性,选择"单位成本/隐私下期望信息增益最高"的可控配置,通过 ADR-280 治理表面执行,观察、更新、重复。被选中。

决策结论是:采用闭环射频实验控制作为一个 Phase-3 控制器层,叠加在 ADR-280 表面之上。

3. 可控自由度:ExperimentControl词汇表与源码级实现

ADR-309 定义了一套ExperimentControl词汇表,覆盖 RuView 在暴露相应能力(capability)的硬件上可影响的配置轴。文档强调每个轴都是可选的、按能力门控的:由 ADR-320 的 HAL(传感器硬件抽象层)决定某部署真正能设置哪些轴——一个纯 ESP32 的部署其可控集为空,直接退化到被动规划器。

文档列出的五类自由度:

  • 信道 / 频段与带宽(探测哪段频谱;复用 ADR-292 的宽频子载波无关元数据);
  • 报文时序 / 节奏(cadence)(何时请求一次 sounding、以什么速率);
  • 天线 / 链选择(激活分布式孔径的哪个子集——受 ADR-280CoherentSensorGroup兼容性证明约束);
  • 波束 / RIS 配置(哪些房间与人员变得可观测——按 ADR-280 §6 的要求经request_actuationActuationReceipt治理);
  • 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——描述某部署"当前真正能设置什么",四轴对应channelsbandwidthscadencesantennas;每轴去重、按"探索性从低到高"排序,空能力(ControlCapability::none())即触发被动退化。
  • ControlAction——一次提议的测量配置(提议下一步请求设置哪些轴);每个轴是Option,为None表示该部署不可控该轴(保持硬件默认)。

关键边界常量(文件头部):

常量语义
MAX_AXIS_VALUES64单个控制轴最多可列值数,约束从不可信输入构造能力集的分配
MAX_CHAINS16合成孔径可建模的最大天线链数
MIN_CADENCE_MS1建模的最小 sounding 间隔(最快节奏),毫秒
MAX_CADENCE_MS60_000建模的最大 sounding 间隔(最慢节奏),毫秒

值得强调的是设计红线:ControlAction是计划(plan),绝不是发射(emission)。文件文档注释明确写道:

This is a plan, never an emission.Nothing here drives a radio, changes pairing state, or transmits — aControlActionis data describing what a governed actuationwouldrequest through the ADR-280 fail-closed surface.

3.2 每个轴的构造期校验(fail-closed at the boundary)

control.rs为每个轴提供强类型枚举或校验构造器,让畸形配置在边界处被拒绝而不是抵达执行器:

  • ChannelBand枚举(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_chainsnum_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测试验证相同输入必然得到相同决策与计划)。

其核心决策逻辑为:

  1. 空能力判断capability.is_empty()时直接返回ControlDecision::Passive { reason: PassiveReason::NoControllableAxes }——ESP32 纯部署的退化路径,不制造任何虚假增益估计(测试empty_capability_degrades_to_passive)。
  2. 计算探索水平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)。
  3. 意图判定exploration >= explore_threshold(默认 0.5)→ControlIntent::Explore(加宽测量以消解高不确定性),否则ControlIntent::Exploit(收窄以利用已消解的区域)。
  4. 选出动作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_actionconvergence_reduces_exploration:0.95→Bw160/fastest/4-chains/Explore,0.05→Bw20/Exploit)。
  5. 打上诚实证据标签:每个 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.rsPrivacyClass,源自 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测试验证:单轴部署仍能在自己那一根轴上闭环,其余轴保持Noneis_noop() == false);完整的带宽/天线/波束环路需要 NIC/RIS 暴露这些轴,经 ADR-320 HAL 呈现。

7. 验证计划:设计级验收与源码测试的对应

ADR-309 定义了三条验证线,可在源码测试中找到一一对应:

  1. 设计级验收(Phase-3):在合成场景上,闭环应比(a)被动的 ADR-280 staleness 规划器和(b)开环固定扫描以更少终端融合态不确定性收敛,且预算相等——结果标记SYNTHETIC并附场景与种子。源码侧目前以行为测试覆盖其机理:high_uncertainty_drives_exploratory_actionconvergence_reduces_explorationunknown_last_response_widens_explorationchannel_sweeps_when_exploring_and_anchors_when_exploiting验证"不确定性驱动探索、收敛降低探索"这一闭环内核。
  2. 治理测试:环路中的每次 solicited measurement 与 actuation 都经 ADR-280 fail-closed 路径准入;任何会超出任务隐私上限或转向未授权区域的步骤被拒绝。这属于跨 ADR 约束——闭环输出的ControlProposal明确只是计划,由 fielded caller 提交给 ADR-280 的admit_task/request_actuation
  3. 退化测试:可控集为空(纯 ESP32)时控制器无错回退到 staleness 规划器、不产生虚构增益——正是empty_capability_degrades_to_passiveplan_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(ClosedLoopControllerControllerConfig、探索映射)、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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询