Skip to content

drake 后端 contact force 传感器输出世界系净力,与 contact-frame 契约不一致 #1471

Description

@TATP-233

问题

跨后端核查(#1468 修复的延伸)发现:drake 后端的 named <contact data="force"> 传感器由 drake_uni C++ 合成(drake_uni/src/drake_uni/compiled/drake_env_pool.cc:1052-1066, 1155-1159),输出是 per-body 累加的世界系净接触力contact_force() 语义为 f_Bc_W,世界系)。而 UniLab manager 层的接触门控契约(#1468 后)是 MuJoCo contact-frame 约定:第 0 列 = 接触法向。

对平地足底接触,drake 输出的法向分量落在第 2 列(world z),第 0 列是切向摩擦的 world-x 分量——列语义与 mujoco / mjwarp / motrix 不一致。

现状处理

正确归属层

按 backend isolation 原则,修复应在 drake_uni / drake backend 适配层:合成传感器时把世界系净力旋入接触坐标系(或对 geom-pair 接触用法向分量),使其满足 MuJoCo contact-frame 契约,然后在 go2 drake owner 重新启用 reward.contact

顺带记录的边界

mujoco / mjwarp 下 reduce="netforce" 的 contact force 传感器同样输出世界系力(mujoco-warp sensor.py:1896 的世界系旋转),当前仓库仅 sharpa_wave manipulation XML 使用 netforce,不经过步态接触门控;manager 层注释已声明该变体在契约之外。

来源:#1468 / PR #1470 跨后端核查。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions