
RuView 怎么配置 ESP32 边缘处理 Tier 并调优 fall_thresh 等 NVS 参数【免费下载链接】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/RuViewRuView 的 ESP32 CSI 节点固件firmware/esp32-csi-node把 WiFi CSI 采集和边缘 DSP 放在同一个芯片上边缘处理分为 0/1/2 三个 TierTier 0 只做原始 CSI 透传Tier 2 在片上完成存在检测、呼吸/心率估算和跌倒检测并通过 32 字节 vitals 包magic0xC5110002上报结果。这篇讲如何在已经刷好固件的节点上不改固件只改 NVS 来选择 Tier、调整fall_thresh等参数以及如何确认配置真正生效。前提条件来自 固件 README节点已用 esptool 刷入固件能进串口Windows 常见为COM7Linux 为/dev/ttyUSB0macOS 为/dev/cu.SLAB_USBtoUARTPython 3.10并安装esptool5.x 和nvs-partition-genpip install esptool5.0 nvs-partition-gen一台运行聚合端sensing server的主机其 IP 就是--target-ip要填的值。三个边缘处理 Tier 各做什么Tier 在编译期Kconfig和运行期NVS都可以选NVS 值会覆盖 Kconfig 默认值所以调参不需要重新烧录。各 Tier 的内容固件 README、ADR-039Tier名称片上处理0Raw passthrough不做 DSP按 ADR-018 格式magic0xC5110001以约 20 Hz 流式发送原始 I/Q1Basic DSP相位解卷绕、Welford 逐子载波统计、Top-K 选择、Delta 压缩XOR RLE降低带宽2Full pipeline在 Tier 1 基础上加呼吸0.1–0.5 Hz 带通、心率0.8–2.0 Hz 带通、存在检测相位方差 自适应阈值开机 60 s 环境学习、跌倒检测相位加速度阈值、多人 slot 计数1 Hz 发送 32 字节 vitals 包注意两点来自文档的边界说明Tier 2 是启发式实现不跑训练模型vitals 读数用于监测参考、不是医疗测量存在指示在强射频干扰风扇、微波炉、邻 AP 功率波动下可能误报文档给出的处理方式是空房间断电重启重新做 60 秒环境校准。用 provision.py 写入 Tier 与阈值参数写 NVS 的入口是 provision.py。先说清它的副作用它会把一个 24 KiB 的 NVS 分区镜像写到板子 0x9000 偏移即重写板上的 NVS 分区不动应用固件和 boot 分区。脚本默认是“增量合并”本次命令行参数会叠加到本机记录的、之前写给这个串口的状态文件上状态文件在用户配置目录下~/.config/wifi-densepose/esp32-provision-state可用--state-dir覆盖合并后再生成并烧写。所以只传--edge-tier 2而省略 WiFi 参数只要本机状态文件里有ssid/password/target-ip就可以。合并后如果 WiFi 三件套--ssid、--password、--target-ip缺失脚本会直接报错退出确要跳过 WiFi 配置时用--force-partial文档明确警告这样烧写后设备连不上 WiFi。换一台电脑给同一块板子做配置时状态文件是空的需要把想保留的键全部带在这次命令里否则 NVS 分区会被重写为只有本次传入的键。最短主路径——给一台 8 MB S3 节点开启 Tier 2 并显式设置跌倒阈值python firmware/esp32-csi-node/provision.py --port COM7 \ --ssid YourWiFi --password YourPassword --target-ip 192.168.1.20 \ --edge-tier 2 --fall-thresh 15000--edge-tier只接受 0、1、2help 文本0off, 1stats, 2vitals。调参相关的参数还有--pres-thresh存在阈值u16×1000、--vital-win相位历史窗口帧、--vital-intvitals 包间隔ms、--subk-countTop-K 子载波数。三个辅助开关来自脚本自身的 help 说明# 只生成 NVS 二进制nvs_provision.bin不烧写并打印手动烧写命令 python firmware/esp32-csi-node/provision.py --port COM7 \ --ssid YourWiFi --password YourPassword --target-ip 192.168.1.20 \ --edge-tier 2 --fall-thresh 8000 --dry-run # 打印本次将要写到设备上的合并后键值不烧写用于确认合并结果 python firmware/esp32-csi-node/provision.py --port COM7 --state # 清除本机状态文件回收再利用的旧板首次配置时用 python firmware/esp32-csi-node/provision.py --port COM7 --reset \ --ssid YourWiFi --password YourPassword --target-ip 192.168.1.20 \ --edge-tier 2当前默认值与接受范围各键的运行时默认值来自 Kconfig 与 nvs_config.c 的兜底逻辑NVS 读到的值只有落在接受范围内才生效范围外的值被静默忽略代码里对vital_win、subk_count、power_duty等有显式范围检查NVS 键类型当前默认运行时接受范围edge_tieru82Kconfig 默认0–2pres_threshu160 开机 60 s 自动校准见 固件 READMEu16×1000fall_threshu1615000 15.0 rad/s²Kconfig 默认代码注释注明“Default raised from 2.0 — see issue #263”Kconfig 范围 100–50000vital_winu1625632–256vital_intu161000 ms≥100subk_countu881–32power_dutyu8100常开10–100文档之间存在几处默认值不一致使用时按适用条件区分fall_thresh固件 README 的 NVS 参考表和 ADR-039 的配置表写的是默认 20002.0 rad/s²而当前 Kconfig、nvs_config.c兜底值和 user-guide 都是 15000。代码注释说明该值是从 2.0 上调过的2000 属于旧默认值。edge_tieruser-guide 的 “Edge Intelligence (v0.3.0-alpha)” 小节说该版本“默认关闭以保持向后兼容”而当前 Kconfig 默认是 2。即旧版默认 Tier 0当前源码默认 Tier 2以你实际使用的固件版本为准。pres_thresh、vital_win、subk_count在 user-guide 同一个小节里分别是 50、300、32与当前代码默认0/256/8不一致且vital_win300已经超出运行时接受范围 32–256写下去会被忽略。fall_thresh 怎么调fall_thresh以“×1000”整数存储运行时除以 1000 得到 rad/s²见 nvs_config.c 的cfg-fall_thresh fall_thresh_val / 1000.0f是 Tier 2 跌倒检测的相位加速度阈值。文档给出的调参依据ADR-039 的硬件基准测试发现旧默认值 20002.0 rad/s²在静态室内环境产生约 6.7 次/秒的误报并建议典型部署提高到 5000–8000Kconfig 的 help 写明“正常步行产生 2–5 rad/s² 的加速度”并给出方向在人流多的环境调高以减少误报user-guide 补充“真实跌倒一般 20 rad/s²”provision.py 的--fall-threshhelp 与 Kconfig 一致调高可抑制高流量区域的误报。组合起来当前默认 1500015.0 rad/s²位于“高于步行、低于真实跌倒”区间如果你的节点仍报误跌按 Kconfig 方向继续调高不超过 50000如果你运行的是仍默认 2000 的旧固件ADR-039 的实测建议是先把阈值提到 5000–8000# 示例按 ADR-039 建议区间设置 8.0 rad/s² python firmware/esp32-csi-node/provision.py --port COM7 \ --fall-thresh 8000只传--fall-thresh依赖本机状态文件里已有 WiFi 三件套换机器执行时请同时带上--ssid/--password/--target-ip。编译期默认值Kconfig可选路径如果你要改的是出厂默认而不是单块板子的运行值走 Kconfig 的 “Edge Intelligence (ADR-039)” 菜单idf.py menuconfig或在构建前编辑sdkconfig.defaults固件 README 的 Custom Configuration 一节给出了示例CONFIG_IDF_TARGETesp32s3 CONFIG_ESP_WIFI_CSI_ENABLEDy CONFIG_CSI_NODE_ID1 CONFIG_CSI_WIFI_SSIDwifi-densepose CONFIG_CSI_WIFI_PASSWORD CONFIG_CSI_TARGET_IP192.168.1.100 CONFIG_CSI_TARGET_PORT5005 CONFIG_EDGE_TIER2 CONFIG_WASM_MAX_MODULES4 CONFIG_WASM_VERIFY_SIGNATUREy同菜单下还有EDGE_VITAL_INTERVAL_MS默认 1000范围 100–10000、EDGE_TOP_K默认 8范围 1–32、EDGE_FALL_THRESH默认 15000范围 100–50000、EDGE_POWER_DUTY默认 100范围 10–100。注意NVS 里同名键一旦存在就覆盖这些编译默认运行期调参优先用 provision.py。验证配置是否生效文档给出的核对方式按顺序是串口日志确认 NVS 被读到。打开串口监视器115200python -m serial.tools.miniterm COM7 115200每次 NVS 覆盖生效nvs_config.c 会打印NVS override: edge_tier2、NVS override: fall_thresh15.000这样的行键名后跟运行时值。启动后还会有一行状态汇总文档示例固件 README Flushing 一节的期望输出I (1025) main: CSI streaming active - 192.168.1.100:5005 (edge_tier2, OTAready, WASMready)这是文档示例IP/端口和日志时间戳以你的实际配置为准但括号里的edge_tierN是判断 Tier 是否生效的直接依据。聚合端确认 vitals 流。Tier 2 生效后节点向--target-ip:5005默认 5005 端口按vital_int间隔发送 magic0xC5110002的 32 字节 vitals 包内含 presence、呼吸 BPM、心率、fall 标志位bit1和人数估计。聚合端能持续收到该 magic 的包说明 Tier 2 链路通了。QEMU 无硬件验证可选分支。没有板子时可用 Espressif QEMU fork mock CSI 跑同一条 DSP 路径固件 README 的 QEMU Testing 一节idf.py -D SDKCONFIG_DEFAULTSsdkconfig.defaults;sdkconfig.qemu build开启CONFIG_CSI_MOCK_ENABLED合成 flash 镜像后qemu-system-xtensa -machine esp32s3 -nographic运行。mock 场景 3 是 5 秒跌倒事件期望fall1scripts/validate_qemu_output.py会解析 UART 日志并按检查表含 “Fall detection: fall1 during fall scenario”判定退出码 0全部通过、1仅 WARN、2ERROR、3FATAL。CI 用的 14 组 NVS 配置含edge-tier1: edge_tier1, pres_thresh100, fall_thresh2000可用python scripts/generate_nvs_matrix.py生成。常见问题与限制以下内容来自 固件 README 的 Troubleshooting 表和 Caveats 小节都直接对应 Tier/参数调优场景vitals 读数不稳定属于 60 秒自适应阈值的学习期等阈值稳定后再判断参数是否合适不要在刚上电时调参。帧丢弃率高README 给出的处理是降低edge_tier减少 Core 1 负载或增大dwell_ms通道驻留时间即 Tier 不是免费的——Tier 2 的 DSP 跑在 Core 1节点过载时会先掉帧。幽灵存在检测强射频干扰下 presence 会误报且 60 秒环境校准过期也会误报空房间断电重启可重新校准。小尺寸板发热Tier 2 连续 WiFi 无休眠是持续大电流README 的 Thermal warning 指出硬币尺寸的克隆板ESP32-S3-Zero、SuperMini 类可能烫手部署初期要靠触摸检查温度DevKitC-1、XIAO 这类全尺寸板无此问题。NVS 越界值不报错超出接受范围如vital_win300、subk_count0的值会被nvs_config.c静默忽略回落到默认串口里也就不会出现对应的NVS override:行——调完参数看不到 override 日志时先检查数值是否落在上表范围内。下一步如果涉及多节点网格TDM 时隙用--tdm-slot/--tdm-total在同一脚本里一起写入见 user-guide 的 TDM slot assignment 小节Tier 2 之上还有 Tier 3WASM 可编程传感Alpha上传与签名校验的wasm_verify也走 NVS属于另一条独立路径本文不展开。【免费下载链接】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),仅供参考