Files
worldmodel/plans/PRISM/12_risks.md
T

359 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chapter 12 — 风险与对策
> 本章目标:把 PRISM 全系统在**采集 / 部署 / 运行 / 长期维护**四个阶段可能出问题的地方系统化列出,并给出每项的**缓解措施 / 监控指标 / 应急预案**。
---
## 12.1 风险分类总览
```mermaid
flowchart LR
ROOT["<b>PRISM 风险地图</b>"]
R1["<b>R1 数据风险</b><br/>扫描漏点<br/>坐标系错<br/>镜面区无效"]
R2["<b>R2 算法风险</b><br/>重定位失败<br/>漂移<br/>检测错配"]
R3["<b>R3 工程风险</b><br/>资源不足<br/>依赖断裂<br/>并发竞争"]
R4["<b>R4 物理环境风险</b><br/>高反光<br/>动态人<br/>突发遮挡"]
R5["<b>R5 数据安全风险</b><br/>客人隐私<br/>数据出境<br/>AGPL 传染"]
R6["<b>R6 长期维护风险</b><br/>家具频繁变化<br/>LTM 老化<br/>人员流失"]
ROOT --> R1 & R2 & R3 & R4 & R5 & R6
style ROOT fill:#fff7d6,stroke:#c97a00,stroke-width:2px
style R1 fill:#e3f2fd,stroke:#1565c0
style R2 fill:#fde2e2,stroke:#a33
style R3 fill:#d4f0d4,stroke:#2e7d32
style R4 fill:#fff1c1,stroke:#a87a00
style R5 fill:#f5e1ff,stroke:#7b1fa2
style R6 fill:#d8e4ff,stroke:#1565c0
```
每个风险给出:**概率 × 影响 → 等级 → 对策 → 监控指标**。
---
## 12.2 R1 数据风险
### R1.1 iPhone 扫描漏点 / 几何不闭合
| 项 | 内容 |
|----|------|
| **概率** | 中(每次扫描 30% 概率有漏点) |
| **影响** | 中(机器人可能撞到墙或穿墙规划) |
| **等级** | 🟡 中 |
| **触发条件** | 弱纹理大白墙、强光下、扫描速度过快 |
| **对策** | ① 采集 SOP[`04_pipeline_A_iphone_offline.md`](04_pipeline_A_iphone_offline.md) §4.2.2<br>② 多次扫描融合<br>③ 后期人工补点(MeshLab |
| **监控** | `prism qa` 检查每房间是否闭合 polygon |
| **应急** | 立刻补扫;机器人在该区域加 2D LiDAR 兜底 |
### R1.2 坐标系不一致(iPhone vs ZED `map` 帧)
| 项 | 内容 |
|----|------|
| **概率** | 高(如果不放 ArUco 几乎必失败) |
| **影响** | 致命(机器人位姿完全错) |
| **等级** | 🔴 高 |
| **对策** | ① 强制约定 ArUco 公共原点([`05_pipeline_B_relocalization.md`](05_pipeline_B_relocalization.md) §5.9<br>② 重力对齐双校验 |
| **监控** | ingest 时若没检到 ArUco 直接报错退出(fail fast |
| **应急** | 不允许部署没有 ArUco 的 LTM |
### R1.3 镜面 / 玻璃区域几何错乱
| 项 | 内容 |
|----|------|
| **概率** | 高(任何卫生间/玻璃幕墙都有) |
| **影响** | 中(局部 mesh 坏 + 重定位失败) |
| **等级** | 🟡 中 |
| **对策** | ① iPhone 扫描时人工标镜面 → `no_update_zone` mask<br>② 后期跑反射检测(偏振相机或 RGB 反射启发式)补打<br>③ TSDF Worker 在该区域 weight=0 |
| **监控** | 每天巡逻一次镜面区,检查 TSDF noise level |
| **应急** | 卫生间默认整间标 no_update,宁可粗也不污染 |
---
## 12.3 R2 算法风险
### R2.1 重定位失败(特别是冷启动)
| 项 | 内容 |
|----|------|
| **概率** | 低(< 5%,但出现就阻塞所有任务) |
| **影响** | 高(机器人不能工作) |
| **等级** | 🔴 高 |
| **触发** | 强光直射、视野遮挡、相似房间(连号客房) |
| **对策** | ① CLIP + DINOv2 双 backbone 投票<br>② 多帧投票(5 帧)<br>③ ArUco 兜底(房间门口贴)<br>④ 遥控人工"我在这"按钮 |
| **监控** | `prism eval reloc` 每日跑;fitness 滑动均值 < 0.7 报警 |
| **应急** | 启动 ArUco 兜底;通知运维 |
### R2.2 VIO 长时漂移
| 项 | 内容 |
|----|------|
| **概率** | 高(必发生) |
| **影响** | 中(位姿误差累积,但 anchor 校正可吸收) |
| **等级** | 🟡 中 |
| **对策** | ① 每见到 anchor 触发 ICP 校正<br>② 每 5 min 主动重定位健康检查<br>③ 漂移估计 > 50 cm 强制 reloc |
| **监控** | drift_estimate 时间序列;anchor 命中间隔 |
| **应急** | 触发完整重定位 |
### R2.3 检测错配(YOLO 把椅子识成 sofa)
| 项 | 内容 |
|----|------|
| **概率** | 中(开放词表模型常见) |
| **影响** | 低(单次 → confidence 低 → 不会污染 LTM |
| **等级** | 🟢 低 |
| **对策** | ① CLIP-rerank 二次验证<br>② Consolidate 时的高门槛(min_obs / min_views<br>③ 跨房间一致性检查 |
| **监控** | delta confirm 率(应在 1030% |
| **应急** | 暂停 detector,先查模型版本 |
### R2.4 差异检测假阳性(沙发被坐了不是被搬走)
| 项 | 内容 |
|----|------|
| **概率** | 中(人活动时常触发) |
| **影响** | 低(不立即改 LTM |
| **等级** | 🟢 低 |
| **对策** | ① 隐私过滤(检到 person 跳过该帧)<br>② min_obs ≥ 10、min_span_s ≥ 600<br>③ iPhone 高 conf 节点门槛 1.5x |
| **监控** | delta reject 率 > 70% 反而正常(说明过滤起效) |
---
## 12.4 R3 工程风险
### R3.1 Jetson 资源不足
| 项 | 内容 |
|----|------|
| **概率** | 中 |
| **影响** | 高(节点掉帧 / 崩溃) |
| **等级** | 🔴 高 |
| **对策** | ① TensorRT FP16/INT8[`10_tech_stack.md`](10_tech_stack.md) §10.6<br>② Worker 频率自适应(移动时高,静止时低)<br>③ 选 Orin AGX 64 GB 而非 32 GB |
| **监控** | `tegrastats` 实时;任一 worker 延迟 > 2× 目标即降级 |
| **应急** | 优先停 ChangeDetector 与 3DGSYOLO 类别动态裁剪 |
### R3.2 依赖版本断裂(CUDA / PyTorch / Open3D
| 项 | 内容 |
|----|------|
| **概率** | 高(每次升级都可能) |
| **影响** | 中(不能跑) |
| **等级** | 🟡 中 |
| **对策** | ① Docker 固化版本<br>② `pyproject.toml` 钉死 minor 版本<br>③ CI 跑 nightly 跨版本 smoke test |
| **监控** | CI badge 红即拒绝合并 |
### R3.3 并发竞争(在线感知 ↔ Consolidation
| 项 | 内容 |
|----|------|
| **概率** | 中(每次巩固) |
| **影响** | 中(可能数据丢失) |
| **等级** | 🟡 中 |
| **对策** | ① 巩固开始前调 `set_readonly(true)`;感知此期间只能写 delta<br>② staging 写完才原子切换<br>③ 文件锁 + 进程级互斥 |
| **监控** | 巩固日志中的 lock 等待时间 |
### R3.4 磁盘/IO 瓶颈
| 项 | 内容 |
|----|------|
| **概率** | 低 |
| **影响** | 中(关键帧丢) |
| **等级** | 🟢 低 |
| **对策** | ① SSD 而非 eMMC<br>② keyframes 用环形写(满了覆盖)<br>③ 巩固时压缩老 snapshot |
| **监控** | 磁盘空闲 < 20% 报警 |
---
## 12.5 R4 物理环境风险
### R4.1 高反光(卫生间镜面、玻璃幕墙)
参见 R1.3。再加一条:
| 对策 | 在 LTM 中给整间卫生间标 `category=high_reflection`,机器人路径规划时绕远 |
### R4.2 动态人 / 宠物
| 项 | 内容 |
|----|------|
| **概率** | 高(酒店满人) |
| **影响** | 中 |
| **等级** | 🟡 中 |
| **对策** | ① YOLO 检 `person` → 该帧跳过语义写入(保留几何用于避障)<br>② Avoidance 优先;Nav stack 与 PRISM 解耦<br>③ 跟随人时不写 delta |
| **监控** | 每小时 person-frame 比率,超 50% 触发"高密度模式" |
### R4.3 突发遮挡(清洁车、行李堆)
| 对策 | ① 临时遮挡 < 30 s 不写 delta<br>② Avoidance 短期记忆(local OctoMap 持续 30 s |
### R4.4 极端光照(开灯/关灯切换)
| 对策 | ① ZED Auto Exposure<br>② 关灯时 fallback 到深度 + 几何重定位(CLIP 退化)<br>③ Anchor ICP 不依赖光照 |
---
## 12.6 R5 数据安全风险
### R5.1 客人隐私(人脸 / 行李 / 身份信息)
| 项 | 内容 |
|----|------|
| **概率** | 必然 |
| **影响** | 高(法律与商业) |
| **等级** | 🔴 高 |
| **对策** | ① YOLO 检 `person/face/luggage` → 像素级模糊或丢弃<br>② RGB 关键帧默认本地存储,不上传云<br>③ Snapshot 加密<br>④ 30 天后自动删除 stm/keyframes |
| **监控** | 每周抽样 100 张关键帧人工检查 |
| **应急** | 客人投诉立即下机检查 |
### R5.2 数据出境(GPT-4o
| 对策 | 国内场景全栈本地化:Qwen2.5-VL + BGE-M3 + 本地 Cypher |
### R5.3 LICENSE 传染(YOLO AGPL
| 对策 | ① 商用购 Ultralytics 商业 license;② 或换 PaddleDetection / NanoDet |
---
## 12.7 R6 长期维护风险
### R6.1 家具频繁被移动
| 项 | 内容 |
|----|------|
| **概率** | 高(每天清洁) |
| **影响** | 中 |
| **等级** | 🟡 中 |
| **对策** | ① 给易移动家具打 `mobile=true`,不作 anchor<br>② Consolidate 时这些节点门槛更低<br>③ delta 中关于 mobile 的事件不报警 |
### R6.2 LTM 老化(与现实偏离)
| 项 | 内容 |
|----|------|
| **概率** | 必然(30 天后偏差明显) |
| **影响** | 中 |
| **等级** | 🟡 中 |
| **对策** | ① 月度 deep consolidation<br>② anchor 失活率超 30% 自动提示重扫<br>③ 季度人工重扫一次 |
| **监控** | `prism health` 给出 LTM 健康分(0100 |
### R6.3 团队人员流失 / 文档失同步
| 对策 | ① 本系列文档;② Schema 版本号 + migrate 函数;③ 每月 release notes |
### R6.4 错误巩固导致 LTM 损坏
| 项 | 内容 |
|----|------|
| **概率** | 低 |
| **影响** | 致命 |
| **等级** | 🔴 高(罕见但毁灭) |
| **对策** | ① 巩固后 sanity_relocalize 自动校验<br>② 失败回滚(保留 `.prev`<br>③ snapshots 保留 6 份 |
| **监控** | 每次巩固后 health 分变化 ≤ -5 即拒绝 |
| **应急** | 自动回滚 + 人工调查 |
---
## 12.8 风险矩阵(影响 × 概率)
```mermaid
quadrantChart
title 风险矩阵 影响 x 概率
x-axis 低影响 --> 高影响
y-axis 低概率 --> 高概率
quadrant-1 高概率高影响 必须立即处理
quadrant-2 高概率低影响 容忍但要监控
quadrant-3 低概率低影响 可接受
quadrant-4 低概率高影响 建预案
R1-2 ArUco 公共原点: [0.88, 0.85]
R5-1 客人隐私: [0.85, 0.82]
R2-2 漂移: [0.65, 0.82]
R6-1 家具频繁变化: [0.62, 0.80]
R4-4 高反光: [0.20, 0.85]
R3-1 Jetson 资源不足: [0.78, 0.55]
R6-4 巩固回滚: [0.75, 0.52]
R1-1 扫描漏点: [0.55, 0.50]
R1-3 坐标系错: [0.58, 0.48]
R3-3 依赖断裂: [0.55, 0.45]
R4-2 动态人: [0.52, 0.42]
R2-4 检测错配: [0.22, 0.55]
R2-1 重定位失败: [0.82, 0.20]
R5-2 数据出境: [0.78, 0.18]
R6-2 LTM 老化: [0.55, 0.22]
R3-4 并发竞争: [0.20, 0.22]
```
🔴 高风险高影响项必须在 8 周原型期前解决:
- R1.2 ArUco 公共原点(W1 必做)
- R2.1 重定位双 backboneW3-W4
- R3.1 Jetson 资源监控(W6
- R5.1 隐私过滤(W5
- R6.4 巩固回滚(W7
---
## 12.9 风险登记表(Risk Register
| ID | 风险 | 概率 | 影响 | 等级 | Owner | 状态 | 触发指标 |
|----|------|------|------|------|-------|------|----------|
| R1.1 | 漏点 | 中 | 中 | 🟡 | iOS dev | open | polygon 闭合率 |
| R1.2 | 坐标系错 | 高 | 致命 | 🔴 | iOS dev | mitigated by ArUco | ArUco 未检出 |
| R1.3 | 镜面 | 高 | 中 | 🟡 | ML | open | TSDF 噪声 |
| R2.1 | reloc 失败 | 低 | 高 | 🔴 | ML | open | fitness 滑均 |
| R2.2 | VIO 漂 | 高 | 中 | 🟡 | Robotics | mitigated by anchor | drift_estimate |
| R2.3 | 误检 | 中 | 低 | 🟢 | ML | open | delta confirm 率 |
| R3.1 | 资源不足 | 中 | 高 | 🔴 | System | mitigated by Orin64 | tegrastats |
| R3.3 | 竞争 | 中 | 中 | 🟡 | System | mitigated by lock | lock wait |
| R5.1 | 隐私 | 必然 | 高 | 🔴 | System+ML | mitigated | 抽样审查 |
| R6.4 | 错误巩固 | 低 | 致命 | 🔴 | System | mitigated by rollback | health Δ |
| ... | | | | | | | |
→ 用 Notion / 飞书表格维护,每周 review。
---
## 12.10 应急联动手册(Runbook
| 报警 | 自动动作 | 人工动作 | 升级 |
|------|----------|----------|------|
| reloc 失败 ≥ 3 次 | 启用 ArUco 兜底 | 检查 RGB 是否过曝 | 1 h 内修不好 → 下机 |
| drift > 50 cm | 强制 reloc | 看 anchor 是否被搬走 | 24 h 后重扫 |
| delta confirm < 1% 持续 1 周 | 警告 | 检查检测器 / 模型版本 | 升级 ML 工程师 |
| consolidate 失败回滚 | 自动 + 邮件 | 查 sanity 报告 | 24 h 内查清 |
| 隐私抽检发现人脸未模糊 | 全量下机 | 修复后回归 | 法务介入 |
| LTM 健康分 < 60 | 提示重扫 | 安排现场 | — |
---
## 12.11 与 [`09_roadmap.md`](09_roadmap.md) 的 Gate 联动
每个 Gate 必须扫一遍本章 🔴 高风险项:
| Gate | 必查项 |
|------|--------|
| W2 | R1.2 ArUco 实装 |
| W4 | R2.1 reloc 成功率达标 |
| W6 | R3.1 资源 + R5.1 隐私 |
| W7 | R6.4 回滚机制 |
| W8 | 所有 🔴 通过 |
| M4 | 72 h 压测覆盖所有 R |
---
## 12.12 本章小结
| 关键 | 一句话 |
|------|--------|
| **致命风险** | 坐标系错 + 隐私 + 错误巩固 |
| **常见但可控** | 漂移、误检、家具搬动 |
| **应急核心** | 自动回滚 + ArUco 兜底 + 隐私一键下机 |
| **维护核心** | 月度巩固 + 季度重扫 + Risk Register 每周 review |
读完本章你应能:
- ✅ 给老板列出"PRISM 上线前必须解决的 5 件事"
- ✅ 设计 SLO / SLI 与报警阈值
- ✅ 写出 Runbook 给运维
下一章 [`13_evaluation.md`](13_evaluation.md) 给出系统的客观评测指标和数据集。
---
**章节版本**v1.0
**估计阅读时间**15 分钟
**关键收获**:把"可能出问题的事"变成"已被监控、已被准备好回滚的事"