Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .github/workflows/check-links.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ jobs:
--exclude 'docs\.ray\.io'
--exclude 'docs\.conda\.io'
--exclude 'stackoverflow\.com'
--exclude 'docs\.isaacsim\.omniverse\.nvidia\.com'
--exclude 'download\.isaacsim\.omniverse\.nvidia\.com/isaaclab/images'
--exclude 'dx\.doi\.org/10\.1109/JRA\.1987\.1087068'
--exclude 'andrew\.cmu\.edu/course/10-703/textbook/BartoSutton\.pdf'
--exclude 'www\.nvidia\.com/en-us/security'
--exclude 'bostondynamics\.com/reinforcement-learning-researcher-kit'
--max-retries 5
--retry-wait-time 10
--timeout 20
Expand Down
1 change: 0 additions & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@ Table of Contents
source/features/hydra
source/features/multi_gpu
source/features/population_based_training
Tiled Rendering</source/overview/core-concepts/sensors/camera>
source/features/ray
source/features/reproducibility

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions docs/source/how-to/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,17 @@ Isaac Lab.
draw_markers


Using Visualizers
-----------------

This guide demonstrates how to use visualizer-specific views for monitoring and debugging Isaac Lab environments.

.. toctree::
:maxdepth: 1

visualizer_tiled_camera


Working with Simulation Data
----------------------------

