几何与碰撞

如何定义碰撞形状(从基本体到分解网格)并控制哪些物体发生碰撞。


几何类型

类型 部件 定义
盒子(Box) UMjBox 半延伸(通过 XYZ 缩放)
球体(Sphere) UMjSphere 半径(通过 X 轴缩放)
圆柱(Cylinder) UMjCylinder 半径(X轴缩放)+半高(Z轴缩放)
胶囊(Capsule) UMjGeom (type=Capsule) 半径 + 半高
网格(Mesh) UMjGeom (type=Mesh) 静态网格资产
高度场(Heightfield) AMjHeightfieldActor 虚幻景观数据

使用标准的虚幻引擎变换 gizmo 来调整形状大小——该插件读取组件缩放并将其映射到 MuJoCo 尺寸参数。


基本元素

快速、精确的碰撞分析。将 UMjBoxUMjSphereUMjCylinder 添加为 UMjBody 的子对象。在一个实体上堆叠多个对象,可实现复合形状。

网格几何体

对于凸网格,请将“类型”设置为“网格” Type = Mesh,并指定一个“静态网格(Static Mesh)”。MuJoCo 会在内部计算凸包。

对于网格,请使用 CoACD 分解——单击几何体上的“分解网格(Decompose Mesh)”,或在“快速转换(Quick Convert)”组件上设置“需要复杂网格(ComplexMeshRequired)”。


快速转换

UMjQuickConvertComponent 可应用于任何静态网格体动作者 — 一键式物理实体。

属性 效果
Static 固定到位(无活动关节)
ComplexMeshRequired 凹网格的CoACD分解
CoACDThreshold 分解细节(0.01–1.0,数值越低表示凸块越多)
bDrivenByUnreal 虚幻引擎驱动位置,MuJoCo 不进行模拟

高度场地形

AMjHeightfieldActor 将虚幻引擎的地形几何体转换为 MuJoCo 高度场,用于地形接触。启用 bTraceComplex 可实现地形的精确网格级采样。使用 TraceWhitelist 可过滤要采样的动作者(例如,仅采样地形,不采样植被)。


几何属性

属性 描述
Friction 滑动系数、扭转系数、滚动系数
Density 质量由密度乘以体积推断得出
Margin 接触检测范围
Solref / Solimp 求解器刚度/阻尼/阻抗

过滤接触

(0-5):用于在 MuJoCo 原生查看器中组织几何体可见性的整数标签。在 URLab 中,组 2 通常用于仅显示可见性的网格(contype=0,conaffinity=0),组 3 用于仅显示碰撞的网格。接触生成由 contypeconaffinity 位掩码控制,而非组。

接触对 (UMjContactPair): 明确允许两个物体之间接触。

接触排除 (UMjContactExclude): 禁止两个物体之间的接触。

位掩码 (Contype / Conaffinity): 适用于大型场景的可扩展过滤。只有当两个几何体的类型/亲和性掩码重叠时,它们才会发生碰撞。


调试可视化

碰撞调试可视化会绘制属于 第 3 组contype != 0conaffinity != 0 的几何体。这确保了足部接触球体(可能不属于第 3 组,但参与了接触)在调试叠加层中可见。

2 可切换可视化网格渲染。隐藏​​可视化网格时,仅绘制碰撞几何体——这有助于在不干扰视觉效果的情况下检查接触形状。


惯性覆盖

MuJoCo 会根据几何体的密度和形状推断其质量。要进行显式控制,请将 UMjInertial 添加到具有特定质量、质心和惯性矩阵的物体中。