跳转至

OmniGrasp Cup Transfer

最后更新:2026-07-24。

本页保存 2026-07-17 pretrained OmniGrasp cup-transfer 的历史 diagnostic。两阶段 object-control rollout 当时通过,但输入是旧 163-frame clip,后续 body-shape/reference contract 审计证明它不能参加当前 597-frame teacher architecture 排名;当前 strict run 的失败结果统一记录在 Physics Teacher Selection

结论摘要

本实验用完整的官方 pretrained OmniGrasp checkpoint,在项目自己的杯子 mesh、质量、VHACD、床头柜支撑和场景碰撞中进行了两阶段 deterministic 单环境测试。

在该历史协议内部,两个阶段都在零 fine-tuning 的情况下直接通过

阶段 目标 completion object position RMSE rotation mean contact filter
Stage 1 保持后垂直抬升 10 cm 100% 3.15 cm 8.67° 100%
Stage 2 真实 [56,219) object trajectory 100% 2.91 cm 65.62° 100%

这组结果阶段性支持:

  1. 项目杯子的几何、质量、碰撞体和支撑面本身是可抓取的;
  2. 原版 OmniGrasp observation、prior、48D latent residual 和 PULSE-X decoder 可以直接形成稳定抓取;
  3. 原版 checkpoint 也能直接跟随真实轨迹中约 41 cm 的最大垂直抬升和约 91 cm 的端点位移;
  4. 当前成功只证明旧协议内的 object manipulation / position tracking,不证明左手 HOI fidelity,也不证明 dense human motion tracking;
  5. Stage 2 的 rotation tracking 很差,当前结果只支持“弱 rotation、重 contact/lift/position”的目标定义。

由于 seed checkpoint 已经通过两阶段 gate,本次没有继续 PPO fine-tuning,避免破坏已经成功的预训练策略。

协议边界

该实验使用 20260711_hsi_generation_world_pose_fix/left/motion.npz[56,219) clip;它没有满足当前 canonical 597-frame motion 与统一 body-shape contract。保留它是为了证明 object-control signal 和定位 rotation/human-fidelity 边界,不用于声明 OmniGrasp 胜过其它 teacher。

1. 实验目标与因果拆分

本实验不再使用 fresh 48D actor,也不是 PHC-X residual 或 B1-HSI reference-encoder 实验,而是严格恢复完整 pretrained OmniGrasp:

  • 加载原始 actor、critic、GRU、normalizer、BPS reader 和网络结构;
  • 保持 prior_mu(self_obs)
  • 保持 object future observation;
  • 保持 BPS/object code;
  • 保持双手 fingertip-object relative vectors 和 finger contact force;
  • 保持 pregrasp、contact/lift-gated reward;
  • 仅替换成项目杯子、质量、VHACD、床头柜支撑及对应场景碰撞。

实验分为两个严格解耦的阶段:

Stage 1:Cup graspability transfer

  • source frame 56 初始化人和杯子;
  • 固定 frame-0 reset,不使用 random start;
  • object future 使用“保持—垂直抬升 10 cm—保持”的简单目标;
  • 只回答原版 OmniGrasp 能否适应项目杯子并形成稳定抓取。

Stage 2:真实轨迹 tracking

  • 使用 Stage 1 通过的同一 checkpoint;
  • object future 切换为真实 [56,219) object trajectory;
  • position tracking 为主要几何目标;
  • rotation 仅保留弱权重;
  • 回答稳定抓取后能否跟随真实 carry trajectory。

2. 环境和资产

项目 配置
canonical motion output/auto_experiments/20260711_hsi_generation_world_pose_fix/left/motion.npz
layout data/selected_SAGE10k/e2e_test_scenes/2cdc81db/layout_2cdc81db.json
dynamic object room_e8121c03_cupnightstanda_5578c869
support object room_e8121c03_nightstand_022f8481
cup mass 0.15 kg
support mode keep
physics actors cup + nightstand
visual scene full SAGE layout
evaluation GPU 1,1 env,deterministic

杯子使用真实 SAGE mesh 和对应 VHACD/collision;场景中的其他物体仅用于完整场景可视化,不参与本实验的物理交互。

使用的完整任务 checkpoint:

submodules/Omnigrasp/output/HumanoidIm/omnigrasp_neurips_grab/Humanoid.pth
  • checkpoint epoch:28000;
  • 包含原始 actor/critic/GRU、BPS reader、optimizer 和 policy normalizer;
  • policy running normalizer 连续输入维数:1207。

PULSE-X checkpoint:

submodules/Omnigrasp/output/HumanoidIm/pulse_x_omnigrasp/Humanoid.pth

3. 为什么 clip 改为 [56,219)

原先 [68,219) 从已经发生 mesh penetration 的状态开始,不适合作为 pre-grasp reset。对 SMPL-X MANO 左手和杯子闭合 mesh 的逐帧几何审计如下:

source frame hand-object surface min penetration
60 16.68 cm
61 12.78 cm
62 9.29 cm
63 6.09 cm
64 3.35 cm
65 1.07 cm 无,但安全余量很小
66 首次穿透;11/778 vertices,max depth 0.167 cm
67 32/778 vertices,max depth 0.197 cm
68 26/778 vertices,max depth 0.217 cm

物体在 source frame 68 出现很小的运动,frame 69 后单帧位移超过 0.1 mm。最终选择 frame 56 而不是“最晚无穿透帧”,是为了在首次 mesh contact(frame 66)前提供:

  • 10 个 reference frames;
  • 约 0.333 s 的策略反应时间;
  • 干净、无穿插的 approach 状态。

转换后的 OmniGrasp reference 中,contact/lift reward marker 分别位于:

  • contact:source frame 98,local frame 42;
  • lift:source frame 116,local frame 60。

这里的 contact marker 表示 reward 调度所使用的 reference 手部闭合/稳定接触时刻,不等同于“mesh 第一次几何相交”的 frame 66。

4. Pretrained actor 的 observation 与执行链路

本次 inference 没有输入 human reference,也没有显式的 active-hand label。

4.1 Runtime observation:1208D

block 维数 内容
self observation 778 root height;52 个 SMPL-X body 的 heading-local position、6D rotation、linear/angular velocity
object future 300 K=20 × 15D:reference-vs-current object position 3、rotation 6、linear velocity 3、angular velocity 3
current object pose 9 root-heading frame 下 position 3 + rotation 6
fingertip-object vectors 30 双手 10 个 fingertips × 3D
finger contact forces 90 双手 30 个 finger sensor bodies × 3D
env/object index 1 用于选择 object BPS code
总计 1208 778 + 429 + 1

其中 self observation 的维数为:

1 + 52 × (3 + 6 + 3 + 3) - 3 = 778

前 1207 个连续维度由 task checkpoint 的 running mean/variance 归一化。最后 1D index 选择 512D BPS object code,再经 z_reader_mlp 编码为 256D。因此 actor MLP 的有效输入为:

1207 continuous + 256 object embedding = 1463D

4.2 Latent residual 与 action

执行链路保持原版 OmniGrasp:

self_obs ──> frozen PULSE-X prior ──> prior_mu [48]

OmniGrasp actor(self/object obs, BPS) ──> delta_z [48]

z_exec = prior_mu + delta_z

frozen PULSE-X decoder(self_obs, z_exec) ──> action [153]

这里存在两个不同的 normalizer:

  1. 任务 checkpoint 的 1207D policy normalizer;
  2. PULSE-X prior/decoder 使用的 self-observation normalizer。

关键配置为:

has_im_obs = False
include_human_ref_in_actor = False
use_reference_encoder_base = False
use_hand_flag = False

因此它不是 human trajectory tracker。Human reference hand pose 只用于 pregrasp reward,不是 actor 的 observation。

5. Stage 1:简单抬升结果

简单目标保留 source frame 56 的初始杯子姿态,随后在 Z-up 方向用 30 帧垂直抬升 10 cm,再保持不动。Human initialization、hand target、object code 和 observation contract 均保持不变。

Stage 1 使用原版 reward 权重:

w_pos = 0.5
w_rot = 0.3

完整 pretrained checkpoint 在 fine-tuning 前的 deterministic seed eval 已通过:

指标 结果
episode frames / valid frames 163 / 162
completion 100%
reference max lift 10.00 cm
actual max lift 13.72 cm
actual final lift mean 12.94 cm
airborne contact ratio 83.33%
object position mean 2.78 cm
object position RMSE 3.15 cm
object position P95 5.45 cm
object rotation mean 8.67°
object rotation P95 15.69°
official contact filter ratio 100%
reward mean / sum 0.7771 / 125.88

参考端点位移为 10.00 cm,实际端点位移为 14.81 cm,最终端点误差为 6.49 cm。

这一步直接证明项目杯子是可被原版 OmniGrasp 稳定抓取并抬起的。由于 seed eval 已成功,没有执行 Stage 1 PPO fine-tuning。

6. Stage 2:真实 [56,219) 轨迹结果

Stage 2 使用同一个官方 checkpoint,直接切换为真实 object future trajectory。Seed eval 使用的 reward 权重为:

w_pos = 0.20
w_rot = 0.05

由于 checkpoint 在 deterministic eval 中被冻结,reward 权重不会改变该次 rollout action;它们只表达后续如需 fine-tuning 时的目标优先级。

指标 结果
episode frames / valid frames 163 / 162
completion 100%
object position mean 2.65 cm
object position RMSE 2.91 cm
object position P95 4.48 cm
final endpoint error 2.23 cm
reference endpoint displacement 90.78 cm
actual endpoint displacement 89.90 cm
reference max lift 40.94 cm
actual max lift 43.74 cm
actual final lift mean 35.63 cm
airborne contact ratio 82.72%
official contact filter ratio 100%
object rotation mean 65.62°
object rotation P95 176.37°
reward mean / sum 0.3797 / 61.51

原计划是在 Stage 2 中把 position weight 按 0.20 → 0.35 → 0.50 逐步增强,并保持 rotation weight 为 0.05。由于官方 checkpoint 的 seed eval 已经满足 completion、contact 和 position gates,该 curriculum 没有执行。

