news 2026/9/9 13:23:08

RuView 主动感知与可编程感知控制面:基于 ADR-280 的 SensingTask、AoI 调度与受治理执行的完整实现解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RuView 主动感知与可编程感知控制面:基于 ADR-280 的 SensingTask、AoI 调度与受治理执行的完整实现解析

RuView 主动感知与可编程感知控制面:基于 ADR-280 的 SensingTask、AoI 调度与受治理执行的完整实现解析

【免费下载链接】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

本篇技术指南以 RuView 仓库中已接受并实现的设计文档 ADR-280 为核心骨架,剖析其从「被动感知」转向「可编程感知(programmable perception)」的完整技术方案。你将看到:一个证据感知型传感任务(SensingTask)、带隐私上限的传感动作(SensingAction)、基于信息年龄(age-of-information)的空间刷新调度器、在时间/相位/几何三重校验下 fail-closed 的相干分布式孔径融合门、被当作受治理执行器对待的可编程射频环境(RIS/可动天线),以及经过泄漏校验的任务充分表示(TaskSufficientRepresentation)。读完后,你能掌握这套控制面的每个契约在 v2/crates/ruview-unified/src/control.rs 中的真实字段、校验分支与对应测试,并能解释它为何与 ETSI ISAC 数据面词汇对齐。

一、从被动感知到可编程感知:要解决的问题

ADR-280 所记录的核心转变,不是“再修一个感知算法”,而是把「感知什么、何时感知、用什么模态、以多高保真度感知」本身变成系统的可控决策:系统自主选择感知动作去消解不确定性,必要时通过改变射频环境或移动感知 Agent 来主动获取证据。与之同时,文档点名了新兴系统里最典型的一类失败模式——隐藏的同步与标定依赖:共享时钟、已知天线姿态、稳定相位被静默假设,一旦被打破就自信地给出错误结论。ADR-280 的立场是:这两件事都必须归属控制面,且在捕获开始之前、以 fail-closed 的方式处理。

这条设计线属于 RuView v2「统一射频空间世界模型」决策族:本 ADR 的父级是 ADR-273,它扩展 ADR-277(边缘感知控制面,本 ADR 中的每个契约都与之组合),隐私类 P0–P5 复用 ADR-262 的阶梯定义,而 ADR-148 所描述的ruview-swarm移动 Agent 则是感知动作的消费方。实现集中在 v2 workspace 的ruview-unifiedcrate,类型导出见 lib.rs(pub mod control;)。

二、证据纪律(PROOF discipline):每个断言都是一个具名测试

ADR-280 继承了 ADR-273 §0 的证据分级体系。文档明确把 ESI-Bench 的 act-to-uncover 形式化、LuLIS 的 256 相干射频链分布式孔径、ETSI 的 cooperative-ISAC 与 AI/数据处理工作项、信息年龄数字孪生调度、语义/任务充分通信架构等全部归为 EXTERNAL-UNVERIFIED(外部未验证)——它们只能作为设计动机,不能被当作本项目结果。反过来,文档要求:任何关于“我们自己行为”的断言都必须是一个具名测试。这个纪律直接决定了本文后续每个结论都可以回溯到 control.rs 内嵌测试模块中的具体#[test],以及 e2e_acceptance.rs 与 security_boundaries.rs 两条端到端/边界套件。

三、证据感知型传感任务(SensingTask):在捕获之前就完成准入

3.1 契约字段

SensingTask(control.rs)是一个采用 ETSI ISAC 词汇的证据感知任务契约,覆盖:目的(purpose)、目标区域(target_area: SpatialZone)、可用模态(modalities: Vec<RfModality>)、请求空间分辨率、延迟上限、最低置信度、raw 与 result 保留时间、授权消费者、同意引用(consent reference)。其关键设计是:这些约束在捕获开始前被强制执行,而不是事后作为元数据附加。

从字段可以看出它的“证据感知”含义:minimum_confidence: f64规定了置信度下限,低于该下限的结果将变成“不作决策(no decision)”raw_retention_secondsresult_retention_seconds分别约束 P0 级原始数据与结果的本地保留窗口;authorized_consumers声明哪些主体可以消费结果;consent_reference则在目的需要时承载同意凭证。

