Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
2c4513a
Package demos behind the Isaac Lab CLI
StafaH Sep 22, 2026
5e58122
Refine packaged demos and examples
maxkra15 Sep 22, 2026
b57ea97
Support multiple Zoo environments
maxkra15 Sep 22, 2026
90fd6e3
Restore top-level demos directory
maxkra15 Sep 22, 2026
2e37b64
Separate top-level examples from demos
maxkra15 Sep 23, 2026
f6187cb
Fix headless ray-caster example startup
maxkra15 Sep 23, 2026
fbb3f8b
Handle disabled visualizer in ray-caster example
maxkra15 Sep 23, 2026
8321c57
Keep relocated MPM programs import-safe
maxkra15 Sep 23, 2026
a7c07e3
Consolidate demos and add Newton GL program browsing
maxkra15 Sep 23, 2026
289f9f1
Run H1 locomotion on Newton and decouple the program launcher
StafaH Sep 24, 2026
ac19067
Merge branch 'develop' into feat/package-demos
StafaH Sep 24, 2026
fe8826a
Reuse the Warp kernel cache in standalone demo CI
StafaH Sep 24, 2026
3ba2a72
Use relative imports in the program launcher modules
StafaH Sep 24, 2026
61fa2f2
Run packaged programs to a clean exit in standalone tests
StafaH Sep 24, 2026
bdd0e2e
Reject the old private examples path in the wheel layout test
StafaH Sep 24, 2026
00ba5d1
Format the wheel layout assertion
StafaH Sep 24, 2026
758a8a1
Import the H1 environment after Kit starts
StafaH Sep 24, 2026
a8e5d2f
Skip OVPhysX launches when the OVPhysX runtime is missing
StafaH Sep 24, 2026
723350c
Merge remote-tracking branch 'upstream/develop' into feat/package-demos
StafaH Sep 24, 2026
de83939
Fix MPM demo import paths in Newton tests
StafaH Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ jobs:
standalone-script-scope: "demos"
standalone-script-visualizer: "none"
standalone-script-runtime-group: kit
warp-cache: restore
result-file: "test-standalone-demos-kit-report.xml"
container-name: isaac-lab-standalone-demos-kit-test
omni-github-test-type: standalone-demo
Expand Down Expand Up @@ -460,6 +461,7 @@ jobs:
standalone-script-scope: "demos"
standalone-script-visualizer: "none"
standalone-script-runtime-group: non-kit
warp-cache: restore
result-file: "test-standalone-demos-non-kit-report.xml"
container-name: isaac-lab-standalone-demos-non-kit-test
omni-github-test-type: standalone-demo
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/wheel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ jobs:
# run only when inputs that can affect the wheel have changed.
patterns=(
$'^apps/\tStandalone apps packaged in the wheel'
$'^examples/\tDemos and examples packaged in the wheel'
$'^pyproject\.toml$\tWheel dependency metadata and resolver overrides'
$'^VERSION$\tPackage version'
$'^source/\tPython packages'
Expand Down
19 changes: 11 additions & 8 deletions docs/source/_static/css/demo-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@
return;
}

const cards = [...browser.querySelectorAll("[data-demo-path]")];
const cards = [...browser.querySelectorAll("[data-demo-id]")];
const fields = Object.fromEntries(
[...browser.querySelectorAll("[data-demo-field]")].map((field) => [field.dataset.demoField, field])
);
const commandOutput = browser.querySelector("[data-command-output]");
const copyButton = browser.querySelector("[data-copy-command]");
const copyStatus = browser.querySelector("[data-copy-status]");
const selectedName = browser.querySelector("[data-demo-name]:not([data-demo-path])");
const selectedDescription = browser.querySelector("[data-demo-description]:not([data-demo-path])");
const selectedName = browser.querySelector("[data-demo-name]:not([data-demo-id])");
const selectedDescription = browser.querySelector("[data-demo-description]:not([data-demo-id])");
let selectedCard = cards[0];

