Skip to content

[pull] develop from isaac-sim:develop - #67

Merged
pull[bot] merged 6 commits into
mataylor-nvidia:developfrom
isaac-sim:develop
Sep 25, 2026
Merged

pull[bot] merged 6 commits into
mataylor-nvidia:developfrom
isaac-sim:develop

Conversation

@pull

@pull pull Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

StafaH and others added 6 commits September 25, 2026 13:54
# Description

`isaaclab_ovphysx` was merged into `isaaclab_ov` in #6992, but
`source/isaaclab_ovphysx/` still exists. It holds a single empty
changelog fragment, `changelog.d/vidurv-regex-fragment-targeting.skip`,
added afterwards by #6640 under the old path.

The directory has no `config/extension.toml`, so the changelog compiler
never treats it as a package and never consumes the fragment. It would
stay forever and keep the old package name visible in the source tree.

This PR deletes that fragment, which removes the directory:
- **No code or config changes.** Nothing in the workspace, CI or tooling
refers to the directory.
- **References kept on purpose.** The remaining mentions of
`isaaclab_ovphysx` are historical changelog entries and a note in the
issue-audit skill that the package was merged, and they stay.

## Type of change

- Repository cleanup (no user-facing change)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] My changes generate no new warnings
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`
# Description

Part 1 of the camera performance series (see the series list below).
This part fixes a bug that also blocked the fast image path.

`sensor.data.output[...]` returns a `ProxyArray`, whose `.dtype` is the
Warp dtype. `mdp.image` and the Cartpole camera observations passed it
straight into `normalize_camera_image`, so every `images.dtype ==
torch.uint8` check failed:

- colorized semantic segmentation was only cast to float and reached
policies as values in `[0, 255]` instead of `[0, 1]`;
- the fused uint8 normalization kernel never ran.

The image terms now read `.torch`. The other camera tasks that relied on
the deprecated implicit `ProxyArray`-as-tensor conversion (Cartpole
showcase, stack blueprint, drone ARL) do the same.

## Series

1. #8036: Read camera outputs through `ProxyArray.torch` (bug fix)
(base: develop)
2. #8037: Fused normalization for strided camera images (base: #8036)
3. #8038: Skip redundant observation copies (base: #8037)
4. #8039: Remove per-step host synchronizations (base: develop)
5. #8040: Newton `render_batch` in one sensor-graph launch (base:
develop)
6. #8041: RSL-RL cuDNN benchmark, mixed precision and compile settings
(base: develop)
7. #8042: Kuka Allegro camera tasks on the shared image observation
(base: #8038)

The series is split from #7440, which remains the combined reference
branch.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Validation

- New `test_colorized_segmentation_is_scaled` (`mdp.image`) fails on
`develop` and passes here.
- The Cartpole camera observation test's fake sensor now returns a real
`ProxyArray`, like actual sensors. With it, 4 of 8 cases fail on
`develop` (the same segmentation bug) and all pass here.
- `test_stacked_image_mdp.py`, `test_cartpole_camera_observations.py`
and `test_images.py` pass.

## Series results

Measured on `Isaac-Lift-KukaAllegro-Camera`, 4096 envs, Newton physics
and Newton renderer, RTX PRO 6000 Blackwell, with all 7 parts applied
(reference branch: #7440).

| Metric | Before | After |
|---|---|---|
| Env step, RGB 128, one camera | 44.4 ms | 37.3 ms (+19% throughput) |
| Env step, RGB 128, two cameras | 77.3 ms | 64.9 ms (+19%) |
| Env step, RGB 64 | 26.8 ms | 23.6 ms (+14%) |
| Env step, depth 128 | 37.3 ms | 33.7 ms (+10%) |
| RSL-RL iteration, RGB 128, one camera | 3.19 s | 2.88 s (+11%), peak
memory −40% |
| RSL-RL iteration, RGB 128, two cameras | 6.23 s | 5.63 s (+11%), peak
memory −47% |

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`
…4470)

# Description

Height-field terrain origins are now chosen by their generators and
returned with the discretized height field. `height_field_to_mesh`
places that origin in the padded mesh. The inverted pyramid slope origin
therefore lies on its center platform for any platform width, including
widths below 1 m. The duplicate `height_field_to_mesh_v2` decorator and
its fixed sampling-width parameter have been removed.

The built-in random and wave terrains retain their center-area maximum
behavior. Other terrains with a flat center platform return its actual
height. Custom height-field generators using the decorator must now
return `(height_field, origin)`, where `origin` is a three-element
position in meters relative to the generated height field.

## Validation

- Regression test failed on `develop` for both tested inverted pyramid
configurations and passes with this change.
- `uv run --frozen python -m pytest
source/isaaclab/test/terrains/test_terrain_generator.py -q` — 10 passed.
- `uv run python tools/changelog/cli.py check develop` — passed.
- `uv run isaaclab -f` — passed.
- `uv run --isolated --extra dev -- make -C docs current-docs` — passed
without warnings.

## Type of change

- Bug fix with a height-field generator return-contract change
(migration described above and in the changelog fragment).

## Screenshots

