Pose Velocity Acceleration (PVA) Sensor

Pose Velocity Acceleration (PVA) Sensor#

A Pva reads a frame’s ground-truth pose, velocity, and acceleration for control, state estimation, or privileged observations. Use an Inertial Measurement Unit (IMU) for accelerometer and gyroscope measurements.

The sensor can attach directly to a rigid body or to a fixed child prim beneath a rigid-body ancestor. In the latter case, Isaac Lab composes the child’s fixed transform with the configured sensor offset.

Measurement contract#

For E environments, every vector has shape (E, 3). The pose has shape (E, 7) in (x, y, z, qx, qy, qz, qw) order.

Buffer

Frame and units

Meaning

pose_w

World; [m, unitless]

Sensor position and orientation

projected_gravity_b

Sensor; unitless

Unit gravity direction projected into the sensor frame

lin_vel_b

Sensor; [m/s]

Linear velocity relative to the world

ang_vel_b

Sensor; [rad/s]

Angular velocity relative to the world

lin_acc_b

Sensor; [m/s²]

Coordinate linear acceleration; zero at rest and \(-g\) in free fall

ang_acc_b

Sensor; [rad/s²]

Angular acceleration relative to the world

Configure and read the sensor#

from isaaclab.sensors import PvaCfg

base_state = PvaCfg(
    prim_path="{ENV_REGEX_NS}/Robot/base",
    update_period=0.0,
    offset=PvaCfg.OffsetCfg(pos=(0.0, 0.0, 0.05)),
)

The data fields are ProxyArray buffers. Convert them to Torch views only where Torch operations are required:

pva_data = scene["base_state"].data
pose_w = pva_data.pose_w.torch
linear_velocity = pva_data.lin_vel_b.torch
coordinate_acceleration = pva_data.lin_acc_b.torch

Like the IMU, acceleration uses state from consecutive simulation updates. Reset the scene and sensor state together at episode boundaries.

A complete runnable example is available as pva:

uv run --extra isaacsim isaaclab example pva