Pose Velocity Acceleration (PVA) Sensor#
A Pva reads the ground-truth kinematic state of a frame. Use it for privileged
observations, state estimation, or control inputs that require more than an inertial sensor measures.
Use an Inertial Measurement Unit (IMU) when the observation should follow accelerometer and gyroscope conventions.
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 |
|---|---|---|
|
World; [m, unitless] |
Sensor position and orientation |
|
Sensor; unitless |
Unit gravity direction projected into the sensor frame |
|
Sensor; [m/s] |
Linear velocity relative to the world |
|
Sensor; [rad/s] |
Angular velocity relative to the world |
|
Sensor; [m/s²] |
Coordinate linear acceleration; zero at rest and \(-g\) in free fall |
|
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 in scripts/demos/sensors/pva_sensor.py:
uv run --extra isaacsim python scripts/demos/sensors/pva_sensor.py