踩坑GitHub google-deepmind/mujoco昨天
MuJoCo mjc_multicontact圆柱接触数依赖GJK单纯形顶点顺序
本文由 AI 根据公开内容整理,可能有误,请以原文为准:mjc_multicontact puts a cylinder's edge at the first simplex vertex's angle, so the contacts depend on the order of GJK/EPA's simplex vertices(GitHub google-deepmind/mujoco #3752)
状态:有绕过办法
问题
在MuJoCo中,当GJK/EPA终止于圆柱边缘时,mjc_multicontact依据单纯形首个顶点角度恢复边缘法向。因圆柱支撑索引仅区分上下底面,同底面不同角度的顶点被视为同一顶点,导致接触裁剪结果依赖顶点发现顺序。测试显示31%的碰撞姿态下,改变单纯形循环顺序会导致接触点数量变化,造成仿真不确定性。
环境
MuJoCo 3.17.0 (PyPI/main f0b3de3),Windows 11,Python 3.12,无GPU。测试对象为固定圆柱(r=15mm, half-length=70mm)与凸网格(椭球体, margin=0.5mm)。
解决办法
- 等待官方修复补丁合入,该补丁将改为基于witness point角度推导圆柱生成线(generator),并保留轴上witness点的回退逻辑。
- 在补丁发布前,可使用Issue中提供的3000随机姿态测试脚本作为回归验证基准,确保所有1314个接触姿态在不同单纯形循环顺序下接触计数一致。
- 临时规避方案:在自定义碰撞检测或后处理中,避免直接依赖
mjc_multicontact对圆柱边缘的原始输出,或手动将圆柱边缘法向对齐至witness point角度以消除顺序敏感性。
讨论原作者:@lulu-loopp 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。