物理 Schema#

机器人模型要参与仿真,只有几何还不够:连杆需要质量,形状需要碰撞属性,关节需要物理约束。USD 通过 Schema 存储这些属性,即附加在场景对象上的具名属性组。USD 场景中的对象称为 prim;机器人连杆、碰撞网格或关节都可以是 prim。

Isaac Lab 的 Schema 配置允许在生成资产时通过 Python 设置这些属性。您可以调整已有资产,或为新形状赋予物理属性,无需手动编辑源 USD 文件。导入的资产可能已经包含所需设置,只需覆盖要更改的属性。

这些是资产级设置。仿真后端及其场景级求解器设置,应另行通过 后端与预设 选择。

什么是片段?#

Schema 片段 是一个小型 Python 配置对象,用于设置某个 USD Schema 或属性命名空间中的属性。例如,MassCfg(mass=0.5) 设置质量,UsdPhysicsCollisionCfg(collision_enabled=True) 设置碰撞属性。

之所以称为片段,是因为它只描述资产物理配置的一部分。将多个片段组合起来,再传入生成器的相应字段,即可定义所需属性。片段是配置数据,不是独立的 USD 文件或几何体。

三者的区别在于:

  • Schema 定义可用属性及其在 USD 中的存储方式。

  • 片段 提供希望通过 Python 设置的值。

  • 生成器 在创建资产时,将这些值应用到资产的 prim 上。

为对象设置物理属性#

以下配置创建一个质量为 0.5 kg、启用碰撞的小方块:

import isaaclab.sim as sim_utils
from isaaclab.sim.schemas import MassCfg, UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg

cuboid = sim_utils.CuboidCfg(
    size=(0.1, 0.1, 0.1),
    rigid_props=UsdPhysicsRigidBodyCfg(),
    mass_props=MassCfg(mass=0.5),
    collision_props=UsdPhysicsCollisionCfg(collision_enabled=True),
)

将此配置传给资产的 spawn 字段,例如 RigidObjectCfg(spawn=cuboid, ...)。生成器创建几何并应用 Schema 配置,随后物理后端读取生成的属性。

生成器的每个字段控制资产的不同部分:

字段

控制内容

rigid_props

刚体行为,例如是否为运动学刚体。

mesh_collision_props

已有碰撞体的网格近似方式及后端预处理设置。

mass_props

刚体的质量或密度。

collision_props

碰撞行为与接触设置。

articulation_props

关节系统的属性,例如根部固定设置。

joint_drive_props

保存在资产上的关节驱动设置。

physics_material

摩擦、恢复系数等表面属性。

若关节由 Isaac Lab 执行器控制,还需阅读 执行器:生成后,执行器配置可能覆盖驱动设置。

字段设为 None 时保留已有属性值。UsdPhysicsRigidBodyCfg() 这样的空片段仍表示需要对应的 Schema,但不会用 Python 默认值替换所有属性。

添加后端专用设置#

生成器字段可接受同一属性族的片段列表。通过列表,将通用 USD 属性与特定后端的设置组合起来:

import isaaclab.sim as sim_utils
from isaaclab.sim.schemas import MassCfg, UsdPhysicsCollisionCfg, UsdPhysicsRigidBodyCfg
from isaaclab_newton.sim.schemas import NewtonCollisionCfg

cuboid = sim_utils.CuboidCfg(
    size=(0.1, 0.1, 0.1),
    rigid_props=UsdPhysicsRigidBodyCfg(),
    mass_props=MassCfg(mass=0.5),
    collision_props=[UsdPhysicsCollisionCfg(collision_enabled=True), NewtonCollisionCfg(contact_margin=0.001)],
)

这里,UsdPhysicsCollisionCfg 启用碰撞,NewtonCollisionCfg 将 Newton 的接触裕量设为 1 mm。二者描述同一个碰撞形状,因此都放在 collision_props 中。

通用片段从 isaaclab.sim.schemas 导入,PhysX 片段从 isaaclab_physx.sim.schemas 导入,Newton 或 MuJoCo 片段从 isaaclab_newton.sim.schemas 导入。材质片段位于各自的 sim.spawners.materials 模块中。

同一资产可以保存多个后端的设置,但这不会启用相应后端,也不意味着参数可以互换:属性只有在求解器支持时才会影响仿真。例如,MuJoCo 的重力补偿设置适用于 Newton 的 MuJoCo 求解器,不适用于 PhysX。

配置已有机器人#

UsdFileCfg 接受相同的属性字段。直接传入片段或列表,可更新导入资产中所有匹配的刚体、碰撞体或关节;不同部分需要不同设置时,则使用字典:

import isaaclab.sim as sim_utils
from isaaclab.sim.schemas import UsdPhysicsDriveCfg, UsdPhysicsRigidBodyCfg
from isaaclab_newton.sim.schemas import MujocoRigidBodyCfg
from isaaclab_physx.sim.schemas import PhysxRigidBodyCfg
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR

spawn = sim_utils.UsdFileCfg(
    usd_path=f"{ISAAC_NUCLEUS_DIR}/Robots/Franka/franka_instanceable.usd",
    rigid_props={
        # every rigid body: universal + PhysX + MuJoCo attributes side by side
        "/.*": [
            UsdPhysicsRigidBodyCfg(rigid_body_enabled=True),
            PhysxRigidBodyCfg(max_depenetration_velocity=5.0),
            MujocoRigidBodyCfg(gravcomp=1.0),
        ],
        # hand links (and their subtrees) get a tighter depenetration limit
        "/.*_hand(/.*)?": [PhysxRigidBodyCfg(max_depenetration_velocity=1.0)],
    },
    joint_drive_props={
        "/.*": [UsdPhysicsDriveCfg(drive_type="force", stiffness=40.0, damping=4.0)],
    },
)

字典键是附加在生成 prim 路径后的正则表达式后缀。例如,机器人生成在 /World/Robot 时,"/.*" 会搜索 /World/Robot 下方的对象。规则按顺序应用,后面的规则可覆盖前面的规则。本例为手部子树设置了较小的 PhysX 穿透修正速度上限。

模式

相对于锚点的选择范围

""

仅锚点自身。

"/[^/]+"

仅直接子节点。

"/.*"

所有层级的后代节点。

"(/.*)?"

锚点及其所有后代节点。

对于 USD、URDF 和 MJCF 导入,锚点是生成 prim。形状和网格生成器以几何 prim 为碰撞及网格碰撞属性的锚点,以容器 prim 为刚体与质量属性的锚点。所有生成器的可变形体设置均以生成 prim 为锚点。

搜索范围包含未激活、未定义的 prim 和实例代理。模式先选择候选 prim,再由属性族过滤。例如,刚体设置应用于刚体,关节驱动设置应用于旋转或移动关节。较宽泛的模式通常不会将每个网格都变为刚体。

设置未生效时#

先确认所选后端支持该属性,且模式匹配到预期的 prim。匹配针对完整路径:.* 可跨越 /,而 [^/]+ 只匹配单个路径段。

大多数片段写入器只修改已具有相应 USD API 的 prim,也就是已通过 Schema 标识为刚体、碰撞形状或其他物理对象的 prim。对于质量、关节系统和关节驱动设置,生成器标志 mass_props_create_if_missing、articulation_props_create_if_missing 和 joint_drive_props_create_if_missing 可在匹配目标上创建缺失的 API。

提示

启用 API 创建时,应尽量缩小模式范围。宽泛的质量模式可能为每个匹配网格分别赋予质量,而不是为整个刚体设置一个质量。

形状和网格生成器会创建新几何所需的 API。对于不带字典的片段或列表,文件生成器会查找已具有相应 Schema 的对象;若该属性族找不到此类对象,则将其应用到生成 prim,把资产视为单个刚体。网格碰撞片段是例外,它只修改已有碰撞体。使用显式字典可自行控制目标选择。

找不到有效目标,或目标是不可编辑的实例代理时,写入器会发出警告。空片段列表不会修改任何内容。关节驱动模式会静默跳过非关节 prim,因为同一子树中可能同时包含关节和网格。