3.2 模态枚举

任务的modalities直接使用 crate 级统一模态枚举RfModality(定义于 tensor.rs),包括WifiCsi(802.11 每子载波频响)、WifiCir(时延域信道冲激响应)、WifiBfReport(802.11 波束成形反馈)、CellularSrs(5G NR 上行探测参考信号,O-RAN ISAC 路径)、FmcwRadar/FmcwRangeAzimuth/FmcwDopplerAzimuthUwbCirBleCs(蓝牙信道探测),以及Synthetic(ADR-276 合成世界产物,必须带诚实标签)。这说明SensingTask并不是 WiFi 专用契约,而是多模态感知的统一准入入口。

3.3 admit_task:fail-closed 准入函数

admit_task(control.rs)是任务的唯一准入入口,与 ADR-277 的PolicyEngine组合,所有分支一律拒绝优先。其校验顺序与规则值得逐条记录:

  1. raw 导出字段存在但永远被拒绝raw_export_allowed字段保留在契约中仅为 ISAC 词汇兼容,但一旦为true直接返回PolicyDenied——因为 ADR-277 §2.1 通过类型结构(raw RF 不可表示,只有BoundedEvent可导出)已经封死了 raw 导出的可能,配置文件开关不能重新打开它。
  2. 输入合理性校验minimum_confidence必须有限且在[0,1]requested_resolution_m必须有限且大于 0;maximum_latency_ms必须大于 0;modalities至少声明一个模态。
  3. 身份目的双重门槛:当purpose == SensingPurpose::IdentityRecognition且没有consent_reference时,在进入区域检查之前就被拒绝engine.authorize尚未执行)。
  4. 最终交给策略引擎engine.authorize(&task.target_area.id, task.purpose),即未知区域、未授权目的均在此被拒绝。

测试task_admission_is_fail_closed(control.rs)验证了全部四条路径:合法 Presence 任务通过;任何 raw_export=true 被拒;区域未授予的目的被拒;Identity 无同意被拒。注意测试夹具中给出了一个可复现的合法任务模板(control.rs):分辨率 0.5 m、延迟上限 100 ms、最低置信度 0.8、raw 保留 60 s、result 保留 3600 s、消费者ha-bridge——可作为集成方构造任务时的取值参考。

四、感知动作(SensingAction)与信息目标(InformationGoal)

动作被定义为一类针对明确假设的、刻意的取证行为。文档给出的典型假设表述是:“东侧走廊里有一个人静止站立,或两个人距离很近”。ADR-280 对动作的界定是:它必须受延迟、能量约束,并且被一个**隐私上限(privacy ceiling,即 P0–P5 阶梯)**所限制。

对应实现中,InformationGoal(control.rs)携带:人类可读的hypothesis、当前不确定性current_uncertainty([0,1])、目标不确定性target_uncertainty(必须低于当前值)、以及期望信息增益expected_information_gain(启发式单位)。SensingAction(control.rs)在目标之上补充:目标区域target_region、要用的模态modality、延迟预算maximum_latency_ms、能量预算energy_budget_j(焦耳),以及本动作允许产出的最高隐私类privacy_ceiling。动作正是规划器(下文第五节)、MetaHarness Agent、以及 swarm 无人机共同消费的统一“取证请求”形态。

五、信息年龄调度器(ActiveSensingPlanner):刷新“旧的”,而不是“全部的”

5.1 空间孪生何时知道自己过时了

一个空间孪生只有知道自己哪些部分过期了才真正有用。对每个区域,SpatialStateFreshness(control.rs)维护五类状态:最近观测时间last_observed_ns、期望变化率expected_change_rate、不确定度增长率uncertainty_growth_rate(每秒)、业务关键度权重business_criticality、以及感知该区域的成本sensing_cost

代码层还提供了两个#[must_use]计算函数:

  • uncertainty_at(now_ns)(control.rs):按uncertainty_growth_rate × 龄期累积不确定度并封顶在 1.0
  • priority(now_ns)(control.rs):即 ADR 文档中的核心调度公式:
