Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
3b60654
Expand Visualizer Tests and Patch Visualizer Bugs (#5103)
matthewtrepte Apr 21, 2026
97c4d28
init bug fix for stale renderer images after reset w/o kit viz
matthewtrepte Apr 2, 2026
d849fbf
prepping
matthewtrepte Apr 14, 2026
809748a
wip
matthewtrepte Apr 16, 2026
6b38963
wip
matthewtrepte Apr 20, 2026
dfb331e
reduce CLI args
matthewtrepte Apr 20, 2026
9b95dbb
simplify
matthewtrepte Apr 21, 2026
8c2bd19
simplify
matthewtrepte Apr 21, 2026
f057f8f
working
matthewtrepte Apr 21, 2026
f385837
Update visualization.rst
matthewtrepte Apr 21, 2026
d39fdaf
Update visualization.rst
matthewtrepte Apr 21, 2026
7941466
docs
matthewtrepte Apr 21, 2026
47795f1
clean
matthewtrepte Apr 21, 2026
30931ae
Upgrade newton (#5339)
huidongc Apr 21, 2026
b8a004a
further remvoe original impl & clean
matthewtrepte Apr 21, 2026
3238a3f
Add documentation for setup of perspective video recording (#5231)
bdilinila Apr 21, 2026
6e99d58
testin phase
matthewtrepte Apr 21, 2026
df2644c
Revert "Add NVTX instrumentation to Newton Warp Renderer (#5294)" (#5…
pbarejko Apr 21, 2026
9aa3f70
Fixes installation; updates installation docs (#5314)
myurasov-nv Apr 22, 2026
3d42b11
Fixes M1 3.0 GA Issues (#5343)
myurasov-nv Apr 22, 2026
1c237bd
Transitions raycaster to warp backend (#4967)
pascal-roth Apr 22, 2026
d1cb8e8
Port WrenchComposer dual-buffer fix to develop branch (#5265)
AntoineRichard Apr 22, 2026
64a0f93
tweak comments
matthewtrepte Apr 22, 2026
108e0d3
Merge branch 'develop' into mtrepte/partial_viz
matthewtrepte Apr 22, 2026
4fd6ebd
lint
matthewtrepte Apr 22, 2026
cbadde3
tweak comments
matthewtrepte Apr 22, 2026
a9e5f13
docs
matthewtrepte Apr 22, 2026
09fe938
Wires up teleop control states via Isaac Teleop message channel (#5268)
rwiltz Apr 22, 2026
481d7ee
Rendering correctness test determinism (#5353)
huidongc Apr 22, 2026
f0f4892
prep
matthewtrepte Apr 22, 2026
47d951a
Merge branch 'develop' into mtrepte/partial_viz
matthewtrepte Apr 22, 2026
7062481
filter visualization markers
matthewtrepte Apr 22, 2026
663a0aa
clean docs
matthewtrepte Apr 22, 2026
0a9e45c
Adds presets to environment docs and fix doc build issues (#5360)
kellyguo11 Apr 23, 2026
33f8f3a
Refactors Newton XformPrimView: proper local poses, warp-native API, …
ooctipus Apr 23, 2026
0c565d6
Caches resolve_matching_names on AssetBase for all finder methods (#5…
hougantc-nvda Apr 23, 2026
a0e07b4
Forbid pushing to origin in AGENTS.md (#5344)
AntoineRichard Apr 23, 2026
76b1689
tweak comments
matthewtrepte Apr 22, 2026
5fbb3f6
resync on tot
matthewtrepte Apr 23, 2026
caa5a2a
fix failing tests
matthewtrepte Apr 23, 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
7 changes: 4 additions & 3 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,11 @@ jobs:
working-directory: ./docs
env:
# "deploy" branches build the full set of versions so every page
# has a complete version dropdown: main, develop, tags >= v2.0.0.
# v1.x tags and release/ branches are excluded to keep it lean and mean.
# has a complete version dropdown: main, develop, tags >= v2.0.0
# (including pre-release suffixes like -beta or -rc1). v1.x tags and
# release/ branches are excluded.
SMV_BRANCH_WHITELIST: '^(main|develop)$'
SMV_TAG_WHITELIST: '^v[2-9]\d*\.\d+\.\d+$'
SMV_TAG_WHITELIST: '^v[2-9]\d*\.\d+\.\d+(-[A-Za-z0-9.]+)?$'
run: |
git fetch --prune --unshallow --tags
git checkout --detach HEAD
Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,12 @@ _build

# Ruff cache
**/.ruff_cache/

# Dev-time files, generated stuff
**/__*

# Isaac Lab CI environments in native mode
**/_isaaclab_install_ci_*

# Superpowers (Claude Code plugin artifacts)
docs/superpowers/
9 changes: 6 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ We use a wrapped python call within `./isaaclab.sh`.

### Pre-commit (lint/format hooks)

**CRITICAL: Always run pre-commit hooks BEFORE committing, not after.**
**CRITICAL: Always run pre-commit hooks BEFORE committing and BEFORE pushing.**

Proper workflow:
1. Make your code changes
Expand All @@ -73,15 +73,17 @@ Proper workflow:
4. Stage the modified files with `git add`
5. Run `./isaaclab.sh -f` again to ensure all checks pass
6. Only then create your commit with `git commit`
7. Verify pre-commit still passes before pushing — never push commits that haven't been checked

```bash
# Run pre-commit checks on all files
./isaaclab.sh -f
```

**Common mistake to avoid:**
**Common mistakes to avoid:**
- Don't commit first and then run pre-commit (requires amending commits)
- Do run pre-commit before committing (clean workflow)
- Don't push before running pre-commit (pushes broken code to the remote)
- Do run pre-commit before committing and before pushing (clean workflow)

**When reviewing code** (e.g. via a code-reviewer agent), always run `./isaaclab.sh -f` as part of the review to catch formatting or lint issues early.

Expand Down Expand Up @@ -152,6 +154,7 @@ Follow conventional commit message practices.
## Sandbox & Networking

- Network access (e.g., `git push`) is blocked by the sandbox. Use `dangerouslyDisableSandbox: true` so the user gets an approval prompt — don't ask them to run it manually.
- **Never push to `origin` (`isaac-sim/IsaacLab`).** The `origin` remote is the public upstream repository. Push to your own fork remote (e.g., `antoine`, `alex`) or to the remote of the PR you are working on. If the correct remote is unclear, ask the user before pushing.

## GitHub Actions and CI/CD

Expand Down
7 changes: 5 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@
"omni.timeline",
"omni.ui",
"gym",
"gymnasium",
"skrl",
"stable_baselines3",
"rsl_rl",
Expand Down Expand Up @@ -304,8 +305,10 @@
smv_remote_whitelist = r"^.*$"
# Whitelist pattern for branches (set to None to ignore all branches)
smv_branch_whitelist = os.getenv("SMV_BRANCH_WHITELIST", r"^(main|develop|release/.*)$")
# Whitelist pattern for tags (set to None to ignore all tags)
smv_tag_whitelist = os.getenv("SMV_TAG_WHITELIST", r"^v[1-9]\d*\.\d+\.\d+$")
# Whitelist pattern for tags (set to None to ignore all tags).
# Matches vMAJOR.MINOR.PATCH with an optional pre-release suffix like -beta or -rc1,
# so tags like v3.0.0-beta show up in the version selector.
smv_tag_whitelist = os.getenv("SMV_TAG_WHITELIST", r"^v[1-9]\d*\.\d+\.\d+(-[A-Za-z0-9.]+)?$")
html_sidebars = {
"**": ["navbar-logo.html", "versioning.html", "icon-links.html", "search-field.html", "sbt-sidebar-nav.html"]
}
Expand Down
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ For more information about the framework, please refer to the `technical report


License
=======
========

The Isaac Lab framework is open-sourced under the BSD-3-Clause license,
with certain parts under Apache-2.0 license. Please refer to :ref:`license` for more details.
Expand Down
22 changes: 19 additions & 3 deletions docs/source/api/lab/isaaclab.sim.views.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,27 @@

.. autosummary::

XformPrimView
BaseFrameView
UsdFrameView
FrameView

XForm Prim View
Base Frame View
---------------

.. autoclass:: XformPrimView
.. autoclass:: BaseFrameView
:members:
:show-inheritance:

USD Frame View
--------------

.. autoclass:: UsdFrameView
:members:
:show-inheritance:

Frame View
----------

.. autoclass:: FrameView
:members:
:show-inheritance:
108 changes: 106 additions & 2 deletions docs/source/features/isaac_teleop.rst
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,10 @@ and Isaac Lab. It composes three collaborators:
Isaac Sim's XR bridge, creates the ``TeleopSession``, and steps it each frame to produce an
action tensor.

* **CommandHandler** -- registers and dispatches START / STOP / RESET callbacks triggered by XR UI
buttons or the message bus.
* **CommandHandler** -- lightweight callback registry for START / STOP / RESET commands. Scripts
can register callbacks via :meth:`~isaaclab_teleop.IsaacTeleopDevice.add_callback`, but the
primary control path uses :func:`~isaaclab_teleop.poll_control_events` (see
:ref:`isaac-teleop-control-states`).

.. dropdown:: Session lifecycle details

Expand All @@ -127,6 +129,104 @@ and Isaac Lab. It composes three collaborators:
the session is not yet ready or has been torn down.


.. _isaac-teleop-control-states:

Teleop Control States (Start / Stop / Reset)
---------------------------------------------

Isaac Lab supports remote teleop control commands -- **start**, **stop**, and **reset** -- sent
from the XR headset to the simulation. These are used to begin and end demonstration recording,
pause the robot, or reset the environment without touching the simulation host.

How it works
~~~~~~~~~~~~

By default, every :class:`~isaaclab_teleop.IsaacTeleopCfg` enables a control message channel
using the well-known UUID ``uuid5(NAMESPACE_DNS, "teleop_command")``. The channel is created as
a ``teleop_control_pipeline`` inside TeleopCore's :class:`TeleopSession`, which means:

1. A :class:`~isaacteleop.retargeting_engine.deviceio_source_nodes.MessageChannelSource` opens an
OpenXR opaque data channel (``XR_NV_opaque_data_channel``) with the agreed-upon UUID.
2. The CloudXR JS client (or any other client) discovers the channel by UUID and sends UTF-8
JSON commands::

{"type": "teleop_command", "message": {"command": "start teleop"}}
{"type": "teleop_command", "message": {"command": "stop teleop"}}
{"type": "teleop_command", "message": {"command": "reset teleop"}}

3. A :class:`~isaaclab_teleop.teleop_message_processor.TeleopMessageProcessor` parses these
payloads and produces boolean pulse signals (``run_toggle``, ``kill``, ``reset``).
4. :class:`~isaacteleop.teleop_session_manager.DefaultTeleopStateManager` consumes the
boolean signals, runs its state machine (edge detection, fail-safe), and produces
``teleop_state`` (one-hot) and ``reset_event`` (bool pulse) outputs.
5. TeleopCore decodes these outputs into ``ExecutionEvents`` and injects them into every
retargeter's ``ComputeContext``, so stateful retargeters can react to state changes
(e.g. reinitializing cross-step state on reset).

Polling control events in your script
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Use :func:`~isaaclab_teleop.poll_control_events` to read the latest control state each frame:

.. code-block:: python

from isaaclab_teleop import poll_control_events

with IsaacTeleopDevice(cfg) as device:
running = False
while sim_app.is_running():
action = device.advance()

ctrl = poll_control_events(device)
if ctrl.is_active is not None:
running = ctrl.is_active # True after "start", False after "stop"
if ctrl.should_reset:
env.reset() # "reset" command received this frame

if action is not None and running:
env.step(action.repeat(num_envs, 1))
else:
env.sim.render()

:class:`~isaaclab_teleop.ControlEvents` has two fields:

* ``is_active`` -- ``True`` after a "start" command, ``False`` after "stop", ``None`` when no
command has been received yet (callers should leave their own flag unchanged).
* ``should_reset`` -- ``True`` for exactly one frame after a "reset" command.

Disabling the control channel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you do not need headset-driven start/stop/reset (e.g. keyboard-only workflows), set
``control_channel_uuid=None`` in your config:

.. code-block:: python

IsaacTeleopCfg(
pipeline_builder=_build_my_pipeline,
control_channel_uuid=None, # no opaque data channel created
)

Using a custom channel UUID
~~~~~~~~~~~~~~~~~~~~~~~~~~~

To use a different channel UUID (e.g. for a separate control protocol), pass any 16-byte
``bytes`` value:

.. code-block:: python

import uuid

MY_UUID = uuid.uuid5(uuid.NAMESPACE_DNS, "my_custom_control").bytes

IsaacTeleopCfg(
pipeline_builder=_build_my_pipeline,
control_channel_uuid=MY_UUID,
)

The CloudXR JS client must be updated to discover this UUID when sending commands.


.. _isaac-teleop-retargeting:

Retargeting Framework
Expand Down Expand Up @@ -908,6 +1008,10 @@ See the :ref:`isaaclab_teleop-api` for full class and function documentation:
* :class:`~isaaclab_teleop.IsaacTeleopCfg`
* :class:`~isaaclab_teleop.IsaacTeleopDevice`
* :func:`~isaaclab_teleop.create_isaac_teleop_device`
* :class:`~isaaclab_teleop.ControlEvents`
* :class:`~isaaclab_teleop.SupportsControlEvents`
* :func:`~isaaclab_teleop.poll_control_events`
* :data:`~isaaclab_teleop.TELEOP_CONTROL_CHANNEL_UUID`
* :class:`~isaaclab_teleop.XrCfg`
* :class:`~isaaclab_teleop.XrAnchorRotationMode`

Expand Down
Loading