已知问题#
注意
请参阅 Omniverse Isaac Sim documentation 以查看已知问题和解决方法。
重置环境后数据值变旧#
重置环境时,某些资产和传感器的数据字段未更新。这些包括关节链中链接的姿势、摄像头图像、接触传感器读数和激光雷达点云。这是一个已知问题,与 Omniverse 中 PhysX 和渲染引擎的工作方式有关。
许多物理引擎将模拟步骤作为两级调用处理:forward()
和 simulate()
,分别更新关节链中的运动学和动态状态。不幸的是,PhysX 只有一个 step()
调用,其中两个操作合并起来。由于通过 GPU 内核计算,它们无法简单地将这些操作拆分开来。因此,目前无法设置根和/或关节状态并进行向前调用以更新链接的运动学状态。这既影响初始化,也影响周期性重置。
对于与 RTX 渲染相关的传感器(如摄像头),在设置传感器状态后,传感器数据不会立即更新。渲染引擎更新与模拟器的 step()
调用捆绑在一起,仅在模拟向前步进时才会调用。这意味着传感器数据在重置后不会立即更新,它将保留过时的值。
虽然上述是错误的,但目前没有直接的解决方法。根据我们在使用 IsaacGym 时的经验,重置值对智能体学习的影响取决于环境终止的频率。如果智能体成功学习,这个数字会下降并且不会对性能有显著影响。
我们已向相应的 Omniverse 团队提出了一个功能请求,以完全控制模拟应用的不同部分的步进。然而,目前尚未确定此功能请求的时间表。
备注
使用 Isaac Lab 1.2,我们在 body_state_w
属性内引入了 PhysX 运动学更新调用。 这种解决方法确保了当设置了root或关节的状态时,连杆的状态也会得到更新。
摄像头前的空白初始帧#
在独立脚本中使用 Camera
传感器时,前几帧可能会是空白的。这是一个已知问题,模拟器需要一些步骤来正确加载材质纹理并填充渲染目标。
解决此问题的一个方法是在初始化摄像头传感器并设置姿势后添加以下内容:
from omni.isaac.lab.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()
使用实例化资产作为标记对象#
使用 instanceable assets 作为标记对象时,标记对象不起作用,因为 Omniverse 在使用 PointInstancer
模式时不支持实例化资产。这是一个已知问题,将在将来的版本中修复。
如果使用实例化资产作为标记对象,则标记对象类会删除资产的所有物理属性。这会在相同资产的其他引用上复制,因为实例化资产的物理属性存储在实例化资产的 USD 文件中,而不是在其场景引用的 USD 文件中。
退出进程#
当使用 Ctrl+C
退出进程时,偶尔会出现以下错误:
[Error] [omni.physx.plugin] Subscription cannot be changed during the event call.
这是因为终止发生在物理事件调用中间,不应影响 Isaac Lab 的功能。可以安全地忽略错误消息并继续终止进程。在 Windows 系统上,请使用 Ctrl+Break
或 Ctrl+fn+B
来终止进程。