VitaiScene
类路径: vitai_core.utils.vitai_scene.VitaiScene
自动创建和管理VitAI仿真场景的核心类。
构造函数
VitaiScene.__init__()
实例化VitAI场景管理器。
参数:
| 参数名 | 类型 | 必需 | 说明 |
|---|---|---|---|
configs | Dict[str, Any] | ✅ | load_cfg_from_yaml()返回的配置字典 |
env | UipcRLEnv | ✅ | UipcRLEnv环境实例 |
robot | Articulation | ✅ | 机器人Articulation对象 |
scene | InteractiveScene | ✅ | Isaac Lab场景对象 |
enable_ros2 | bool | ❌ | 是否启用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()