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”)。