| Before | After |
| ------ | ----- |
|
![Before](https://github.com/user-attachments/assets/eef5309e-6422-41a3-af43-c99a582532cb)
|
![After](https://github.com/user-attachments/assets/bdd742ab-9c81-4b44-9455-cb41b6760a73)
|


## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

---------

Co-authored-by: xuxin <747302550@qq.com>
Co-authored-by: Mustafa Haiderbhai <mhaiderbhai@nvidia.com>
# Description

Seventh PR in the series that splits the core cleanup in #7949 into
small, reviewable pieces. The test-only consolidation originally planned
next is dropped, since #8022 already pruned the core tests with the
test-audit skill. The series continues with source refactors, starting
with `isaaclab.utils.string`. There is no behavior change.

- `resolve_matching_names_values` duplicated the matching loop of
`resolve_matching_names`, including its one-to-one bookkeeping,
ordering, and error messages. Both now use the cached
`_resolve_matching_names_impl`, which also returns the key index of each
match (to pick the values) and whether every key matched (so
`strict=False` still returns the partial matches). As a side effect,
`resolve_matching_names_values` is now cached too; its output lists are
rebuilt per call, as before.
- The `preserve_order` reordering (two nested loops building a
permutation) is a stable sort by key index.
- `find_unique_string_name` no longer checks the `_1` candidate twice;
`find_root_prim_path_from_regex` returns early. Their docstrings drop
types that duplicate the annotations.
- The "Not all regular expressions are matched!" message now always
lists the available strings as a list (it printed a tuple for
`resolve_matching_names`).

## Verification
- A randomized comparison of the `develop` and PR implementations (4,000
random target/pattern sets through both resolvers with every
`preserve_order` / `strict` combination, plus `find_unique_string_name`
and `find_root_prim_path_from_regex`; 8,506 cases) gives identical
results and exception messages, apart from the list-vs-tuple formatting
above.
- `test/utils/test_string.py`, `test/utils/test_dict.py`,
`test/actuators`, and `test/assets/test_articulation_iface.py` pass.
- The dict-subclass value-pairing regression failed before the fix and
passed after it; `test/utils/test_string.py` passes (18 tests), and `uv
run isaaclab -f` passes.

## Type of change

- Code cleanup (non-breaking, no functional change)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (`.skip`)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`
# Split contrib smoke tests by runtime and sample one task per family

The original contrib job ran 83 environments serially in one
camera-enabled Isaac Sim process. This change separates runtime
requirements and intentionally runs **one representative per task
package, robot directory, and runtime**. Adding variants within a family
does not add smoke tests.

- **Runtime routing:** `sim_launcher.scan()` selects kitless, Kit
without cameras, or Kit with cameras. Kit and kitless each use two
pytest workers; cameras use one process. The job has five slots and
restores the RTX shader cache.
- **Family grouping:** preserve the complete robot subdirectory,
including OpenArm's separate unimanual and bimanual configurations.
- **Representative selection:** prefer runnable rough-terrain variants
to include height-scanner coverage, then the shortest task ID. Keep one
visible skip for all-skipped families. There is no list of additional
same-family cases.

The selection contains **47 runnable environments and 4 skips**, versus
83 runnable environments and 12 skips originally. Rough-terrain
representatives replace flat-terrain runs without increasing the number
of tests per family.

## Validation

- Registry-wide collection check confirms exactly one representative for
every family/runtime, with no duplicate task IDs: 34 Kit entries (4
skipped), 11 kitless, and 6 camera entries.
- The three changed representatives—bimanual OpenArm, AnymalC Direct
Rough, and Digit Rough—passed local simulation smoke tests.
- Formatting, lint, changelog checks, and `git diff --check` passed. No
production code changed.

The initial 46-case version completed CI in **6:43**, versus **24:19**
on develop on the same runner type (RTX PRO 4500 Blackwell). Those
timings precede the nested-robot and representative-selection changes;
the final 47-case job needs a fresh CI measurement.

## Type of change

- CI / test infrastructure (no user-facing change)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] My changes generate no new warnings
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

---------

Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>
# Description

Supersedes #6029 by @PKonMagos. This carries Haptikostech's Haptikos
exoskeleton documentation onto current `develop` and updates the setup
instructions for the Isaac Teleop and CloudXR workflow now used by Isaac
Lab.

The guide now covers the matching Isaac Teleop release branch, the
separately obtained Haptikos C++ API required to build the plugin,
CloudXR push-device configuration, and the correct launch order. No
Isaac Lab runtime code changes are included.

## Type of change

- Documentation update

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Validation

- [x] `uv run isaaclab -f`
- [x] `uv run --isolated --extra dev -- make -C docs current-docs`
(warning-free)
- [x] On-demand Docker CI (`run-ci`): workflow passed; GPU jobs skipped
for docs-only changes

Hardware-specific Haptikos operation was not exercised locally.

---------

Signed-off-by: PKontrazis <pkontrazis@themagos.com>
Co-authored-by: PKontrazis <pkontrazis@themagos.com>
@pull pull Bot locked and limited conversation to collaborators Sep 25, 2026
@pull pull Bot added the ⤵️ pull label Sep 25, 2026
@pull
pull Bot merged commit f17e6a1 into mataylor-nvidia:develop Sep 25, 2026
@github-actions github-actions Bot added documentation Improvements or additions to documentation infrastructure isaac-lab labels Sep 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull documentation Improvements or additions to documentation infrastructure isaac-lab

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants