1. StackCube-v1
用于模拟机器人在桌面场景中将红色立方体(cubeA)堆叠到绿色立方体(cubeB)上的操作。该任务强调精确抓取、放置和稳定性控制。成功条件包括红色立方体稳定堆叠在绿色立方体上且不被机器人抓取。
参数 (Arguments)
- robot_uids (str, 可选): 指定用于任务的机器人类型。支持的值包括 “panda_wristcam”、“panda” 或 “fetch”。默认值:
panda_wristcam
。 - robot_init_qpos_noise (float, 可选): 机器人初始关节位置的噪声水平,用于引入随机性。默认值: 0.02。
- max_episode_steps (int, 可选): 每个 episode 的最大步数。通过注册装饰器
@register_env
设置为 50。 - 其他参数: 继承自 BaseEnv,支持如
obs_mode
、control_mode
等通用环境参数。
属性 (Attributes)
- agent (Union[Panda, Fetch]): 用于执行任务的机器人实例,根据
robot_uids
初始化。 - cubeA (Actor): 红色立方体对象(需被堆叠),半尺寸为 [0.02, 0.02, 0.02]。
- cubeB (Actor): 绿色立方体对象(作为堆叠基础),半尺寸为 [0.02, 0.02, 0.02]。
- cube_half_size (torch.Tensor): 立方体半尺寸张量,用于碰撞检测和成功判断。
- _sample_video_link (str): 示例视频链接,用于任务演示。
- SUPPORTED_ROBOTS (List[str]): 支持的机器人列表: [“panda_wristcam”, “panda”, “fetch”]。
方法 (Methods)
- **init(self, *args, robot_uids=“panda_wristcam”, robot_init_qpos_noise=0.02, kwargs): 初始化环境,包括设置默认机器人和噪声。
- _default_sensor_configs (property): 返回默认传感器配置,包括基础相机(分辨率 128x128)。
- _default_human_render_camera_configs (property): 返回人类渲染相机配置(分辨率 512x512)。
- _load_agent(self, options: dict): 加载机器人代理,设置初始姿态。
- _load_scene(self, options: dict): 加载场景,包括桌面和两个立方体。
- _initialize_episode(self, env_idx: torch.Tensor, options: dict): 初始化 episode,包括随机化立方体位置和旋转。
- evaluate(self): 计算评估指标,包括是否抓取、是否堆叠成功、是否静态和总体成功标志。
- _get_obs_extra(self, info: Dict): 获取额外观察信息,如 TCP 姿态和立方体相对位置。
- compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): 计算稠密奖励,基于接近、抓取、放置和稳定性。
- compute_normalized_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): 计算归一化稠密奖励(除以 8)。
示例 (Examples)
import gymnasium as gym
import mani_skill# 创建环境
env = gym.make("StackCube-v1")# 重置环境
obs, info = env.reset()# 执行随机动作
action = env.action_space.sample()
next_obs, reward, terminated, truncated, info = env.step(action)# 检查成功
print(info.get("success", False))# 关闭环境
env.close()
注意 (Notes)
- 随机化: 立方体位置在 xy 平面随机采样(范围 [-0.1, 0.1]),z 轴旋转随机,但确保不碰撞。
- 成功条件: 红色立方体必须在绿色立方体上方(xy 偏移 < 立方体半尺寸 + 0.005,z 偏移 ≈ 立方体高度),静态(线性速度阈值 1e-2,角速度阈值 0.5),且不被抓取。
- 奖励: 支持稠密奖励计算,鼓励接近、抓取和放置行为。
- 兼容性: 确保 ManiSkill 库已安装。GPU 模拟可能导致轻微不稳定性(如高角速度)。详细实现请参考源代码
mani_skill/envs/tasks/tabletop/stack_cube.py
。 - 扩展: 可通过修改
robot_uids
切换机器人,但需确保控制模式兼容(如 “pd_ee_delta_pos”)。