MuJoCo 重力补偿#

设置刚体级 gravcomp 可计算重力补偿;设置关节级 actuatorgravcomp 可让补偿力通过执行器通道施加,并受执行器力限制约束,否则补偿力通过被动力通道施加。

import isaaclab.sim as sim_utils
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR
from isaaclab_newton.sim.schemas import MujocoJointCfg, MujocoRigidBodyCfg

spawn = sim_utils.UsdFileCfg(
    usd_path=f"{ISAAC_NUCLEUS_DIR}/Robots/Franka/franka_instanceable.usd",
    rigid_props=MujocoRigidBodyCfg(gravcomp=1.0),
    joint_drive_props=MujocoJointCfg(actuatorgravcomp=True),
)

gravcomp=1.0 表示完全补偿。如果子刚体的补偿值未设置或为零,关节片段也会为其启用完全补偿;已有的非零值则保留。若要禁用补偿,除了将刚体的 gravcomp 设为零,还要关闭 actuatorgravcomp。

旧的 MujocoJointDrivePropertiesCfg 也会在请求时自动启用刚体补偿,除非已显式提供刚体的 gravcomp 值。新配置应优先使用上面的片段示例。

网格碰撞设置#

网格碰撞片段与碰撞片段使用相同的锚点,只修改已有碰撞体,不创建碰撞体。例如,将 USD 资产的所有碰撞体预处理为凸包,并设置 PhysX 顶点数上限:

import isaaclab.sim as sim_utils
from isaaclab_physx.sim.schemas import PhysxConvexHullCfg

spawn = sim_utils.UsdFileCfg(
    usd_path="/path/to/asset.usd",
    mesh_collision_props=[
        sim_utils.UsdPhysicsMeshCollisionCfg(mesh_approximation_name="convexHull"),
        PhysxConvexHullCfg(hull_vertex_limit=32),
    ],
)

可变形物体#

实体可变形体使用 volume_deformable_props,布料一类的表面使用 surface_deformable_props。同一生成器只能设置其中一个字段。二者均接受 OmniPhysicsDeformableBodyCfg,用于配置质量、运动学行为等通用属性;PhysX 还提供专用的调优片段。

与大多数刚体写入器不同,可变形体写入器会在缺少相应设置时创建它。可变形体质量通过 OmniPhysicsDeformableBodyCfg.mass 设置,不受 UsdPhysics.MassAPI 控制。

本例创建一个体积可变形体,包含 PhysX 调优设置、仿真网格上的碰撞偏移,以及 PhysX 和 Newton 的材质设置:

import isaaclab.sim as sim_utils
from isaaclab_physx.sim.schemas import PhysxCollisionCfg, PhysxDeformableBodyCfg
from isaaclab.sim.spawners.materials import OmniPhysicsDeformableMaterialCfg
from isaaclab_newton.sim.spawners.materials import NewtonVolumeDeformableMaterialCfg

sim_utils.MeshCuboidCfg(
    size=(0.2, 0.2, 0.2),
    volume_deformable_props=[
        sim_utils.schemas.OmniPhysicsDeformableBodyCfg(mass=0.5),
        PhysxDeformableBodyCfg(solver_position_iteration_count=32),
    ],
    collision_props={"/sim_mesh": [PhysxCollisionCfg(contact_offset=0.01)]},
    physics_material=[
        OmniPhysicsDeformableMaterialCfg(youngs_modulus=1.0e6, poissons_ratio=0.45),
        NewtonVolumeDeformableMaterialCfg(k_mu=1.0e5),
    ],
)

仿真网格默认是名为 sim_mesh 的子节点。可通过 collision_props 选中它并设置碰撞偏移。可变形体和仿真网格碰撞模式均相对于生成 prim。

physics_material 接受可变形体材质片段,也接受混合刚体与可变形体材质设置的列表。每个片段应用自身的材质 Schema;只供可变形体使用的材质无需刚体材质 API。

使用属性配置类#