Stage 2 的结论是:原版 OmniGrasp 已能直接完成真实 object translation/carry,但不能据此声称 object orientation 已被正确跟踪。Rotation 改进应作为独立 ablation,而不是继续修改这次成功的 position/contact baseline。

7. 为什么 rollout 变成了双手抓取

原版 OmniGrasp 不限制左右手:

  • observation 同时输入双手 10 个 fingertip-object relative vectors;
  • observation 同时输入双手 30 个 finger contact-force vectors;
  • use_hand_flag=False,没有 left/right active-hand 条件;
  • grasp 后的 contact filter 接受任一只手靠近并接触物体;
  • 没有“非目标右手接触惩罚”。

Reference 在 contact local frame 42 的几何关系是:

20 cm 内 hand bodies 最近距离
left 16 1.61 cm
right 0 48.38 cm

但实际 rollout 中:

  • left-hand contact force active:147 frames;
  • right-hand contact force active:139 frames;
  • 双手到物体中心的最小距离分别约 5.78 cm 和 5.81 cm。

因此策略选择了它在当前 observation/reward 下认为更稳健的双手操作,即使 reference 是左手交互。这不是 checkpoint 加载错误,而是原版 task definition 本身没有约束 active hand。

同时,Stage 1/2 的 human body mean error 分别为 39.96 cm 和 26.01 cm(P95 分别为 90.63 cm 和 60.24 cm)。这些指标进一步说明本实验不是 human motion imitation:

  • 本次成功证明 object graspability 和 object position tracking;
  • 不证明左手单手抓取 fidelity;
  • 不证明项目 human trajectory 被准确执行。

如果后续目标是严格 left-only,应单独建立 right-hand contact penalty/mask 的 fine-tuning 对照。增加 2D hand flag 会改变 observation contract,不能再声称 checkpoint 原结构零修改加载。

8. 代码、数据与可视化产物

8.1 实现

内容 路径
cup-transfer runner tools/run_omnigrasp_cup_transfer.py
simple-lift reference utils/tracking_adapters/omnigrasp/reference.py
reference tests tests/test_omnigrasp_reference.py

验证结果:

15 passed in 0.37s
Python compile passed

8.2 Reference artifacts

output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/references/full.pkl
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/references/real_56_219.pkl
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/references/simple_lift_56_219.pkl

real_56_219.pklsimple_lift_56_219.pkl 均为 163 帧;前者保留真实 object trajectory,后者将 object trajectory 替换为保持、Z-up 抬升 10 cm、再保持。

8.3 Evaluation artifacts

Stage 1:

output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage1_cup_graspability/eval_pretrained/metrics.json
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage1_cup_graspability/eval_pretrained/rollout_trace.npz

Stage 2:

output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage2_real_trajectory/eval_seed/metrics.json
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage2_real_trajectory/eval_seed/rollout_trace.npz
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage2_real_trajectory/history.json

Stage 2 Isaac Sim trace replay:

output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage2_real_trajectory/visualization/tracked_front.mp4
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage2_real_trajectory/visualization/carry_frame_front.png
output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219/stage2_real_trajectory/visualization/carry_frame_right.png

视频为 640×640、30 FPS、163 frames、约 5.43 s。图中的蓝色杯子是 rollout 的实际物理对象,不是 reference ghost;renderer 使用完整 SAGE visual scene,物理对象仅为 cup 和 support。

8.4 复现命令

/home/user/anaconda3/envs/isaac-gym/bin/python tools/run_omnigrasp_cup_transfer.py \
  --mode all \
  --motion output/auto_experiments/20260711_hsi_generation_world_pose_fix/left/motion.npz \
  --layout-json data/selected_SAGE10k/e2e_test_scenes/2cdc81db/layout_2cdc81db.json \
  --out-dir output/auto_experiments/20260717_omnigrasp_cup_transfer_56_219 \
  --gpu 1

Runner 默认使用 [56,219)、10 cm simple lift 和 30 lift frames。由于当前两阶段 seed eval 已通过,runner 会在成功 gate 后直接结束,不会无意义地启动 PPO fine-tuning。

9. 对后续实验的影响

本实验已经排除了以下解释:

  • 杯子 mesh/VHACD 天生不可抓;
  • 0.15 kg 质量或床头柜支撑使任务不可解;
  • 必须先训练一个 fresh actor 才能适配项目 object trajectory;
  • 原版 OmniGrasp 无法处理该杯子的真实大范围平移轨迹。

下一步不应继续把“能否抓起”与“是否复现目标 human motion”混为同一问题。合理的实验顺序是:

  1. 将本结果固定为 OmniGrasp object-control upper baseline
  2. 独立评估 left-only/right-hand suppression,确认手别约束的代价;
  3. 将 PHC-X human tracking 与 OmniGrasp object manipulation 的切换或联合控制作为新的实验变量;
  4. object rotation refinement 单独做 ablation,避免破坏已验证的 contact/position 能力。