priority = uncertainty(age) × change_rate × criticality ÷ cost

其中uncertainty(age)正是由增长率与龄期累积而来(代码分母对sensing_costmax(1e-9)防除零)。

5.2 规划器每周期只发射“最高优先且超过阈值”的动作

ActiveSensingPlanner(control.rs)暴露:priority_threshold(低于此优先级不值得在本周期感知)、upsert_region(注册/替换区域)、mark_observed(将某区域置为刚被观测),以及核心的next_action(now_ns, modality)——它遍历所有区域,过滤掉低于阈值的项,选出最高优先级者,产出具体SensingAction;若没有值得感知的区域则返回None(每周期至多一个动作)。生成的SensingActionaoi-<region>-<now>命名,并自动把privacy_ceiling设为 P2(匿名存在/占用级别),可见规划器产出的动作本身就带有隐私上限的约束。

5.3 两个可复现的测量/排序测试

ADR-280 特意区分“架构估算”与“实测”:

  • 排序正确性planner_prioritizes_stale_critical_regions(control.rs)单独证明:三个区域(emergency-exit 高变化率高关键度、server-room 中等等、storage 低等),在同样 10 秒陈旧度下,最高优先级是 emergency-exit;观察它之后下一个被选中的是 server-room。
  • 流量削减 ≥70% 门禁planner_reduces_sensing_traffic_versus_uniform_refresh(control.rs)度量:20 个区域、100 个调度 tick、只有一个 hot 区域(变化率 1.0、关键度 5.0),其余为冷区域。均匀刷新需要 20×100=2000 次观测,而 AoI 规划器只对 hot 区域持续感知,仿真得到100 次观测、约 95% 的感知流量削减(100/2000),同时 hot 区域保持被观测;测试的硬性断言是削减率≥ 70%。文档特别提醒:这一数字来自合成场景测量,对“变化有多集中”敏感,不可简单外推。

这也印证了 ADR-280 状态栏中“含一个已测量的 ≥70% 流量削减门禁”的说法,其完整证据链都在该内嵌测试内。

六、相干分布式孔径:融合之前先证明兼容性,否则降级为不相干处理

这是针对“隐藏同步/标定依赖”失败模式的直接解药。CoherentSensorGroup(control.rs)的立场是:除非一个组能够证明彼此兼容,否则不允许相干融合。组成员必须逐一满足:

  • 每个成员都必须上报其同步状态(MemberSyncState,含member_id、相对组基准的时钟误差time_error_ns、相位误差phase_error_rad、以及标定基线几何的哈希geometry_hash);
  • 时钟误差与相位误差必须落在组的容差范围内(maximum_time_error_nsmaximum_phase_error_rad);
  • 几何哈希必须与组的baseline_geometry_hash一致;
  • 未知上报者同样被拒绝(即使合法成员全部通过,混入的非成员也导致整体拒绝)。

can_fuse返回带类型错误的Result,对NaN/±inf也做了防护。测试coherent_fusion_fails_closed(control.rs)精确枚举了文档所称的五条拒绝路径:缺员(少报一个成员)、时钟漂移(400 ns 超过 50 ns 容差)、相位漂移(1.0 rad 超过 0.2 rad)、几何在标定后发生变化(哈希从0xBEEF变为0xDEAD)、非成员注入。文档指出,这正是建筑级 WiFi 孔径(即 LuLIS 方向)的安全网:同步条件不满足时系统退化为不相干处理,而不是输出“自信的胡话”。

七、可编程射频环境 = 受治理的执行器

RIS、可移动天线、流体天线改变的是“哪些房间和人可被观测”,因此其状态变更必须像感知一样受治理。实现分为三块:

  • ActuatorKind(control.rs):RisMovableAntennaFluidAntenna
  • FieldActuator(control.rs):记录actuator_id、类型、建筑系下的位姿pose_m、支持的状态集supported_states: Vec<String>、以及被它改变可观测性的affected_zone_id
  • request_actuation(control.rs)是获得ActuationReceipt的唯一途径ActuationReceipt没有公开构造器,见 control.rs)。它校验两层:执行器确实支持该状态,且受影响区域在 ADR-277 引擎下授予了该目的。这样,每一笔改变可观测性的执行(比如为一个未获授权的目的去转向波束)都会被策略引擎拒绝并留下审计轨迹。