在现有任务中,您还会看到 RigidBodyBaseCfg 和 PhysxRigidBodyPropertiesCfg 等类,它们将某一属性组的通用字段和后端专用字段合并在同一对象中。这些兼容类已弃用,计划在 3.2 中移除。已有配置仍可传入相同的生成器字段,但新代码应使用片段。兼容对象应直接传入,不要放进片段列表。

  • isaaclab.sim.schemas 中的基类包含通用字段,不导入任何后端包。

  • PhysX 子类添加阻尼、求解器迭代次数等字段。

  • Newton 子类添加 Newton 设置;MuJoCo 子类添加重力补偿等求解器专用字段。

更新已有任务时,应将兼容对象拆分为通用字段和后端专用字段的片段。参见 片段迁移示例。

import isaaclab.sim as sim_utils
from isaaclab_physx.sim.schemas import PhysxRigidBodyPropertiesCfg
from isaaclab_newton.sim.schemas import MujocoJointDrivePropertiesCfg

spawn = sim_utils.UsdFileCfg(
    usd_path="...",
    rigid_props=PhysxRigidBodyPropertiesCfg(disable_gravity=True, linear_damping=0.1),
    joint_drive_props=MujocoJointDrivePropertiesCfg(
        drive_type="acceleration",
        stiffness=10.0,
        damping=0.1,
        actuatorgravcomp=True,
    ),
)

本例同时向资产写入 PhysX 和 MuJoCo 设置,各后端使用其支持的字段。完整的类和字段列表见下方可展开的参考章节。

Schema 参考与实现#

以下章节说明配置字段如何转换为 USD 属性。使用前面的示例无需了解这些实现细节。

属性配置类的继承层级

对于各属性组(刚体、关节驱动、碰撞、关节体根节点、材质和网格碰撞),Isaac Lab 在核心包 isaaclab.sim.schemas 中定义一个基类,并在对应扩展包中为各后端定义子类:

isaaclab.sim.schemas
├── RigidBodyBaseCfg
│   ├── isaaclab_physx.sim.schemas.PhysxRigidBodyPropertiesCfg
│   └── isaaclab_newton.sim.schemas.NewtonRigidBodyPropertiesCfg
│       └── isaaclab_newton.sim.schemas.MujocoRigidBodyPropertiesCfg
│
├── JointDriveBaseCfg
│   ├── isaaclab_physx.sim.schemas.PhysxJointDrivePropertiesCfg
│   └── isaaclab_newton.sim.schemas.NewtonJointDrivePropertiesCfg
│       └── isaaclab_newton.sim.schemas.MujocoJointDrivePropertiesCfg
│
├── CollisionBaseCfg
│   ├── isaaclab_physx.sim.schemas.PhysxCollisionPropertiesCfg
│   └── isaaclab_newton.sim.schemas.NewtonCollisionPropertiesCfg
│       ├── isaaclab_newton.sim.schemas.NewtonMeshCollisionPropertiesCfg
│       └── isaaclab_newton.sim.schemas.NewtonSDFCollisionPropertiesCfg
│
├── ArticulationRootBaseCfg
│   ├── isaaclab_physx.sim.schemas.PhysxArticulationRootPropertiesCfg
│   └── isaaclab_newton.sim.schemas.NewtonArticulationRootPropertiesCfg
│
├── MeshCollisionBaseCfg
│   ├── isaaclab_physx.sim.schemas.{PhysxConvexHull, PhysxConvexDecomposition,
│   │                                PhysxTriangleMesh, PhysxSDFMesh, ...}PropertiesCfg
│   └── isaaclab_newton.sim.schemas.NewtonMeshCollisionPropertiesCfg
│       (also inherits NewtonCollisionPropertiesCfg — multi-namespace)
│
└── isaaclab.sim.spawners.materials.RigidBodyMaterialBaseCfg
    ├── isaaclab_physx.sim.spawners.materials.PhysxRigidBodyMaterialCfg
    └── isaaclab_newton.sim.schemas.NewtonMaterialPropertiesCfg

