Tensor Utilities#

Genesis 提供用于在不同数组和张量格式之间转换的工具。

概述#

Genesis 使用:

  • Taichi fields: 用于 GPU 加速物理计算

  • PyTorch tensors: 用于状态访问和可微性

  • NumPy arrays: 用于数据导出和可视化

张量转换#

转换为 NumPy#

import genesis as gs

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

# Get state as NumPy array
qpos = robot.get_qpos()
qpos_np = gs.utils.tensor_to_array(qpos)
print(type(qpos_np))  # numpy.ndarray

转换为 CPU#

# Move tensor to CPU (if on GPU)
qpos_cpu = gs.utils.tensor_to_cpu(qpos)

创建 Tensors#

import torch

# Create tensor on correct device
tensor = torch.zeros(10, device=gs.device, dtype=gs.tc_float)

# Or use Genesis wrapper
tensor = gs.utils.to_gs_tensor([1.0, 2.0, 3.0])

常见模式#

获取实体状态#

# Returns PyTorch tensor
positions = robot.get_qpos()
velocities = robot.get_qvel()

# Convert to NumPy for processing
import numpy as np
pos_np = positions.cpu().numpy()

设置实体状态#

import torch

# From NumPy
target = np.array([0.1, 0.2, 0.3])
robot.set_dofs_position(torch.from_numpy(target).to(gs.device))

# From list
robot.set_dofs_position([0.1, 0.2, 0.3])

Batched Tensors#

使用 n_envs > 1

scene.build(n_envs=16)

# Batched output: (n_envs, n_dofs)
all_positions = robot.get_qpos()

# Select specific environments
some_positions = robot.get_qpos(envs_idx=[0, 5, 10])

数据类型#

Genesis

PyTorch

NumPy

Description

gs.tc_float

torch.float32

np.float32

默认 float

gs.tc_int

torch.int32

np.int32

默认 int

另请参阅#