IsaacLab Newton Schema 配置实战:面向 Newton 求解器的 USD 物理属性 Cfg 类全解析
【免费下载链接】IsaacLabUnified framework for robot learning built on NVIDIA Isaac Sim项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab
isaaclab_newton.sim.schemas是 IsaacLab 中为 Newton 物理求解器提供的 USD 属性配置层:它在一组求解器无关的基类(isaaclab.sim.schemas)之上,派生出带newton:*或mjc:*命名空间属性的 cfg 类,供你在生成/修改 USD 资产时声明碰撞、摩擦、关节驱动、重力补偿等物理行为。读完本文,你将掌握每个类的字段语义、USD 写入路径、类继承关系,以及如何在新项目(如软体/布料环境配置)中正确选用这些类。
模块定位与类继承体系
该模块的全部实现位于 schemas_cfg.py,包导出通过init.py 中的lazy_export()完成(另附.pyi类型存根供 IDE 补全)。
按官方文档 isaaclab_newton.sim.schemas.rst 的分类,本模块分为两组:
- Newton 家族根类(Newton-targeted, family roots):
NewtonDeformableBodyPropertiesCfg、NewtonRigidBodyPropertiesCfg、NewtonJointDrivePropertiesCfg、NewtonCollisionPropertiesCfg、NewtonMeshCollisionPropertiesCfg、NewtonMaterialPropertiesCfg、NewtonArticulationRootPropertiesCfg; - MuJoCo 求解器专属子类(MuJoCo-solver-specific):
MujocoRigidBodyPropertiesCfg、MujocoJointDrivePropertiesCfg。
继承关系是理解本模块的钥匙:MuJoCo cfg 直接继承 Newton 同名 cfg,因为 MuJoCo 本身就是 Newton 的一个求解器选项(Newton 还提供 XPBD、Featherstone、Semi-implicit、Kamino 等求解器)。每个 cfg 又继承isaaclab.sim.schemas中对应的求解器无关基类,例如:
| Newton cfg | 继承的基类(isaaclab.sim.schemas) | 基类中已有的通用字段 |
|---|---|---|
NewtonRigidBodyPropertiesCfg | RigidBodyBaseCfg | rigid_body_enabled、kinematic_enabled、disable_gravity |
NewtonJointDrivePropertiesCfg | JointDriveBaseCfg | drive_type、max_force、stiffness、damping、max_joint_velocity |
NewtonCollisionPropertiesCfg | CollisionBaseCfg | collision_enabled、contact_offset、rest_offset |
NewtonMeshCollisionPropertiesCfg | NewtonCollisionPropertiesCfg+MeshCollisionBaseCfg | 上两行 +mesh_approximation_name |
NewtonMaterialPropertiesCfg | RigidBodyMaterialBaseCfg(isaaclab.sim.spawners.materials) | 通用材质属性(静/动摩擦、恢复系数等) |
NewtonArticulationRootPropertiesCfg | ArticulationRootBaseCfg | articulation_enabled、fix_root_link |
NewtonDeformableBodyPropertiesCfg | DeformableBodyPropertiesBaseCfg | 无(基类当前为空占位) |
基类实现可参见 isaaclab/sim/schemas/schemas_cfg.py,其中RigidBodyBaseCfg、CollisionBaseCfg、JointDriveBaseCfg、MeshCollisionBaseCfg、ArticulationRootBaseCfg、DeformableBodyPropertiesBaseCfg分别承担上表职责。
USD 写入机制:三个类元数据变量
所有 cfg 都是@configclass实例,字段默认值为None,且遵循统一约定:值为None的字段不修改对应 USD 属性(便于只设置属性子集)。真正决定“写到哪”的是每个类声明的三个ClassVar元数据:
_usd_namespace:USD 属性命名空间,如"newton"或"mjc";_usd_applied_schema:写属性前在 prim 上应用的 USD API schema 名(如"NewtonCollisionAPI"、"MjcJointAPI"),为None时复用上游已应用的标准 schema;_usd_field_exceptions:逐字段的例外路由表,格式为applied_schema -> (namespace, [cfg_field, ...]),用于把某些字段写到与类命名空间不同的位置。
以 schemas_cfg.py 中的碰撞类为例:
_usd_namespace: ClassVar[str | None] = "newton" _usd_applied_schema: ClassVar[str | None] = "NewtonCollisionAPI" _usd_field_exceptions: ClassVar[dict] = {}而 JointDriveBaseCfg 中max_joint_velocity就通过例外路由写到physxJoint:maxJointVelocity——Newton 的 USD importer 通过 PhysX 桥接解析器消费该属性并填充Model.joint_velocity_limit。这说明 Newton cfg 并非孤立存在:基类的字段往往经由 PhysX 命名空间被 Newton 间接读取。
定义与修改函数保持统一:文档明确说明“Schema define and modify functions remain unified inisaaclab.sim.schemas”。即define_*_properties/modify_*_properties(如modify_rigid_body_properties、modify_collision_properties)仍集中在 isaaclab/sim/schemas/schemas.py 中,它们按 cfg 子类的元数据决定写入位置,因此你可以把上述任何 Newton cfg 直接传给这些统一函数,而不需要 Newton 专用的 writer。
刚体属性:NewtonRigidBodyPropertiesCfg 与 MujocoRigidBodyPropertiesCfg
NewtonRigidBodyPropertiesCfg 继承RigidBodyBaseCfg,命名空间为"newton",但当前没有自有字段——源码注释解释:Newton 目前没有原生的newton:*刚体属性,该类是占位根类,为未来 Newton 原生刚体字段预留命名空间,避免 API 变更。实际的 MuJoCo 求解器字段由子类承载。
MujocoRigidBodyPropertiesCfg 继承它,命名空间切换为"mjc",新增唯一字段:
| 字段 | 类型/默认值 | 说明 |
|---|---|---|
gravcomp | float \| None,默认None | 刚体的重力补偿缩放系数(无量纲)。0.0= 不补偿;1.0= 完全补偿。写入刚体 prim 的mjc:gravcomp。注意:必须先设置 body 级 gravcomp,关节级actuatorgravcomp才可能生效。仅在运行 Newton 的 MuJoCo 求解器时被消费 |
典型用途是为 MuJoCo 风格机器人控制做重力补偿:给机器人全身 rigid body 设置gravcomp=1.0,即可让求解器抵消重力,便于执行基于残差的运动控制。
关节驱动属性:NewtonJointDrivePropertiesCfg 与 MujocoJointDrivePropertiesCfg
NewtonJointDrivePropertiesCfg 与刚体根类同理:继承JointDriveBaseCfg、命名空间"newton"、当前无自有字段,为未来原生字段预留空间。
MujocoJointDrivePropertiesCfg 新增字段:
| 字段 | 类型/默认值 | 说明 |
|---|---|---|
actuatorgravcomp | bool \| None,默认None | 将重力补偿力路由到执行器通道。为True时补偿力进入qfrc_actuator(受力的限制约束)。依赖 body 级的MujocoRigidBodyPropertiesCfg.gravcomp。经MjcJointAPI写入mjc:actuatorgravcomp(注意此类的_usd_applied_schema = "MjcJointAPI",与刚体类不同) |
两者搭配使用的模式是:body 级声明补偿规模(gravcomp),关节级决定补偿力的执行器路由(actuatorgravcomp)。
碰撞属性:NewtonCollisionPropertiesCfg 与 NewtonMeshCollisionPropertiesCfg
这一组是 Newton cfg 中字段最充实的部分。NewtonCollisionPropertiesCfg 在CollisionBaseCfg(提供collision_enabled、contact_offset、rest_offset)之上,新增 Newton 原生的接触几何属性,经NewtonCollisionAPI写入:
| 字段 | 类型/默认值 | USD 属性 | 说明 |
|---|---|---|---|
contact_margin | float \| None | newton:contactMargin | 碰撞面向外膨胀量[m],取值范围[0, +∞)。有效膨胀为双方 margin 之和,用于碰撞检测。对薄壳(thin shell)和布料(cloth)这类极薄几何体尤其关键 |
contact_gap | float \| None | newton:contactGap | 额外接触检测间隙 [m],范围[0, +∞)。AABB 会按该值扩张,使接触更早被检出,用于避免快速运动物体的穿透(tunneling)。设-inf表示回落到 Newton builder 默认值 |
NewtonMeshCollisionPropertiesCfg 采用多重继承(NewtonCollisionPropertiesCfg+MeshCollisionBaseCfg),在继承全部接触属性的基础上补充凸包控制:
| 字段 | 类型/默认值 | USD 属性 | 说明 |
|---|---|---|---|
max_hull_vertices | int \| None | newton:maxHullVertices(经NewtonMeshCollisionAPI写入) | 凸包近似允许的最大顶点数。仅当physics:approximation = "convexHull"时相关;设-1表示“使用足够多的顶点以得到完美凸包” |
注意:该类的mesh_approximation_name来自MeshCollisionBaseCfg(默认"none",写入physics:approximation)。换言之,凸包/包围盒等近似方法走标准UsdPhysics属性,而 Newton 只补充了凸包顶点上限这一求解器专属旋钮——这与 PhysX 侧的Physx*cooking 调参类(isaaclab_physx.sim.schemas)形成对称设计。
材质属性:NewtonMaterialPropertiesCfg
NewtonMaterialPropertiesCfg 继承RigidBodyMaterialBaseCfg(来自isaaclab.sim.spawners.materials,已包含通用静摩擦、动摩擦、恢复系数、密度等),经NewtonMaterialAPI新增两个摩擦维度:
| 字段 | 类型/默认值 | USD 属性 | 说明 |
|---|---|---|---|
torsional_friction | float \| None,范围[0, +∞) | newton:torsionalFriction | 扭转摩擦系数,刻画接触点处抵抗旋转的能力 |
rolling_friction | float \| None,范围[0, +∞) | newton:rollingFriction | 滚动摩擦系数,刻画抵抗滚动运动的能力 |
这两个属性在轮式机器人、圆柱/球体滚动场景中直接影响动力学真实性——只配置平面摩擦而忽略滚动/扭转摩擦,会低估真实滚动阻力。
关节树(Articulation Root)属性:NewtonArticulationRootPropertiesCfg
NewtonArticulationRootPropertiesCfg 继承ArticulationRootBaseCfg(提供articulation_enabled与 writer 侧的fix_root_link),经NewtonArticulationRootAPI新增:
| 字段 | 类型/默认值 | USD 属性 | 说明 |
|---|---|---|---|
self_collision_enabled | bool \| None | newton:selfCollisionEnabled | 该 articulation 内部各 body 之间是否启用自碰撞。Newton 的 resolver优先检查这个原生属性,未设置时才回落到physxArticulation:enabledSelfCollisions |
从源码注释可推断出一个实用细节:如果你的机器人 USD 原本带着 PhysX 自碰撞开关而切到 Newton,显式用该字段写newton:selfCollisionEnabled才能保证行为由 Newton 原生控制,而不是依赖回落路径。
软体属性:NewtonDeformableBodyPropertiesCfg
NewtonDeformableBodyPropertiesCfg 继承当前为空的DeformableBodyPropertiesBaseCfg(占位设计,见 基类实现),自身同样暂无自有字段,命名空间"newton"已预留,待 Newton 暴露注册的 deformable body 属性 schema 后填充。
尽管当前是“空类”,它在新项目中的实际角色是语义标记 + 生成接口:软体资产的生成(spawn)流程会依据传入的 deformable properties cfg 选择 Newton 侧的处理路径。官方任务代码中有真实用例——franka_cloth_env_cfg.py 中,Franka 抓取布料环境的软体网格配置直接使用了它:
from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg spawn=sim_utils.MeshRectangleCfg( size=(0.2, 0.2), resolution=(30, 30), deformable_props=NewtonDeformableBodyPropertiesCfg(), physics_material=NewtonSurfaceDeformableBodyMaterialCfg( density=50.0, particle_radius=0.005, tri_ke=5e2, tri_ka=5e2, tri_kd=1e-3, edge_ke=2.0, edge_kd=1e-3, ), ),同文件的PhysicsCfg还展示了 Newton 求解器配置(MJWarpSolverCfg+VBDSolverCfg的刚软双求解器耦合),说明软体场景中 schema cfg 与 solver cfg 是配套使用的两层配置。教程脚本 run_deformable_object.py 与演示 deformables.py 中也引用了isaaclab_newton的 deformable cfg 链路,可作为软体配置的更多参考入口。
测试验证与延伸阅读
这些类的写入行为有专门的回归测试覆盖:test_newton_schemas.py(位于isaaclab_newton包的test/sim/目录),用于验证各字段正确写入对应命名空间的 USD 属性。若需理解 schema cfg 的整体设计(何时用哪个类、基类与 solver 子类的分工),建议配合阅读核心概念文档 schema_cfgs(原文档中的:doc:指引)。
选型速查
- 给 MuJoCo 求解器做重力补偿:
MujocoRigidBodyPropertiesCfg(gravcomp=1.0)+MujocoJointDrivePropertiesCfg(actuatorgravcomp=True); - 薄壳/布料/高速防穿透碰撞:
NewtonCollisionPropertiesCfg(contact_margin=..., contact_gap=...); - 凸包质量上限:
NewtonMeshCollisionPropertiesCfg(max_hull_vertices=-1)(需配合mesh_approximation_name="convexHull"); - 滚动/扭转摩擦建模:
NewtonMaterialPropertiesCfg(rolling_friction=..., torsional_friction=...); - 显式接管自碰撞开关:
NewtonArticulationRootPropertiesCfg(self_collision_enabled=True); - 软体资产语义标记:
NewtonDeformableBodyPropertiesCfg()。
所有字段均遵循“None 即不修改”的幂等写入约定,因此可以安全地与同 prim 上的其他 solver cfg(如 PhysX 的Physx*PropertiesCfg,见 isaaclab_physx 对应实现)组合使用,互不覆盖。
【免费下载链接】IsaacLabUnified framework for robot learning built on NVIDIA Isaac Sim项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考