Expand Down
2 changes: 1 addition & 1 deletion docs/source/how-to/optimize_stage_creation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Stage in memory can be toggled by setting the :attr:`isaaclab.sim.SimulationCfg.
env = ManagerBasedRLEnv(cfg=cfg)

When using stage in memory without an existing RL environment class, wrap the stage creation steps
in a :py:keyword:`with` statement to set the stage context. The stage is automatically attached
in a ``with`` statement to set the stage context. The stage is automatically attached
to the USD context when ``SimulationContext`` is created with ``create_stage_in_memory=True``.

**Using Stage in Memory with a manual scene setup**
Expand Down
159 changes: 159 additions & 0 deletions docs/source/how-to/visualizer_tiled_camera.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
.. _how-to-visualizer-tiled-camera:

Using Visualizer Tiled Cameras
==============================

.. currentmodule:: isaaclab

For general visualizer documentation, see :doc:`/source/overview/core-concepts/visualization`.

The visualizer tiled camera view is a live monitoring and debugging tool. It opens a
non-interactive panel in the Kit or Newton visualizer and displays tiled camera views
across all selected environments. They can stream observation camera data or generate cameras
that follow the robots.

This guide is accompanied by the ``run_tiled_camera_visualizer.py`` script in the
``IsaacLab/scripts/tutorials/07_visualizers`` directory.

Running this script demonstrates two ways to use tiled cameras:

- configured tiled cameras pointed at and following moving Anymal-D robots shown in the Kit visualizer
- streaming from existing wrist-mounted robot cameras shown in the Newton visualizer

Note: Visualizer tiled cameras are currently supported only in the Kit and Newton visualizers.
Either visualizer can be used to run either example.

.. dropdown:: Code for run_tiled_camera_visualizer.py
:icon: code

.. literalinclude:: ../../../scripts/tutorials/07_visualizers/run_tiled_camera_visualizer.py
:language: python
:emphasize-lines: 72-78,87-94
:linenos:


Example One: Following Anymal-D Robots
--------------------------------------

The Kit Visualizer shows the tiled camera view in a separate tab inside the main
Viewport window. The highlighted tab area in the figures below shows where to
toggle between the interactive viewport and the visualizer tiled camera view.

.. figure:: ../_static/visualizers/kit_viz_anymal_iteractive_view.jpg
:width: 100%
:alt: Kit visualizer interactive viewport for Anymal-D robots

Kit visualizer showing the default interactive viewport.

.. figure:: ../_static/visualizers/kit_viz_anymal_tiled_view.jpg
:width: 100%
:alt: Kit visualizer tiled camera view for Anymal-D robots

Kit visualizer showing the tiled camera view generated for selected Anymal-D
robots.

Note, you can also display the main visualizer camera and the tiled camera view side by
side for dual monitoring.

To run the tutorial with the args for this example, use:

.. code-block:: bash

./isaaclab.sh -p scripts/tutorials/07_visualizers/run_tiled_camera_visualizer.py \
--enable_cameras \
--task Isaac-Velocity-Rough-Anymal-D-v0 \
--num_envs 256 \
--viz kit

Within the script, you’ll find the ``KitVisualizerCfg`` configuration used to
generate this example. You can use this config as a template for your own use
cases.

In this example, a set of cameras is created to point toward each robot's base
prim and follow its motion. The camera's position, relative to the prim, is set
by the ``tiled_cam_eye`` field of ``KitVisualizerCfg``. For this demo, the
camera is offset by ``(3.0, 3.0, 3.0)`` from each robot base. If you change ``tiled_cam_eye``
(for example, to ``(0, 0, 5)``), the panel will show a top-down view instead.

In this example, there are 256 total environments, and we randomly sample 36 to stream to the
tiled camera view.

Also note that the Kit visualizer tiled camera view requires passing the
``--enable_cameras`` CLI arg.


Example Two: Streaming from Robot-Mounted Cameras
-------------------------------------------------

The Newton visualizer provides a tiled camera view in a lightweight OpenGL window.
Use the highlighted ``Tiled Camera View`` dropdown in the left-hand sidebar to
show or hide the tiled camera panel.

.. figure:: ../_static/visualizers/newton_viz_galbot_interactive_view.jpg
:width: 100%
:alt: Newton visualizer interactive view for the Galbot cube stacking environment

Newton visualizer showing the default interactive viewport.

.. figure:: ../_static/visualizers/newton_viz_galbot_tiled_view.jpg
:width: 100%
:alt: Newton visualizer tiled camera view for Galbot wrist cameras

Newton visualizer showing the selected Galbot head-camera feeds in the tiled
camera panel.

In this example, we use the Galbot cube stacking environment, which comes with
built-in wrist-mounted cameras. This setup provides an egocentric view of the
gripper, table, and cubes in each selected environment.

To launch this example, run:

.. code-block:: bash

./isaaclab.sh -p scripts/tutorials/07_visualizers/run_tiled_camera_visualizer.py \
--task Isaac-Stack-Cube-Galbot-Left-Arm-Gripper-Visuomotor-v0 \
--num_envs 25 \
--viz newton

Within the script, the ``NewtonVisualizerCfg`` is configured to stream images from the
existing camera sensor located at
``/World/envs/env_.*/Robot/head_camera_sim_view_frame/head_camera``. This path
points to the head camera, but you can edit the ``tiled_cam_prim_path``
field of ``NewtonVisualizerCfg`` in the script to show a different existing camera if
needed.

In this demo, 25 environments are simulated, and 12 camera feeds are shown in the tiled panel by default.


Configuration notes
-------------------

To customize tiled camera behavior, edit the highlighted ``VisualizerCfg`` fields in
``run_tiled_camera_visualizer.py``:

* For generated cameras, ``tiled_cam_target_prim_path`` chooses the followed prim and
``tiled_cam_eye`` sets the camera offset from that prim.
* For existing scene cameras, ``tiled_cam_prim_path`` must match an Isaac Lab
:class:`~isaaclab.sensors.Camera` sensor in the selected task.
* ``tiled_cam_num`` controls how many environment tiles are shown.


Troubleshooting
---------------

* If a generated view fails with a missing prim error, check that
``tiled_cam_target_prim_path`` resolves in each selected environment. Common template
forms include ``/World/envs/*/...`` and ``/World/envs/env_.*/...``.
* If an existing-camera view reports that no Isaac Lab camera owns the prim, check that
``tiled_cam_prim_path`` matches a :class:`~isaaclab.sensors.Camera` sensor in the task.
* If ``rerun`` or ``viser`` is selected, use ``--viz kit`` or ``--viz newton`` instead.
The tiled camera panel is currently implemented for Kit and Newton.
* If the view is too expensive, reduce ``tiled_cam_num``, ``--num_envs``, or the camera
resolution. The visualizer caps the tiled panel at 100 tiles.


See also
--------

* :doc:`/source/overview/core-concepts/visualization` - visualizer configuration and UI controls.
* :doc:`/source/how-to/configure_rendering` - selecting rendering presets and quality modes.
23 changes: 19 additions & 4 deletions docs/source/overview/core-concepts/visualization.rst
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,9 @@ Camera Modes
To configure camera modes, including launching a tiled camera view, edit the fields described below in the
``VisualizerCfg`` config class.

For runnable Kit and Newton examples that use generated and existing tiled cameras,
see :doc:`/source/how-to/visualizer_tiled_camera`.

The default visualizer camera mode is interactive, with ``eye`` and ``lookat`` specifying the initial pose.
Kit and Newton visualizers can also run additional tiled camera image panels.

Expand All @@ -219,11 +222,16 @@ Note, Kit tiled camera views require launching with ``--enable_cameras``.
- ``tiled_cam_view=False``, ``eye=(4, -4, 3)``, ``lookat=(0, 0, 0)``
- Interactive visualizer camera starts at ``eye`` and looks at the fixed ``lookat`` coordinate.
* - Generated tiled camera
- ``tiled_cam_view=True``, ``tiled_cam_prim_path=None``, ``tiled_cam_target_prim_path="/World/envs/*/Robot/base"``
- ``tiled_cam_view=True``, ``tiled_cam_prim_path=None``, ``tiled_cam_target_prim_path="/World/envs/*/Robot"``
- The visualizer creates per-env cameras. Each camera looks at the matched target prim, with ``tiled_cam_eye`` as an offset from that target.
Note that the ``tiled_cam_target_prim_path`` has a default value, but different environments may require different paths.
* - Existing tiled camera sensors
- ``tiled_cam_view=True``, ``tiled_cam_prim_path="/World/envs/*/Camera"``
- The visualizer displays existing Isaac Lab ``Camera`` sensor output. Generated-camera fields such as ``tiled_cam_eye`` and ``tiled_cam_target_prim_path`` are ignored.
- The visualizer displays existing Isaac Lab ``Camera`` sensor output. Generated-camera fields such as ``tiled_cam_eye`` and
``tiled_cam_target_prim_path`` are ignored. Note that the ``tiled_cam_prim_path`` has a default value, but different
environments may require different paths. This mode requires an environment that registers Isaac Lab ``Camera`` sensors
in ``scene.sensors``. For Cartpole, use a camera task such as ``Isaac-Cartpole-Camera``. The plain ``Isaac-Cartpole``
task has no ``/World/envs/*/Camera`` sensor, so leave ``tiled_cam_prim_path=None`` to use generated visualizer cameras.

**How to Access the Tiled Camera View in the UI**

Expand Down Expand Up @@ -416,8 +424,8 @@ Newton Visualizer
tiled_cam_prim_path=None, # Existing Camera sensor prim path, e.g. "/World/envs/*/Camera"
tiled_cam_eye=(4.0, -4.0, 3.0), # Eye offset for generated tiled cameras
tiled_cam_target_prim_path=( # Prim that generated cameras follow/look at
"/World/envs/*/Robot/base"
),
"/World/envs/*/Robot" # This is the default value, but different environments
), # may require a different paths.

# Performance tuning
update_frequency=1, # Update every N frames (1=every frame)
Expand Down Expand Up @@ -603,6 +611,13 @@ The FPS control in the Rerun visualizer UI may not affect the visualization fram
Currently, live plots are only available in the Kit Visualizer.


**Newton Contact Visualization**

Newton's native ``Show Contacts`` view can show all contacts from the Newton physics contact buffer. When running
with PhysX, the Newton visualizer can only show contacts reported by configured Isaac Lab contact sensors, so
currently the set of displayed contacts may differ across backends.


**Viser Visualizer Renderer Requirement**

The Viser visualizer requires a Newton model, which is provided automatically by
Expand Down
2 changes: 1 addition & 1 deletion docs/source/policy_deployment/00_hover/hover_policy.rst
Original file line number Diff line number Diff line change
Expand Up @@ -191,4 +191,4 @@ To deploy the trained policy on the H1 robot,
.. _README of Sim2Real deployment: https://github.com/NVlabs/HOVER/blob/main/neural_wbc/hw_wrappers/README.md
.. _Hardware Environment: https://github.com/NVlabs/HOVER/blob/main/neural_wbc/hw_wrappers/README.md
.. _Mujoco Environment: https://github.com/NVlabs/HOVER/tree/main/neural_wbc/mujoco_wrapper
.. _Unitree H1 Robot: https://unitree.com/h1
.. _Unitree H1 Robot: https://www.unitree.com/h1
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ Where:
- ``--environment nova_carter-galileo``: Specifies the NuRec Real2Sim Galileo environment

The training will run for the number of iterations specified in the config file (default: 1000 iterations).
The resulting checkpoint will be stored in ``<output_dir>/checkpoints/`` with the filename ``model_<iteration_number>.pt``.
Checkpoints are saved directly under ``<output_dir>/`` with the filename ``model_<iteration_number>.pt`` (e.g., ``model_0.pt``, ``model_50.pt``, ``model_100.pt``), written every 50 iterations.
Videos will be saved in ``<output_dir>/videos/``.

.. note::
Expand Down Expand Up @@ -441,7 +441,7 @@ Execute the following command from the ``COMPASS`` directory to evaluate the tra

Where:

- ``<path/to/residual_policy_ckpt>``: Path to the trained residual policy checkpoint (e.g., ``<output_dir>/checkpoints/model_1000.pt``)
- ``<path/to/residual_policy_ckpt>``: Path to the trained residual policy checkpoint (e.g., ``<output_dir>/model_1000.pt``)
- ``--video``: Enable video recording during evaluation
- ``--video_interval``: Record video every N iterations

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Exporting Policies with LEAPP
.. currentmodule:: isaaclab

This guide covers how to export trained reinforcement learning policies from Isaac Lab using
`LEAPP <https://github.com/nvidia-isaac/leapp>`_ (Lightweight Export Annotations for Policy Pipelines).
`LEAPP <https://github.com/nvidia-isaac/leapp>`__ (Lightweight Export Annotations for Policy Pipelines).
The main goal of the LEAPP export path is to package the policy together with the input and
output semantics needed for deployment, so downstream users do not need to reimplement Isaac Lab
observation preprocessing, action postprocessing, or recurrent-state handling by hand.
Expand Down Expand Up @@ -64,7 +64,7 @@ consumers can run the policy without reconstructing observation ordering, comman
targets, or policy feedback loops themselves.

For a detailed description of LEAPP's generated artifacts and APIs, refer to the
`LEAPP documentation <https://github.com/nvidia-isaac/leapp/tree/main/docs>`_.
`LEAPP documentation <https://github.com/nvidia-isaac/leapp/tree/main/docs>`__.


Exporting a Policy
Expand Down Expand Up @@ -289,6 +289,6 @@ workflow policies are not currently supported by ``scripts/reinforcement_learnin
Further Reading
---------------

- `LEAPP documentation <https://github.com/nvidia-isaac/leapp/tree/main/docs>`_
- `LEAPP API reference <https://github.com/nvidia-isaac/leapp/blob/main/docs/api.md>`_
- `LEAPP documentation <https://nvidia-isaac.github.io/leapp/>`__
- `LEAPP API reference <https://nvidia-isaac.github.io/leapp/api/index.html>`__
- :class:`~envs.LeappDeploymentEnv` API reference
4 changes: 2 additions & 2 deletions docs/source/refs/migration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ Two key patterns support this:
initialized.

For full details, examples, and the ``{DIR}`` placeholder convention, see the
:ref:`contributing` guide — in particular the
:doc:`contributing` guide — in particular the
`Lazy Loading & Module Exports <contributing.html#lazy-loading-module-exports>`__,
`Resolvable Strings <contributing.html#resolvable-strings>`__, and
`Config + Implementation File Split <contributing.html#config-implementation-file-split>`__
Expand Down Expand Up @@ -197,7 +197,7 @@ With this in place, ``import my_package`` will not eagerly import any submodules
are loaded on first access, giving ``SimulationApp`` time to initialize and auto-detect the
correct backend.