NewtonMeshCollisionPropertiesCfg 使用多重继承,同时扩展 NewtonCollisionPropertiesCfg (提供 contact_margin / contact_gap)和 MeshCollisionBaseCfg (提供 mesh_approximation_name)。各继承字段写入其声明类对应的命名空间,见 字段到命名空间的映射。NewtonSDFCollisionPropertiesCfg 则以碰撞配置为继承根,因此只写入 NewtonSDFCollisionAPI,不会额外应用 UsdPhysics.MeshCollisionAPI 或设置 physics:approximation。

每个生成器为每个属性组提供一个字段,例如 rigid_props 或 joint_drive_props;字段接受对应的基类或任一子类。

通用与后端专用字段参考

备注

下表汇总常用字段。完整字段及默认值见由配置类生成的 isaaclab.sim.schemas、isaaclab_physx.sim.schemas 和 isaaclab_newton.sim.schemas。

通用物理(在基类上声明)

大部分通用字段写入 physics:* (标准 UsdPhysics.*API 命名空间),但有少量例外:为了跨后端使用而在基类上声明,却写入非 physics:* 命名空间,因为目前只有该 USD 路径会被读取。例如,disable_gravity 写入 physxRigidBody:disableGravity,因为 PhysX 和 Newton 导入器都读取此 PhysX 属性。下方“USD 属性”列列出实际写入的属性,而非命名空间类别。

基类

字段

USD 属性

RigidBodyBaseCfg

rigid_body_enabled, kinematic_enabled

physics:rigidBodyEnabled, physics:kinematicEnabled

RigidBodyBaseCfg

disable_gravity

physxRigidBody:disableGravity (PhysX 按刚体生效;Newton 在场景层面部分支持)

CollisionBaseCfg

collision_enabled

physics:collisionEnabled

CollisionBaseCfg

contact_offset, rest_offset

physxCollision:contactOffset 、 physxCollision:restOffset (Newton 通过 PhysX 桥接读取)

ArticulationRootBaseCfg

articulation_enabled

physxArticulation:articulationEnabled

ArticulationRootBaseCfg

fix_root_link

生成 UsdPhysics.FixedJoint (在写入端处理,不是 USD 属性)

JointDriveBaseCfg

drive_type, max_force, stiffness, damping

drive:<axis>:physics:type/maxForce/stiffness/damping

JointDriveBaseCfg

max_joint_velocity

physxJoint:maxJointVelocity (唯一的 USD 路径;Newton 目前通过 PhysX 桥接读取)

JointDriveBaseCfg

ensure_drives_exist

仅在写入端处理 — 为 True 时,确保所有 stiffness=0 且 damping=0 的驱动具有最小 stiffness=1e-3 ,使 Newton 等后端将关节识别为主动驱动;本身不是独立的 USD 属性

MassPropertiesCfg

mass, density

physics:mass, physics:density

RigidBodyMaterialBaseCfg

static_friction, dynamic_friction, restitution

physics:staticFriction, physics:dynamicFriction, physics:restitution

MeshCollisionBaseCfg

mesh_approximation_name

physics:approximation

PhysX 特有( physx*:* 命名空间, Physx*API 模式)

在 PhysX 配置中设置时,写入以下字段。

PhysX 子类

字段(部分)

USD 命名空间 / 模式

PhysxRigidBodyPropertiesCfg

linear_damping 、 angular_damping 、 max_linear_velocity 、 max_angular_velocity 、 solver_position_iteration_count 、 sleep_threshold 、 enable_gyroscopic_forces 等

physxRigidBody:* / PhysxRigidBodyAPI

PhysxJointDrivePropertiesCfg

(目前为空,为未来的 PhysX 专属驱动参数预留)

physxJoint:* / PhysxJointAPI

PhysxCollisionPropertiesCfg

torsional_patch_radius, min_torsional_patch_radius

physxCollision:* / PhysxCollisionAPI

PhysxArticulationRootPropertiesCfg

enabled_self_collisions, solver_position_iteration_count, sleep_threshold, stabilization_threshold

physxArticulation:* / PhysxArticulationAPI

PhysxRigidBodyMaterialCfg

compliant_contact_stiffness, compliant_contact_damping, friction_combine_mode, restitution_combine_mode

physxMaterial:* / PhysxMaterialAPI