审计收据ActuationReceipt携带requested_state/applied_state、应用时间applied_ns、控制器身份controller_id、授权目的purpose——这正是 RIS 治理所需的“请求了什么、实际应用了什么、何时、谁、为何”的审计要求。测试actuation_requires_policy_authorization(control.rs)验证:受权目的 + 支持的状态 → 返回收据;不支持的状态(如对只支持beam-east/beam-west的 RIS 请求beam-up)→ 拒绝;目的未在受影响区域授予(用 Vitals 请求 Presence 场景的转向)→ 拒绝。

八、任务充分表示:语义压缩必须通过泄漏校验

“传输占用不确定性,而不是传输 CSI”这类语义压缩要成立,前提是压缩必须保持任务作用域(task-scoped):足以支撑匿名占用的表示,不能偷偷保留身份信息。TaskSufficientRepresentation(control.rs)携带:task_id、源帧的source_receipts(血缘)、压缩后的semantic_state、声明的信息界information_bound_bits显式排除的信息类别列表excluded_information(如"identity""vitals""trajectory-history"),以及表示的隐私类privacy_class

validate_representation(control.rs)按目的实施隐私类上限 + 必须排除项的双重强制,这张表是使用本模块时最需要对照的:

目的(SensingPurpose)隐私类上限必须显式排除的信息类
Presence/ChannelDiagnostics≤ P2identityvitals
Activity/Localization≤ P3identity
Vitals/PoseTracking≤ P4identity
IdentityRecognition= P5(最高级)无强制排除项

任何表示只要privacy_class > ceiling、遗漏了必须排除的信息类、或source_receipts为空(无血缘的孤儿表示),都会被返回带类型的策略错误。这里可以看到 P0–P5 阶梯(定义见 control.rs)的完整含义:P0 为 raw 信号(永不离开信任边界)、P1 为高度聚合非个人信息、P2 为匿名存在/占用级、P3 为行为推断级、P4 为派生个人推断级、P5 为身份绑定级。

测试覆盖很完整:task_sufficient_representation_is_leakage_checked(control.rs)验证 Presence 场景下“正确排除→通过 / 忘排除 identity→拒绝 / 超过 P2 上限→拒绝 / 无血缘→拒绝”;而task_sufficient_representation_covers_every_purpose_branch(control.rs)专门补齐了其余目的分支(Activity/Localization 的 P3、Vitals/PoseTracking 的 P4、IdentityRecognition 的 P5),防止某个分支的缺陷在测试盲区中潜伏。

九、与 ADR-277 策略引擎的边界分工

本 ADR 的多数准入/授权最终都落到 policy.rs 的PolicyEngine。理解分工有助于正确组合两个 ADR:SensingPurpose枚举(policy.rs:Presence/Activity/Vitals/Localization/PoseTracking/IdentityRecognition/ChannelDiagnostics)是两者的共享词汇;PrivacyZone声明区域授予的目的集、事件保留时长retention_s、以及身份的显式启用开关identity_explicitly_enabledengine.authorize(policy.rs)对未知区域、未授权目的、以及“未显式启用”的身份识别一律拒绝。

需要强调的边界规则是:ADR-277 §2.1 已把 raw RF 导出做成类型上不可表示——唯一可导出类型BoundedEvent只承载类型化判定(Presence/ActivityClass/RespirationBpm/Location/AnomalyScore),没有任何变体能携带 RF 样本,TrustBoundary::export是唯一出口,且没有序列化RfTensor的对外 API。因此本 ADR 中raw_export_allowed字段的“永远拒绝”不是靠一张配置表,而是与结构层面的不可表示性共同闭合。身份同时被双重门槛保护:必须在区域allowed_purposes必须identity_explicitly_enabled=true

