Skip to navigation

Pose Velocity Acceleration (PVA) Sensor

View as Markdown

A Pva reads a frame’s ground-truth pose, velocity, and acceleration for control, state estimation, or privileged observations. Use an 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.

BufferFrame and unitsMeaning
pose_wWorld; [m, unitless]Sensor position and orientation
projected_gravity_bSensor; unitlessUnit gravity direction projected into the sensor frame
lin_vel_bSensor; [m/s]Linear velocity relative to the world
ang_vel_bSensor; [rad/s]Angular velocity relative to the world
lin_acc_bSensor; [m/s²]Coordinate linear acceleration; zero at rest and −g-g in free fall
ang_acc_bSensor; [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