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()
另请参阅#
可微分仿真 - 可微分仿真
场景 (Scene) - Scene state 方法