#7830·IsaacLab

[Bug Report] FrameTransformer overwrites offsets for duplicate implicit frame names

Author: peachtree0222Created Sep 15, 2026Updated Sep 15, 2026

Describe the bug

FrameTransformer supports target bodies at different paths that have the same leaf name. When those targets omit FrameCfg.name, they intentionally expose the same implicit frame name for backward compatibility. However, distinct offsets configured for those targets are not kept distinct: both targets receive the offset from the last target with that shared name.

For example, these are separate bodies and should retain separate offsets:

python
target_frames = [
    FrameTransformerCfg.FrameCfg(
        prim_path="{ENV_REGEX_NS}/Robot/RF_SHANK",
        offset=OffsetCfg(pos=(0.1, 0.0, 0.0)),
    ),
    FrameTransformerCfg.FrameCfg(
        prim_path="{ENV_REGEX_NS}/Robot_1/RF_SHANK",
        offset=OffsetCfg(pos=(0.0, 0.2, 0.0)),
    ),
]

The body registry is keyed by relative body path, but the offset registry is keyed only by frame_name. Both entries above therefore write target_offsets["RF_SHANK"]; offset assembly then looks up both bodies using that overwritten entry. The same name-only collection and lookup are present in the PhysX implementation and OV implementation on develop.

Expected behavior: each target transform composes the pose of its own body with the offset from its own FrameCfg.

Actual behavior: the portable source/replay probe included with this report confirms the name-only store and loads in both current backends, then reproduces:

assembled offsets: [[0.0, 0.2, 0.0], [0.0, 0.2, 0.0]]
expected offsets:  [[0.1, 0.0, 0.0], [0.0, 0.2, 0.0]]

This is source-level evidence; I have not run the focused tests in Isaac Sim/Kit.

Attachment: frame-transformer-duplicate-name-offset-collision-poc.zip

Steps to reproduce

  1. Check out IsaacLab develop at e86463df8a8d8dff275e50fdcfd892e10ba32ec1.
  2. Extract the attached archive and run its portable probe to confirm the two backend signatures and replay the colliding configuration:
bash
python poc/repro_offsets.py /path/to/IsaacLab
  1. For the repository-native regression, add OffsetCfg(pos=(0.1, 0.0, 0.0)) to the implicit Robot/RF_SHANK target in the existing test_frame_transformer_duplicate_body_names test.
  2. Add OffsetCfg(pos=(0.0, 0.2, 0.0)) to the implicit Robot_1/RF_SHANK target.
  3. Compose each body's ground-truth pose with its configured offset and compare those two results to the two returned RF_SHANK target poses.
  4. Run the focused test for both backends:
bash
uv run --extra test --extra isaacsim python -m pytest \
  source/isaaclab_physx/test/sensors/test_frame_transformer.py -k duplicate_body_names
uv run --extra test --extra ov python -m pytest \
  source/isaaclab_ov/test/sensors/test_frame_transformer.py -k duplicate_body_names

The current code resolves both lookups through the single target_offsets["RF_SHANK"] entry. Keying offsets by both body path and frame name preserves each target's configured offset.

System Info

  • Commit: e86463df8a8d8dff275e50fdcfd892e10ba32ec1 (develop)
  • Isaac Sim Version: not launched; this report uses source inspection and a deterministic replay of the collection/assembly logic
  • OS: Ubuntu 24.04.5 LTS
  • GPU / CUDA / Driver: not used for this source-level reproduction

Additional context

Issue #4167 and PR #4168 fixed body-path collisions for equal leaf names. The current body lookup is path-aware as a result, but the per-target offset lookup remains name-only. The repository's existing duplicate-body tests also establish that distinct bodies may retain the same implicit public name; identity offsets simply prevent those tests from exposing this remaining collision.

A bounded search on 2026-09-15 for combinations of FrameTransformer, duplicate frame/body names, and offsets did not find an issue covering this exact defect. I will repeat the search immediately before filing.

I have a draft change that keys offsets by (relative_body_path, frame_name) and extends the two existing backend tests. It applies cleanly to the commit above, but I would keep the PR separate until its fail-before/pass-after tests have run in an Isaac Sim/Kit environment.

Checklist

  • I have checked that there is no similar issue in the repo. (Bounded search on 2026-09-15; I will repeat it immediately before filing.)
  • I have checked that the issue is not in running Isaac Sim itself and is related to the repo. (The conflicting collection and lookup are in both IsaacLab backend implementations.)

Acceptance Criteria

  • Two target bodies with the same implicit frame name can retain different position and rotation offsets.
  • Existing explicit-name and duplicate-body behavior remains unchanged.
  • Focused regression tests pass for both the PhysX and OV FrameTransformer implementations.
  • Ambiguous same-body/same-name duplicates are either represented correctly or rejected with a clear error.