Tensor#
genesis.grad.Tensor 类扩展了 torch.Tensor,以支持通过 Genesis 仿真的端到端梯度流。
概述#
Genesis Tensors:
通过 scene tracking 扩展 PyTorch tensors
支持通过物理的自动梯度传播
支持所有标准 PyTorch 操作
追踪父 tensors 以实现梯度流
用法#
当你访问状态时,Genesis Tensors 会自动创建:
import genesis as gs
import torch
gs.init()
scene = gs.Scene(
sim_options=gs.options.SimOptions(
requires_grad=True,
),
)
robot = scene.add_entity(gs.morphs.URDF(file="robot.urdf"))
scene.build()
# 这些返回 genesis.grad.Tensor
pos = robot.get_pos() # Genesis Tensor
vel = robot.get_vel() # Genesis Tensor
qpos = robot.get_qpos() # Genesis Tensor
梯度流#
# 正向传播
scene.step()
pos = robot.get_pos()
# 计算损失
target = torch.tensor([1.0, 0.0, 0.5], device=gs.device)
loss = (pos - target).pow(2).sum()
# 反向传播 - 流经仿真
loss.backward()
从 Scene 分离#
要阻止梯度流经仿真:
# 分离并移除 scene tracking
pos_detached = pos.detach(sceneless=True)
# 或显式地
pos_sceneless = pos.sceneless()
检查 Scene 关联#
# 检查 tensor 是否与 scene 关联
if pos.scene is not None:
print(f"Tensor from scene: {pos.scene.uid}")