十、标准对齐与开放性

ADR-280 把“词汇对齐”称为最强的战略接缝:本文出现的 sensing task/service/entity、measurement configuration、sensing data/result/consumer/purpose、retention、result exposure 等,刻意采用新兴 ETSI ISAC 数据面词汇,使本 crate 有望成为 ISAC 数据处理的开放参考实现候选,而非又一套并行方言。因此在使用本模块时,尽量沿用这些标准术语来命名业务对象。文档同时明确:充电/移动性管理(charging/mobility management)在出现蜂窝部署之前明确不在范围之内——这也是无需在契约中预留相关字段的原因。

十一、后果与诚实的未实现范围

实现带来的可验证后果:

  • MetaHarness/OaK 风格的 Agent 获得了一个类型化表面:读新鲜度(freshness)、规划动作、接收收据——空间记忆与 Agent 规划在此汇合,而无需触碰 raw RF;
  • P4+ 级别的分布式孔径工作直接继承了一道已经 fail-closed 的融合门;
  • 端到端验收管线(e2e_acceptance.rs)确认“每个导出的输出都携带不确定度、来源、模型版本与目的,并且只经由策略信任边界离开”;边界加硬套件(security_boundaries.rs)则用 proptest 对任意值(含经f64::from_bits走私的 NaN/±inf)驱动每个校验构造器与授权门,断言“合法对象或带类型错误,绝不 panic、绝不宽松默认”。

ADR-280 同时诚实记录了三项未实现内容,使用本模块时不应假设它们存在:

  1. 信息增益(information gain)的估算由调用方提供——规划器当前使用的是陈旧度启发式,而非互信息;
  2. RIS 驱动、真实的多 AP 相干性测量属于硬件相关路线图项;
  3. OTFS 波形控制同样属于未来路线图。

如需在仓库内复现上述测试与基准,可进入 v2 workspace 执行cargo test -p ruview-unified(单元与验收测试)与cargo bench -p ruview-unified(criterion 基准,见 unified_bench.rs)。控制面实现与 7 个内嵌测试全部位于 control.rs,与本 ADR 章节一一对应,可作为逐条核对设计的唯一事实来源。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:23:06

使用 Polars GPUEngine 精细控制 GPU 查询执行

使用 Polars GPUEngine 精细控制 GPU 查询执行 【免费下载链接】polars Extremely fast Query Engine for DataFrames, written in Rust 项目地址: https://gitcode.com/GitHub_Trending/po/polars Polars 的 GPU 引擎&#xff08;GPU engine&#xff09;允许把 LazyFra…

作者头像 李华
网站建设 2026/9/9 13:22:05

基于S7-1200的升降横移式立体车库PLC控制方案

电梯房小区、医院停车场、老旧小区改造&#xff0c;这几年立体停车库的需求是真的大。我前前后后参与过几个升降横移式立体车库的项目&#xff0c;其中用西门子S7-1200系列做主控的方案占了大多数。说实话&#xff0c;立体车库在自动化项目里属于“麻雀虽小五脏俱全”的类型&am…

作者头像 李华
网站建设 2026/9/9 13:20:34

TSA技术原理与实验流程:从信号放大到多重免疫组化

干了这么多年病理与免疫组化实验&#xff0c;TSA&#xff08;Tyramide Signal Amplification&#xff0c;酪胺信号放大&#xff09;是我这几年用下来觉得“上限最高、门槛也最明显”的一项技术。很多人一开始听说TSA&#xff0c;是因为它能把微弱到几乎看不见的阳性信号放大到一…

作者头像 李华
网站建设 2026/9/9 13:18:36

数据结构C语言版补考速成:核心考点与代码模板

数据结构&#xff08;C语言版&#xff09;这门课&#xff0c;几乎是计算机专业的第一道分水岭。期末前很多人手里只剩一本教材和一堆没整理完的笔记&#xff0c;补考前想临时抱佛脚&#xff0c;结果连单链表反转都要对着代码发半天呆。这篇文章不讨论“数据结构重不重要”&…

作者头像 李华