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}")

API 参考#

另请参阅#