> This page is for version Release 3.0 (default).
> For other versions, use one of these documentation indexes:
> - Release 3.0 (default): https://docs.nvidia.com/isaaclab/3.0/llms.txt
> - Release 2.3: https://docs.nvidia.com/isaaclab/2.3/llms.txt
> - Release 2.2: https://docs.nvidia.com/isaaclab/2.2/llms.txt
> - Release 2.1: https://docs.nvidia.com/isaaclab/2.1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/isaaclab/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/isaaclab/_mcp/server.

# Frame Transformer

A `~sensors.FrameTransformer` tracks the pose of one or more target frames relative to a
source frame. It provides the same batched interface across cloned environments, avoiding repeated
USD traversal or per-environment transform calculations.

![Source and target frames used by a frame transformer](/isaaclab/_fern-img/2a18c09118bbd9845efc8ae4dd43b7d31919904211857fcc5ad7cd1b786821e1.webp)

## Define frames

The sensor's `sensors.FrameTransformerCfg.prim_path` selects the source rigid body. Each
`~sensors.FrameTransformerCfg.FrameCfg` selects one or more target rigid bodies and can add a
fixed pose offset. Target paths accept regular expressions; the data order is recorded in
`sensors.FrameTransformerData.target_frame_names`.

```python
from isaaclab.sensors import FrameTransformerCfg

feet_in_base = FrameTransformerCfg(
    prim_path="{ENV_REGEX_NS}/Robot/base",
    target_frames=[
        FrameTransformerCfg.FrameCfg(
            prim_path="{ENV_REGEX_NS}/Robot/.*_FOOT",
            name="foot",
        ),
    ],
    debug_vis=True,
)
```

A target expression is inclusive. If it also matches the source body, the output includes the
identity transform from the source to itself. Use a narrower expression when that entry is not
wanted.

## Read transforms

For `E` environments and `T` resolved target frames, positions have shape `(E, T, 3)`,
quaternions have shape `(E, T, 4)`, and combined poses have shape `(E, T, 7)`. Quaternions use
`(x, y, z, w)` order.

```python
transforms = scene["feet_in_base"].data
foot_names = transforms.target_frame_names
foot_pos_b = transforms.target_pos_source.torch
foot_quat_b = transforms.target_quat_source.torch
foot_pose_w = transforms.target_pose_w.torch
```

`target_*_source` fields express targets in the configured source frame. `target_*_w` fields
express the offset target frames in the world frame. The corresponding `source_*_w` fields expose
the offset source frame in world coordinates. Positions are in meters; quaternions are unitless.

![Frame transformer debug visualization](/isaaclab/_fern-img/98759d133602696750f6e702c8b5ceb0b4a708a8110e9ac18de60de2c5ae34b4.webp)

A complete runnable example is available as `frame-transformer`:

```bash
uv run --extra isaacsim isaaclab example frame-transformer
```