For more details, refer to the :ref:`contributing` guide.
For more details, refer to the :doc:`contributing` guide.


.. _simple script: https://gist.github.com/kellyguo11/3e8f73f739b1c013b1069ad372277a85
2 changes: 1 addition & 1 deletion docs/source/tutorials/00_sim/launch_app.rst
Original file line number Diff line number Diff line change
Expand Up @@ -178,5 +178,5 @@ For more details on headless mode and launching visualizers, see
:doc:`/source/migration/migrating_to_isaaclab_3-0`.


.. _specification: https://docs.isaacsim.omniverse.nvidia.com/latest/py/source/extensions/isaacsim.simulation_app/docs/index.html#isaacsim.simulation_app.SimulationApp.DEFAULT_LAUNCHER_CONFIG
.. _specification: https://docs.isaacsim.omniverse.nvidia.com/latest/py/source/extensions/isaacsim.simulation_app/docs/api.html#isaacsim.simulation_app.SimulationApp.DEFAULT_LAUNCHER_CONFIG
.. _WebRTC Livestreaming: https://docs.isaacsim.omniverse.nvidia.com/latest/installation/manual_livestream_clients.html#isaac-sim-short-webrtc-streaming-client
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,6 @@ into deployment systems.
.. note::

Refer to the `LEAPP semantic annotation guide
<https://github.com/nvidia-isaac/leapp/blob/main/docs/5_semantic_data_annotation.md>`_
and `LEAPP API reference <https://github.com/nvidia-isaac/leapp/blob/main/docs/api.md>`_
<https://nvidia-isaac.github.io/leapp/guides/semantics.html>`_
and `LEAPP API reference <https://nvidia-isaac.github.io/leapp/api/index.html>`_
for details on authoring semantic annotations.
3 changes: 1 addition & 2 deletions scripts/benchmarks/benchmark_non_rl.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from isaaclab.app import AppLauncher

