已知问题#
注意
请参阅 Omniverse Isaac Sim 文档 以查看已知问题和解决方法。
下列每个问题都注明了受影响的后端。某一后端下列出的问题,除非另有说明,否则不适用于其他后端。
PhysX 后端#
表面夹爪需要在 CPU 上仿真#
受影响范围: 使用 physics=isaacsim_physx 的表面夹爪任务。
表面夹爪需要在 CPU 上仿真,包括 UR10 Long/Short Suction 堆叠任务、Galbot Right Arm Suction 堆叠任务,以及后者采用相对和绝对控制的 Mimic 变体。运行遥操作时请传入 --device cpu 。零动作和随机动作智能体在未指定 --device 时会保留这些任务默认的 CPU 设置;不支持显式改用 GPU。
GPU 关节体求解器分区别名问题#
受影响范围: 在 CUDA 上运行且 PhysxCfg.gpu_max_num_partitions > 1 的 physics=isaacsim_physx 。
当场景中有超过 32 个关节体实例,且至少一个关节体包含超过 64 个连杆时,PhysX GPU 关节体求解器可能破坏关节体状态。表现可能是本应互不影响的环境中,关节速度失控或出现 NaN。已报告的复现案例见 Isaac Lab 问题 #8121 。
在底层 PhysX 问题修复之前,可设置 PhysxCfg(gpu_max_num_partitions=1) 作为临时解决办法。对于受管理的 PhysX Articulation 资产,Isaac Lab 检测到上述已知条件时会记录警告。
重置后立即读取传感器,数据仍是旧值#
受影响范围: physics=isaacsim_physx 、 physics=ovphysx 及所有基于 RTX 的渲染器。
许多物理引擎把一次仿真步分成 forward() 和 simulate() 两次调用,分别更新运动学状态和动力学状态。PhysX 只有一个 step() 调用,将这两项操作合在一起。由于相关计算通过 GPU 核函数完成,两者不易拆开。因此,写入根状态或关节状态本身并不会执行一次完整的前向计算。
对于 关节体连杆位姿 ,这一问题已得到处理:读取 body_link_pose_w (或已弃用的 body_state_w )会触发 PhysX 运动学更新,因此即使没有在中间调用 step() ,连杆位姿也能反映此前写入的根状态或关节状态。
对于 基于 RTX 渲染的传感器 ,尤其是相机,写入状态仍不会刷新数据。渲染引擎更新与仿真器的 step() 调用绑定,只有仿真向前推进时才会刷新传感器数据。因此,在重置后、下一步仿真前读取的数据仍是上一帧。
目前,传感器这一情况还没有直接的解决办法。根据我们的经验,重置时的旧值对智能体学习的影响与环境终止频率有关;随着智能体逐渐学会任务,终止频率下降,这种影响也会减弱。
退出进程#
受影响范围: physics=isaacsim_physx 。
当使用 Ctrl+C 退出进程时,偶尔会出现以下错误:
[Error] [omni.physx.plugin] Subscription cannot be changed during the event call.
这是因为终止发生在物理事件调用中间,不应影响 Isaac Lab 的功能。可以安全地忽略错误消息并继续终止进程。在 Windows 系统上,请使用 Ctrl+Break 或 Ctrl+fn+B 来终止进程。
Newton 后端#
OpenUSD 解析含大量碰撞体的刚体时可能崩溃#
受影响范围: 使用早于 26.05 的 OpenUSD 版本且不依赖 Kit 的 Newton 工作流,以及早于 6.1 的 Isaac Sim 版本。Isaac Sim 6.1 及后续版本所附带的 OpenUSD 运行时已包含上游修复。
旧版 OpenUSD 的 UsdPhysics.LoadUsdPhysicsFromRange 存在线程安全问题:多个碰撞体属于同一刚体时可能触发此问题。Newton 导入 USD 舞台时会调用这一 API,因此受影响的进程可能在创建场景时因段错误、访问冲突、堆损坏报错而退出,或陷入挂起。问题及上游修复详见 OpenUSD PR #4002 。
备注
对于不依赖 Kit 的工作流,Isaac Lab 从 usd-exchange 获取 pxr 模块。 usd-exchange 和 usd-core 是同一 OpenUSD 运行时的两种 Python 发行包,都提供 pxr ,因此不应同时安装。两者的发行包版本编号不同:例如, usd-exchange==3.0.0 提供的是 OpenUSD 26.08。Isaac Sim 则使用随 Kit 附带的 OpenUSD 运行时。
对于受影响的不依赖 Kit 的运行时,或早于 6.1 的 Isaac Sim 运行时,可将 OpenUSD 限制为使用一个工作线程。在启动 Python 之前设置 PXR_WORK_THREAD_LIMIT ,确保任何 pxr 模块初始化前该限制已经生效:
PXR_WORK_THREAD_LIMIT=1 uv run isaaclab train --rl_library rsl_rl --task Isaac-Reach-Franka physics=newton_mjwarp
set PXR_WORK_THREAD_LIMIT=1
uv run isaaclab train --rl_library rsl_rl --task Isaac-Reach-Franka physics=newton_mjwarp
这个环境变量会把 OpenUSD 的进程级工作线程池限制为一个线程,可能降低 USD 导入性能。仅在受影响的运行时中使用;升级到包含修复的 OpenUSD 发行包或 Isaac Sim 6.1 及后续版本后,请移除此设置。
Kamino 尚未验证闭环关节体(如 Agility Digit)#
受影响范围: physics=newton_kamino 。
对于 USD 中包含闭合运动学环路的机器人,例如 Agility Digit 的跟腱杆和脚趾推杆,目前尚未在 newton_kamino 上完成验证。
渲染器#
相机前的空白初始帧#
受影响范围: 基于 RTX 的渲染器( renderer=isaacsim_rtx 、 renderer=ovrtx )。
在独立脚本中使用 Camera 传感器时,前几帧可能为空白。这是仿真器的已知问题:它需要几步才能正确加载材质纹理并填充渲染目标。资产尚未缓存、场景中纹理较多或较大时最容易出现;对于资产已在本地缓存的简单场景,第一帧通常就能正常显示。
如果确实出现空白帧,请在初始化相机传感器并设置位姿后添加以下代码:
from isaaclab.sim import SimulationContext
sim = SimulationContext.instance()
# note: the number of steps might vary depending on how complicated the scene is.
for _ in range(12):
sim.render()
场景分区上限为 15625 个#
受影响范围: 启用了场景分区的 renderer=isaacsim_rtx ,以及 renderer=ovrtx 。
底层 rtx.scenedb.plugin 分配的场景分区池大小固定,上限为 15625 个,与请求分区的渲染器无关。Isaac RTX 渲染器启用 enable_scene_partitioning 时,Isaac Lab 为每个环境分配一个场景分区;OVRTX 始终为每个环境分配一个。因此,任一后端运行超过 15625 个环境时都会超出分区池容量。达到上限后, rtx.scenedb.plugin 会记录警告并丢弃余下分区:
[Warning] [rtx.scenedb.plugin] SceneDbContext : Maximum number of scene partitions
(15625) reached. Additional scene partitions will be discarded.
超出上限的环境没有独立分区,会与其他环境共用分区,因此其平铺相机视图可能显示其他环境的几何体。
使用实例化资产作为标记对象#
受影响范围: 所有基于 Kit 的渲染器。
使用 instanceable assets 作为标记对象时,标记对象不起作用,因为 Omniverse 在使用 PointInstancer 模式时不支持实例化资产。这是一个已知问题,将在将来的版本中修复。
如果使用实例化资产作为标记对象,则标记对象类会删除资产的所有物理属性。这会在相同资产的其他引用上复制,因为实例化资产的物理属性存储在实例化资产的 USD 文件中,而不是在其场景引用的 USD 文件中。
资产导入#
URDF 导入器:固定关节的引用无法解析#
受影响范围: URDF 导入器,与物理后端无关。
如果 URDF 连杆条目指定了质量和惯量,通过 fixed_joint 元素连接的连杆即使在 merge-joint 为 True 时也不会合并。这是预期行为:这些连杆被视为完整的刚体,而非质量为零的参考坐标系。不过,当这些连杆缺少可视几何体或碰撞体时,USD 导入器目前会发出 ReportError 警告,提示相关引用无法解析。这是导入器的已知错误,它创建了指向不存在的可视几何体的引用。在导入器修复之前,可以安全地忽略这些警告。
环境与安装#
conda 环境中的 GLIBCXX 错误#
受影响范围: 基于 conda 的安装,与物理后端无关。
某些工作流在 conda 环境中运行时,会因 OSError 退出,提示 version 'GLIBCXX_3.4.30' not found 。问题似乎源于在 Isaac Sim 启动前导入 torch 或 tensorboard 等与 torch 相关的软件包。作为临时解决办法,请确保所有 torch 导入都在 launch_simulation() 内、运行时启动之后进行,这通常可以消除错误。