👀 Overview
We leverage the new release of Isaac Sim, 4.2.0, and bring RTX-based tiled rendering, support for multi-agent environments, and introduce many bug fixes and improvements.
Additionally, we have published an example for generating rewards using an LLM based on Eureka, available here https://github.com/isaac-sim/IsaacLabEureka.
Full Changelog: v1.1.0...v1.2.0
🔆 Highlighted Features
shadowhand_cube_tiled_rendering.mp4
shadowhand_multi_agent_hand_over.mp4
deformable_teddy_pick_up.mp4
✨ New Features
- Adds RTX-based tiled rendering. This improves the overall rendering speed and quality.
- Adds the direct workflow perceptive Shadowhand Cube Repose environment
Isaac-Repose-Cube-Shadow-Vision-Direct-v0
by @kellyguo11. - Adds support for multi-agent environments with the Direct workflow, with support for MAPPO and IPPO in SKRL by @Toni-SM
- Adds the direct workflow multi-agent environments
Isaac-Cart-Double-Pendulum-Direct-v0
andIsaac-Shadow-Hand-Over-Direct-v0
by @Toni-SM - Adds throughput benchmarking scripts for the different learning workflows by @kellyguo11 in #759
- Adds results for the benchmarks in the documentation here for different types of hardware by @kellyguo11
- Adds the direct workflow Allegro hand environment by @kellyguo11 in #709
- Adds video recording to the play scripts in RL workflows by @j3soon in #763
- Adds comparison tables for the supported RL libraries here by @kellyguo11
- Add APIs for deformable asset by @masoudmoghani in #630
- Adds support for MJCF converter by @qqqwan in #957
- Adds a function to define camera configs through intrinsic matrix by @pascal-roth in #617
- Adds configurable modifiers to observation manager by @jtigue-bdai in #830
- Adds the Hydra configuration system for RL training by @Dhoeller19 in #700
🔧 Improvements
- Uses PhysX accelerations for rigid body acceleration data by @Mayankm96 in #760
- Adds documentation on the frames for asset data by @Mayankm96 in #742
- Renames Unitree configs in locomotion tasks to match properly by @Mayankm96 in #714
- Adds option to set the height of the border in the
TerrainGenerator
by @pascal-roth in #744 - Adds a cli arg to
run_all_tests.py
for testing a selected extension by @jsmith-bdai in #753 - Decouples rigid object and articulation asset classes by @Mayankm96 in #644
- Adds performance optimizations for domain randomization by @kellyguo11 in #494
- Allows having hybrid dimensional terms inside an observation group by @Mayankm96 in #772
- Adds a flag to preserve joint order inside
JointActionCfg
action term by @xav-nal in #787 - Adds the ability to resume training from a checkpoint with rl_games by @sizsJEon in #797
- Adds windows configuration to VS code tasks by @johnBuffer in #963
- Adapts A and D button bindings in the keyboard device by @zoctipus in #910
- Uses
torch.einsum
for quat_rotate and quat_rotate_inverse operations by @dxyy1 in #900 - Expands on articulation test for multiple instances and devices by @jsmith-bdai in #872
- Adds setting of environment seed at initialization by @Mayankm96 in #940
- Disables default viewport when headless but cameras are enabled by @kellyguo11 in #851
- Simplifies the return type for
parse_env_cfg
method by @Mayankm96 in #965 - Simplifies the if-elses inside the event manager apply method by @Mayankm96 in #948
🐛 Bug Fixes
- Fixes rendering frame delays. Rendered images now faithfully represent the latest state of the physics scene. We added the flag
rerender_on_reset
in the environment configs to toggle an additional render step when a reset happens. When activated, the images/observation always represent the latest state of the environment, but this also reduces performance. - Fixes
wrap_to_pi
function in math utilities by @Mayankm96 in #771 - Fixes setting of pose when spawning a mesh by @masoudmoghani in #692
- Fixes caching of the terrain using the terrain generator by @Mayankm96 in #757
- Fixes running train scripts when rsl_rl is not installed by @Dhoeller19 in #784, #789
- Adds flag to recompute inertia when randomizing the mass of a rigid body by @Mayankm96 in #989
- Fixes support for
classmethod
when defining a configclass by @Mayankm96 in #901 - Fixes
Sb3VecEnvWrapper
to clear buffer on reset by @EricJin2002 in #974 - Fixes venv and conda pip installation on windows by @kellyguo11 in #970
- Sets native livestream extensions to Isaac Sim 4.1-4.0 defaults by @jtigue-bdai in #954
- Defaults the gym video recorder fps to match episode decimation by @ozhanozen in #894
- Fixes the event manager's apply method by @kellyguo11 in #936
- Updates camera docs with world units and introduces new test for intrinsics by @pascal-roth in #886
- Adds the ability to resume training from a checkpoint with rl_games by @sizsJEon in #797
💔 Breaking Changes
- Simplifies device setting in SimulationCfg and AppLauncher by @Dhoeller19 in #696
- Fixes conflict in teleop-device command line argument in scripts by @Dhoeller19 in #791
- Converts container.sh into Python utilities by @hhansen-bdai in f565c33
- Drops support for
TiledCamera
for Isaac Sim 4.1
✈️ Migration Guide
Setting the simulation device into the simulation context
Details
Previously, changing the simulation device to CPU required users to set other simulation parameters (such as disabling GPU physics and GPU pipelines). This made setting up the device appear complex. We now simplify the checks for device directly inside the simulation context, so users only need to specify the device through the configuration object.
Before:
sim_utils.SimulationCfg(device="cpu", use_gpu_pipeline=False, dt=0.01, physx=sim_utils.PhysxCfg(use_gpu=False))
Now:
sim_utils.SimulationCfg(device="cpu", dt=0.01, physx=sim_utils.PhysxCfg())
Setting the simulation device from CLI
Details
Previously, users could specify the device through the command line argument --device_id
. However, this made it ambiguous when users wanted to set the device to CPU. Thus, instead of the device ID, users need to specify the device explicitly through the argument --device
. The valid options for the device name are:
- "cpu": runs simulation on CPU
- "cuda": runs simulation on GPU with device ID at default index
- "cuda:N": runs simulation on GPU with device ID at
N
. For instance, "cuda:0" will use device at index "0".
Due to the above change, the command line interaction with some of the scripts has changed.
Before:
./isaaclab.sh -p source/standalone/workflows/sb3/train.py --task Isaac-Cartpole-v0 --headless --cpu
Now:
./isaaclab.sh -p source/standalone/workflows/sb3/train.py --task Isaac-Cartpole-v0 --headless --device cpu
Renaming of teleoperation device CLI in standalone scripts
Details
Since --device
is now an argument provided by the AppLauncher, it conflicted with the command-line argument used for specifying the teleoperation-device in some of the standalone scripts. Thus, to fix this conflict, the teleoperation-device now needs to be specified through --teleop_device
argument.
Before:
./isaaclab.sh -p source/standalone/environments/teleoperation/teleop_se3_agent.py --task Isaac-Lift-Cube-Franka-IK-Rel-v0 --num_envs 1 --device keyboard
Now:
./isaaclab.sh -p source/standalone/environments/teleoperation/teleop_se3_agent.py --task Isaac-Lift-Cube-Franka-IK-Rel-v0 --num_envs 1 --teleop_device keyboard
Using Python-version of container utility script
Details
The prior container.sh
became quite complex as it had many different use cases in one script. For instance, building a docker image for "base" or "ros2", as well as cluster deployment. As more users wanted to have the flexibility to overlay their own docker settings, maintaining this bash script became cumbersome. Hence, we migrated its features into a Python script in this release. Additionally, we split the cluster-related utilities into their own script inside the docker/cluster
directory.
We still maintain backward compatibility for container.sh
. Internally, it calls the Python script container.py
. We request users to use the Python script directly.
Before:
./docker/container.sh start
Now:
./docker/container.py start
Using separate directories for logging videos in RL workflows
Details
Previously, users could record videos during the RL training by specifying the --video
flag to the train.py
script. The videos would be saved inside the videos
directory in the corresponding log directory of the run.
Since many users requested to also be able to record videos while inferencing the policy, recording videos have also been added to the play.py
script. Since changing the prefix of the video file names is not possible, the videos from the train and play scripts are saved inside the videos/train
and videos/play
directories, respectively.
Drops support for the tiled camera with Isaac Sim 4.1
Details
Various fixes have been made to the tiled camera rendering pipeline in Isaac Sim 4.2. This made supporting the tiled camera with Isaac Sim 4.1 difficult. Hence, for the best experience, we advice switching to Isaac Sim 4.2 with this release of Isaac Lab.
🤗 New Contributors
- @xav-nal made their first contribution in #787
- @sizsJEon made their first contribution in #797
- @jtigue-bdai made their first contribution in #830
- @StrainFlow made their first contribution in #835
- @mpgussert made their first contribution in #827
- @Symars made their first contribution in #898
- @martinmatak made their first contribution in #876
- @bearpaw made their first contribution in #945
- @dxyy1 made their first contribution in #900
- @qqqwan made their first contribution in #957
- @johnBuffer made their first contribution in #963
- @EricJin2002 made their first contribution in #974
- @iamnambiar made their first contribution in #986