任务图数字孪生 · 产品说明(PRD)
/workflow/fill-pen-holder/execution-graph 现有功能的完整梳理:目标、信息架构、功能清单、非功能要求与已知缺口。
1. 定位与目标#
目标用户与其核心任务
| 用户 | 核心任务 | 页面上对应的能力 |
|---|---|---|
| 策略研发者 | 定位失败位置、比较策略间的卡点差异 | 轨迹选择器 + 任务图投影 + 「经过 ×N」停滞徽章 |
| 基准 / 评测维护者 | 核对聚合数字与单条轨迹是否自洽 | 群体证据带(官方 150 条 P0–P4)与单轨迹分层显示 |
| 仿真 / 物理工程师 | 区分策略问题与物理问题 | 实跑面板的物理穿模检测;公差阶梯的最大穿透列 |
| 评审 / 决策者 | 在有限时间内建立可信判断 | 三路同步视频 + 锚点详情 + 证据边界声明 |
2. 信息架构#
Hero 与裁决卡之后,是六个编号区块(括号内为锚点 id):
- Hero + 本集裁决卡:任务标题、七条轨迹的一句话说明,右侧是当前选中轨迹的裁决(SUCCESS / FAIL / LIVE、轨迹角色、原生终局明细)。
- 01 规范任务图(
#digital-twin):任务定义、Episode path 与 Cohort Profile 分层显示。 - 02 三路同步证据(
#evidence):轨迹选择器、播放控制、step 滑杆与三路录制相机。 - 03 GPU 云端仿真(
#gpu-live):流水线 / 头部相机 / 双臂轨迹 / 物理侧写;评审副本不连接生产触发服务。 - 04 离线运行(
#offline-demos):5 个 RunBundle 的视频与任务图同轴回放。 - 05 公差扫描(
#tol-ladder):9 条运行的 8 / 4 / 2 mm 公差结果。 - 06 证据边界(
#evidence-boundary):明确能证明什么、不能证明什么。
3. 功能清单 · F1 轨迹选择器#
七条录制轨迹共用同一套播放、定位与孪生图;当页面上存在一次 fill_pen_holder 的实时运行时,会额外出现第八条 LIVE 轨迹并自动选中。
| 轨迹 | 角色 | 终局 | 规模 | 锚点来源 |
|---|---|---|---|---|
| ACT · seed 0 | 评测单元轨迹 | fail · score=0 · reward=0 | 1100 steps / 44.04 s | 12 锚点 · 三代理独立审阅(视觉判读) |
| Xiaomi_R1 · ep5 | 官方策略代表轨迹 | 原生 success | 604 steps / 24.2 s | 13 锚点 · 单代理抽样(每 ~50 帧) |
| Pi_05 · ep5 | 对照策略代表轨迹 | 原生 fail | 1100 steps / 44.04 s | 12 锚点 · 单代理抽样(每 100 帧) |
| Pi_05 · ep8 | 对照策略 · 10 条中唯一成功 | 原生 success · score=1.0 | 1029 steps / 41.16 s | 12 锚点 · 单代理抽样;终局取自 pod 上的 _result.json |
| XR1·trace s0e0 | 原生逐步真值 | score=0.4 · 3/4 入筒,第 4 支横卡筒口(TIP_DOWN=假) | 1100 steps | 谓词 / 里程碑逐步真值 |
| XR1·trace s0e2 | 原生逐步真值 | score=0.25 · 2/4 后开爪打翻笔筒(is_axis_up=假) | 1100 steps | 谓词 / 里程碑逐步真值 |
| XR1·trace s1e2 | 原生逐步真值 · 成功 | 原生 success · score=0.9 · 四次锁存 173/293/417/549 · FINAL_ACCEPTANCE@615 | 615 steps / 24.64 s | 谓词 / 里程碑逐步真值 |
切换轨迹会重置播放器与 step 游标。选择器带意图预取:指针悬停或键盘聚焦到某条轨迹时,延迟 220 ms 后预热它的三路视频——但仅在当前轨迹已完全缓冲且没有在播放时才真正发起请求,否则会与正在播放的视频抢带宽(实例公网出口观测上限约 10 Mbps)。
4. 功能清单 · F2 三路同步播放#
- 头部 / 左腕 / 右腕三路 640×480 视频由同一个播放引擎驱动,共享时间源;step 与秒数按 25 FPS 互转。
- 播放控制:播放 / 暂停(缓冲期间显示「缓冲中 · n/3 路就绪」并置
aria-busy)、倍速 0.5× / 1× / 2× / 4×、step 滑杆与秒数读数。 - 锚点详情面板里的主视角画面用 canvas 镜像 CAM 01,而不是再挂一个
<video>——后者会导致每条轨迹把 head.mp4 下载两次。 - 演示预载:一次性把本页 42 个视频 / 海报写入 Cache Storage,由 Service Worker(支持 Range 请求)接管
/evidence/*,已在无头 Chrome 断网条件下验证可完整播放。
5. 功能清单 · F3 任务图画布#
灰色骨架是 fill_pen_holder 的规范任务图(canonical task graph v6 简化布局),对所有轨迹保持不变。彩色轨迹随播放逐段生长。
轨迹段的五种状态
| 状态 | 颜色 | 语义 |
|---|---|---|
| 推进 progress | 绿 | 任务进展实际前进(含锁存、回正、归位) |
| 抓取 / 对准尝试 attempt | 蓝 | 正在尝试,尚未确证成功 |
| 回退 / 进展丢失 regress | 琥珀 | 已获得的进展被丢失(脱手、打翻、谓词翻假) |
| 停滞循环 stall | 橙 | 在同一处重复动作而无净进展 |
| 超时终局 terminal | 红 | 步数上限终止 |
节点的三种状态
- 已到达:描边点亮,可点击 / 回车跳转到该节点的首次到达 step。
- 未到达:虚线描边 + 「未到达」标签——本轨迹原生确证从未进入。
- 无逐步观测:本节点的状态不在谓词词表内(例如「具体抓的是哪一支笔」),因此既不能说到达也不能说未到达。这一区分只对原生真值轨迹有意义,也是页面最容易被忽略但最重要的诚实性设计。
- 同一节点被经过 ≥3 次时,会出现「经过 ×N」徽章——这是长程任务里停滞循环最直观的指纹。
其它画布元素
- 游标:沿当前段的路径按 step 比例移动(
getPointAtLength),实时显示STEP n,颜色取当前段状态色。 - 两种显示模式:「跟随播放生长」只画已走过的部分;「预览全程轨迹」把未来段以幽灵线预告。
- 群体证据带:画布右下角固定显示官方 150 条 rollout 在 P0–P4 里程碑的观测计数与逐级通过率,并在 SCORE_GATE / FINAL_ACCEPTANCE / SUCCESS 三个节点上以蓝色徽章标注群体数字,与单条轨迹分层。
6. 功能清单 · F4 锚点详情与时间轴#
右侧详情面板随游标更新,是「从图回到证据」的主要入口:
- 当前锚点状态点 + 轨迹名 +
STEP n+t = x.xx s+ 状态文案(实时运行时显示「实时 · 最近锚点 STEP n」)。 - CAM 01 同步画面(canvas 镜像;实时运行时改为头部相机最新帧)。
- 任务图节点映射:命中的节点标题 + 该锚点的阶段名 + 映射来源(原生事件映射 / 视觉判读映射)。
- 观察 OBSERVATION:该步实际观察到的状态描述。
- 诊断假设 HYPOTHESIS:可能的阻塞原因,以及「下一次验证」应当做什么——刻意与观察分开,避免把推测写成事实。
- 上一 / 下一锚点跳转;底部固定显示证据等级(原生真值 / 视觉判读)、置信度与该轨迹的标注说明。
下方是锚点时间轴:进度条 + 播放头,以及一条由关键帧缩略图组成的胶片带(step-0000.jpg 命名),点击任一帧直接定位。已到达的锚点标签会点亮。
7. 功能清单 · F5 GPU 实跑面板#
同一个组件同时被首页与本页引用(改一处两页同步)。它把「评测」变成页面上的一个可交互对象:
- 三个正交旋钮 + 口令触发:任务 / 平台 / 模型 / 步数上限;可选值由
catalog_v2在运行时下发,内置表仅作离线兜底。不兼容的组合(模型未安装在该平台)会被划掉并解释原因。 - 流水线可视化:阶段只有在真正开始之后才会出现——manifest 从第一次轮询就带着后续所有阶段的
pending,直接渲染会把整条流水线提前画完,甚至让一个还没跑的阶段显示为完成。过滤pending/skipped才是「图会生长」的原因。 - 仿真实时帧:生产版运行中推送头部相机帧;录制完成后回放进度可驱动任务图回退 / 前进。
- 双臂末端轨迹:x(左右伸展)–z(抬起高度)剖面,每 50 个 policy tick 一个点,实心点表示夹爪闭合;坐标窗口固定在 ARX X5 的可达范围,避免点流入时画面反复缩放。
- 物理穿模检测:正常 / 警告 / 异常 / 未采集 / 监测中,附事件数与最大穿透深度(毫米)。
- 互斥与容错:409 区分「本平台被另一次页面发起的评测占用」与「被非本页面发起的外部运行占用」;SSE 连续失败 4 次后停止重连并给出明确错误。
8. 功能清单 · F6 LIVE 轨迹编译器#
录制轨迹的线段是人工放置的;实时运行没有这个条件——它只提供 (step, k) 序列、原生谓词翻转与终局。编译器用一套镜像规范任务图的规则把这个流变成同样形状的线段:
- 第 r 轮(r = k+1)画成
抓取 → 对准 → 插入,随 step 推进逐段生长; - 第 k 个里程碑在第 s 步锁存 → 本轮收束到 SCORE_GATE,下一轮从 GRASP 重新开始(即 i+1 循环边);
- 终局成功 → FINAL_ACCEPTANCE → SUCCESS;终局失败 → 从当前位置直接连到 TIMEOUT_FAIL。
- 谓词事件被直接翻译成锚点:闭爪抓取、开爪释放、
target_i对准筒口、target_i入筒(XY ∧ 深度)、笔筒倾倒 / 回正。
9. 功能清单 · F7 离线实跑示例与公差阶梯#
离线实跑示例(5 条真实 RunBundle)
首张是 RoboFlex(RoboDojo-Pro · 柔性)T0 的第一个 RunBundle(2026-08-23,插充电器,8 mm 公差,400 步,物理穿模 0 事件,原生 score=0);其余四条为 2026-08-19 的 GPU 彩排(RunPod 4090 / Modal L40S × Xiaomi_Robotics_1 / π0.5)。视频进度直接换算成 policy tick 驱动任务图,拖动进度条时节点与双臂轨迹会回退或长出。
π0.5 输出关节空间动作,trace 里没有 ee_pose,画不出轨迹剖面——这类运行改用 Agent 事件时间轴替代,并在卡片里明确写出替代的原因。宁可换一种呈现,也不画一条来源不明的曲线。
公差阶梯扫描(9 条 run)
把 RoboFlex 插接任务的横向对准公差从 8 mm 收紧到 4 mm、2 mm(ANCHOR_FLEX_TOL_MM,每档 3 个 seed,共 9 条 anchor 实跑,全部 400/400 tick、物理侧写 ok、零 PhysX 错误),RoboDojo 后训练过的 Xiaomi_Robotics_1 在最宽的 8 mm 档也是 0/3——「公差—成功率」曲线是一条平零线。
图上可以展开 9 条运行明细表(run id / 公差 / seed / score / 成功 / 物理状态 / 最大穿透);每个点悬停显示其 run id 与穿透深度;右侧是最有说服力的一条代表性失败视频(最宽档 seed 0)。规则化基线(flex_expert 脚本专家)以虚线占位,上线后将在同图叠加对照线。
10. 非功能要求#
11. 证据边界(页面对外承诺)#
页面底部有一段固定的证据边界声明,它是这个产品最重要的部分之一。要点:
- 灰色骨架来自规范任务图 v6(简化布局),不是从某条轨迹反推出来的。
- 七条 GPU 仿真轨迹的证据等级不同:ACT 为 12 锚点三代理视觉审阅;Xiaomi ep5、Pi_05 ep5/ep8 为单代理抽样视觉标注(±25–50 帧);三条 XR1·trace 轨迹为逐步谓词 / 里程碑原生真值。
- 「夹爪开合」是抓取 / 释放的原生代理信号,不区分具体是哪一支笔。
- LIVE 轨迹只携带 policy-tick 进度、头部相机帧与流水线阶段;原生 success / score 以 RunBundle 为准。
- 右下角蓝色群体数字来自官方 150 条的 P0–P4 里程碑观测计数,与单条轨迹分层且不可互换。
- 页面确认失败位置和可观测路径;原因只作为可被下一次实验推翻的诊断假设。当前没有实体机器人或 Sim-to-Real 配对证据。
12. 已知缺口与下一步#
| 缺口 | 影响 | 建议动作 |
|---|---|---|
| 评审副本的 LIVE 触发已隔离 | 不能在副本直接启动生产 GPU 任务 | 正式开放前建立独立认证、配额、队列与运行后端 |
| 页面 UI 全中文 | 国际社区无法参与 | 抽取文案层,提供 zh/en 双语(本文档站已先行) |
| 触发口令为 window.prompt,无账号体系 | 无法开放公众实跑,无配额与排队可见性 | 引入令牌 / 配额 / 队列位置展示 |
| LIVE 只有头部相机 | 实时观感弱于录制轨迹 | 后端补三路推流或降采样多路 |
| 公差阶梯只有一条 VLA 曲线 | 结论缺少对照,说服力受限 | 补规则化基线 flex_expert 曲线 |
| 群体证据仅覆盖 fill_pen_holder | 无法回答跨任务的普遍性 | 把 P0–P4 契约推广到更多任务 |
| 示例数据以 TS 模块内联(离线示例数据文件约 1800 行) | 新增运行必须改代码并重新发布 | 改为从 RunBundle 索引拉取 |
文档修订 · 2026-08-26 · 文档源码位于 app/documents/;公开仓库链接待上线。