D3D-HOI Full20:HMR 高度、物体落地与 Physics 接触实验总结¶
本实验的逐 case 汇总表为
ground_physics_full20_metrics.csv,Gate5 ground-gap 诊断表为ground_alignment_gate5_metrics.csv。b001 的阶段性 acceptance 记录保存在../archive/2026-07_b001_shared_ground_acceptance.md。 本文是历史证据,不是当前 Physics 入口;当前正式评测、渲染和 Viser 只读取case.json + result.pt + common_rollout.npz,且没有旧 PHC pickle 恢复路径。
日期: 2026-07-21
范围: output/runs/d3dhoi_default 的 20 个 case、PHC-X passive-dynamic tracking、活动把手接触与地面/物体支持约束。
逐 case 表格: ground_physics_full20_metrics.csv
相关工作调研: HMR grounding 调研
相关工作证据矩阵: hmr_grounding_evidence.csv
2026-07-21 更正: 本文第 1.3、5、8.1 中曾把 category-aware
yaw_only + ground_support及其 Full20 近零 gap 结果写成已修复/可固定默认, 这是错误结论。该批结果仅保留为 rejected hard-constraint ablation,不能作为 新 Recon,也不能用于比较正确的 Recon 指标。正确 baseline 始终是full_so3 + full_xyz;ground 只能作为待验证的 soft evidence。新的根因分析见 Ground alignment 根因与方案。
1. 最终结论¶
-
HMR 的 foot/root-z 漂移真实存在,而且已经有必要修。 Full20 修正前平均 foot-min-z 动态范围为
5.174 cm;接触感知、时序正则的 z-only 修正后为2.547 cm。foot-z range 超过5 cm的 case 从9/20降为2/20。 -
但高度漂移不是 Full20 Physics 接触失败的主因。 修正前 foot-z range 与 Physics 活动把手表面距离的 Pearson/Spearman 相关仅为
-0.152/-0.146,没有预期的正相关;高度修正前后,passive Physics 质量通过数均为3/20。 -
此前声称“物体支持已修复”是不成立的。 近零 gap 来自强制
yaw_only + ground_support,它改变了原版 6D pose parameterization,属于错误 ablation。恢复 historical defaultfull_so3 + full_xyz后,Gate5 的真实平均 gap 为14.496 cm;soft weight30/100/300均没有有效候选。 -
Recon 到把手、Physics 不到把手的主要原因是 PHC tracking/controller 与物体状态误差,而不是 collider 缺失。 活动把手 contact region 到真实 collision mesh 的覆盖为
20/20,所有采样点均在1 cm内;表面距离 Full20 分解得到7个 human+object mixed、4个 human tracking、3个 object state、2个 bounded、2个 wrong-handle、2个 recon-not-at-region。 -
旧的“接触力成功”判据存在假阳性。 Isaac Gym GPU pipeline 只能提供每个刚体的合力,不能证明“这个指尖与这个把手 link”形成同一碰撞对。碰撞对隔离实验表明,旧 trace 中活动 link 的
13.93 N来自非目标人体部位;限制为右手末端指尖 × 活动link_0后该力变为 0。 -
已能制造短暂的真实指尖–活动把手接触,但尚未得到稳定的 Physics rollout。 最好的正常碰撞单环境 trace 有 16 个连续
distance<2 cm + 1–200 N的 contact-filter 帧;同一 trace 在碰撞对隔离下保留 9 个连续、身份可确认的指尖 ×link_0接触帧。重新在隔离环境中优化的 v6 最终单环境也只有 9 个连续有效帧,未达到 0.5 秒(15 帧)验收标准。
因此当前可以固定的是:human z-drift、Physics ground-mode 和接触测量接口已有明确口径;Recon object-ground 支持仍未解决;原始 PHC-X frozen tracker 也不能可靠复现这批 articulated HOI。 rejected hard/yaw ablation 不能再用于排除 reference preprocessing 问题。Recon 侧应先按新的 Gate5 诊断修正 object metric initialization/joint alignment;Physics 侧若要提高成功率,仍需要 HOI/contact-conditioned policy adaptation 或在最终单环境动力学上训练/筛选。
2. GVHMR 到底如何处理漂移¶
GVHMR 不是“每帧把脚最低点设为地面”。其网络输出 6 个静止关节置信度,对应左右 ankle、foot 和 wrist。非静态相机分支执行:
- 对当前 global SMPL 做 FK;
- 计算 6 个候选静止关节的逐帧 3D displacement;
- 只保留静止置信度为正的关节,并用 softmax 加权 displacement;
- 从预测 root displacement 中减去该静止关节 displacement;
- 对新 displacement 累加,得到连续的 root translation;
- 平滑两个水平轴,最后再做一次全局最低点 ground alignment。
静态相机分支不同:静止关节修正的竖直分量会被明确设为 0,只修水平漂移,再做一次常量地面对齐。因此不能笼统地说 GVHMR 的所有分支都会消除时变高度漂移。源码见 GVHMR postprocess.py。
本项目实现借用了“静止支撑点用于消除 root drift”的原则,但采用更保守的 z-only 版本:
- 从左右脚面顶点的速度、高度与连续性估计 planted confidence;
- 每帧只优化一个
delta_z(t); - 加入 correction fidelity、一阶速度和二阶加速度正则;
- 没有可信支撑的帧不施加地面目标;
- 默认
preserve_contact_median,只去除时变漂移,不改序列原有绝对高度锚点; - 不修改 pose、hand pose、root x/y 或 camera。
实现位于 pipeline/reconstruction/preprocess/human/root_z_alignment.py,默认配置位于 configs/methods/recon/d3dhoi_default.yaml。
3. 实验口径¶
3.1 Physics 质量门槛¶
当前 Full20 batch 的质量通过条件为:
- human global MPJPE
<=250 mm; - 每个 revolute/continuous joint 的 MAE
<=20 deg; - 每个 prismatic joint 的 MAE
<=2 cm。
这是 tracking 质量门槛,不等同于接触成功。
3.2 接触距离¶
旧实现比较指尖刚体原点和把手点,手指 capsule 有长度和半径,因而会把真实接触算远,也可能把邻近但未接触算近。新实现使用:
SMPL-X case-local MJCF 中末端手指 capsule 表面,到活动把手采样点云的最小距离。
离线重算与 PHC 运行时输出的 p50 差约 2.4e-7 m,说明两条路径已使用同一几何口径。实现位于:
pipeline/physics/contact.pysubmodules/PHC/phc/env/tasks/humanoid_im_passive_object.py
3.3 活动把手¶
多门冰箱可能有多个几何上合法的把手,但当前 sequence 只有一个 active joint/link。现在 Recon contact sampler、Physics reference 和 runtime reward 都优先使用经过 active-joint 过滤后的 per-point link names,不再回退到原始 contact asset 的所有 link。
3.4 GPU 接触对限制¶
get_env_rigid_contacts() 在当前 Isaac Gym GPU pipeline 不可用。切换 CPU pipeline 虽可读取 exact pair,但会改变动力学:同一 targeted case 的 human MPJPE 从 GPU 的约 48 mm 恶化到约 1424 mm。因此 CPU contact pair 不能用于解释 GPU rollout。
本实验改用 GPU 碰撞 filter 做因果隔离:只允许指定末端指尖与活动 handle link 互相碰撞。这样观察到的目标 link 力才可归因于允许的碰撞对。
4. 高度与地面实验¶
4.1 Root-z 离线消融¶
| 指标 | 修正前 | z-only 修正后 |
|---|---|---|
Full20 平均 foot |z| p95 |
6.326 cm | 1.609 cm |
| Full20 平均 foot-z range | 5.174 cm | 2.547 cm |
foot-z range >5 cm |
9/20 | 2/20 |
plane mismatch >5 cm |
13/20 | 4/20 |
| 最大 correction p95 | — | 11.809 cm |
| 最大单步 correction p95 | — | 0.444 cm |
输出:
output/reports/d3dhoi_full20_root_z_alignment_ablation/metrics.{json,csv}output/reports/d3dhoi_full20_root_z_alignment_ablation/root_z_alignment_curves.pngoutput/reports/d3dhoi_full20_root_z_alignment_drift_only/metrics.{json,csv}
preserve_contact_median 版本保留原绝对锚点,仍把平均 range 降到 2.547 cm,但绝对 |z| p95 仅从 6.326 降到 5.270 cm;这正是“去漂移”和“放到 z=0”两个操作应分开的证据。
4.2 高度是否造成 Physics 失败¶
| 高度变量 vs Physics 活动把手 p50 gap | Pearson | Spearman |
|---|---|---|
修正前 foot |z| p95 |
-0.270 | -0.382 |
| 修正前 foot-z range | -0.152 | -0.146 |
修正后 foot |z| p95 |
-0.097 | -0.086 |
| 修正后 foot-z range | -0.267 | -0.244 |
样本只有 20 个,不能据此证明高度与 tracking 完全独立;但数据明确不支持“高度漂移越大,Physics 越碰不到把手”这一主因假设。更直接地,root-z/plane 修正前后的 Physics 质量通过数都是 3/20。
4.3 Ground 的定义¶
旧 loader 使用“整段所有 human vertices 的全局最小 z”作为地面,一个异常穿地帧即可移动整段 plane。现在优先读取 contact-aware support surface;legacy result 则用相同的稳健 planted-foot 估计,最后才回退到 per-frame foot minimum 的 10% quantile。
正式 Physics 固定 physics_ground_mode=source,保留 Recon world plane。zero
坐标系消融会改变 PHC/OMOMO 的输入而不能与 CoDA/common renderer 共用任务,已从正式入口移除。
5. 物体落地、倾斜与 microwave(rejected ablation,仅留档)¶
以下 category policy 已从运行入口移除,不能再作为默认 Recon:
- floor-supported:dishwasher、oven、refrigerator、storage furniture、trashcan、washing machine;使用
yaw_only + ground_support; - tabletop/upright:microwave、laptop;使用
yaw_only + full_xyz。
该设计虽然避免 microwave 被吸到地面,但仍把 floor-supported object 限制为
yaw_only 并 hard-align 到 ground,因而不能证明在保持原版 6D Recon 的前提下解决
了 ground gap。
2026-07-21 的下表只描述 rejected hard/yaw ablation,不是可发布 Recon:
| 指标 | 结果 |
|---|---|
| floor-supported cases | 16 |
| support pass | 20/20 |
| upright pass | 20/20 |
| floor case 最大 support-gap p95 | 4.28e-6 cm |
| 最大 object tilt p95 | 0 deg |
| microwave 距地高度范围 | 72.75–96.90 cm |
输出位于 output/reports/d3dhoi_full20_object_support_regression_20260721/。
b004-0032 microwave/human-fall¶
以下数值同样来自 rejected ablation,只能用于当时的 Physics 诊断,不能用于声称 Recon object pose 已被正确修复:
- object 现在保持 upright,tilt p95 为
0 deg; - microwave support surface 仍在地面上方约
96.90 cm,没有错误落地; - ground offset 从旧诊断的
-8.47 cm改为稳健 plane 的-2.27 cm; - Recon 活动把手表面 p50 距离为
0.20 cm,说明输入 HOI 在把手处; - 但 Physics human MPJPE 为
1469.8 mm,活动把手表面 p50 距离为236.0 cm。
该 ablation 内的 human collapse 诊断仍然成立,但不能据此宣称 historical-default Recon 的物体倾斜/地面问题已经修复。
6. Full20 接触分解¶
6.1 汇总¶
| 指标 | 结果 |
|---|---|
Recon 到配置 contact region <=5 cm |
18/20 |
| Recon 与活动 link 一致 | 16/20 |
默认 Physics 活动把手 surface p50 <=2 cm |
0/20 |
| passive Physics 质量通过 | 3/20 |
| collision coverage 在 1 cm 内 | 20/20 |
失败类别:
| 类别 | case 数 |
|---|---|
| human + object tracking 混合误差 | 7 |
| human tracking 接触丢失 | 4 |
| object state 接触丢失 | 3 |
| bounded tracking/contact error | 2 |
| Recon 选错 handle link | 2 |
| Recon 本身不在 contact region | 2 |
逐 case 数值见配套 CSV;详细分解位于 output/reports/d3dhoi_full20_contact_region_tracking_surface_active_v2/。
6.2 Wrong-handle 修复¶
active-joint link filtering 的两个 targeted Recon 消融:
| case | 默认 Recon 活动 link p50 | 修复后 | 修复后 Physics p50 |
|---|---|---|---|
| b005-0024 | 20.85 cm | 0.50 cm | 42.68 cm |
| b005-0125 | 40.08 cm | 2.27 cm | 31.48 cm |
修复后两个 Recon 都与活动 link_0 一致,但 Physics 仍未到 2 cm。这说明 wrong-handle 是真实的 Recon bug,却不是 frozen Physics tracker 的充分解释。
输出位于 output/reports/d3dhoi_wrong_handle_active_link_recon_surface_v2/。
6.3 PHC primitive 消融¶
| PHC-X column | Full20 质量通过 | human MPJPE median | 结论 |
|---|---|---|---|
| prim0 | 3/20 | — | 官方/默认列,保留默认 |
| prim1 | 4/20 | 740.8 mm | 小幅计数增加,但整体仍大量 collapse |
| prim2 | 5/20 | 285.8 mm | MPJPE 较好,但 contact-region 改善不一致 |
单纯切 column 不能稳定修复同一批 case,因此没有把 prim1/2 固定为新默认。
7. b005-0125 残差接触因果实验¶
该 case 被选作 targeted experiment,因为 human tracking 本身较好,默认 Physics 质量通过,但 Recon 默认选错 handle link,适合把几何、接触身份和 controller action 分开。
7.1 旧判据为何是假阳性¶
- 旧刚体原点最小距离:
6.16 cm; - capsule surface 最小距离:
3.93 cm,没有达到 2 cm; - 活动
link_0在 frame 45 有13.93 N; - 只允许右末端指尖 × 活动
link_0后,该目标力变为 0。
所以“手上有力 + 目标 link 上有力”是两个独立事件,不能证明它们来自同一碰撞对。
7.2 Surface-aware 优化结果¶
| 实验 | 结果 | 判断 |
|---|---|---|
| broad surface objective | 最小距离约 4.20 cm,0 target force,MPJPE 44.2 mm | 没接触 |
| focused high-contact objective | 11 帧 <2 cm,6 个 force 帧,target peak 214 N,MPJPE 48.1 mm |
有接触但力越界/不持续 |
| focused trace + pair isolation | 6 个右末端指尖 × link_0 force 帧,peak 194.9 N,link_1=0 |
接触身份成立 |
| cold 80-frame sustained | 仅 1 个接触帧 | 退化 |
| warm/refine v5 | 能生成约 13–17 个 contact-filter 帧,但 device/batch 回放不同 | 不稳健 |
| v5 notch a10,正常碰撞 | 16 个连续 distance+force 帧,target peak 181.0 N,hand peak 197.9 N,MPJPE 48.7 mm |
最好的普通单环境候选 |
| 同一 a10,pair isolation | 9 个连续、可归因于指尖 × link_0 的帧,target peak 93.5 N,link_1=0 |
身份成立但不足 15 帧 |
| pair-isolated warm optimize v6 | optimizer batch 约 17 个 contact-filter 帧;最终单环境最长 9 帧,MPJPE 49.1 mm | 仍不满足验收 |
7.3 为什么不把 a10/v6 宣布为成功¶
验收要求至少连续 0.5 s = 15 frames,同时满足:
- intended contact label active;
- capsule surface distance
<2 cm; - fingertip 和 target force 均在
1–200 N; - object joint motion方向正确;
- 无严重 penetration 与错误碰撞证据。
a10 在普通环境达到 16 个连续 distance+force 帧,但 pair isolation 后只剩 9 帧;v6 最终单环境同样只有 9 帧。并且当前 GPU pipeline 不提供 penetration depth/exact pair diagnostics,严格 validator 不允许用缺失证据推断成功。因此这些 trace 只证明“残差动作能短暂制造正确接触”,不能证明完整 HOI rollout 成功。
8. 固定下来的实现¶
8.1 可以作为默认的部分¶
- contact-aware、时序正则、
preserve_contact_median的 root-z correction; - 稳健 support surface ground,不再用全序列单点最小值;
physics_ground_mode=source;- Recon object pose 保持 historical default
full_so3 + full_xyz;category-awareyaw_only + ground_support不作为默认; - SMPL-X case-local
humanoid.xml,固定使用 sequence 第一帧 beta identity; - 所有 tracking/optimizer/rollout 路径都使用同一个 case-local MJCF;
- active-link contact region filtering;
- capsule-surface distance 和 2 cm strict contact gate;
1–200 N双边 force gate;- optional fingertip-handle collision-pair isolation;
- CMA warm-start 和完整 causal prefix;
8.2 仍保持实验状态¶
- residual trace/contact reward optimization;
- prim1/prim2 作为默认 controller;
- GPU exact contact-pair validator;
- 任何把短暂 contact-filter 帧直接当成 Physics success 的逻辑。
9. 历史诊断¶
Full20 root-z、support 和 contact-coverage 的一次性诊断已经完成并删除脚本;它们不是
Physics Studio 的运行时或回归接口。当前 shared-ground 检查使用
scripts/experiments/validate_shared_ground_case.py,Studio 则只消费完成重建写出的
case.json + result.pt。
10. 后续最值得做的工作¶
当前 frozen PHC-X + 上肢 spline residual 的收益已经触顶。若继续推进,优先级应是:
- 在与最终回放完全相同的单环境动力学上做 policy adaptation,或对候选做单环境复验后再选择;
- 把连续接触、活动 joint progress 和错误 link/body contact 作为 trajectory-level objective,而不是只平均逐帧 reward;
- 使用能在 GPU pipeline 中提供接触 pair/penetration 的 simulator 或 instrumentation;
- 对 mixed/human-collapse case 训练 HOI-conditioned controller,而不是继续调 ground offset;
- Recon 侧继续处理剩余 2 个非 contact-region case,并把 active-link filtering 扩展到完整数据集。
这与相关工作的总体规律一致:InterAct/PHC 风格的 constant height calibration 只能修地面锚点;GVHMR/WHAM 风格的静止/接触约束能修 trajectory;但 articulated HOI 的稳定物理执行最终仍需要与物体和接触条件匹配的 controller。