IsaacLab 3.0#
IsaacLab 3.0是IsaacLab即将发布的版本,它将与Isaac Sim 6.0兼容,同时支持新的Newton物理引擎。这将允许用户在Newton物理引擎或PhysX上训练策略。为了适应这一重大变化,需要进行代码重构。在本节中,我们将介绍一些变化、这将如何影响IsaacLab 2.X用户,以及如何迁移到IsaacLab 3.0。当前的 feature/newton 分支展示了即将到来的内容。虽然内部代码结构的变化很大,但用户API的变化很小。
让我们从最大的变化开始:启用多个物理引擎的使用。我们重构了代码,使其不仅可以支持PhysX和Newton,还可以支持任何其他物理引擎,使用户可以根据需要将自己的物理引擎引入IsaacLab。为了实现这一点,我们引入了 仿真接口 的基础实现,例如 Articulation 或 ContactSensor 。这些提供了所有物理引擎必须实现的一组抽象方法。反过来,这允许所有默认的IsaacLab环境与任何物理引擎一起工作。这也确保了IsaacLab 3.0向后兼容IsaacLab 2.X。对于特定引擎的调用,用户可以获取物理引擎的底层视图并直接调用特定引擎的API。
然而,在重构代码的同时,我们也在寻找限制IsaacLab开销的方法。为了最小化开销,我们将所有底层代码从torch转移出来,改为大量依赖warp。这将使我们能够编写更高效的底层代码,并利用CUDA图形化。然而,这意味着 数据类 (如 ArticulationData 或 ContactSensorData )将只返回warp数组。因此,如果需要,用户必须调用 wp.to_torch 将其转换为torch张量。我们的setters/writers将同时支持warp数组和torch张量,并将使用最优策略在底层更新warp数组。这最小化了用户迁移到IsaacLab 3.0所需的更改量。
writers和setters的另一个新功能是能够向它们提供掩码和完整数据(与IsaacLab 2.X中的索引和部分数据相对)。请注意,此功能将与提供索引和部分数据的能力一起提供,默认行为仍将是提供索引和部分数据。但是,如果使用warp,用户将必须提供掩码和完整数据。一般来说,我们鼓励用户采用这一新功能,因为如果做得好,它将减少即时内存分配,并应该带来更好的性能。
在优化方面,我们决定更改四元数约定。最初,IsaacLab和Isaac Sim都采用了 wxyz 约定。然而,由于PhysX使用 xyzw 约定,我们在setters/writers中进行了大量的 xyzw 转换。由于Newton和Warp也使用 xyzw 约定,我们决定将默认约定更改为 xyzw 。这意味着我们所有的API现在都将以 xyzw 约定返回四元数。对于所有未使用我们 math 模块的自定义mdp,这可能是一个破坏性更改。虽然这个变化很大,但当用户直接使用仿真视图时,它应该使事情更加一致,并将消除不必要的转换。
最后,除了新的isaaclab_newton扩展之外,我们还引入了新的isaaclab_experimental和isaaclab_task_experimental扩展。这些扩展将允许快速将新功能引入主isaaclab,同时给它们足够的时间成熟,然后再完全集成到核心isaaclab扩展中。在此版本中,我们为直接RL任务引入了CUDA图形化支持。这可以大幅减少IsaacLab的开销,使训练更快。试试它们,让我们知道您的想法!
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Cartpole-Direct-Warp-v0 --num_envs 4096 --headless
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Ant-Direct-Warp-v0 --num_envs 4096 --headless
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Humanoid-Direct-Warp-v0 --num_envs 4096 --headless