const populateSelect = (select, values, preferredValues) => {
Expand All @@ -50,17 +50,20 @@
if (fields.physics.value === "ovphysx") {
requiredExtras.add("ovphysx");
}
if (fields.visualizer.value === "newton_rtx") {
requiredExtras.add("ovrtx");
}
if (["rerun", "viser"].includes(fields.visualizer.value)) {
requiredExtras.add(fields.visualizer.value);
}
const extraOrder = ["isaacsim", "ovphysx", "tetrahedralization", "teleop", "rerun", "viser"];
const extraOrder = ["isaacsim", "ovphysx", "ovrtx", "tetrahedralization", "teleop", "rerun", "viser"];
const extras = extraOrder.filter((extra) => requiredExtras.has(extra));

const parts = ["uv", "run"];
const parts = ["uvx"];
if (extras.length) {
parts.push("--extra", extras.join(","));
parts.push("--from", `'isaaclab[${extras.join(",")}]'`);
}
parts.push("python", selectedCard.dataset.demoPath);
parts.push("isaaclab", "demo", selectedCard.dataset.demoId);
if (selectedCard.dataset.demoFixedPhysics !== "true") {
parts.push("--physics", fields.physics.value);
}
Expand Down Expand Up @@ -90,7 +93,7 @@
}
selectedName.textContent = selectedCard.dataset.demoName;
selectedDescription.textContent = selectedCard.dataset.demoDescription;
populateSelect(fields.physics, splitValues(selectedCard.dataset.demoPhysics), ["isaacsim_physx", "newton_mjwarp"]);
populateSelect(fields.physics, splitValues(selectedCard.dataset.demoPhysics), ["newton_mjwarp", "isaacsim_physx"]);
updateVisualizer();
};

Expand Down
12 changes: 6 additions & 6 deletions docs/source/api/lab/isaaclab.app.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,13 @@ To set the environment variables, one can use the following command in the termi

export LIVESTREAM=2
# run the python script
uv run --extra isaacsim python scripts/demos/quadrupeds.py
uv run --extra isaacsim isaaclab demo zoo --physics isaacsim_physx --viz kit

Alternatively, set the environment variable inline for a single invocation:

.. code-block:: bash

LIVESTREAM=2 uv run --extra isaacsim python scripts/demos/quadrupeds.py
LIVESTREAM=2 uv run --extra isaacsim isaaclab demo zoo --physics isaacsim_physx --viz kit

.. tab-item:: :icon:`fa-brands fa-linux` Linux aarch64 (DGX Spark)
:sync: linux-aarch64
Expand All @@ -78,13 +78,13 @@ To set the environment variables, one can use the following command in the termi

export LIVESTREAM=2
# run the python script
LD_PRELOAD=/lib/aarch64-linux-gnu/libgomp.so.1 uv run --extra isaacsim python scripts/demos/quadrupeds.py
LD_PRELOAD=/lib/aarch64-linux-gnu/libgomp.so.1 uv run --extra isaacsim isaaclab demo zoo --physics isaacsim_physx --viz kit

Alternatively, set the environment variable inline for a single invocation:

.. code-block:: bash

LIVESTREAM=2 LD_PRELOAD=/lib/aarch64-linux-gnu/libgomp.so.1 uv run --extra isaacsim python scripts/demos/quadrupeds.py
LIVESTREAM=2 LD_PRELOAD=/lib/aarch64-linux-gnu/libgomp.so.1 uv run --extra isaacsim isaaclab demo zoo --physics isaacsim_physx --viz kit

.. note::

Expand All @@ -106,14 +106,14 @@ To set the environment variables, one can use the following command in the termi
.. code-block:: batch

set LIVESTREAM=2
uv run --extra isaacsim python scripts/demos/quadrupeds.py
uv run --extra isaacsim isaaclab demo zoo --physics isaacsim_physx --viz kit

In PowerShell:

.. code-block:: powershell

$env:LIVESTREAM = "2"
uv run --extra isaacsim python scripts/demos/quadrupeds.py
uv run --extra isaacsim isaaclab demo zoo --physics isaacsim_physx --viz kit

.. note::

Expand Down
22 changes: 11 additions & 11 deletions docs/source/concepts/deformables.rst
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ where ``L_parent`` and ``L_child`` are the rest lengths of the two segments it s
Lab authors has no attribute for it.

To target a specific axial ``E * A`` or bending ``E * I``, invert these relations to pick the
modulus; ``scripts/demos/cables.py`` does this from a target stiffness and the segment geometry.
modulus; ``examples/cables.py`` does this from a target stiffness and the segment geometry.

Cable collision
^^^^^^^^^^^^^^^
Expand Down Expand Up @@ -571,38 +571,38 @@ Cable
winding, since leaving it unset falls back to the bend value as described above.


Demos and tasks
---------------
Examples and tasks
------------------

Run a demo first to confirm that the spawner, solver, and visualizer all work in your environment.
Run an example first to confirm that the spawner, solver, and visualizer all work in your environment.

.. list-table::
:header-rows: 1
:widths: 20 44 36

* - Kind
- Demo
- Example
- Tasks
* - Volume
- ``scripts/demos/deformables.py``
- ``deformables``
- ``Isaac-Lift-Soft-Franka``, ``Isaac-Lift-Soft-Franka-Camera``
* - Surface
- ``scripts/demos/deformables.py``
- ``deformables``
- ``Isaac-Lift-Cloth-Franka``, ``Isaac-Lift-Cloth-Franka-Camera``
* - Cable
- ``scripts/demos/cables.py``
- ``cables``
- ``Isaac-Lift-Cable-Franka``, ``Isaac-Lift-Cable-Franka-Camera``

.. code-block:: bash

# Volume and surface deformables falling onto a ground plane.
uv run --extra isaacsim --extra tetrahedralization python scripts/demos/deformables.py
uv run --extra tetrahedralization isaaclab example deformables

# A pile of cables that collide and settle. Newton VBD only.
uv run --extra isaacsim python scripts/demos/cables.py
uv run isaaclab example cables

# A larger cable pile, without a visualizer, stopping after a fixed number of steps.
uv run python scripts/demos/cables.py --visualizer none --num_cables 40 --num_segments 15 --max_steps 500
uv run isaaclab example cables --visualizer none --num_cables 40 --num_segments 15 --max_steps 500

``scripts/environments/state_machine/lift_franka_soft.py`` drives ``Isaac-Lift-Soft-Franka`` with a
scripted state machine, which is a useful starting point for a deformable manipulation task.
Expand Down
8 changes: 4 additions & 4 deletions docs/source/concepts/sensors/camera.rst
Original file line number Diff line number Diff line change
Expand Up @@ -320,11 +320,11 @@ configuration and discovered USD attributes are fixed for the camera lifetime.
separately authored RTX exposure or tonemapping settings. When ``isp_cfg`` is ``None``, the
renderer leaves authored camera exposure unchanged.

Run ``scripts/demos/sensors/ppisp_camera.py`` for a complete PPISP workflow:
Run the ``ppisp-camera`` example for a complete PPISP workflow:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/ppisp_camera.py \
uv run --extra isaacsim isaaclab example ppisp-camera \
--renderer newton_renderer --max_steps 60

Performance and validation
Expand All @@ -340,11 +340,11 @@ cost of the de-tiled outputs or downstream vision models. The camera follows the
``update_period`` contract; choose a period that matches the observation cadence instead of rendering
at every physics step by default.

A runnable camera example is available in ``scripts/demos/sensors/cameras.py``:
A runnable camera example is available as ``camera``:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/cameras.py
uv run --extra isaacsim isaaclab example camera

For saving output to disk, see :doc:`/source/how-to/save_camera_output`. For renderer selection
and customization, see :doc:`/source/how-to/configure_rendering`.
5 changes: 2 additions & 3 deletions docs/source/concepts/sensors/contact_sensor.rst
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,8 @@ sensor contacts but does not change the reported data.
:figwidth: 100%
:alt: Contact sensor debug visualization

A complete runnable example is available in
``scripts/demos/sensors/contact_sensor.py``:
A complete runnable example is available as ``contact-sensor``:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/contact_sensor.py
uv run isaaclab example contact-sensor
5 changes: 2 additions & 3 deletions docs/source/concepts/sensors/frame_transformer.rst
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,8 @@ the offset source frame in world coordinates. Positions are in meters; quaternio
:figwidth: 100%
:alt: Frame transformer debug visualization

A complete runnable example is available in
``scripts/demos/sensors/frame_transformer_sensor.py``:
A complete runnable example is available as ``frame-transformer``:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/frame_transformer_sensor.py
uv run --extra isaacsim isaaclab example frame-transformer
4 changes: 2 additions & 2 deletions docs/source/concepts/sensors/imu.rst
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ with the control loop that consumes the measurement.
:figwidth: 100%
:alt: IMU acceleration debug visualization

A complete runnable example is available in ``scripts/demos/sensors/imu_sensor.py``:
A complete runnable example is available as ``imu``:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/imu_sensor.py
uv run --extra isaacsim isaaclab example imu
4 changes: 2 additions & 2 deletions docs/source/concepts/sensors/pva.rst
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ where Torch operations are required:
Like the IMU, acceleration uses state from consecutive simulation updates. Reset the scene and sensor
state together at episode boundaries.

A complete runnable example is available in ``scripts/demos/sensors/pva_sensor.py``:
A complete runnable example is available as ``pva``:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/pva_sensor.py
uv run --extra isaacsim isaaclab example pva
6 changes: 3 additions & 3 deletions docs/source/concepts/sensors/ray_caster.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ explicit and to access Newton-specific options.

Using a ray caster sensor requires a **pattern** and a parent xform to be attached to. The pattern defines how the rays are cast, while the prim properties defines the orientation and position of the sensor (additional offsets can be specified for more exact placement). Isaac Lab supports a number of ray casting pattern configurations, including a generic LIDAR and grid pattern.

.. literalinclude:: ../../../../scripts/demos/sensors/raycaster_sensor.py
.. literalinclude:: ../../../../examples/sensors/raycaster_sensor.py
:language: python
:lines: 40-71
:pyobject: RaycasterSensorSceneCfg

Notice that the units on the pattern config is in degrees! Also, we enable visualization here to explicitly show the pattern in the rendering, but this is not required and should be disabled for performance tuning.

Expand Down Expand Up @@ -80,6 +80,6 @@ You can use this script to experiment with pattern configurations and build an i
.. dropdown:: Code for raycaster_sensor.py
:icon: code

.. literalinclude:: ../../../../scripts/demos/sensors/raycaster_sensor.py
.. literalinclude:: ../../../../examples/sensors/raycaster_sensor.py
:language: python
:linenos:
12 changes: 6 additions & 6 deletions docs/source/concepts/using_mpm.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ Using Implicit MPM

Newton's implicit Material Point Method (MPM) solver models particle materials
such as granular media. MPM support and rigid-MPM coupling are experimental.
Start with the compact ``scripts/demos/mpm/newton_mpm_granular.py`` example;
``snowball_smash.py`` adds coupling and ``teapot_fill.py`` adds cavity sampling.
Start with the compact ``mpm-granular`` example; the ``snowball-smash`` and ``teapot-fill`` demos provide polished
coupling and cavity-sampling showcases.


.. _franka-pour-reset-artifact:
Expand Down Expand Up @@ -126,13 +126,13 @@ material behavior. Run the teapot example to compare the available modes:
.. code-block:: bash

# Reconstructed surface (default)
uv run python scripts/demos/mpm/teapot_fill.py --device cuda:0 \
uv run isaaclab demo teapot-fill --device cuda:0 \
--visualizer newton_gl --fluid_render_mode surface
# Surface and source particles together
uv run python scripts/demos/mpm/teapot_fill.py --device cuda:0 \
uv run isaaclab demo teapot-fill --device cuda:0 \
--visualizer newton_gl --fluid_render_mode both
# Path-traced translucent surface
uv run --extra ovrtx python scripts/demos/mpm/teapot_fill.py --device cuda:0 \
uv run --extra ovrtx isaaclab demo teapot-fill --device cuda:0 \
--visualizer newton_rtx --fluid_render_mode surface

Surface rendering is available in the Newton GL and Newton RTX visualizers.
Expand Down Expand Up @@ -163,7 +163,7 @@ dynamic topology in one reusable helper:
.. dropdown:: ``FluidSurfaceRenderer`` implementation
:icon: code

.. literalinclude:: ../../../scripts/demos/mpm/teapot_fill.py
.. literalinclude:: ../../../examples/demos/teapot_fill.py
:language: python
:pyobject: FluidSurfaceRenderer

Expand Down
2 changes: 1 addition & 1 deletion docs/source/concepts/visualization.rst
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ Visualizer Overview
<video autoplay loop muted playsinline controls preload="auto" style="width:100%;">
<source src="https://download.isaacsim.omniverse.nvidia.com/isaaclab/images/showcase_newton_gl_dominoes.mp4" type="video/mp4">
</video>
<p class="viz-cap">newton_viewer_dominoes demo<br>Right-click dragging the first domino
<p class="viz-cap">newton-dominoes example<br>Right-click dragging the first domino
triggers the cascade across an NVIDIA-logo domino layout</p>
</div>
</div>
Expand Down
14 changes: 7 additions & 7 deletions docs/source/experimental-features/visuo_tactile_sensor.rst
Original file line number Diff line number Diff line change
Expand Up @@ -110,21 +110,21 @@ Configuration Requirements
Usage Example
~~~~~~~~~~~~~

To use the tactile sensor in a simulation environment, run the demo:
To use the tactile sensor in a simulation environment, run the example:

.. tab-set::

.. tab-item:: uv (Recommended)

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/tacsl_sensor.py --use_tactile_rgb --use_tactile_ff --tactile_compliance_stiffness 100.0 --tactile_compliant_damping 1.0 --contact_object_type nut --num_envs 16 --save_viz --viz kit
uv run --extra isaacsim isaaclab example tactile-sensor --use_tactile_rgb --use_tactile_ff --tactile_compliance_stiffness 100.0 --tactile_compliant_damping 1.0 --contact_object_type nut --num_envs 16 --save_viz --viz kit

.. tab-item:: isaaclab.sh / isaaclab.bat

.. code-block:: bash

./isaaclab.sh -p scripts/demos/sensors/tacsl_sensor.py --use_tactile_rgb --use_tactile_ff --tactile_compliance_stiffness 100.0 --tactile_compliant_damping 1.0 --contact_object_type nut --num_envs 16 --save_viz --viz kit
./isaaclab.sh example tactile-sensor --use_tactile_rgb --use_tactile_ff --tactile_compliance_stiffness 100.0 --tactile_compliant_damping 1.0 --contact_object_type nut --num_envs 16 --save_viz --viz kit

Available command-line options include:

Expand All @@ -146,7 +146,7 @@ Available command-line options include:
.. note::

Since Isaac Lab 3.0, visualizers are selected independently from the simulation backend. Use the ``--viz``
argument to choose the visualizer backend, such as ``kit`` or ``newton``. The TacSL demo currently supports
argument to choose the visualizer backend, such as ``kit`` or ``newton``. The TacSL example currently supports
only the PhysX simulation backend; running the tactile sensor simulation with the Newton backend is not
supported.

Expand All @@ -159,16 +159,16 @@ For a complete list of available options:

.. code-block:: bash

uv run --extra isaacsim python scripts/demos/sensors/tacsl_sensor.py -h
uv run --extra isaacsim isaaclab example tactile-sensor -h

.. tab-item:: isaaclab.sh / isaaclab.bat

.. code-block:: bash

./isaaclab.sh -p scripts/demos/sensors/tacsl_sensor.py -h
./isaaclab.sh example tactile-sensor -h

.. note::
The demo examples are based on the Gelsight R1.5, which is a prototype sensor that is now discontinued. The same procedure can be adapted for other visuotactile sensors.
The examples are based on the Gelsight R1.5, which is a prototype sensor that is now discontinued. The same procedure can be adapted for other visuotactile sensors.

.. figure:: ../_static/overview/sensors/tacsl_demo.jpg
:align: center
Expand Down
Loading
Loading