> 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.

# Inertial Measurement Unit (IMU)

A `~sensors.Imu` models the two quantities produced by a conventional inertial measurement
unit:

* `sensors.ImuData.ang_vel_b`: angular velocity \[rad/s] relative to the world, expressed in
  the IMU frame.
* `sensors.ImuData.lin_acc_b`: proper linear acceleration \[m/s²], expressed in the IMU frame.

Proper acceleration is what an accelerometer measures. It is zero in free fall and points upward
with magnitude $g$ for a stationary sensor supported against gravity. This differs from the
coordinate acceleration reported by the [pva](/source/concepts/sensors/pva).

![Forces that determine proper acceleration for an IMU](/isaaclab/_fern-img/3282bf828cfe9e14778a5be47f2e13a4a25431acba160e11dde15ed2d64f0967.webp)

## Configure the sensor

Attach the sensor to a rigid body or to a fixed child frame beneath one. `offset` places and
orients the measurement frame relative to the parent frame.

```python
from isaaclab.sensors import ImuCfg

base_imu = ImuCfg(
    prim_path="{ENV_REGEX_NS}/Robot/base/imu",
    update_period=0.0,
    offset=ImuCfg.OffsetCfg(
        pos=(0.0, 0.0, 0.05),
        rot=(0.0, 0.0, 0.0, 1.0),
    ),
    debug_vis=True,
)
```

Both data fields are `~isaaclab.utils.warp.ProxyArray` buffers. For `E` environments, their
Torch views have shape `(E, 3)`:

```python
imu_data = scene["base_imu"].data
angular_velocity = imu_data.ang_vel_b.torch
proper_acceleration = imu_data.lin_acc_b.torch
```

The acceleration estimate depends on consecutive simulation states. Reset the scene and its sensors
together so derivative history is not carried across episodes. Use a sensor update period compatible
with the control loop that consumes the measurement.

![IMU acceleration debug visualization](/isaaclab/_fern-img/cf108bf92a62084d8b8aa00a70df8d98e6dab8eed77ce216ad21ac5a50eec8bd.webp)

A complete runnable example is available as `imu`:

```bash
uv run --extra isaacsim isaaclab example imu
```