from isaaclab_tasks.utils import fold_preset_tokens, setup_preset_cli
from isaaclab_tasks.utils import setup_preset_cli

# add argparse arguments
parser = argparse.ArgumentParser(description="Train an RL agent with RL-Games.")
Expand Down Expand Up @@ -50,7 +50,6 @@
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
args_cli, hydra_args = setup_preset_cli(parser)
hydra_args = fold_preset_tokens(hydra_args)
sys.argv = [sys.argv[0]] + hydra_args
if args_cli.video:
args_cli.enable_cameras = True
Expand Down
3 changes: 1 addition & 2 deletions scripts/benchmarks/benchmark_rlgames.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from isaaclab.app import AppLauncher

from isaaclab_tasks.utils import fold_preset_tokens, setup_preset_cli
from isaaclab_tasks.utils import setup_preset_cli

from scripts.benchmarks.early_stop import (
RlGamesEarlyStopObserver,
Expand Down Expand Up @@ -67,7 +67,6 @@
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
args_cli, hydra_args = setup_preset_cli(parser)
hydra_args = fold_preset_tokens(hydra_args)
sys.argv = [sys.argv[0]] + hydra_args
if args_cli.video:
args_cli.enable_cameras = True
Expand Down
3 changes: 1 addition & 2 deletions scripts/benchmarks/benchmark_rsl_rl.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from isaaclab.app import AppLauncher

from isaaclab_tasks.utils import fold_preset_tokens, setup_preset_cli
from isaaclab_tasks.utils import setup_preset_cli

from scripts.benchmarks.early_stop import (
RslRlEarlyStopWrapper,
Expand Down Expand Up @@ -72,7 +72,6 @@
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
args_cli, hydra_args = setup_preset_cli(parser)
hydra_args = fold_preset_tokens(hydra_args)
sys.argv = [sys.argv[0]] + hydra_args
if args_cli.video:
args_cli.enable_cameras = True
Expand Down
Loading
Loading