States#
States in Genesis hold the runtime data for physics simulation, including positions, velocities, forces, and other solver-specific variables.
Overview#
Each solver maintains its own state:
RigidState: Link poses, joint positions/velocities
MPMState: Particle positions, velocities, deformation gradients
FEMState: Node positions, velocities
PBDState: Particle positions, velocities
SPHState: Particle positions, velocities, densities
Accessing State#
States are accessed through entities or the simulator:
import genesis as gs
gs.init()
scene = gs.Scene()
robot = scene.add_entity(gs.morphs.URDF(file="robot.urdf"))
scene.build()
# Access via entity
positions = robot.get_qpos() # Joint positions
velocities = robot.get_qvel() # Joint velocities
link_pos = robot.get_link("ee").get_pos()
# Full state access (advanced)
rigid_solver = scene.sim.rigid_solver
# ... direct solver state access
State for Parallel Environments#
With n_envs > 1, states are batched:
scene.build(n_envs=16)
# Batched state access
positions = robot.get_qpos() # Shape: (n_envs, n_dofs)
# Per-environment access
positions = robot.get_qpos(envs_idx=[0, 5, 10])
State Management#
Saving State#
state = scene.get_state()
Restoring State#
scene.set_state(state)
Resetting#
scene.reset() # Reset all environments
scene.reset(envs_idx=[0, 1, 2]) # Reset specific environments
Gradient Tracking#
For differentiable simulation:
scene = gs.Scene(
sim_options=gs.options.SimOptions(
requires_grad=True,
),
)
# States now track gradients
scene.step()
loss = compute_loss(robot.get_qpos())
loss.backward()
See Also#
Differentiable Simulation - Differentiable simulation
Scene - Scene state methods