为 Newton MJWarp 准备资产#
先决条件#
修改资产前,先了解 Isaac Lab 如何选择后端及任务特有预设;见 后端与预设 。本指南为 physics=newton_mjwarp 准备资产和任务。两种后端都能运行资产与任务后,再通过 在 PhysX 和 Newton 之间迁移策略 迁移策略检查点。需要在目标求解器中验证的概念差异见 求解器差异 ;专门的 MJWarp 调参流程见 MJWarp 调优 。
导入多物理后端资产#
Isaac Lab 资产可以同时用于 physics=physx 和 physics=newton_mjwarp 。许多资产编写了 USD Physics 和 PhysX 模式,Newton 会将受支持的属性解析到自身模型中,因此不需要单独制作 Newton 专用副本。请根据功能和模式文档核对每项属性:资产中存在某个 PhysX 属性,并不代表 MJWarp 在步进时会使用它。
对于新的 URDF 或 MJCF 资产,使用 Isaac Lab 导入器创建多物理后端资产。保持 run_asset_transformer 和 run_multi_physics_conversion 启用(两者默认均为 True ),使转换生成中立物理、PhysX 和 MuJoCo payload。当前转换器采用嵌套刚体结构,而非早期的扁平 USD 结构。参见 导入新资产 、 UrdfConverterCfg 和 MjcfConverterCfg 。
区分通用与求解器特有属性#
将通用 USD Physics 属性放入 RigidBodyBaseCfg 、 JointDriveBaseCfg 等求解器通用配置类,将后端专属属性放入对应子类:
MJWarp 特有属性使用
MujocoRigidBodyPropertiesCfg、MujocoJointDrivePropertiesCfg和MujocoCollisionCfg。受支持的 Newton 原生碰撞、材质、关节体等属性,使用对应的
Newton*PropertiesCfg类。PhysX 专属的阻尼、稳定化、求解器迭代、接触面摩擦和柔顺接触属性,保留在对应的
Physx*PropertiesCfg类中。
配置继承体系和参数到 USD 的对应规则见 模式配置类 。受支持字段请查看 Newton/MuJoCo 模式 API 和 PhysX 模式 API 。某个值存在于 PhysX 资产或导入的 Newton 模型中,并不能证明 MJWarp 会使用它。
检查机械模型#
检查每个动态连杆及与接触相关的物体:
设置正质量 [kg]、质心 [m] 和正定惯量 [kg*m^2]。出现占位惯量警告时,应视为模型问题,并核对惯量与质心的参考坐标系。
只为有意参与碰撞的几何体应用
UsdPhysics.CollisionAPI。检查近似方式、网格缩放、接触偏移或裕量、材质绑定、恢复系数和自碰撞过滤;外观一致并不意味着碰撞一致。验证关节体根节点、固定基座表示、固定关节合并、嵌套刚体、关节类型、轴和限制。
确保每个刚体级重力设置都有明确用途。过时的覆盖值可能使任务中的重力与场景重力不同。
匹配碰撞、接触和摩擦行为#
不要直接照搬 PhysX 摩擦参数的数值。先在两个后端验证预期碰撞形状、材质绑定、接触位置、接触数量和夹爪可用法向力。然后检查各形状解析后的 MuJoCo 接触维数 condim : 1 为无摩擦, 3 增加切向摩擦, 4 增加扭转摩擦, 6 还增加滚动摩擦。选择能表达接触物理的最小模型,并确认导入器和接触路径保留了该设置。
接触模型有效后,再根据实测切向滑移调整材质摩擦。 MujocoCollisionCfg 还提供 priority 、 solmix 、 solref 和 solimp 等逐碰撞体高级覆盖选项,仅在测量证明接触模型需要时使用。请使用 contact_margin 、 contact_gap 和 max_hull_vertices ,不要使用导入器的原始属性。当前全局求解器与接触调参顺序见 MJWarp 调优 。
验证执行器和限制#
检查各关节的驱动力上限、刚度、阻尼、摩擦、电枢惯量、动作缩放和控制周期。电枢惯量只作用于关节坐标,应使用有物理依据的折算电机/传动惯量,或通过受控响应试验确定;不要用它掩盖错误的刚体质量、惯量、单位、重置穿透或接触容量。改变电枢惯量后应重新调整阻尼。通用执行器模型和配置指南见 执行器 。
actuator_velocity_limit 是执行器的物理额定速度,Isaac Lab 可在执行器或任务逻辑、观测、奖励和终止条件中使用它,但 MJWarp 不会将其解析到求解器模型,也不会在步进时施加该限制。 joint_velocity_limit 请求求解器侧硬限幅,Isaac Lab 将其写入 Newton 的 Model.joint_velocity_limit ;MJWarp 丢弃该字段,而 Kamino 会执行它。如果 MJWarp 任务需要速度边界,应在任务或控制逻辑中实现并验证。仿真驱动力限制使用 joint_effort_limit ,显式执行器模型限幅使用 actuator_effort_limit ;两者都应根据电机和齿轮箱确定,不要为整个机器人设置同一个过大值。
运行成对冒烟测试#
训练或迁移前,在两种后端中运行相同的固定任务状态:
uv run --extra isaacsim python scripts/environments/zero_agent.py --task TASK --num_envs 4 --viz none physics=physx
uv run --extra isaacsim python scripts/environments/zero_agent.py --task TASK --num_envs 4 --viz none physics=newton_mjwarp
让每次运行经历多次重置。对同一固定抓取,记录物体位移、接触数量、夹爪驱动力、穿透和成功率。还应检查非有限状态、首步冲量、异常饱和、过大角速度、接触丢失,以及导入器或求解器警告。第一个物理步之前就应排除机器人与物体/支撑面的穿透、不可满足的 mimic 状态和无效随机几何。
考虑求解器差异#
成对冒烟测试后,使用目标求解器的参数处理 求解器差异 所述差异:
扩大规模前,使用少量但足以验证的环境和可视化器,重新验证接触行为。
根据实测滑移重新调整材质摩擦;PhysX 接触面摩擦与 MJWarp 接触摩擦不能直接按数值互换。
根据观察到的反弹和抖动重新调整恢复系数,不要假定 PhysX 场景阈值也适用于 Newton。
使用固定复现案例对比时间步长和
num_substeps,尤其是接触密集任务。PhysX 任务使用 CCD 时,应验证 Newton 的碰撞策略,并按需缩短求解器时间步长;MJWarp 的
ccd_iterations不是 CCD 开关。对于 Kamino,先验证重置状态一致性,再研究约束稳定化或收敛设置。
诊断仅在 Newton 中发生的故障#
使用一个环境、固定种子和重置状态,关闭域随机化,并在两个后端使用相同动作序列,复现首次失败的步。调参前先定位故障:
初始化或第一步失败时,检查质量、惯量、缩放、重置重叠、拓扑、驱动和不受支持的功能。
开始接触时失败,检查接触位置和数量、容量警告、裕量、
condim、摩擦、摩擦锥选择,以及极端质量或惯量比。控制期间失败时,检查驱动力和增益限制、动作缩放、
dt、子步、阻尼、电枢惯量及关节限位冲击。密集场景中,对比负载最重环境与逐环境接触/约束容量。
启用 NewtonCfg.debug_mode ,查看迭代上限使用情况。先增大溢出的容量;只有资产、重置、控制器、接触模型和容量均有效后,才改变收敛设置。保留最小固定状态复现案例,记录第一个非有限量,便于逐项对比后续修改。