PhysxConvexHullPropertiesCfg (以及其他网格预处理子类)

hull_vertex_limit 、 min_thickness 等

physxConvexHullCollision:* / PhysxConvexHullCollisionAPI

面向 Newton( newton:* 命名空间, Newton*API 模式)

在 Newton 配置中设置时,写入以下字段。

Newton 子类

字段

USD 命名空间 / 模式

NewtonRigidBodyPropertiesCfg

(为空,为未来的 Newton 原生刚体字段预留)

newton:*

NewtonJointDrivePropertiesCfg

(为空,为未来的 Newton 原生关节驱动字段预留)

newton:*

NewtonCollisionPropertiesCfg

contact_margin, contact_gap

newton:* / NewtonCollisionAPI

NewtonMeshCollisionPropertiesCfg

max_hull_vertices

newton:* / NewtonMeshCollisionAPI

NewtonSDFCollisionPropertiesCfg

sdf_max_resolution 、 sdf_target_voxel_size 、 sdf_texture_format 、 hydroelastic_enabled 等

newton:* / NewtonSDFCollisionAPI

NewtonMaterialPropertiesCfg

torsional_friction, rolling_friction

newton:* / NewtonMaterialAPI

NewtonArticulationRootPropertiesCfg

self_collision_enabled

newton:* / NewtonArticulationRootAPI

MuJoCo 求解器特有( mjc:* 命名空间)

以下字段由 Newton 的 MuJoCo 求解器读取。

MuJoCo 子类

字段

USD 属性 / 模式

MujocoRigidBodyPropertiesCfg

gravcomp

mjc:gravcomp (原始属性,不应用模式)

MujocoJointDrivePropertiesCfg

actuatorgravcomp

通过 MjcJointAPI 写入 mjc:actuatorgravcomp

备注

这两个 MuJoCo 条目对 USD 应用模式的要求不同: mjc:actuatorgravcomp 属于已注册的 MjcJointAPI 应用模式,因此字段不是 None 时,写入器会调用 prim.AddAppliedSchema("MjcJointAPI") 。刚体级重力补偿的 mjc:gravcomp 没有已注册的 Mjc 应用模式,因此写入器将其写为原始 USD 属性。Newton 的 MuJoCo 求解器通过同一解析路径读取两者;应用模式的区别仅是 USD 端的细节。

片段写入器与目标族

各片段继承 SchemaFragment ,声明字段写入的 USD 命名空间,以及自己负责的应用模式(如果有)。片段的 func 指定将其应用到 prim 的可调用对象。默认应用函数( apply_namespaced() )将各非 None 字段写为 <namespace>:<camelCase(field)> ,不修改 None 字段(部分更新)。特殊 API 会覆盖 func ,例如 UsdPhysicsDriveCfg 通过 apply_drive() 分发,处理多实例 UsdPhysics.DriveAPI 。

片段按 属性族 分组,每个族对应一个生成器字段。大多数族都有写入器,根据表达式解析目标 prim,再通过各片段的 func 分发。后端片段自带后端专用的应用函数,因此核心包无需导入后端:

生成器字段

属性族写入器

有效目标

rigid_props

apply_rigid_body_properties()

带有 UsdPhysics.RigidBodyAPI 的 prim

collision_props

apply_collision_properties()

带有 UsdPhysics.CollisionAPI 的 prim

mesh_collision_props

apply_mesh_collision_properties(),每个碰撞体调用一次

已有碰撞 prim

mass_props

apply_mass_properties()

带有 UsdPhysics.MassAPI 的 prim

articulation_props

apply_articulation_root_properties()

带有 UsdPhysics.ArticulationRootAPI 的 prim

joint_drive_props

apply_joint_drive_properties()

旋转 / 移动关节 prim

fixed_tendons_props

apply_fixed_tendon_properties()

带有肌腱的 prim(已有肌腱实例)

spatial_tendons_props

apply_spatial_tendon_properties()

肌腱附着点根 prim

volume_deformable_props

apply_volume_deformable_properties()

体积可变形物体 prim( UsdGeom.TetMesh 仿真网格)

