IsaacLab 3.0

IsaacLab 3.0#

IsaacLab 3.0 is the upcoming release of IsaacLab, which will be compatible with Isaac Sim 6.0, and at the same time will support the new Newton physics engine. This will allow users to train policies on the Newton physics engine, or PhysX. To accommodate this major code refactoring are required. In this section, we will go over some of the changes, how that will affect IsaacLab 2.X users, and how to migrate to IsaacLab 3.0. The current branch of feature/newton gives a glance of what is to come. While the changes to the internal code structure are significant, the changes to the user API are minimal.

Let’s start with the biggest change: enabling the use of multiple physics engines. We refactored our code so that we can not only support PhysX and Newton, but any other physics engine, enabling users to bring their own physics engine to IsaacLab if they desire. To enable this, we introduce a base implementations of our simulation interfaces, Articulation or ContactSensor for instance. These provide a set of abstract methods that all physics engines must implement. In turn this allows all of the default IsaacLab environments to work with any physics engine. This also allows us to ensure that IsaacLab 3.0 is backwards compatible with IsaacLab 2.X. For engine specific calls, users could get the underlying view of the physics engine and call the engine specific APIs directly.

However, as we are refactoring the code, we are also looking at ways to limit the overhead of IsaacLab’s. In an effort to minimize the overhead, we are moving all our low level code away from torch, and instead will rely heavily on warp. This will allow us to write low level code that is more efficient, and also to take advantage of the cuda-graphing. However, this means that the data classes such as ArticulationData or ContactSensorData will only return warp arrays. Users will hence have to call wp.to_torch to convert them to torch tensors if they desire. Our setters/writers will support both warp arrays and torch tensors, and will use the most optimal strategy to update the warp arrays under the hood. This minimizes the amount of changes required for users to migrate to IsaacLab 3.0.

Another new feature of the writers and setters is the ability to provide them with masks and complete data (as opposed to indices and partial data in IsaacLab 2.X). Note that this feature will be available along with the ability to provide indices and partial data, and that the default behavior will still be to provide indices and partial data. However, if using warp, users will have to provide masks and complete data. In general we encourage users to move to adopt this new feature as, if done well, it will reduce on the fly memory allocations, and should result in better performance.

On the optimization front, we decided to change quaternion conventions. Originally, IsaacLab and Isaac Sim both adopted the wxyz convention. However, we were doing a located of conversion to and from xyzw in our setters/writers as PhysX uses the xyzw convention. Since both Newton and Warp, also use the xyzw convention, we decided to change our default convention to xyzw. This means that all our APIs will now return quaternions in the xyzw convention. This is likely a breaking change for all the custom mdps that are not using our math module. While this change is substantial, it should make things more consistent for when users are using the simulation views directly, and will remove needless conversions.

Finally, alongside the new isaaclab_newton extension, we are also introducing new isaaclab_experimental and isaaclab_task_experimental extensions. These extensions will allow quickly bring to main isaaclab new features while leaving them the time they need to mature before being fully integrated into the core isaaclab extensions. In this release, we are introducing cuda-graphing support for direct rl tasks. This allows to drastically reduce IsaacLab’s overhead making training faster. Try them out and let us know what you think!

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