States#

Genesis 中的 States 保存物理仿真的运行时数据,包括位置、速度、力以及其他 solver 特定的变量。

概览#

每个 solver 维护自己的 state:

  • RigidState: Link 位姿、joint 位置/速度

  • MPMState: 粒子位置、速度、变形梯度

  • FEMState: 节点位置、速度

  • PBDState: 粒子位置、速度

  • SPHState: 粒子位置、速度、密度

访问 State#

States 通过 entities 或 simulator 访问:

import genesis as gs

gs.init()
scene = gs.Scene()
robot = scene.add_entity(gs.morphs.URDF(file="robot.urdf"))
scene.build()

# 通过 entity 访问
positions = robot.get_qpos()      # Joint 位置
velocities = robot.get_qvel()     # Joint 速度
link_pos = robot.get_link("ee").get_pos()

# 完整 state 访问(高级)
rigid_solver = scene.sim.rigid_solver
# ... 直接访问 solver state

并行环境的 State#

使用 n_envs > 1 时,states 是批量的:

scene.build(n_envs=16)

# 批量 state 访问
positions = robot.get_qpos()  # Shape: (n_envs, n_dofs)

# 按环境访问
positions = robot.get_qpos(envs_idx=[0, 5, 10])

State 管理#

保存 State#

state = scene.get_state()

恢复 State#

scene.set_state(state)

重置#

scene.reset()  # 重置所有环境
scene.reset(envs_idx=[0, 1, 2])  # 重置特定环境

梯度追踪#

用于可微分仿真:

scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        requires_grad=True,
    ),
)

# States 现在追踪梯度
scene.step()
loss = compute_loss(robot.get_qpos())
loss.backward()

另请参阅#