surface_deformable_props

apply_surface_deformable_properties()

表面可变形物体 prim(三角仿真网格)

肌腱属性族遵循 只调整、不创建 的原则:肌腱拓扑在源资产中编写,其写入器只调整已有实例,从不创建实例。可变形属性族则相反,参见 可变形物体 。PhysX 肌腱片段使用 instance_names 在每个匹配 prim 上选择一个或多个实例; None (默认值)表示应用到所有已有实例。

固定肌腱按 PhysX 模式的边界拆分:根片段负责整个肌腱的动力学和限制,轴片段负责各关节的贡献。prim 路径匹配选择关节, instance_names 选择这些关节上的肌腱:

from isaaclab_physx.sim.schemas import PhysxTendonAxisCfg, PhysxTendonAxisRootCfg

fixed_tendons_props = {
    "/joints/index_root": [
        PhysxTendonAxisRootCfg(instance_names="index_finger", stiffness=10.0),
        PhysxTendonAxisCfg(instance_names="index_finger", gearing=[1.0], joint_axis=["rotX"]),
    ],
    "/joints/index_distal": [
        PhysxTendonAxisCfg(instance_names="index_finger", gearing=[-0.5], joint_axis=["rotX"]),
    ],
}
可变形体设置的创建过程

对于没有基础模式的匹配 prim,创建可变形物体配置分为三步:

  1. 仿真网格。 在目标下编写 sim_mesh 子 prim(名称可通过写入器的 sim_mesh_name 参数配置)。表面可变形物体使用可视网格的三角网格副本;体积可变形物体使用经过四面体划分的 UsdGeom.TetMesh 。源资产已有预先划分的 UsdGeom.TetMesh 子节点时,原地复用,不重复划分。

  2. 后端基础模式。 当前物理后端通过 PhysicsManager.setup_deformable_body 应用自己的基础模式。PhysX 在物体 prim 上应用真正的 OmniPhysicsDeformableBodyAPI (两种可变形类型使用同一个模式),并在仿真网格 prim 上根据类型应用 OmniPhysicsVolumeDeformableSimAPI / OmniPhysicsSurfaceDeformableSimAPI 。Newton 应用自己的 Physics* 模式(目前仅为 token)。核心片段没有自己的应用模式; OmniPhysicsDeformableBodyCfg 只在基础模式存在后写入 omniphysics:* 命名空间。

  3. 片段分发。 将匹配槽位中的每个片段按列表顺序应用到目标,与其他属性族完全相同。

字段如何映射到 USD 命名空间

由于各配置字段分发到 声明该字段的类 对应的命名空间,而非实例所属类的命名空间,子类实例可以在同一 prim 上写入多个命名空间的属性。例如:

from isaaclab_newton.sim.schemas import MujocoRigidBodyPropertiesCfg

cfg = MujocoRigidBodyPropertiesCfg(
    rigid_body_enabled=True,        # declared on RigidBodyBaseCfg → physics:rigidBodyEnabled
    disable_gravity=True,            # declared on RigidBodyBaseCfg (exception) → physxRigidBody:disableGravity
    gravcomp=1.0,                    # declared on MujocoRigidBodyPropertiesCfg → mjc:gravcomp
)

写入器将各字段应用到声明该字段的类对应的命名空间。只有相应字段不是 None 时,才添加应用模式( disable_gravity 使用 PhysxRigidBodyAPI ;Mjc 原始属性没有应用模式)。

字段名与兼容别名

Python 字段使用 snake_case,USD 属性通常使用 camelCase,例如 contact_margin 转换为 newton:contactMargin。gravcomp 等单词形式的 MuJoCo 字段保持原有拼写。

JointDriveBaseCfg 仍接受 max_velocity 作为 max_joint_velocity 的别名,接受 max_effort 作为 max_force 的别名。建议使用新名称,这些别名计划在 4.0 中移除。使用旧名称时会发出弃用警告;若新字段未设置,则复制旧值。若两者均已提供,则采用新字段值,不发出警告。随后旧数据类字段重置为 None。

进一步阅读#