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 |
|---|---|---|---|
|
|
|
默认 float |
|
|
|
默认 int |
另请参阅#
Device & Platform Utilities - 设备配置
States - 状态管理