# MuJoCo mjc_multicontact圆柱接触数依赖GJK单纯形顶点顺序

> 原文链接：https://robotics.hellobike.com/pitfalls/2026-11-06-mujoco-3752
> 频道：pitfalls | 更新日期：2026-11-06 | 标签：auto, github-issue, mujoco
> 核心摘要：MuJoCo圆柱碰撞接触点数量受GJK/EPA顶点顺序影响，维护者确认将基于witness point角度推导边缘法向以修复。

# MuJoCo mjc_multicontact圆柱接触数依赖GJK单纯形顶点顺序

::: v-pre
> 本文由 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](https://github.com/google-deepmind/mujoco/issues/3752)（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)。

## 解决办法

1. 等待官方修复补丁合入，该补丁将改为基于witness point角度推导圆柱生成线（generator），并保留轴上witness点的回退逻辑。
2. 在补丁发布前，可使用Issue中提供的3000随机姿态测试脚本作为回归验证基准，确保所有1314个接触姿态在不同单纯形循环顺序下接触计数一致。
3. 临时规避方案：在自定义碰撞检测或后处理中，避免直接依赖`mjc_multicontact`对圆柱边缘的原始输出，或手动将圆柱边缘法向对齐至witness point角度以消除顺序敏感性。

讨论原作者：@lulu-loopp 等，版权归原作者所有。
:::

## 原始参考来源 (Sources)

- [GitHub google-deepmind/mujoco #3752：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](https://github.com/google-deepmind/mujoco/issues/3752)