Skip to content

Conversation

@Mayankm96
Copy link
Contributor

@Mayankm96 Mayankm96 commented Dec 30, 2025

Description

This MR removes the dependency on Isaac Sim XformPrim class for creating prims. The class mainly handled setting the world or local poses, as well as restting Xform operations. These are rather simple calls for which we don't need to go through Isaac Sim. The MR adds a new transform submodule that contains all the relevant functions as well as their tests.

Fixes # (issue)

Type of change

  • New feature (non-breaking change which adds functionality)
  • Breaking change (existing functionality will not work without user modification)

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

@github-actions github-actions bot added bug Something isn't working documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team labels Dec 30, 2025
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Dec 30, 2025

Greptile Summary

This PR successfully removes the dependency on Isaac Sim's XFormPrim class from the create_prim function by implementing native USD transform operations.

Key Changes:

  • Created new transforms.py module with functions: standardize_xform_ops, resolve_prim_pose, resolve_prim_scale, and convert_world_pose_to_local
  • Refactored create_prim in prims.py to use native USD APIs instead of XFormPrim
  • Added world-to-local coordinate conversion for the position parameter
  • Moved transform utility functions from prims.py to the new transforms module
  • Comprehensive test suite with 22 test cases covering edge cases, deprecation handling, and performance
  • Documentation updated to include the new transforms module

Technical Details:

  • The new implementation standardizes xform operations to USD convention: translate → orient (quaternion) → scale
  • Handles deprecated operations (rotateXYZ, transform matrix) and unit scale resolution
  • Maintains backward compatibility while removing the Isaac Sim dependency
  • Performance benchmarking shows operations complete in <0.1ms per prim

Confidence Score: 5/5

  • This PR is safe to merge with high confidence
  • The implementation is well-architected with comprehensive test coverage (22 test cases), excellent documentation, proper error handling, and maintains backward compatibility. The refactoring removes an external dependency while preserving functionality through native USD APIs.
  • No files require special attention

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/sim/utils/transforms.py New module implementing USD transform operations: standardize_xform_ops, resolve_prim_pose, resolve_prim_scale, convert_world_pose_to_local - well-documented with comprehensive docstrings
source/isaaclab/isaaclab/sim/utils/prims.py Removed XformPrim dependency from create_prim, added convert_world_pose_to_local call for world-to-local coordinate conversion, moved resolve_prim_pose and resolve_prim_scale to transforms module
source/isaaclab/test/sim/test_utils_transforms.py Comprehensive test coverage for transforms module with 22 test cases covering standardize_xform_ops edge cases, world-to-local conversion, and performance benchmarks

Sequence Diagram

sequenceDiagram
    participant User
    participant create_prim
    participant convert_world_pose_to_local
    participant standardize_xform_ops
    participant USDGeom
    
    User->>create_prim: create_prim(prim_path, position, orientation, scale)
    
    alt position provided (world space)
        create_prim->>create_prim: Check parent prim exists
        create_prim->>convert_world_pose_to_local: Convert world pose to local
        convert_world_pose_to_local->>USDGeom: Get parent world transform
        convert_world_pose_to_local->>convert_world_pose_to_local: Compute local = world * inv(parent)
        convert_world_pose_to_local-->>create_prim: Return local translation & orientation
    else translation provided (local space)
        create_prim->>create_prim: Use translation directly
    end
    
    create_prim->>USDGeom: DefinePrim(prim_path, prim_type)
    USDGeom-->>create_prim: Return prim
    
    create_prim->>create_prim: Set attributes
    create_prim->>create_prim: Add semantic labels
    
    create_prim->>standardize_xform_ops: Standardize xform operations
    standardize_xform_ops->>USDGeom: GetLocalTransformation()
    standardize_xform_ops->>standardize_xform_ops: Remove deprecated ops (rotateXYZ, transform)
    standardize_xform_ops->>standardize_xform_ops: Resolve unitsResolve scale
    standardize_xform_ops->>USDGeom: Create/update translate op
    standardize_xform_ops->>USDGeom: Create/update orient op
    standardize_xform_ops->>USDGeom: Create/update scale op
    standardize_xform_ops->>USDGeom: SetXformOpOrder([translate, orient, scale])
    standardize_xform_ops-->>create_prim: Return success
    
    create_prim-->>User: Return created prim
Loading

@Mayankm96 Mayankm96 merged commit 74fb39e into isaac-sim:main Jan 2, 2026
7 of 8 checks passed
@Mayankm96 Mayankm96 deleted the fix/clear-xform branch January 3, 2026 13:15
thiagolages pushed a commit to thiagolages/isaac-lab that referenced this pull request Jan 6, 2026
# Description

This MR removes the dependency on Isaac Sim XformPrim class for creating
prims. The class mainly handled setting the world or local poses, as
well as restting Xform operations. These are rather simple calls for
which we don't need to go through Isaac Sim. The MR adds a new
`transform` submodule that contains all the relevant functions as well
as their tests.

Fixes # (issue)

## Type of change

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)

## 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] 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
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
Mayankm96 added a commit that referenced this pull request Jan 7, 2026
…4313)

# Description

This MR replaces Isaac Sim's XformPrim class with a simpler
`XformPrimView` class. It mainly allows users to set/get local/world
poses.

Requires merging: #4307, #4323

## Type of change

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

## Screenshots

Benchmarking results:

```bash
./isaaclab.sh -p scripts/benchmarks/benchmark_xform_prim_view.py --num_envs 1024 --headless
```

