Isaac Lab - Newton Beta 2

Isaac Lab - Newton Beta 2#

Isaac Lab - Newton Beta 2(feature/newton 分支)为 Isaac Lab 提供了 Newton 物理引擎集成。我们重构了代码,使其不仅能支持 PhysX 和 Newton,还能支持任何其他物理引擎,让用户可以根据需要将自己的物理引擎引入 Isaac Lab。为此,我们引入了 仿真接口 的基础实现,例如 ArticulationContactSensor 。这些接口提供了一组所有物理引擎都必须实现的抽象方法。这使得所有默认的 Isaac Lab 环境都能与任何物理引擎配合工作。这也确保了 Isaac Lab - Newton Beta 2 与 Isaac Lab 2.X 向后兼容。对于特定引擎的调用,用户可以获取物理引擎的底层视图并直接调用引擎特定的 API。

然而,在重构代码的同时,我们也在寻找方法来减少 Isaac Lab 的开销。为了最小化开销,我们正在将所有底层代码从 torch 迁移出来,转而大量依赖 warp。这将使我们能够编写更高效的底层代码,并充分利用 cuda-graphing。但是,这意味着 数据类 ,如 ArticulationDataContactSensorData ,将只返回 warp 数组。因此,如果用户需要,必须调用 wp.to_torch 将其转换为 torch 张量。我们的 setter/writer 将同时支持 warp 数组和 torch 张量,并在底层使用最优策略来更新 warp 数组。这最大限度地减少了用户迁移到 Isaac Lab - Newton Beta 2 所需的更改量。

writer 和 setter 的另一个新功能是能够提供掩码和完整数据(与 Isaac Lab 2.X 中的索引和部分数据相对)。请注意,此功能将与提供索引和部分数据的功能一起可用,默认行为仍然是提供索引和部分数据。但是,如果使用 warp,用户将必须提供掩码和完整数据。总的来说,我们鼓励用户采用这个新功能,因为如果使用得当,它将减少即时内存分配,并应该带来更好的性能。

在优化方面,我们决定更改四元数约定。最初,Isaac Lab 和 Isaac Sim 都采用 wxyz 约定。然而,由于 PhysX 使用 xyzw 约定,我们在 setter/writer 中进行了多次 xyzw 转换。由于 Newton 和 Warp 也都使用 xyzw 约定,我们决定将默认约定更改为 xyzw。这意味着我们所有的 API 现在都将以 xyzw 约定返回四元数。对于所有未使用我们的 math 模块的自定义 MDP,这可能是一个破坏性更改。虽然这个更改很大,但当用户直接使用仿真视图时,它应该使事情更加一致,并消除不必要的转换。

最后,除了新的 isaaclab_newton 扩展,我们还引入了新的 isaaclab_experimental 和 isaaclab_task_experimental 扩展。这些扩展将允许我们快速将新功能引入 Isaac Lab 主分支,同时给予它们在完全集成到核心 Isaac Lab 扩展之前成熟所需的时间。在此版本中,我们引入了对 direct RL 任务的 cuda-graphing 支持。这大大减少了 Isaac Lab 的开销,使训练更快。试试看,告诉我们你的想法!

./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

下一步是什么?#

Isaac Lab 3.0 是 Isaac Lab 即将发布的版本,它将兼容 Isaac Sim 6.0,同时支持新的 Newton 物理引擎。这将允许用户在 Newton 物理引擎或 PhysX 上训练策略。为了适应这一点,需要进行重大的代码重构。在本节中,我们将介绍一些更改,这些更改将如何影响 Isaac Lab 2.X 用户,以及如何迁移到 Isaac Lab 3.0。当前的 feature/newton 分支让我们一窥即将到来的变化。虽然内部代码结构的更改很大,但用户 API 的更改是最小的。