Skip to main content

VitaiScene

类路径: vitai_core.utils.vitai_scene.VitaiScene

自动创建和管理VitAI仿真场景的核心类。


构造函数

VitaiScene.__init__()

实例化VitAI场景管理器。

参数

参数名类型必需说明
configsDict[str, Any]load_cfg_from_yaml()返回的配置字典
envUipcRLEnvUipcRLEnv环境实例
robotArticulation机器人Articulation对象
sceneInteractiveSceneIsaac Lab场景对象
enable_ros2bool是否启用ROS2(默认False)

返回值: VitaiScene实例

示例

from vitai_core import load_cfg_from_yaml, VitaiScene

configs = load_cfg_from_yaml("configs/uipc_scene.yaml")

class MyEnv(UipcRLEnv):
def __init__(self, cfg, configs):
super().__init__(cfg)
self.vitai_scene = VitaiScene(
configs=configs,
env=self,
robot=self.robot,
scene=self.scene,
enable_ros2=False
)

注意

  • ⚠️ 必须在super().__init__(cfg)之后创建
  • ⚠️ 自动调用uipc_sim.finalize_scene(),无需手动调用

属性

objects

获取所有UIPC对象的字典。

类型: Dict[str, Any]

: 对象名称(来自YAML配置)
: 对象实例

示例

# 访问对象
pot = vitai_scene.objects["pot_msh_rigid"]
cover = vitai_scene.objects["cover_msh_rigid"]

# 获取位置
pos, quat = pot.get_world_poses()

tactile_sensors

获取所有触觉传感器的嵌套字典。

类型: Dict[str, Dict[str, Any]]

结构

{
"left": {
"sensor": GF225Sensor实例,
"gelpad": Gelpad实例
},
"right": {
"sensor": GF225Sensor实例,
"gelpad": Gelpad实例
}
}

示例

# 访问左侧传感器
left_sensor = vitai_scene.tactile_sensors["left"]["sensor"]
left_gelpad = vitai_scene.tactile_sensors["left"]["gelpad"]

# 读取数据
depth = left_sensor.get_camera_depth(env_idx=0)

ros2_bridge

ROS2桥接对象(如果启用)。

类型: ROS2Bridge | None

示例

if vitai_scene.ros2_bridge is not None:
print("✅ ROS2已启用")

configs

原始YAML配置字典。

类型: Dict[str, Any]

示例

gravity = vitai_scene.configs["uipc_sim"]["gravity"]
debug_vis = vitai_scene.configs["debug_vis"]

完整示例

from vitai_core import load_cfg_from_yaml, VitaiScene
from vitai_core.uipc.vitai_uipc_coupling import UipcRLEnv

configs = load_cfg_from_yaml("configs/uipc_scene.yaml")

class MyEnv(UipcRLEnv):
def __init__(self, cfg, configs):
super().__init__(cfg)

# 创建场景
self.vitai_scene = VitaiScene(
configs=configs,
env=self,
robot=self.robot,
scene=self.scene,
enable_ros2=False
)

# 访问传感器
self.left_sensor = self.vitai_scene.tactile_sensors["left"]["sensor"]
self.right_sensor = self.vitai_scene.tactile_sensors["right"]["sensor"]

env = MyEnv(cfg, configs)

# 读取数据
while app.is_running():
left_depth = env.left_sensor.get_camera_depth(0)
right_depth = env.right_sensor.get_camera_depth(0)

# 处理数据...
env.step()