```
====================================================================================================
BENCHMARK RESULTS: 1024 prims, 50 iterations
====================================================================================================
Operation                 Isaaclab (ms)        Isaacsim (ms)        Isaacsim Exp (ms)   
----------------------------------------------------------------------------------------------------
Initialization                         5.3219            191.9776              6.9343
Get World Poses                        8.0032            181.0207             18.7587
Set World Poses                       20.0200            170.2027             38.1337
Get Local Poses                        4.8549             37.8693             15.6433
Set Local Poses                        7.9702             24.2080             12.8826
Get Both (World+Local)                13.0351            226.3333             35.2003
====================================================================================================

Total Time                            59.2053            831.6116            127.5530

====================================================================================================
SPEEDUP vs Isaac Lab
====================================================================================================
Operation                 Isaacsim Speedup     Isaacsim Exp Speedup
----------------------------------------------------------------------------------------------------
Initialization                          36.07x                1.30x
Get World Poses                         22.62x                2.34x
Set World Poses                          8.50x                1.90x
Get Local Poses                          7.80x                3.22x
Set Local Poses                          3.04x                1.62x
Get Both (World+Local)                  17.36x                2.70x
====================================================================================================
Overall Speedup                         14.05x                2.15x

====================================================================================================

Notes:
  - Times are averaged over all iterations
  - Speedup = (Other API time) / (Isaac Lab time)
  - Speedup > 1.0 means Isaac Lab is faster
  - Speedup < 1.0 means the other API is faster
```

## 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
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com>
Mayankm96 added a commit that referenced this pull request Jan 7, 2026
…4313)

This MR replaces Isaac Sim's XformPrim class with a simpler
`XformPrimView` class. It mainly allows users to set/get local/world
poses.

Requires merging: #4307, #4323

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

Benchmarking results:

```bash
./isaaclab.sh -p scripts/benchmarks/benchmark_xform_prim_view.py --num_envs 1024 --headless
```

```
====================================================================================================
BENCHMARK RESULTS: 1024 prims, 50 iterations
====================================================================================================
Operation                 Isaaclab (ms)        Isaacsim (ms)        Isaacsim Exp (ms)
----------------------------------------------------------------------------------------------------
Initialization                         5.3219            191.9776              6.9343
Get World Poses                        8.0032            181.0207             18.7587
Set World Poses                       20.0200            170.2027             38.1337
Get Local Poses                        4.8549             37.8693             15.6433
Set Local Poses                        7.9702             24.2080             12.8826
Get Both (World+Local)                13.0351            226.3333             35.2003
====================================================================================================

Total Time                            59.2053            831.6116            127.5530

====================================================================================================
SPEEDUP vs Isaac Lab
====================================================================================================
Operation                 Isaacsim Speedup     Isaacsim Exp Speedup
----------------------------------------------------------------------------------------------------
Initialization                          36.07x                1.30x
Get World Poses                         22.62x                2.34x
Set World Poses                          8.50x                1.90x
Get Local Poses                          7.80x                3.22x
Set Local Poses                          3.04x                1.62x
Get Both (World+Local)                  17.36x                2.70x
====================================================================================================
Overall Speedup                         14.05x                2.15x

====================================================================================================

Notes:
  - Times are averaged over all iterations
  - Speedup = (Other API time) / (Isaac Lab time)
  - Speedup > 1.0 means Isaac Lab is faster
  - Speedup < 1.0 means the other API is faster
```

- [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
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com>
Edify0991 pushed a commit to Edify0991/IsaacLab that referenced this pull request Jan 14, 2026
# Description

This MR removes the dependency on Isaac Sim XformPrim class for creating
prims. The class mainly handled setting the world or local poses, as
well as restting Xform operations. These are rather simple calls for
which we don't need to go through Isaac Sim. The MR adds a new
`transform` submodule that contains all the relevant functions as well
as their tests.

Fixes # (issue)

## Type of change

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)

## 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] 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
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
Edify0991 pushed a commit to Edify0991/IsaacLab that referenced this pull request Jan 14, 2026
…saac-sim#4313)

This MR replaces Isaac Sim's XformPrim class with a simpler
`XformPrimView` class. It mainly allows users to set/get local/world
poses.

Requires merging: isaac-sim#4307, isaac-sim#4323

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

Benchmarking results:

```bash
./isaaclab.sh -p scripts/benchmarks/benchmark_xform_prim_view.py --num_envs 1024 --headless
```

```
====================================================================================================
BENCHMARK RESULTS: 1024 prims, 50 iterations
====================================================================================================
Operation                 Isaaclab (ms)        Isaacsim (ms)        Isaacsim Exp (ms)
----------------------------------------------------------------------------------------------------
Initialization                         5.3219            191.9776              6.9343
Get World Poses                        8.0032            181.0207             18.7587
Set World Poses                       20.0200            170.2027             38.1337
Get Local Poses                        4.8549             37.8693             15.6433
Set Local Poses                        7.9702             24.2080             12.8826
Get Both (World+Local)                13.0351            226.3333             35.2003
====================================================================================================

Total Time                            59.2053            831.6116            127.5530

====================================================================================================
SPEEDUP vs Isaac Lab
====================================================================================================
Operation                 Isaacsim Speedup     Isaacsim Exp Speedup
----------------------------------------------------------------------------------------------------
Initialization                          36.07x                1.30x
Get World Poses                         22.62x                2.34x
Set World Poses                          8.50x                1.90x
Get Local Poses                          7.80x                3.22x
Set Local Poses                          3.04x                1.62x
Get Both (World+Local)                  17.36x                2.70x
====================================================================================================
Overall Speedup                         14.05x                2.15x

====================================================================================================

Notes:
  - Times are averaged over all iterations
  - Speedup = (Other API time) / (Isaac Lab time)
  - Speedup > 1.0 means Isaac Lab is faster
  - Speedup < 1.0 means the other API is faster
```

- [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
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: Mayank Mittal <12863862+Mayankm96@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant