From f482c6d0b4f0371653a00b1ffc32cbcc0988fb12 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Fri, 22 Nov 2024 10:03:36 -0800 Subject: [PATCH 01/59] first draft of drawer env --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 mani_skill/envs/tasks/tabletop/pull_drawer.py diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py new file mode 100644 index 000000000..58d9c3686 --- /dev/null +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -0,0 +1,156 @@ +from typing import Dict, List, Union +import numpy as np +import sapien +import torch +from mani_skill import PACKAGE_ASSET_DIR +from mani_skill.agents.robots import Fetch, Panda +from mani_skill.envs.sapien_env import BaseEnv +from mani_skill.envs.utils import randomization +from mani_skill.sensors.camera import CameraConfig +from mani_skill.utils import common, io_utils, sapien_utils +from mani_skill.utils.building import actors, articulations +from mani_skill.utils.registration import register_env +from mani_skill.utils.scene_builder.table.scene_builder import TableSceneBuilder +from mani_skill.utils.structs.articulation import Articulation +from mani_skill.utils.structs.link import Link +from mani_skill.utils.structs.pose import Pose +from mani_skill.utils.structs.types import SimConfig + +@register_env("PullDrawer-v1", max_episode_steps=200) +class PullDrawerEnv(BaseEnv): + SUPPORTED_REWARD_MODES = ["sparse", "none"] + SUPPORTED_ROBOTS = ["panda", "panda_wristcam", "fetch"] + agent: Union[Panda, Fetch] + + def __init__( + self, + *args, + robot_uids="panda_wristcam", + robot_init_qpos_noise=0.02, + reconfiguration_freq=None, + num_envs=1, + **kwargs, + ): + self.robot_init_qpos_noise = robot_init_qpos_noise + + if reconfiguration_freq is None: + reconfiguration_freq = 1 if num_envs == 1 else 0 + + super().__init__( + *args, + robot_uids=robot_uids, + reconfiguration_freq=reconfiguration_freq, + num_envs=num_envs, + **kwargs, + ) + + @property + def _default_sim_config(self): + return SimConfig() + + @property + def _default_sensor_configs(self): + pose = sapien_utils.look_at([-0.4, 0, 0.3], [0, 0, 0.1]) + return [ + CameraConfig("base_camera", pose=pose, width=128, height=128, fov=np.pi / 2) + ] + + def _load_agent(self, options: dict): + super()._load_agent(options, sapien.Pose(p=[-0.615, 0, 0])) + + def _load_scene(self, options: dict): + self.scene_builder = TableSceneBuilder( + self, robot_init_qpos_noise=self.robot_init_qpos_noise + ) + self.scene_builder.build() + + # Create a simple drawer using ArticulationBuilder + builder = self.scene.create_articulation_builder() + + # Create the base (fixed part) + base = builder.create_link_builder() + base.add_box_collision(half_size=[0.2, 0.3, 0.02]) + base.add_box_visual(half_size=[0.2, 0.3, 0.02], color=[0.8, 0.8, 0.8, 1]) + + # Create the drawer (moving part) + drawer = builder.create_link_builder(parent=base) + drawer.add_box_collision(half_size=[0.18, 0.28, 0.1]) + drawer.add_box_visual(half_size=[0.18, 0.28, 0.1], color=[0.6, 0.6, 0.6, 1]) + + + drawer.set_joint_properties( + type="prismatic", + limits=(-0.3, 0), # 30cm travel range + pose_in_parent=sapien.Pose([0, 0, 0.1]), + pose_in_child=sapien.Pose(), + friction=0.1, + damping=10 + ) + drawer.set_joint_name("drawer_joint") + + # Build the articulation + builder.set_initial_pose(sapien.Pose(p=[0, 0, 0.5])) + self.drawer = builder.build(fix_root_link=True) + + self.drawer_link = self.drawer.get_links()[1] + self.target_pos = -0.25 # set target position as 25cm out + + def _initialize_episode(self, env_idx: torch.Tensor, options: dict): + with torch.device(self.device): + self.scene_builder.initialize(env_idx) + # Reset drawer position + self.drawer.set_qpos([0]) # Close the drawer initially + + @property + def current_pos(self): + return self.drawer.get_qpos()[0] + + def evaluate(self): + pos_dist = self.target_pos - self.current_pos + return dict( + success=abs(pos_dist) < 0.02, # 2cm threshold + pos_dist=pos_dist + ) + + def _get_obs_extra(self, info: Dict): + return dict( + tcp_pose=self.agent.tcp.pose.raw_pose, + drawer_pos=self.current_pos, + target_pos=self.target_pos, + drawer_link_pos=self.drawer_link.pose.p + ) + + def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): + reward = 0.0 + + # Success bonus + if info["success"]: + return 10.0 + + # Distance reward + pos_dist = abs(info["pos_dist"]) + reward += 1 - np.tanh(pos_dist * 5.0) + + # Contact reward + is_contacted = any(self.agent.check_contact_fingers(self.drawer_link)) + if is_contacted: + reward += 0.25 + + # Movement reward based on position difference + pos_diff = info["pos_dist"] - self.last_pos_dist + if info["pos_dist"] > 0: + # Penalize moving away from target + movement_reward = -np.tanh(pos_diff * 2) * 5 + else: + # Reward moving toward target + movement_reward = np.tanh(pos_diff * 2) * 5 + reward += movement_reward + + # Store current distance for next step + self.last_pos_dist = info["pos_dist"] + + return reward + + def compute_normalized_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): + max_reward = 10.0 + return self.compute_dense_reward(obs=obs, action=action, info=info) / max_reward \ No newline at end of file From 40d143397538b1795e3e9ec17e5e08494bac52ef Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Fri, 22 Nov 2024 13:12:16 -0800 Subject: [PATCH 02/59] fixed spawn and dimensions, need to debug joint --- mani_skill/envs/tasks/tabletop/__init__.py | 3 +- mani_skill/envs/tasks/tabletop/pull_drawer.py | 242 +++++++++++------- 2 files changed, 155 insertions(+), 90 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/__init__.py b/mani_skill/envs/tasks/tabletop/__init__.py index be5c15bbc..cf9152ce4 100644 --- a/mani_skill/envs/tasks/tabletop/__init__.py +++ b/mani_skill/envs/tasks/tabletop/__init__.py @@ -15,4 +15,5 @@ from .place_sphere import PlaceSphereEnv from .roll_ball import RollBallEnv from .push_t import PushTEnv -from .pull_cube_tool import PullCubeToolEnv \ No newline at end of file +from .pull_cube_tool import PullCubeToolEnv +from .pull_drawer import PullDrawerEnv \ No newline at end of file diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 58d9c3686..974797ff5 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -1,62 +1,82 @@ -from typing import Dict, List, Union +from typing import Dict, Union, Any import numpy as np import sapien import torch -from mani_skill import PACKAGE_ASSET_DIR from mani_skill.agents.robots import Fetch, Panda from mani_skill.envs.sapien_env import BaseEnv from mani_skill.envs.utils import randomization from mani_skill.sensors.camera import CameraConfig -from mani_skill.utils import common, io_utils, sapien_utils -from mani_skill.utils.building import actors, articulations +from mani_skill.utils import sapien_utils +from mani_skill.utils.building import actors from mani_skill.utils.registration import register_env -from mani_skill.utils.scene_builder.table.scene_builder import TableSceneBuilder -from mani_skill.utils.structs.articulation import Articulation -from mani_skill.utils.structs.link import Link -from mani_skill.utils.structs.pose import Pose -from mani_skill.utils.structs.types import SimConfig +from mani_skill.utils.scene_builder.table import TableSceneBuilder +from mani_skill.utils.structs import Pose +from mani_skill.utils.structs.types import SimConfig, GPUMemoryConfig @register_env("PullDrawer-v1", max_episode_steps=200) class PullDrawerEnv(BaseEnv): - SUPPORTED_REWARD_MODES = ["sparse", "none"] - SUPPORTED_ROBOTS = ["panda", "panda_wristcam", "fetch"] + SUPPORTED_REWARD_MODES = ("sparse", "dense", "normalized_dense", "none") + SUPPORTED_ROBOTS = ["panda", "fetch"] agent: Union[Panda, Fetch] + + drawer_half_size = [0.1, 0.15, 0.01] + drawer_body_half_size = [0.09, 0.14, 0.05] + target_pos = -0.125 + max_pull_distance = 0.15 + def __init__( self, *args, - robot_uids="panda_wristcam", + robot_uids="panda", robot_init_qpos_noise=0.02, - reconfiguration_freq=None, - num_envs=1, - **kwargs, + **kwargs ): self.robot_init_qpos_noise = robot_init_qpos_noise - - if reconfiguration_freq is None: - reconfiguration_freq = 1 if num_envs == 1 else 0 - super().__init__( *args, robot_uids=robot_uids, - reconfiguration_freq=reconfiguration_freq, - num_envs=num_envs, - **kwargs, + **kwargs ) @property def _default_sim_config(self): - return SimConfig() + return SimConfig( + gpu_memory_config=GPUMemoryConfig( + found_lost_pairs_capacity=2**25, + max_rigid_patch_count=2**18 + ) + ) @property def _default_sensor_configs(self): - pose = sapien_utils.look_at([-0.4, 0, 0.3], [0, 0, 0.1]) + pose = sapien_utils.look_at([0.2, -0.3, 0.3], [0, 0, 0.1]) return [ - CameraConfig("base_camera", pose=pose, width=128, height=128, fov=np.pi / 2) + CameraConfig( + "base_camera", + pose=pose, + width=128, + height=128, + fov=np.pi / 2, + near=0.01, + far=100 + ) ] - def _load_agent(self, options: dict): - super()._load_agent(options, sapien.Pose(p=[-0.615, 0, 0])) + @property + def _default_human_render_camera_configs(self): + pose = sapien_utils.look_at([-0.4, -0.5, 0.6], [0.0, 0.0, 0.2]) + return [ + CameraConfig( + "render_camera", + pose=pose, + width=512, + height=512, + fov=1, + near=0.01, + far=100 + ) + ] def _load_scene(self, options: dict): self.scene_builder = TableSceneBuilder( @@ -64,93 +84,137 @@ def _load_scene(self, options: dict): ) self.scene_builder.build() - # Create a simple drawer using ArticulationBuilder + # Create drawer builder = self.scene.create_articulation_builder() - # Create the base (fixed part) + # Base/outer casing with walls base = builder.create_link_builder() - base.add_box_collision(half_size=[0.2, 0.3, 0.02]) - base.add_box_visual(half_size=[0.2, 0.3, 0.02], color=[0.8, 0.8, 0.8, 1]) - - # Create the drawer (moving part) + base.name = "drawer_base" + wall_thickness = 0.01 + + # Back wall + base.add_box_collision( + sapien.Pose([-(self.drawer_half_size[0] - wall_thickness/2), 0, 0]), + [wall_thickness/2, self.drawer_half_size[1], self.drawer_half_size[2]] + ) + base.add_box_visual( + sapien.Pose([-(self.drawer_half_size[0] - wall_thickness/2), 0, 0]), + [wall_thickness/2, self.drawer_half_size[1], self.drawer_half_size[2]] + ) + + # Side walls + for y_sign in [-1, 1]: + base.add_box_collision( + sapien.Pose([0, y_sign * (self.drawer_half_size[1] - wall_thickness/2), 0]), + [self.drawer_half_size[0], wall_thickness/2, self.drawer_half_size[2]] + ) + base.add_box_visual( + sapien.Pose([0, y_sign * (self.drawer_half_size[1] - wall_thickness/2), 0]), + [self.drawer_half_size[0], wall_thickness/2, self.drawer_half_size[2]] + ) + + # Bottom wall + base.add_box_collision( + sapien.Pose([0, 0, -(self.drawer_half_size[2] - wall_thickness/2)]), + [self.drawer_half_size[0], self.drawer_half_size[1], wall_thickness/2] + ) + base.add_box_visual( + sapien.Pose([0, 0, -(self.drawer_half_size[2] - wall_thickness/2)]), + [self.drawer_half_size[0], self.drawer_half_size[1], wall_thickness/2] + ) + + # Inner sliding drawer drawer = builder.create_link_builder(parent=base) - drawer.add_box_collision(half_size=[0.18, 0.28, 0.1]) - drawer.add_box_visual(half_size=[0.18, 0.28, 0.1], color=[0.6, 0.6, 0.6, 1]) - + drawer.name = "drawer_body" + drawer.add_box_collision(half_size=self.drawer_body_half_size) + drawer.add_box_visual(half_size=self.drawer_body_half_size) + + # Add handle + handle_size = [0.02, 0.04, 0.01] + handle_offset = 0.02 + drawer.add_box_collision( + sapien.Pose([self.drawer_body_half_size[0] + handle_offset, 0, 0]), + handle_size + ) + drawer.add_box_visual( + sapien.Pose([self.drawer_body_half_size[0] + handle_offset, 0, 0]), + handle_size + ) drawer.set_joint_properties( type="prismatic", - limits=(-0.3, 0), # 30cm travel range - pose_in_parent=sapien.Pose([0, 0, 0.1]), - pose_in_child=sapien.Pose(), + limits=(-self.max_pull_distance, 0), + pose_in_parent=sapien.Pose([0, 0, 0]), + pose_in_child=sapien.Pose(), friction=0.1, damping=10 ) - drawer.set_joint_name("drawer_joint") - # Build the articulation - builder.set_initial_pose(sapien.Pose(p=[0, 0, 0.5])) - self.drawer = builder.build(fix_root_link=True) + # Build articulation with drawer slightly ajar + builder.set_scene_idxs(scene_idxs=range(self.num_envs)) + builder.set_initial_pose(sapien.Pose(p=[0.12, 0, 0.2])) - self.drawer_link = self.drawer.get_links()[1] - self.target_pos = -0.25 # set target position as 25cm out + self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") + self.drawer_link = self.drawer.get_links()[1] def _initialize_episode(self, env_idx: torch.Tensor, options: dict): with torch.device(self.device): + b = len(env_idx) self.scene_builder.initialize(env_idx) - # Reset drawer position - self.drawer.set_qpos([0]) # Close the drawer initially - - @property - def current_pos(self): - return self.drawer.get_qpos()[0] - - def evaluate(self): - pos_dist = self.target_pos - self.current_pos - return dict( - success=abs(pos_dist) < 0.02, # 2cm threshold - pos_dist=pos_dist - ) + + init_pos = torch.zeros((b, 1), device=self.device) + noise = torch.rand((b, 1), device=self.device) * 0.02 + init_pos -= noise + + self.drawer.set_qpos(init_pos) def _get_obs_extra(self, info: Dict): - return dict( + obs = dict( tcp_pose=self.agent.tcp.pose.raw_pose, - drawer_pos=self.current_pos, - target_pos=self.target_pos, - drawer_link_pos=self.drawer_link.pose.p ) + + if self._obs_mode in ["state", "state_dict"]: + obs.update( + drawer_pose=self.drawer.pose.raw_pose, + drawer_qpos=self.drawer.get_qpos(), + ) + return obs - def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - reward = 0.0 + def evaluate(self): + drawer_qpos = self.drawer.get_qpos() + pos_dist = torch.abs(self.target_pos - drawer_qpos) + cube_pulled_close = pos_dist.squeeze(-1) < 0.007 - # Success bonus - if info["success"]: - return 10.0 + progress = 1 - torch.tanh(5.0 * pos_dist) - # Distance reward - pos_dist = abs(info["pos_dist"]) - reward += 1 - np.tanh(pos_dist * 5.0) + return { + "success": cube_pulled_close, + "success_once": cube_pulled_close, + "success_at_end": cube_pulled_close, + "drawer_progress": progress.mean(), + "drawer_distance": pos_dist.mean(), + "reward": self.compute_normalized_dense_reward( + None, None, {"success": cube_pulled_close} + ), + } + + def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): + drawer_qpos = self.drawer.get_qpos() + pos_dist = torch.abs(self.target_pos - drawer_qpos) - # Contact reward - is_contacted = any(self.agent.check_contact_fingers(self.drawer_link)) - if is_contacted: - reward += 0.25 + distance_reward = 2.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - # Movement reward based on position difference - pos_diff = info["pos_dist"] - self.last_pos_dist - if info["pos_dist"] > 0: - # Penalize moving away from target - movement_reward = -np.tanh(pos_diff * 2) * 5 - else: - # Reward moving toward target - movement_reward = np.tanh(pos_diff * 2) * 5 - reward += movement_reward + is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) + grasping_reward = 2.0 * is_grasping - # Store current distance for next step - self.last_pos_dist = info["pos_dist"] + success_mask = info.get("success", torch.zeros_like(is_grasping)) + success_reward = torch.where(success_mask, 5.0, 0.0) - return reward + return distance_reward + grasping_reward + success_reward - def compute_normalized_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - max_reward = 10.0 - return self.compute_dense_reward(obs=obs, action=action, info=info) / max_reward \ No newline at end of file + def compute_normalized_dense_reward( + self, obs: Any, action: torch.Tensor, info: Dict + ): + max_reward = 5.0 + dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) + return dense_reward / max_reward From ed5da118f792413c7620fe0d3af17646e167841f Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Sat, 23 Nov 2024 13:00:36 -0800 Subject: [PATCH 03/59] drawer construction bug fix --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 177 ++++++++++++------ 1 file changed, 120 insertions(+), 57 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 974797ff5..b8e3e649e 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -4,14 +4,11 @@ import torch from mani_skill.agents.robots import Fetch, Panda from mani_skill.envs.sapien_env import BaseEnv -from mani_skill.envs.utils import randomization -from mani_skill.sensors.camera import CameraConfig from mani_skill.utils import sapien_utils -from mani_skill.utils.building import actors from mani_skill.utils.registration import register_env from mani_skill.utils.scene_builder.table import TableSceneBuilder -from mani_skill.utils.structs import Pose from mani_skill.utils.structs.types import SimConfig, GPUMemoryConfig +from mani_skill.sensors.camera import CameraConfig @register_env("PullDrawer-v1", max_episode_steps=200) class PullDrawerEnv(BaseEnv): @@ -19,12 +16,6 @@ class PullDrawerEnv(BaseEnv): SUPPORTED_ROBOTS = ["panda", "fetch"] agent: Union[Panda, Fetch] - - drawer_half_size = [0.1, 0.15, 0.01] - drawer_body_half_size = [0.09, 0.14, 0.05] - target_pos = -0.125 - max_pull_distance = 0.15 - def __init__( self, *args, @@ -33,6 +24,26 @@ def __init__( **kwargs ): self.robot_init_qpos_noise = robot_init_qpos_noise + + # Outer cabinet dimensions (scaled down by 0.5) + self.outer_width = 0.15 # x (was 0.3) + self.outer_depth = 0.2 # y (was 0.4) + self.outer_height = 0.15 # z (was 0.3) + self.wall_thickness = 0.01 # (was 0.02) + + # Inner drawer dimensions (slightly smaller to fit inside) + self.inner_width = self.outer_width - 2.2 * self.wall_thickness + self.inner_depth = self.outer_depth - 1.2 * self.wall_thickness + self.inner_height = self.outer_height - 2.2 * self.wall_thickness + + # Handle dimensions (scaled down) + self.handle_radius = 0.01 # (was 0.02) + self.handle_depth = 0.02 # (was 0.04) + + # Movement parameters (scaled proportionally) + self.max_pull_distance = self.outer_depth * 0.8 # Can pull out 80% of depth + self.target_pos = -self.max_pull_distance * 0.8 + super().__init__( *args, robot_uids=robot_uids, @@ -65,7 +76,7 @@ def _default_sensor_configs(self): @property def _default_human_render_camera_configs(self): - pose = sapien_utils.look_at([-0.4, -0.5, 0.6], [0.0, 0.0, 0.2]) + pose = sapien_utils.look_at([-0.6, -0.8, 0.6], [0.0, 0.0, 0.2]) return [ CameraConfig( "render_camera", @@ -84,63 +95,116 @@ def _load_scene(self, options: dict): ) self.scene_builder.build() - # Create drawer builder = self.scene.create_articulation_builder() - # Base/outer casing with walls + # Create outer cabinet (fixed base) base = builder.create_link_builder() - base.name = "drawer_base" - wall_thickness = 0.01 - + base.name = "cabinet" + + # Bottom base + base.add_box_collision( + sapien.Pose([0, 0, -self.outer_height/2]), + half_size=[self.outer_width/2, self.outer_depth/2, self.wall_thickness/2] + ) + base.add_box_visual( + sapien.Pose([0, 0, -self.outer_height/2]), + half_size=[self.outer_width/2, self.outer_depth/2, self.wall_thickness/2], + ) + + # Top wall + base.add_box_collision( + sapien.Pose([0, 0, self.outer_height/2]), + half_size=[self.outer_width/2, self.outer_depth/2, self.wall_thickness/2] + ) + base.add_box_visual( + sapien.Pose([0, 0, self.outer_height/2]), + half_size=[self.outer_width/2, self.outer_depth/2, self.wall_thickness/2], + ) + # Back wall base.add_box_collision( - sapien.Pose([-(self.drawer_half_size[0] - wall_thickness/2), 0, 0]), - [wall_thickness/2, self.drawer_half_size[1], self.drawer_half_size[2]] + sapien.Pose([0, -self.outer_depth/2, 0]), + half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2] ) base.add_box_visual( - sapien.Pose([-(self.drawer_half_size[0] - wall_thickness/2), 0, 0]), - [wall_thickness/2, self.drawer_half_size[1], self.drawer_half_size[2]] + sapien.Pose([0, -self.outer_depth/2, 0]), + half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2], ) - + # Side walls - for y_sign in [-1, 1]: + for x_sign in [-1, 1]: base.add_box_collision( - sapien.Pose([0, y_sign * (self.drawer_half_size[1] - wall_thickness/2), 0]), - [self.drawer_half_size[0], wall_thickness/2, self.drawer_half_size[2]] + sapien.Pose([x_sign * self.outer_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.outer_depth/2, self.outer_height/2] ) base.add_box_visual( - sapien.Pose([0, y_sign * (self.drawer_half_size[1] - wall_thickness/2), 0]), - [self.drawer_half_size[0], wall_thickness/2, self.drawer_half_size[2]] + sapien.Pose([x_sign * self.outer_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.outer_depth/2, self.outer_height/2], ) - - # Bottom wall - base.add_box_collision( - sapien.Pose([0, 0, -(self.drawer_half_size[2] - wall_thickness/2)]), - [self.drawer_half_size[0], self.drawer_half_size[1], wall_thickness/2] + + # Create sliding drawer + drawer = builder.create_link_builder(parent=base) + drawer.name = "drawer" + + # Drawer bottom + drawer.add_box_collision( + sapien.Pose([0, 0, -self.inner_height/2]), + half_size=[self.inner_width/2, self.inner_depth/2, self.wall_thickness/2] ) - base.add_box_visual( - sapien.Pose([0, 0, -(self.drawer_half_size[2] - wall_thickness/2)]), - [self.drawer_half_size[0], self.drawer_half_size[1], wall_thickness/2] + drawer.add_box_visual( + sapien.Pose([0, 0, -self.inner_height/2]), + half_size=[self.inner_width/2, self.inner_depth/2, self.wall_thickness/2], ) - - # Inner sliding drawer - drawer = builder.create_link_builder(parent=base) - drawer.name = "drawer_body" - drawer.add_box_collision(half_size=self.drawer_body_half_size) - drawer.add_box_visual(half_size=self.drawer_body_half_size) - - # Add handle - handle_size = [0.02, 0.04, 0.01] - handle_offset = 0.02 + + # Drawer back drawer.add_box_collision( - sapien.Pose([self.drawer_body_half_size[0] + handle_offset, 0, 0]), - handle_size + sapien.Pose([0, -self.inner_depth/2, 0]), + half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2] ) drawer.add_box_visual( - sapien.Pose([self.drawer_body_half_size[0] + handle_offset, 0, 0]), - handle_size + sapien.Pose([0, -self.inner_depth/2, 0]), + half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], + ) + + # Drawer sides + for x_sign in [-1, 1]: + drawer.add_box_collision( + sapien.Pose([x_sign * self.inner_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2] + ) + drawer.add_box_visual( + sapien.Pose([x_sign * self.inner_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2], + ) + + # Drawer front + drawer.add_box_collision( + sapien.Pose([0, self.inner_depth/2, 0]), + half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2] + ) + drawer.add_box_visual( + sapien.Pose([0, self.inner_depth/2, 0]), + half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], + ) + + # Handle (simple curved hook) + mat = sapien.render.RenderMaterial() + mat.set_base_color([1, 0, 0, 1]) + mat.metallic = 1.0 + mat.roughness = 0.0 + mat.specular = 1.0 + + drawer.add_sphere_collision( + sapien.Pose([0, self.inner_depth/2 + self.handle_depth, 0]), + radius=self.handle_radius + ) + drawer.add_sphere_visual( + sapien.Pose([0, self.inner_depth/2 + self.handle_depth, 0]), + radius=self.handle_radius, + material = mat ) + # Configure drawer joint drawer.set_joint_properties( type="prismatic", limits=(-self.max_pull_distance, 0), @@ -150,9 +214,9 @@ def _load_scene(self, options: dict): damping=10 ) - # Build articulation with drawer slightly ajar + # Build and position the drawer builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.12, 0, 0.2])) + builder.set_initial_pose(sapien.Pose(p=[0, 0.1, 0.3])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -183,18 +247,18 @@ def _get_obs_extra(self, info: Dict): def evaluate(self): drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - cube_pulled_close = pos_dist.squeeze(-1) < 0.007 + drawer_pulled = pos_dist.squeeze(-1) < 0.01 progress = 1 - torch.tanh(5.0 * pos_dist) return { - "success": cube_pulled_close, - "success_once": cube_pulled_close, - "success_at_end": cube_pulled_close, + "success": drawer_pulled, + "success_once": drawer_pulled, + "success_at_end": drawer_pulled, "drawer_progress": progress.mean(), "drawer_distance": pos_dist.mean(), "reward": self.compute_normalized_dense_reward( - None, None, {"success": cube_pulled_close} + None, None, {"success": drawer_pulled} ), } @@ -203,7 +267,6 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): pos_dist = torch.abs(self.target_pos - drawer_qpos) distance_reward = 2.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) grasping_reward = 2.0 * is_grasping @@ -217,4 +280,4 @@ def compute_normalized_dense_reward( ): max_reward = 5.0 dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) - return dense_reward / max_reward + return dense_reward / max_reward \ No newline at end of file From 40f117666102651be386257fe2cc052a9424c873 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Sat, 23 Nov 2024 13:54:19 -0800 Subject: [PATCH 04/59] drawer construction bug fix --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 80 +++++++++++++------ 1 file changed, 54 insertions(+), 26 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index b8e3e649e..1b5ede8cd 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -37,8 +37,10 @@ def __init__( self.inner_height = self.outer_height - 2.2 * self.wall_thickness # Handle dimensions (scaled down) - self.handle_radius = 0.01 # (was 0.02) - self.handle_depth = 0.02 # (was 0.04) + self.handle_width = 0.04 # Width of handle bar + self.handle_height = 0.02 # Height of handle from drawer face + self.handle_thickness = 0.01 # Thickness of handle material + self.handle_offset = 0.02 # Offset from drawer front (new parameter) # Movement parameters (scaled proportionally) self.max_pull_distance = self.outer_depth * 0.8 # Can pull out 80% of depth @@ -59,33 +61,33 @@ def _default_sim_config(self): ) ) - @property + @property def _default_sensor_configs(self): - pose = sapien_utils.look_at([0.2, -0.3, 0.3], [0, 0, 0.1]) + pose = sapien_utils.look_at(eye=[0.3, 0, 0.5], target=[-0.1, 0, 0.1]) return [ CameraConfig( - "base_camera", - pose=pose, - width=128, - height=128, + "base_camera", + pose=pose, + width=128, + height=128, fov=np.pi / 2, near=0.01, - far=100 + far=100, ) ] @property def _default_human_render_camera_configs(self): - pose = sapien_utils.look_at([-0.6, -0.8, 0.6], [0.0, 0.0, 0.2]) + pose = sapien_utils.look_at([0.6, 0.7, 0.6], [0.0, 0.0, 0.35]) return [ CameraConfig( - "render_camera", - pose=pose, - width=512, - height=512, + "render_camera", + pose=pose, + width=512, + height=512, fov=1, near=0.01, - far=100 + far=100, ) ] @@ -187,22 +189,36 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], ) - # Handle (simple curved hook) + # Handle (horizontal bar) - Now positioned clearly in front of drawer mat = sapien.render.RenderMaterial() mat.set_base_color([1, 0, 0, 1]) mat.metallic = 1.0 mat.roughness = 0.0 mat.specular = 1.0 - drawer.add_sphere_collision( - sapien.Pose([0, self.inner_depth/2 + self.handle_depth, 0]), - radius=self.handle_radius + # Main handle bar + drawer.add_box_collision( + sapien.Pose([0, self.inner_depth/2 + self.handle_offset, 0]), + half_size=[self.handle_width/2, self.handle_thickness/2, self.handle_thickness/2] ) - drawer.add_sphere_visual( - sapien.Pose([0, self.inner_depth/2 + self.handle_depth, 0]), - radius=self.handle_radius, - material = mat + drawer.add_box_visual( + sapien.Pose([0, self.inner_depth/2 + self.handle_offset, 0]), + half_size=[self.handle_width/2, self.handle_thickness/2, self.handle_thickness/2], + material=mat ) + + # Handle supports (vertical bars connecting to drawer front) + for x_sign in [-1, 1]: + support_x = x_sign * (self.handle_width/2 - self.handle_thickness/2) + drawer.add_box_collision( + sapien.Pose([support_x, self.inner_depth/2 + self.handle_offset/2, 0]), + half_size=[self.handle_thickness/2, self.handle_offset/2, self.handle_thickness/2] + ) + drawer.add_box_visual( + sapien.Pose([support_x, self.inner_depth/2 + self.handle_offset/2, 0]), + half_size=[self.handle_thickness/2, self.handle_offset/2, self.handle_thickness/2], + material=mat + ) # Configure drawer joint drawer.set_joint_properties( @@ -216,7 +232,7 @@ def _load_scene(self, options: dict): # Build and position the drawer builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0, 0.1, 0.3])) + builder.set_initial_pose(sapien.Pose(p=[-0.2, -0.5, 0.3])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -266,18 +282,30 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) + # Get gripper position relative to handle + tcp_pose = self.agent.tcp.pose.raw_pose + tcp_pos = tcp_pose[..., :3] + # Updated handle position calculation to match new handle position + handle_pos = torch.tensor( + [-0.2, -0.5 + self.inner_depth/2 + self.handle_offset, 0.3], + device=self.device + ) + reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) + + # Compute rewards distance_reward = 2.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) + reaching_reward = 1.0 * (1 - torch.tanh(10.0 * reach_dist)) is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) grasping_reward = 2.0 * is_grasping success_mask = info.get("success", torch.zeros_like(is_grasping)) success_reward = torch.where(success_mask, 5.0, 0.0) - return distance_reward + grasping_reward + success_reward + return distance_reward + reaching_reward + grasping_reward + success_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 5.0 + max_reward = 10.0 # Maximum possible reward (2 + 1 + 2 + 5) dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward \ No newline at end of file From 80c894a7877d9e028eca41cfe985351c0f13eb2e Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Sat, 23 Nov 2024 13:58:00 -0800 Subject: [PATCH 05/59] drawer construction bug fix --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 1b5ede8cd..d70160e14 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -61,7 +61,7 @@ def _default_sim_config(self): ) ) - @property + @property def _default_sensor_configs(self): pose = sapien_utils.look_at(eye=[0.3, 0, 0.5], target=[-0.1, 0, 0.1]) return [ From 8ca873e9f0164af3e43148828021a394c57faeff Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Sat, 23 Nov 2024 14:04:05 -0800 Subject: [PATCH 06/59] drawer construction bug fix --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index d70160e14..ceda2d9bc 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -232,7 +232,7 @@ def _load_scene(self, options: dict): # Build and position the drawer builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[-0.2, -0.5, 0.3])) + builder.set_initial_pose(sapien.Pose(p=[-0.2, -0.5, 0])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From f71d2959d2dd581e14629ad88827984e73d5d02a Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Sat, 23 Nov 2024 14:22:34 -0800 Subject: [PATCH 07/59] mostly fixed drawer, need to verify dense reward --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index ceda2d9bc..0cfee9861 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -232,7 +232,7 @@ def _load_scene(self, options: dict): # Build and position the drawer builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[-0.2, -0.5, 0])) + builder.set_initial_pose(sapien.Pose(p=[0, -0.3, 0.151])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From 0560810814d87c73599563912725b97073a959a2 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 25 Nov 2024 02:49:57 +0530 Subject: [PATCH 08/59] main axis motion fix --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 127 ++++++++++-------- 1 file changed, 72 insertions(+), 55 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 0cfee9861..e81db3363 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -25,13 +25,13 @@ def __init__( ): self.robot_init_qpos_noise = robot_init_qpos_noise - # Outer cabinet dimensions (scaled down by 0.5) - self.outer_width = 0.15 # x (was 0.3) - self.outer_depth = 0.2 # y (was 0.4) - self.outer_height = 0.15 # z (was 0.3) - self.wall_thickness = 0.01 # (was 0.02) + # Outer cabinet dimensions + self.outer_width = 0.15 + self.outer_depth = 0.2 + self.outer_height = 0.15 + self.wall_thickness = 0.01 - # Inner drawer dimensions (slightly smaller to fit inside) + # Inner drawer dimensions self.inner_width = self.outer_width - 2.2 * self.wall_thickness self.inner_depth = self.outer_depth - 1.2 * self.wall_thickness self.inner_height = self.outer_height - 2.2 * self.wall_thickness @@ -40,10 +40,10 @@ def __init__( self.handle_width = 0.04 # Width of handle bar self.handle_height = 0.02 # Height of handle from drawer face self.handle_thickness = 0.01 # Thickness of handle material - self.handle_offset = 0.02 # Offset from drawer front (new parameter) + self.handle_offset = 0.02 # Offset from drawer side # Movement parameters (scaled proportionally) - self.max_pull_distance = self.outer_depth * 0.8 # Can pull out 80% of depth + self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 super().__init__( @@ -78,7 +78,7 @@ def _default_sensor_configs(self): @property def _default_human_render_camera_configs(self): - pose = sapien_utils.look_at([0.6, 0.7, 0.6], [0.0, 0.0, 0.35]) + pose = sapien_utils.look_at([-0.7, -0.7, 0.6], [0.0, 0.0, 0.0]) return [ CameraConfig( "render_camera", @@ -99,7 +99,7 @@ def _load_scene(self, options: dict): builder = self.scene.create_articulation_builder() - # Create outer cabinet (fixed base) + # Create outer cabinet base = builder.create_link_builder() base.name = "cabinet" @@ -123,7 +123,7 @@ def _load_scene(self, options: dict): half_size=[self.outer_width/2, self.outer_depth/2, self.wall_thickness/2], ) - # Back wall + # Back wall base.add_box_collision( sapien.Pose([0, -self.outer_depth/2, 0]), half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2] @@ -133,16 +133,25 @@ def _load_scene(self, options: dict): half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2], ) - # Side walls - for x_sign in [-1, 1]: - base.add_box_collision( - sapien.Pose([x_sign * self.outer_width/2, 0, 0]), - half_size=[self.wall_thickness/2, self.outer_depth/2, self.outer_height/2] - ) - base.add_box_visual( - sapien.Pose([x_sign * self.outer_width/2, 0, 0]), - half_size=[self.wall_thickness/2, self.outer_depth/2, self.outer_height/2], - ) + # Front wall + base.add_box_collision( + sapien.Pose([0, self.outer_depth/2, 0]), + half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2] + ) + base.add_box_visual( + sapien.Pose([0, self.outer_depth/2, 0]), + half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2], + ) + + # Right wall + base.add_box_collision( + sapien.Pose([self.outer_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.outer_depth/2, self.outer_height/2] + ) + base.add_box_visual( + sapien.Pose([self.outer_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.outer_depth/2, self.outer_height/2], + ) # Create sliding drawer drawer = builder.create_link_builder(parent=base) @@ -158,7 +167,7 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.inner_depth/2, self.wall_thickness/2], ) - # Drawer back + # Drawer back drawer.add_box_collision( sapien.Pose([0, -self.inner_depth/2, 0]), half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2] @@ -168,18 +177,7 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], ) - # Drawer sides - for x_sign in [-1, 1]: - drawer.add_box_collision( - sapien.Pose([x_sign * self.inner_width/2, 0, 0]), - half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2] - ) - drawer.add_box_visual( - sapien.Pose([x_sign * self.inner_width/2, 0, 0]), - half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2], - ) - - # Drawer front + # Drawer front drawer.add_box_collision( sapien.Pose([0, self.inner_depth/2, 0]), half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2] @@ -189,50 +187,70 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], ) - # Handle (horizontal bar) - Now positioned clearly in front of drawer + # Drawer right side + drawer.add_box_collision( + sapien.Pose([self.inner_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2] + ) + drawer.add_box_visual( + sapien.Pose([self.inner_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2], + ) + + # Drawer left side + drawer.add_box_collision( + sapien.Pose([-self.inner_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2] + ) + drawer.add_box_visual( + sapien.Pose([-self.inner_width/2, 0, 0]), + half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2], + ) + + # Handle material mat = sapien.render.RenderMaterial() mat.set_base_color([1, 0, 0, 1]) mat.metallic = 1.0 mat.roughness = 0.0 mat.specular = 1.0 - # Main handle bar + # Main handle bar drawer.add_box_collision( - sapien.Pose([0, self.inner_depth/2 + self.handle_offset, 0]), - half_size=[self.handle_width/2, self.handle_thickness/2, self.handle_thickness/2] + sapien.Pose([-self.inner_width/2 - self.handle_offset, 0, 0]), + half_size=[self.handle_thickness/2, self.handle_width/2, self.handle_thickness/2] ) drawer.add_box_visual( - sapien.Pose([0, self.inner_depth/2 + self.handle_offset, 0]), - half_size=[self.handle_width/2, self.handle_thickness/2, self.handle_thickness/2], + sapien.Pose([-self.inner_width/2 - self.handle_offset, 0, 0]), + half_size=[self.handle_thickness/2, self.handle_width/2, self.handle_thickness/2], material=mat ) - # Handle supports (vertical bars connecting to drawer front) - for x_sign in [-1, 1]: - support_x = x_sign * (self.handle_width/2 - self.handle_thickness/2) + # Handle supports + for y_sign in [-1, 1]: + support_y = y_sign * (self.handle_width/2 - self.handle_thickness/2) drawer.add_box_collision( - sapien.Pose([support_x, self.inner_depth/2 + self.handle_offset/2, 0]), - half_size=[self.handle_thickness/2, self.handle_offset/2, self.handle_thickness/2] + sapien.Pose([-self.inner_width/2 - self.handle_offset/2, support_y, 0]), + half_size=[self.handle_offset/2, self.handle_thickness/2, self.handle_thickness/2] ) drawer.add_box_visual( - sapien.Pose([support_x, self.inner_depth/2 + self.handle_offset/2, 0]), - half_size=[self.handle_thickness/2, self.handle_offset/2, self.handle_thickness/2], + sapien.Pose([-self.inner_width/2 - self.handle_offset/2, support_y, 0]), + half_size=[self.handle_offset/2, self.handle_thickness/2, self.handle_thickness/2], material=mat ) - # Configure drawer joint + # Configure drawer joint drawer.set_joint_properties( type="prismatic", limits=(-self.max_pull_distance, 0), - pose_in_parent=sapien.Pose([0, 0, 0]), + pose_in_parent=sapien.Pose(), pose_in_child=sapien.Pose(), friction=0.1, damping=10 ) - # Build and position the drawer + builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0, -0.3, 0.151])) + builder.set_initial_pose(sapien.Pose(p=[0, -0.3, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -282,12 +300,11 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - # Get gripper position relative to handle + # Update handle position for reward calculation tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] - # Updated handle position calculation to match new handle position handle_pos = torch.tensor( - [-0.2, -0.5 + self.inner_depth/2 + self.handle_offset, 0.3], + [-0.2 - self.inner_width/2 - self.handle_offset, -0.3, 0.3], device=self.device ) reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) @@ -308,4 +325,4 @@ def compute_normalized_dense_reward( ): max_reward = 10.0 # Maximum possible reward (2 + 1 + 2 + 5) dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) - return dense_reward / max_reward \ No newline at end of file + return dense_reward / max_reward From cada3c21da44ef5b538876b836aea84070dbc8cb Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:49:44 +0530 Subject: [PATCH 09/59] reward function experiment From 2f9fe20371da08cbd9d758820e8e659ad1324d93 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Mon, 25 Nov 2024 03:12:57 -0800 Subject: [PATCH 10/59] test run --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index e81db3363..86cdd0518 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -36,7 +36,7 @@ def __init__( self.inner_depth = self.outer_depth - 1.2 * self.wall_thickness self.inner_height = self.outer_height - 2.2 * self.wall_thickness - # Handle dimensions (scaled down) + # Handle dimensions self.handle_width = 0.04 # Width of handle bar self.handle_height = 0.02 # Height of handle from drawer face self.handle_thickness = 0.01 # Thickness of handle material @@ -78,7 +78,7 @@ def _default_sensor_configs(self): @property def _default_human_render_camera_configs(self): - pose = sapien_utils.look_at([-0.7, -0.7, 0.6], [0.0, 0.0, 0.0]) + pose = sapien_utils.look_at([-0.7, 0.7, 0.4], [0.0, 0.0, 0.0]) return [ CameraConfig( "render_camera", From 2dc2a3639c585baca13807a597a5ee0d6875a44f Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Mon, 25 Nov 2024 03:21:20 -0800 Subject: [PATCH 11/59] test run --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 86cdd0518..a90df5eb3 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -78,7 +78,7 @@ def _default_sensor_configs(self): @property def _default_human_render_camera_configs(self): - pose = sapien_utils.look_at([-0.7, 0.7, 0.4], [0.0, 0.0, 0.0]) + pose = sapien_utils.look_at([-0.8, 0.7, 0.7], [0.0, 0.0, 0.0]) return [ CameraConfig( "render_camera", From 7ac086998979d4e1dbd180132c6f6c74f66b7815 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Mon, 25 Nov 2024 03:48:34 -0800 Subject: [PATCH 12/59] test run --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index a90df5eb3..4601c803f 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -250,7 +250,7 @@ def _load_scene(self, options: dict): builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0, -0.3, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0, 0.3, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From 5003d523549ff8cd268e03d129da37faf1cd0274 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Mon, 25 Nov 2024 13:17:22 -0800 Subject: [PATCH 13/59] fixed handle bugs --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 4601c803f..84d337bbe 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -37,10 +37,10 @@ def __init__( self.inner_height = self.outer_height - 2.2 * self.wall_thickness # Handle dimensions - self.handle_width = 0.04 # Width of handle bar - self.handle_height = 0.02 # Height of handle from drawer face - self.handle_thickness = 0.01 # Thickness of handle material - self.handle_offset = 0.02 # Offset from drawer side + self.handle_width = 0.08 # Width of handle bar + self.handle_height = 0.04 # Height of handle from drawer face + self.handle_thickness = 0.02 # Thickness of handle material + self.handle_offset = 0.03 # Offset from drawer side # Movement parameters (scaled proportionally) self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width @@ -244,13 +244,13 @@ def _load_scene(self, options: dict): limits=(-self.max_pull_distance, 0), pose_in_parent=sapien.Pose(), pose_in_child=sapien.Pose(), - friction=0.1, + friction=0.3, damping=10 ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0, 0.3, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -313,7 +313,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): distance_reward = 2.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) reaching_reward = 1.0 * (1 - torch.tanh(10.0 * reach_dist)) is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) - grasping_reward = 2.0 * is_grasping + grasping_reward = 4.0 * is_grasping success_mask = info.get("success", torch.zeros_like(is_grasping)) success_reward = torch.where(success_mask, 5.0, 0.0) @@ -323,6 +323,6 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 10.0 # Maximum possible reward (2 + 1 + 2 + 5) + max_reward = 12.0 # Maximum possible reward (2 + 1 + 4 + 5) dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From 12d44fbe9d4edefa42b507549848eda2a64a87cc Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Tue, 26 Nov 2024 13:55:32 +0530 Subject: [PATCH 14/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 84d337bbe..a3a6425d5 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -304,7 +304,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] handle_pos = torch.tensor( - [-0.2 - self.inner_width/2 - self.handle_offset, -0.3, 0.3], + [-0.2 - self.inner_width/2 - self.handle_offset, -0.15, 0.15], device=self.device ) reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) From 86a1f56b415c442b9a3d497ee6efe4de4ba22048 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Tue, 26 Nov 2024 03:53:23 -0800 Subject: [PATCH 15/59] added draft planner, needs env fix --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 28 +++-- .../panda/solutions/pull_drawer.py | 100 ++++++++++++++++++ 2 files changed, 113 insertions(+), 15 deletions(-) create mode 100644 mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index a3a6425d5..ba51a9295 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -32,8 +32,8 @@ def __init__( self.wall_thickness = 0.01 # Inner drawer dimensions - self.inner_width = self.outer_width - 2.2 * self.wall_thickness - self.inner_depth = self.outer_depth - 1.2 * self.wall_thickness + self.inner_width = self.outer_width - 1.2 * self.wall_thickness + self.inner_depth = self.outer_depth - 2.2 * self.wall_thickness self.inner_height = self.outer_height - 2.2 * self.wall_thickness # Handle dimensions @@ -101,7 +101,7 @@ def _load_scene(self, options: dict): # Create outer cabinet base = builder.create_link_builder() - base.name = "cabinet" + base.set_name('cabinet') # Bottom base base.add_box_collision( @@ -123,7 +123,7 @@ def _load_scene(self, options: dict): half_size=[self.outer_width/2, self.outer_depth/2, self.wall_thickness/2], ) - # Back wall + # Left wall base.add_box_collision( sapien.Pose([0, -self.outer_depth/2, 0]), half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2] @@ -133,7 +133,7 @@ def _load_scene(self, options: dict): half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2], ) - # Front wall + # Left wall base.add_box_collision( sapien.Pose([0, self.outer_depth/2, 0]), half_size=[self.outer_width/2, self.wall_thickness/2, self.outer_height/2] @@ -155,7 +155,7 @@ def _load_scene(self, options: dict): # Create sliding drawer drawer = builder.create_link_builder(parent=base) - drawer.name = "drawer" + drawer.set_name('drawer') # Drawer bottom drawer.add_box_collision( @@ -167,7 +167,7 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.inner_depth/2, self.wall_thickness/2], ) - # Drawer back + # Drawer right drawer.add_box_collision( sapien.Pose([0, -self.inner_depth/2, 0]), half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2] @@ -177,7 +177,7 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], ) - # Drawer front + # Drawer left drawer.add_box_collision( sapien.Pose([0, self.inner_depth/2, 0]), half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2] @@ -187,7 +187,7 @@ def _load_scene(self, options: dict): half_size=[self.inner_width/2, self.wall_thickness/2, self.inner_height/2], ) - # Drawer right side + # Drawer back drawer.add_box_collision( sapien.Pose([self.inner_width/2, 0, 0]), half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2] @@ -197,7 +197,7 @@ def _load_scene(self, options: dict): half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2], ) - # Drawer left side + # Drawer front drawer.add_box_collision( sapien.Pose([-self.inner_width/2, 0, 0]), half_size=[self.wall_thickness/2, self.inner_depth/2, self.inner_height/2] @@ -243,7 +243,7 @@ def _load_scene(self, options: dict): type="prismatic", limits=(-self.max_pull_distance, 0), pose_in_parent=sapien.Pose(), - pose_in_child=sapien.Pose(), + pose_in_child=sapien.Pose(), # try setting the link's position to be on the handle in child frame friction=0.3, damping=10 ) @@ -261,8 +261,6 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.scene_builder.initialize(env_idx) init_pos = torch.zeros((b, 1), device=self.device) - noise = torch.rand((b, 1), device=self.device) * 0.02 - init_pos -= noise self.drawer.set_qpos(init_pos) @@ -281,7 +279,7 @@ def _get_obs_extra(self, info: Dict): def evaluate(self): drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - drawer_pulled = pos_dist.squeeze(-1) < 0.01 + drawer_pulled = pos_dist.squeeze(-1) < 0.025 progress = 1 - torch.tanh(5.0 * pos_dist) @@ -304,7 +302,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] handle_pos = torch.tensor( - [-0.2 - self.inner_width/2 - self.handle_offset, -0.15, 0.15], + [-self.inner_width/2, 0.15, 0.075], # hardcoded values, change later to make it offset from drawer qpos device=self.device ) reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) diff --git a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py new file mode 100644 index 000000000..93e1b3736 --- /dev/null +++ b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py @@ -0,0 +1,100 @@ +import gymnasium as gym +import numpy as np +import sapien +from mani_skill.examples.motionplanning.panda.motionplanner import PandaArmMotionPlanningSolver +from mani_skill.examples.motionplanning.panda.utils import compute_grasp_info_by_obb + +def main(): + env = gym.make( + "PullDrawer-v1", + obs_mode="none", + control_mode="pd_joint_pos", + render_mode="rgb_array", + reward_mode="sparse" + ) + + for seed in range(100): + res = solve(env, seed=seed, debug=False, vis=True) + print(res[-1]) + env.close() + +def solve(env, seed=None, debug=False, vis=False): + env.reset(seed=seed) + assert env.unwrapped.control_mode in ["pd_joint_pos", "pd_joint_pos_vel"] + + planner = PandaArmMotionPlanningSolver( + env, + debug=debug, + vis=vis, + base_pose=env.unwrapped.agent.robot.pose, + visualize_target_grasp_pose=vis, + print_env_info=False, + joint_vel_limits=0.5, + joint_acc_limits=0.5, + ) + + env = env.unwrapped + FINGER_LENGTH = 0.025 + + # Get handle position and compute grasp + handle_pos = [-env.inner_width/2 - env.handle_offset, 0, 0] + handle_pose = env.drawer_link.pose * sapien.Pose(p=handle_pos) + + # Compute grasp pose for handle + approaching = np.array([1, 0, 0]) # Approach from front + target_closing = env.agent.tcp.pose.to_transformation_matrix()[:3, 1] + + handle_obb = { + 'center': handle_pose.p, + 'extents': np.array([env.handle_thickness, env.handle_width, env.handle_height]) * 2, + 'rotation': handle_pose.to_transformation_matrix()[:3, :3] + } + + grasp_info = compute_grasp_info_by_obb( + handle_obb, + approaching=approaching, + target_closing=target_closing, + depth=FINGER_LENGTH + ) + + closing, center = grasp_info["closing"], grasp_info["center"] + grasp_pose = env.agent.build_grasp_pose(approaching, closing, center) + + # -------------------------------------------------------------------------- # + # Pre-grasp pose + # -------------------------------------------------------------------------- # + pre_grasp_pose = grasp_pose * sapien.Pose([0.05, 0, 0]) + res = planner.move_to_pose_with_screw(pre_grasp_pose) + if res == -1: return res + + # -------------------------------------------------------------------------- # + # Grasp handle + # -------------------------------------------------------------------------- # + res = planner.move_to_pose_with_screw(grasp_pose) + if res == -1: return res + planner.close_gripper() + + # -------------------------------------------------------------------------- # + # Pull drawer + # -------------------------------------------------------------------------- # + pull_distance = env.max_pull_distance * 0.8 + steps = 5 + + # Pull in small increments with refinement + for i in range(steps): + current_pull = (i + 1) * pull_distance / steps + pull_pose = grasp_pose * sapien.Pose([-current_pull, 0, 0]) + + # Move and refine position + res = planner.move_to_pose_with_screw(pull_pose, refine_steps=3) + if res == -1: return res + + # Check if drawer is actually moving + if not env.agent.is_grasping(env.drawer_link): + return res + + planner.close() + return res + +if __name__ == "__main__": + main() From df8c69aa7382c5bb25e4b67f0b056cefe520772f Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 27 Nov 2024 08:40:15 +0530 Subject: [PATCH 16/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index ba51a9295..09133b26f 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -250,7 +250,7 @@ def _load_scene(self, options: dict): builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0.05, 0.15, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -295,16 +295,22 @@ def evaluate(self): } def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - drawer_qpos = self.drawer.get_qpos() + drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - # Update handle position for reward calculation - tcp_pose = self.agent.tcp.pose.raw_pose - tcp_pos = tcp_pose[..., :3] - handle_pos = torch.tensor( - [-self.inner_width/2, 0.15, 0.075], # hardcoded values, change later to make it offset from drawer qpos + # Create handle position with proper batch dimension + batch_size = drawer_qpos.shape[0] + handle_pos = torch.zeros((batch_size, 3), device=self.device) + handle_pos[:] = torch.tensor( + [-self.inner_width/2 - self.handle_offset, 0.15, -0.077], device=self.device ) + + # Update x-position based on drawer movement + handle_pos[:, 0] = handle_pos[:, 0] + drawer_qpos.squeeze(-1) + + tcp_pose = self.agent.tcp.pose.raw_pose + tcp_pos = tcp_pose[..., :3] reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) # Compute rewards @@ -312,7 +318,6 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): reaching_reward = 1.0 * (1 - torch.tanh(10.0 * reach_dist)) is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) grasping_reward = 4.0 * is_grasping - success_mask = info.get("success", torch.zeros_like(is_grasping)) success_reward = torch.where(success_mask, 5.0, 0.0) From 31bfe1e44ec769bff502abfb2aa02ccf9691da03 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 27 Nov 2024 09:13:16 +0530 Subject: [PATCH 17/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 09133b26f..afd26f126 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -250,7 +250,7 @@ def _load_scene(self, options: dict): builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.05, 0.15, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0.05, 0.15, 0])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From 646e2d60b110d6b28f401d1420880304fb76b9f6 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 27 Nov 2024 09:34:45 +0530 Subject: [PATCH 18/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index afd26f126..cba459518 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -250,7 +250,7 @@ def _load_scene(self, options: dict): builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.05, 0.15, 0])) + builder.set_initial_pose(sapien.Pose(p=[0.05, 0.15, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -302,7 +302,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): batch_size = drawer_qpos.shape[0] handle_pos = torch.zeros((batch_size, 3), device=self.device) handle_pos[:] = torch.tensor( - [-self.inner_width/2 - self.handle_offset, 0.15, -0.077], + [-self.inner_width/2 - self.handle_offset, 0.15, 0], device=self.device ) From 831af6fa5797e90961b3212cc61e38a54fe1977a Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 27 Nov 2024 10:18:06 +0530 Subject: [PATCH 19/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index cba459518..23d1b550d 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -243,7 +243,7 @@ def _load_scene(self, options: dict): type="prismatic", limits=(-self.max_pull_distance, 0), pose_in_parent=sapien.Pose(), - pose_in_child=sapien.Pose(), # try setting the link's position to be on the handle in child frame + pose_in_child=sapien.Pose(), friction=0.3, damping=10 ) @@ -302,7 +302,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): batch_size = drawer_qpos.shape[0] handle_pos = torch.zeros((batch_size, 3), device=self.device) handle_pos[:] = torch.tensor( - [-self.inner_width/2 - self.handle_offset, 0.15, 0], + [-self.inner_width/2 - self.handle_offset, 0.15, -0.07], device=self.device ) From 0fd6082ac0e3a8f22603cbec8e6b590e54d86a5c Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 27 Nov 2024 11:01:24 +0530 Subject: [PATCH 20/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 23d1b550d..ba51a9295 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -243,14 +243,14 @@ def _load_scene(self, options: dict): type="prismatic", limits=(-self.max_pull_distance, 0), pose_in_parent=sapien.Pose(), - pose_in_child=sapien.Pose(), + pose_in_child=sapien.Pose(), # try setting the link's position to be on the handle in child frame friction=0.3, damping=10 ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.05, 0.15, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -295,22 +295,16 @@ def evaluate(self): } def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - drawer_qpos = self.drawer.get_qpos() + drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - # Create handle position with proper batch dimension - batch_size = drawer_qpos.shape[0] - handle_pos = torch.zeros((batch_size, 3), device=self.device) - handle_pos[:] = torch.tensor( - [-self.inner_width/2 - self.handle_offset, 0.15, -0.07], - device=self.device - ) - - # Update x-position based on drawer movement - handle_pos[:, 0] = handle_pos[:, 0] + drawer_qpos.squeeze(-1) - + # Update handle position for reward calculation tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] + handle_pos = torch.tensor( + [-self.inner_width/2, 0.15, 0.075], # hardcoded values, change later to make it offset from drawer qpos + device=self.device + ) reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) # Compute rewards @@ -318,6 +312,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): reaching_reward = 1.0 * (1 - torch.tanh(10.0 * reach_dist)) is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) grasping_reward = 4.0 * is_grasping + success_mask = info.get("success", torch.zeros_like(is_grasping)) success_reward = torch.where(success_mask, 5.0, 0.0) From b621c059890399e0660c981fa68481362ee69bf6 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Wed, 27 Nov 2024 02:00:03 -0800 Subject: [PATCH 21/59] modified offset for grasp --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- mani_skill/examples/motionplanning/panda/run.py | 5 +++-- .../examples/motionplanning/panda/solutions/__init__.py | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index ba51a9295..c28ef9bb5 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -279,7 +279,7 @@ def _get_obs_extra(self, info: Dict): def evaluate(self): drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - drawer_pulled = pos_dist.squeeze(-1) < 0.025 + drawer_pulled = pos_dist.squeeze(-1) < 0.03 progress = 1 - torch.tanh(5.0 * pos_dist) @@ -302,7 +302,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] handle_pos = torch.tensor( - [-self.inner_width/2, 0.15, 0.075], # hardcoded values, change later to make it offset from drawer qpos + [-self.inner_width/2, 0, 0], # hardcoded values, change later to make it offset from drawer qpos device=self.device ) reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) diff --git a/mani_skill/examples/motionplanning/panda/run.py b/mani_skill/examples/motionplanning/panda/run.py index e4033a7d2..9b6f2f377 100644 --- a/mani_skill/examples/motionplanning/panda/run.py +++ b/mani_skill/examples/motionplanning/panda/run.py @@ -9,7 +9,7 @@ import os.path as osp from mani_skill.utils.wrappers.record import RecordEpisode from mani_skill.trajectory.merge_trajectory import merge_trajectories -from mani_skill.examples.motionplanning.panda.solutions import solvePushCube, solvePickCube, solveStackCube, solvePegInsertionSide, solvePlugCharger, solvePullCubeTool, solveLiftPegUpright, solvePullCube +from mani_skill.examples.motionplanning.panda.solutions import solvePushCube, solvePickCube, solveStackCube, solvePegInsertionSide, solvePlugCharger, solvePullCubeTool, solveLiftPegUpright, solvePullCube, solvePullDrawer MP_SOLUTIONS = { "PickCube-v1": solvePickCube, "StackCube-v1": solveStackCube, @@ -18,7 +18,8 @@ "PushCube-v1": solvePushCube, "PullCubeTool-v1": solvePullCubeTool, "LiftPegUpright-v1": solveLiftPegUpright, - "PullCube-v1": solvePullCube + "PullCube-v1": solvePullCube, + "PullDrawer-v1": solvePullDrawer } def parse_args(args=None): diff --git a/mani_skill/examples/motionplanning/panda/solutions/__init__.py b/mani_skill/examples/motionplanning/panda/solutions/__init__.py index f1b2510d3..951dd4cef 100644 --- a/mani_skill/examples/motionplanning/panda/solutions/__init__.py +++ b/mani_skill/examples/motionplanning/panda/solutions/__init__.py @@ -5,4 +5,5 @@ from .push_cube import solve as solvePushCube from .pull_cube_tool import solve as solvePullCubeTool from .lift_peg_upright import solve as solveLiftPegUpright -from .pull_cube import solve as solvePullCube \ No newline at end of file +from .pull_cube import solve as solvePullCube +from .pull_drawer import solve as solvePullDrawer \ No newline at end of file From 0774d19bc14dbdd9d138e196b467ffd38e675680 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Wed, 27 Nov 2024 02:26:28 -0800 Subject: [PATCH 22/59] modified offset for grasp --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index c28ef9bb5..30d8b871c 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -302,25 +302,26 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] handle_pos = torch.tensor( - [-self.inner_width/2, 0, 0], # hardcoded values, change later to make it offset from drawer qpos + [-self.inner_width/2 - self.handle_offset, 0, 0], # Adjust to actual handle position device=self.device ) reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) - # Compute rewards - distance_reward = 2.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - reaching_reward = 1.0 * (1 - torch.tanh(10.0 * reach_dist)) - is_grasping = self.agent.is_grasping(self.drawer_link, max_angle=30) - grasping_reward = 4.0 * is_grasping + # 1. Reaching reward: Incentivize moving towards the handle + reaching_reward = 2.0 * (1 - torch.tanh(10.0 * reach_dist)) - success_mask = info.get("success", torch.zeros_like(is_grasping)) - success_reward = torch.where(success_mask, 5.0, 0.0) + # 2. Pulling reward: Incentivize pulling the drawer + pulling_reward = 3.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - return distance_reward + reaching_reward + grasping_reward + success_reward + # 3. Completion reward: Reward for successfully pulling the drawer + success_mask = info.get("success", torch.zeros_like(reaching_reward, dtype=torch.bool)) + completion_reward = 5.0 * success_mask + + return reaching_reward + pulling_reward + completion_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 12.0 # Maximum possible reward (2 + 1 + 4 + 5) + max_reward = 10.0 # Maximum possible reward (2 + 3 + 5) dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) - return dense_reward / max_reward + return dense_reward / max_reward \ No newline at end of file From d521c79431da648c4e3b89822260b9bfd263596c Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Thu, 28 Nov 2024 10:57:21 -0800 Subject: [PATCH 23/59] test sphere for goal --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 30d8b871c..3ca6da73d 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -9,6 +9,7 @@ from mani_skill.utils.scene_builder.table import TableSceneBuilder from mani_skill.utils.structs.types import SimConfig, GPUMemoryConfig from mani_skill.sensors.camera import CameraConfig +from mani_skill.utils.building import actors @register_env("PullDrawer-v1", max_episode_steps=200) class PullDrawerEnv(BaseEnv): @@ -32,7 +33,7 @@ def __init__( self.wall_thickness = 0.01 # Inner drawer dimensions - self.inner_width = self.outer_width - 1.2 * self.wall_thickness + self.inner_width = self.outer_width - 3.5 * self.wall_thickness self.inner_depth = self.outer_depth - 2.2 * self.wall_thickness self.inner_height = self.outer_height - 2.2 * self.wall_thickness @@ -40,7 +41,7 @@ def __init__( self.handle_width = 0.08 # Width of handle bar self.handle_height = 0.04 # Height of handle from drawer face self.handle_thickness = 0.02 # Thickness of handle material - self.handle_offset = 0.03 # Offset from drawer side + self.handle_offset = 0.05 # Offset from drawer side # Movement parameters (scaled proportionally) self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width @@ -244,10 +245,20 @@ def _load_scene(self, options: dict): limits=(-self.max_pull_distance, 0), pose_in_parent=sapien.Pose(), pose_in_child=sapien.Pose(), # try setting the link's position to be on the handle in child frame - friction=0.3, + friction=0.4, damping=10 ) + self.goal_site = actors.build_sphere( + self.scene, + radius=0.01, + color=[0, 1, 0, 1], + name="goal_site", + body_type="kinematic", + add_collision=False, + initial_pose=sapien.Pose(), + ) + builder.set_scene_idxs(scene_idxs=range(self.num_envs)) builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) From 8ec7401e27f9349f19c2e3c55d1dd88185956e31 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Fri, 29 Nov 2024 22:28:51 -0800 Subject: [PATCH 24/59] fixed handle pose handling issue --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 3ca6da73d..b92b7f93f 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -244,7 +244,7 @@ def _load_scene(self, options: dict): type="prismatic", limits=(-self.max_pull_distance, 0), pose_in_parent=sapien.Pose(), - pose_in_child=sapien.Pose(), # try setting the link's position to be on the handle in child frame + pose_in_child=sapien.Pose(), friction=0.4, damping=10 ) @@ -260,9 +260,11 @@ def _load_scene(self, options: dict): ) + + builder.set_scene_idxs(scene_idxs=range(self.num_envs)) builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) - + self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -305,34 +307,38 @@ def evaluate(self): ), } + + def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): + drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) + + self.scene.px.gpu_update_articulation_kinematics() + self.scene._gpu_fetch_all() - # Update handle position for reward calculation tcp_pose = self.agent.tcp.pose.raw_pose - tcp_pos = tcp_pose[..., :3] - handle_pos = torch.tensor( - [-self.inner_width/2 - self.handle_offset, 0, 0], # Adjust to actual handle position - device=self.device - ) - reach_dist = torch.norm(tcp_pos - handle_pos, dim=-1) - # 1. Reaching reward: Incentivize moving towards the handle - reaching_reward = 2.0 * (1 - torch.tanh(10.0 * reach_dist)) - - # 2. Pulling reward: Incentivize pulling the drawer - pulling_reward = 3.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) + tcp_pos = tcp_pose[..., :3] + drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) + + offset_x, offset_y, offset_z = -self.inner_width/2 - self.handle_offset, 0, 0 + handle_pose = drawer_link_pose[:, :3] + torch.tensor([offset_x, offset_y, offset_z], device=drawer_link_pose.device).unsqueeze(0) + + reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) - # 3. Completion reward: Reward for successfully pulling the drawer + reaching_reward = 4.0 * (1 - torch.tanh(10.0 * reach_dist)) + pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) success_mask = info.get("success", torch.zeros_like(reaching_reward, dtype=torch.bool)) - completion_reward = 5.0 * success_mask - + completion_reward = 4.0 * success_mask + return reaching_reward + pulling_reward + completion_reward + def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 10.0 # Maximum possible reward (2 + 3 + 5) + max_reward = 12.0 # Maximum possible reward (2 + 3 + 5) dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward \ No newline at end of file From 3c518a738358247268562213259c888cb55e1f27 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Sat, 30 Nov 2024 11:56:49 -0800 Subject: [PATCH 25/59] tests for run --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index b92b7f93f..d5fd8c460 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -30,7 +30,7 @@ def __init__( self.outer_width = 0.15 self.outer_depth = 0.2 self.outer_height = 0.15 - self.wall_thickness = 0.01 + self.wall_thickness = 0.025 # Inner drawer dimensions self.inner_width = self.outer_width - 3.5 * self.wall_thickness @@ -251,12 +251,12 @@ def _load_scene(self, options: dict): self.goal_site = actors.build_sphere( self.scene, - radius=0.01, + radius=0.02, color=[0, 1, 0, 1], name="goal_site", body_type="kinematic", add_collision=False, - initial_pose=sapien.Pose(), + initial_pose=sapien.Pose(p = [-0.1075, 0.15, 0.077]), ) From d5a39c732ab23cb40e53660a51b39fde957d1aa8 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 07:52:43 +0530 Subject: [PATCH 26/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index d5fd8c460..e7441d9e0 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -30,7 +30,7 @@ def __init__( self.outer_width = 0.15 self.outer_depth = 0.2 self.outer_height = 0.15 - self.wall_thickness = 0.025 + self.wall_thickness = 0.01 # Inner drawer dimensions self.inner_width = self.outer_width - 3.5 * self.wall_thickness @@ -43,7 +43,7 @@ def __init__( self.handle_thickness = 0.02 # Thickness of handle material self.handle_offset = 0.05 # Offset from drawer side - # Movement parameters (scaled proportionally) + # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 @@ -259,9 +259,6 @@ def _load_scene(self, options: dict): initial_pose=sapien.Pose(p = [-0.1075, 0.15, 0.077]), ) - - - builder.set_scene_idxs(scene_idxs=range(self.num_envs)) builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) @@ -308,30 +305,53 @@ def evaluate(self): } - def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - + drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) + self.scene._gpu_apply_all() self.scene.px.gpu_update_articulation_kinematics() self.scene._gpu_fetch_all() tcp_pose = self.agent.tcp.pose.raw_pose - tcp_pos = tcp_pose[..., :3] drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + + # Calculate handle pose more precisely handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) + handle_pose = drawer_link_pose[:, :3] + handle_offset + - offset_x, offset_y, offset_z = -self.inner_width/2 - self.handle_offset, 0, 0 - handle_pose = drawer_link_pose[:, :3] + torch.tensor([offset_x, offset_y, offset_z], device=drawer_link_pose.device).unsqueeze(0) - + # Compute distance to handle reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) - reaching_reward = 4.0 * (1 - torch.tanh(10.0 * reach_dist)) - pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) + # New condition: Check if TCP is close to handle + handle_contact_threshold = 0.015 # adjust based on your specific setup + is_handling_handle = reach_dist < handle_contact_threshold + + # Modify rewards to be conditional on handle interaction + reaching_reward = torch.where( + is_handling_handle, + 4.0 * (1 - torch.tanh(10.0 * reach_dist)), + torch.zeros_like(reach_dist) + ) + + print("reach reward", reaching_reward) + + + pulling_reward = torch.where( + is_handling_handle, + 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), + torch.zeros_like(pos_dist) + ) + + print("pulling reward", pulling_reward) + success_mask = info.get("success", torch.zeros_like(reaching_reward, dtype=torch.bool)) completion_reward = 4.0 * success_mask + + print("completion reward", completion_reward) return reaching_reward + pulling_reward + completion_reward @@ -341,4 +361,4 @@ def compute_normalized_dense_reward( ): max_reward = 12.0 # Maximum possible reward (2 + 3 + 5) dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) - return dense_reward / max_reward \ No newline at end of file + return dense_reward / max_reward From 3a231af363c5543d2505c9d73acfd7ac065990e5 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 08:54:03 +0530 Subject: [PATCH 27/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index e7441d9e0..f6cd4c6be 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -30,7 +30,7 @@ def __init__( self.outer_width = 0.15 self.outer_depth = 0.2 self.outer_height = 0.15 - self.wall_thickness = 0.01 + self.wall_thickness = 0.02 # Inner drawer dimensions self.inner_width = self.outer_width - 3.5 * self.wall_thickness @@ -38,10 +38,10 @@ def __init__( self.inner_height = self.outer_height - 2.2 * self.wall_thickness # Handle dimensions - self.handle_width = 0.08 # Width of handle bar + self.handle_width = 0.12 # Width of handle bar self.handle_height = 0.04 # Height of handle from drawer face self.handle_thickness = 0.02 # Thickness of handle material - self.handle_offset = 0.05 # Offset from drawer side + self.handle_offset = 0.06 # Offset from drawer side # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width From 4952aef4c8919d699561ed0dbcd129f14c267249 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 09:39:57 +0530 Subject: [PATCH 28/59] expt new reward --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 76 +++++++++++-------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index f6cd4c6be..f61ba0974 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -306,59 +306,69 @@ def evaluate(self): def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - + drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) + + pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) + + success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) + completion_reward = 4.0 * success_mask + + return pulling_reward + completion_reward + + # drawer_qpos = self.drawer.get_qpos() + # pos_dist = torch.abs(self.target_pos - drawer_qpos) - self.scene._gpu_apply_all() - self.scene.px.gpu_update_articulation_kinematics() - self.scene._gpu_fetch_all() + # self.scene._gpu_apply_all() + # self.scene.px.gpu_update_articulation_kinematics() + # self.scene._gpu_fetch_all() - tcp_pose = self.agent.tcp.pose.raw_pose - tcp_pos = tcp_pose[..., :3] - drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + # tcp_pose = self.agent.tcp.pose.raw_pose + # tcp_pos = tcp_pose[..., :3] + # drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose - # Calculate handle pose more precisely - handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) - handle_pose = drawer_link_pose[:, :3] + handle_offset + # # Calculate handle pose more precisely + # handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) + # handle_pose = drawer_link_pose[:, :3] + handle_offset - # Compute distance to handle - reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) + # # Compute distance to handle + # reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) - # New condition: Check if TCP is close to handle - handle_contact_threshold = 0.015 # adjust based on your specific setup - is_handling_handle = reach_dist < handle_contact_threshold + # # New condition: Check if TCP is close to handle + # handle_contact_threshold = 0.015 # adjust based on your specific setup + # is_handling_handle = reach_dist < handle_contact_threshold - # Modify rewards to be conditional on handle interaction - reaching_reward = torch.where( - is_handling_handle, - 4.0 * (1 - torch.tanh(10.0 * reach_dist)), - torch.zeros_like(reach_dist) - ) + # # Modify rewards to be conditional on handle interaction + # reaching_reward = torch.where( + # is_handling_handle, + # 4.0 * (1 - torch.tanh(10.0 * reach_dist)), + # torch.zeros_like(reach_dist) + # ) - print("reach reward", reaching_reward) + # # print("reach reward", reaching_reward) - pulling_reward = torch.where( - is_handling_handle, - 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), - torch.zeros_like(pos_dist) - ) + # pulling_reward = torch.where( + # is_handling_handle, + # 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), + # torch.zeros_like(pos_dist) + # ) - print("pulling reward", pulling_reward) + # # print("pulling reward", pulling_reward) - success_mask = info.get("success", torch.zeros_like(reaching_reward, dtype=torch.bool)) - completion_reward = 4.0 * success_mask + # success_mask = info.get("success", torch.zeros_like(reaching_reward, dtype=torch.bool)) + # completion_reward = 4.0 * success_mask - print("completion reward", completion_reward) + # # print("completion reward", completion_reward) - return reaching_reward + pulling_reward + completion_reward + # return reaching_reward + pulling_reward + completion_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 12.0 # Maximum possible reward (2 + 3 + 5) + max_reward = 8.0 # Maximum possible reward dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From 959eb5be4c00ae1da8922c5bcf193de64e1064e9 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:19:17 +0530 Subject: [PATCH 29/59] modified reward expt --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index f61ba0974..815fc5c27 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -30,10 +30,10 @@ def __init__( self.outer_width = 0.15 self.outer_depth = 0.2 self.outer_height = 0.15 - self.wall_thickness = 0.02 + self.wall_thickness = 0.03 # Inner drawer dimensions - self.inner_width = self.outer_width - 3.5 * self.wall_thickness + self.inner_width = self.outer_width - 3 * self.wall_thickness self.inner_depth = self.outer_depth - 2.2 * self.wall_thickness self.inner_height = self.outer_height - 2.2 * self.wall_thickness @@ -256,11 +256,11 @@ def _load_scene(self, options: dict): name="goal_site", body_type="kinematic", add_collision=False, - initial_pose=sapien.Pose(p = [-0.1075, 0.15, 0.077]), + initial_pose=sapien.Pose(p = [-0.0075, 0.15, 0.077]), ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0, 0.15, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.077])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From 792704e7f46e7922ec665efff52ffe492f0f4e43 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:32:20 +0530 Subject: [PATCH 30/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 815fc5c27..a59f12464 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -27,10 +27,10 @@ def __init__( self.robot_init_qpos_noise = robot_init_qpos_noise # Outer cabinet dimensions - self.outer_width = 0.15 - self.outer_depth = 0.2 - self.outer_height = 0.15 - self.wall_thickness = 0.03 + self.outer_width = 0.225 + self.outer_depth = 0.3 + self.outer_height = 0.225 + self.wall_thickness = 0.04 # Inner drawer dimensions self.inner_width = self.outer_width - 3 * self.wall_thickness @@ -38,10 +38,10 @@ def __init__( self.inner_height = self.outer_height - 2.2 * self.wall_thickness # Handle dimensions - self.handle_width = 0.12 # Width of handle bar - self.handle_height = 0.04 # Height of handle from drawer face - self.handle_thickness = 0.02 # Thickness of handle material - self.handle_offset = 0.06 # Offset from drawer side + self.handle_width = 0.18 # Width of handle bar + self.handle_height = 0.06 # Height of handle from drawer face + self.handle_thickness = 0.03 # Thickness of handle material + self.handle_offset = 0.09 # Offset from drawer side # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width @@ -256,7 +256,7 @@ def _load_scene(self, options: dict): name="goal_site", body_type="kinematic", add_collision=False, - initial_pose=sapien.Pose(p = [-0.0075, 0.15, 0.077]), + initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.077]), ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) From d769d7ecdc7d5184025f096fee1202d448cfd471 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:36:24 +0530 Subject: [PATCH 31/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index a59f12464..d7cacbfef 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -256,11 +256,11 @@ def _load_scene(self, options: dict): name="goal_site", body_type="kinematic", add_collision=False, - initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.077]), + initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.113]), ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.077])) + builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.113])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From 98c5f9f553172067e4802b61775c9aa46ce2f918 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:08:45 +0530 Subject: [PATCH 32/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index d7cacbfef..07acd6140 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -256,11 +256,11 @@ def _load_scene(self, options: dict): name="goal_site", body_type="kinematic", add_collision=False, - initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.113]), + initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.12]), ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.113])) + builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From 7af12ab49572f10efa987d54e5a29b90561226ee Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 12:35:58 +0530 Subject: [PATCH 33/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 07acd6140..67a53fbcc 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -40,8 +40,8 @@ def __init__( # Handle dimensions self.handle_width = 0.18 # Width of handle bar self.handle_height = 0.06 # Height of handle from drawer face - self.handle_thickness = 0.03 # Thickness of handle material - self.handle_offset = 0.09 # Offset from drawer side + self.handle_thickness = 0.015 # Thickness of handle material + self.handle_offset = 0.11 # Offset from drawer side # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width From 4865a9ce5164027debee2a7942908d1fcec3db0d Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Mon, 2 Dec 2024 12:37:42 +0530 Subject: [PATCH 34/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 67a53fbcc..3ba633e67 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -260,7 +260,7 @@ def _load_scene(self, options: dict): ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.12])) + builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.153])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From f7b9096b15583bf9760a55d82e2fc107e2781711 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Tue, 3 Dec 2024 08:36:14 +0530 Subject: [PATCH 35/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 3ba633e67..dd3c7b354 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -30,12 +30,12 @@ def __init__( self.outer_width = 0.225 self.outer_depth = 0.3 self.outer_height = 0.225 - self.wall_thickness = 0.04 + self.wall_thickness = 0.03 # Inner drawer dimensions - self.inner_width = self.outer_width - 3 * self.wall_thickness - self.inner_depth = self.outer_depth - 2.2 * self.wall_thickness - self.inner_height = self.outer_height - 2.2 * self.wall_thickness + self.inner_width = self.outer_width - 2 * self.wall_thickness + self.inner_depth = self.outer_depth - 2.1 * self.wall_thickness + self.inner_height = self.outer_height - 2.1 * self.wall_thickness # Handle dimensions self.handle_width = 0.18 # Width of handle bar @@ -249,18 +249,18 @@ def _load_scene(self, options: dict): damping=10 ) - self.goal_site = actors.build_sphere( - self.scene, - radius=0.02, - color=[0, 1, 0, 1], - name="goal_site", - body_type="kinematic", - add_collision=False, - initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.12]), - ) + # self.goal_site = actors.build_sphere( + # self.scene, + # radius=0.02, + # color=[0, 1, 0, 1], + # name="goal_site", + # body_type="kinematic", + # add_collision=False, + # initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.13]), + # ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.153])) + builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From d01e766aeae996746f149428802369a5e7a7cdc9 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 4 Dec 2024 05:30:09 +0530 Subject: [PATCH 36/59] reward forcing expt --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 107 +++++++++--------- 1 file changed, 55 insertions(+), 52 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index dd3c7b354..4b1b8a493 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -306,69 +306,72 @@ def evaluate(self): def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - - drawer_qpos = self.drawer.get_qpos() - pos_dist = torch.abs(self.target_pos - drawer_qpos) - - pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - - success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) - completion_reward = 4.0 * success_mask - - return pulling_reward + completion_reward + # Update scene kinematics to ensure latest poses + self.scene._gpu_apply_all() + self.scene.px.gpu_update_articulation_kinematics() + self.scene._gpu_fetch_all() - # drawer_qpos = self.drawer.get_qpos() - # pos_dist = torch.abs(self.target_pos - drawer_qpos) - - # self.scene._gpu_apply_all() - # self.scene.px.gpu_update_articulation_kinematics() - # self.scene._gpu_fetch_all() + # Get TCP pose and drawer link pose + tcp_pose = self.agent.tcp.pose.raw_pose + tcp_pos = tcp_pose[..., :3] + drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose - # tcp_pose = self.agent.tcp.pose.raw_pose - # tcp_pos = tcp_pose[..., :3] - # drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + # Calculate handle pose + handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) + handle_pose = drawer_link_pose[:, :3] + handle_offset - # # Calculate handle pose more precisely - # handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) - # handle_pose = drawer_link_pose[:, :3] + handle_offset + # Stage 1: Alignment Reward + # Compute alignment in XZ plane (ensure gripper is roughly parallel to handle's movement axis) + handle_dir = torch.tensor([0, 1, 0], device=tcp_pose.device) # handle moves along Y axis + tcp_forward = tcp_pose[..., 3:6] # gripper's forward direction + alignment_score = torch.abs(torch.nn.functional.cosine_similarity(tcp_forward, handle_dir, dim=-1)) + alignment_reward = 2.0 * (1 - alignment_score) - - # # Compute distance to handle - # reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) + # Stage 2: Approach Reward + # Compute distance to handle + reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) + approach_reward = 2.0 * (1 - torch.tanh(5.0 * reach_dist)) - # # New condition: Check if TCP is close to handle - # handle_contact_threshold = 0.015 # adjust based on your specific setup - # is_handling_handle = reach_dist < handle_contact_threshold - - # # Modify rewards to be conditional on handle interaction - # reaching_reward = torch.where( - # is_handling_handle, - # 4.0 * (1 - torch.tanh(10.0 * reach_dist)), - # torch.zeros_like(reach_dist) - # ) - - # # print("reach reward", reaching_reward) + # Stage 3: Grasping Reward + # Define proximity and orientation conditions for proper grasping + grasp_dist_threshold = 0.02 # Close to handle + grasp_angle_threshold = 0.1 # Roughly aligned + is_near_handle = reach_dist < grasp_dist_threshold + # Compute grasping reward that considers both distance and alignment + grasping_reward = torch.where( + is_near_handle, + 2.0 * (1 - alignment_score), # Reward for being close and aligned + torch.zeros_like(reach_dist) + ) - # pulling_reward = torch.where( - # is_handling_handle, - # 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), - # torch.zeros_like(pos_dist) - # ) - - # # print("pulling reward", pulling_reward) + # Stage 4: Pulling Reward + drawer_qpos = self.drawer.get_qpos() + pos_dist = torch.abs(self.target_pos - drawer_qpos) + pulling_reward = torch.where( + is_near_handle, # Only reward pulling if properly grasping + 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), + torch.zeros_like(pos_dist) + ) - # success_mask = info.get("success", torch.zeros_like(reaching_reward, dtype=torch.bool)) - # completion_reward = 4.0 * success_mask - - # # print("completion reward", completion_reward) - - # return reaching_reward + pulling_reward + completion_reward - + # Final Stage: Completion Reward + success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) + completion_reward = 4.0 * success_mask + + # Combine rewards + total_reward = ( + alignment_reward + + approach_reward + + grasping_reward + + pulling_reward + + completion_reward + ) + + return total_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 8.0 # Maximum possible reward + max_reward = 7.5 # Sum of max individual reward components dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From 7814612a53e2192841e8faf3983588729b96ddc2 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 4 Dec 2024 23:23:24 +0530 Subject: [PATCH 37/59] Update pull_drawer.py --- .../panda/solutions/pull_drawer.py | 125 ++++++++++-------- 1 file changed, 69 insertions(+), 56 deletions(-) diff --git a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py index 93e1b3736..97617c0a1 100644 --- a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py +++ b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py @@ -1,26 +1,35 @@ import gymnasium as gym import numpy as np import sapien +import torch + +from mani_skill.envs.tasks import PullDrawerEnv from mani_skill.examples.motionplanning.panda.motionplanner import PandaArmMotionPlanningSolver -from mani_skill.examples.motionplanning.panda.utils import compute_grasp_info_by_obb +from mani_skill.utils.structs import Pose + def main(): - env = gym.make( + env: PullDrawerEnv = gym.make( "PullDrawer-v1", - obs_mode="none", + obs_mode="none", control_mode="pd_joint_pos", render_mode="rgb_array", - reward_mode="sparse" + reward_mode="dense", ) for seed in range(100): res = solve(env, seed=seed, debug=False, vis=True) - print(res[-1]) + print(f"Seed {seed} result: {res}") + env.close() -def solve(env, seed=None, debug=False, vis=False): + +def solve(env: PullDrawerEnv, seed=None, debug=False, vis=False): env.reset(seed=seed) - assert env.unwrapped.control_mode in ["pd_joint_pos", "pd_joint_pos_vel"] + assert env.unwrapped.control_mode in [ + "pd_joint_pos", + "pd_joint_pos_vel", + ], env.unwrapped.control_mode planner = PandaArmMotionPlanningSolver( env, @@ -29,72 +38,76 @@ def solve(env, seed=None, debug=False, vis=False): base_pose=env.unwrapped.agent.robot.pose, visualize_target_grasp_pose=vis, print_env_info=False, - joint_vel_limits=0.5, - joint_acc_limits=0.5, + joint_vel_limits=0.75, + joint_acc_limits=0.75, ) env = env.unwrapped - FINGER_LENGTH = 0.025 - - # Get handle position and compute grasp - handle_pos = [-env.inner_width/2 - env.handle_offset, 0, 0] - handle_pose = env.drawer_link.pose * sapien.Pose(p=handle_pos) - - # Compute grasp pose for handle - approaching = np.array([1, 0, 0]) # Approach from front - target_closing = env.agent.tcp.pose.to_transformation_matrix()[:3, 1] - - handle_obb = { - 'center': handle_pose.p, - 'extents': np.array([env.handle_thickness, env.handle_width, env.handle_height]) * 2, - 'rotation': handle_pose.to_transformation_matrix()[:3, :3] - } - - grasp_info = compute_grasp_info_by_obb( - handle_obb, - approaching=approaching, - target_closing=target_closing, - depth=FINGER_LENGTH + + # Compute drawer handle pose and dimensions + drawer_pose = env.drawer.pose + handle_offset = np.array([-env.inner_width/2 - env.handle_offset, 0, 0]) + handle_pose = drawer_pose.to_transformation_matrix()[0, :3, :3] @ handle_offset + drawer_pose.p + + # Define grasp approach and closing direction + approaching = np.array([1, 0, 0]) # Approach from side of handle + tcp_forward = env.agent.tcp.pose.to_transformation_matrix()[0, :3, 1] + + # Compute grasp pose + grasp_center = handle_pose + grasp_offset = 0.05 # Small offset to account for gripper width + + # Create initial approach and grasp poses + approach_pose = Pose.create_from_pq( + p=grasp_center + approaching * grasp_offset, + q=env.agent.tcp.pose.q ) - closing, center = grasp_info["closing"], grasp_info["center"] - grasp_pose = env.agent.build_grasp_pose(approaching, closing, center) - + grasp_pose = Pose.create_from_pq( + p=grasp_center, + q=env.agent.tcp.pose.q + ) + + # Motion planning stages # -------------------------------------------------------------------------- # - # Pre-grasp pose + # Stage 1: Approach Handle # -------------------------------------------------------------------------- # - pre_grasp_pose = grasp_pose * sapien.Pose([0.05, 0, 0]) - res = planner.move_to_pose_with_screw(pre_grasp_pose) - if res == -1: return res - + res = planner.move_to_pose_with_screw(approach_pose) + if res == -1: + return res + # -------------------------------------------------------------------------- # - # Grasp handle + # Stage 2: Grasp Handle # -------------------------------------------------------------------------- # res = planner.move_to_pose_with_screw(grasp_pose) - if res == -1: return res + if res == -1: + return res + planner.close_gripper() - + # -------------------------------------------------------------------------- # - # Pull drawer + # Stage 3: Pull Drawer # -------------------------------------------------------------------------- # - pull_distance = env.max_pull_distance * 0.8 - steps = 5 + # Define pull trajectory + pull_distance = env.max_pull_distance * 0.8 # Pull 80% of max distance + pull_direction = np.array([-1, 0, 0]) # Pull along drawer's movement axis - # Pull in small increments with refinement - for i in range(steps): - current_pull = (i + 1) * pull_distance / steps - pull_pose = grasp_pose * sapien.Pose([-current_pull, 0, 0]) - - # Move and refine position - res = planner.move_to_pose_with_screw(pull_pose, refine_steps=3) - if res == -1: return res + + for fraction in [0.25, 0.5, 0.75, 1.0]: + pull_pose = Pose.create_from_pq( + p=grasp_center + pull_direction * (pull_distance * fraction), + q=grasp_pose.q + ) - # Check if drawer is actually moving - if not env.agent.is_grasping(env.drawer_link): + res = planner.move_to_pose_with_screw(pull_pose) + if res == -1: return res + + # Final stage: release and verify + planner.open_gripper() + + return 0 - planner.close() - return res if __name__ == "__main__": main() From e7b9e2579913731a8023c024fe4fa961a23f1615 Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Wed, 4 Dec 2024 10:25:09 -0800 Subject: [PATCH 38/59] planner test --- .../examples/motionplanning/panda/solutions/pull_drawer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py index 97617c0a1..05e029a2e 100644 --- a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py +++ b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py @@ -9,12 +9,14 @@ def main(): + env: PullDrawerEnv = gym.make( "PullDrawer-v1", obs_mode="none", control_mode="pd_joint_pos", render_mode="rgb_array", reward_mode="dense", + sim_backend="gpu" ) for seed in range(100): From 59099938f74ac18d160e1404c8d56762c00c4ceb Mon Sep 17 00:00:00 2001 From: Viswesh-N Date: Wed, 4 Dec 2024 10:36:16 -0800 Subject: [PATCH 39/59] planner test --- .../panda/solutions/pull_drawer.py | 109 +++++------------- 1 file changed, 31 insertions(+), 78 deletions(-) diff --git a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py index 05e029a2e..564a80984 100644 --- a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py +++ b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py @@ -8,108 +8,61 @@ from mani_skill.utils.structs import Pose -def main(): - - env: PullDrawerEnv = gym.make( - "PullDrawer-v1", - obs_mode="none", - control_mode="pd_joint_pos", - render_mode="rgb_array", - reward_mode="dense", - sim_backend="gpu" - ) - - for seed in range(100): - res = solve(env, seed=seed, debug=False, vis=True) - print(f"Seed {seed} result: {res}") - - env.close() - - def solve(env: PullDrawerEnv, seed=None, debug=False, vis=False): env.reset(seed=seed) - assert env.unwrapped.control_mode in [ - "pd_joint_pos", - "pd_joint_pos_vel", - ], env.unwrapped.control_mode - planner = PandaArmMotionPlanningSolver( env, debug=debug, vis=vis, base_pose=env.unwrapped.agent.robot.pose, - visualize_target_grasp_pose=vis, - print_env_info=False, joint_vel_limits=0.75, joint_acc_limits=0.75, ) - env = env.unwrapped - - # Compute drawer handle pose and dimensions - drawer_pose = env.drawer.pose + # Get drawer handle position + drawer_link = env.drawer.links_map['drawer'] handle_offset = np.array([-env.inner_width/2 - env.handle_offset, 0, 0]) - handle_pose = drawer_pose.to_transformation_matrix()[0, :3, :3] @ handle_offset + drawer_pose.p - - # Define grasp approach and closing direction - approaching = np.array([1, 0, 0]) # Approach from side of handle - tcp_forward = env.agent.tcp.pose.to_transformation_matrix()[0, :3, 1] + handle_pose = drawer_link.pose * sapien.Pose(handle_offset) - # Compute grasp pose - grasp_center = handle_pose - grasp_offset = 0.05 # Small offset to account for gripper width - - # Create initial approach and grasp poses - approach_pose = Pose.create_from_pq( - p=grasp_center + approaching * grasp_offset, - q=env.agent.tcp.pose.q - ) + # Pre-grasp pose slightly behind handle + approach_offset = sapien.Pose([0.05, 0, 0]) # Offset behind handle + pre_grasp_pose = handle_pose * approach_offset - grasp_pose = Pose.create_from_pq( - p=grasp_center, - q=env.agent.tcp.pose.q - ) - - # Motion planning stages - # -------------------------------------------------------------------------- # - # Stage 1: Approach Handle - # -------------------------------------------------------------------------- # - res = planner.move_to_pose_with_screw(approach_pose) + # Move to pre-grasp + res = planner.move_to_pose_with_screw(pre_grasp_pose) if res == -1: return res - - # -------------------------------------------------------------------------- # - # Stage 2: Grasp Handle - # -------------------------------------------------------------------------- # + + # Move to grasp + grasp_pose = handle_pose res = planner.move_to_pose_with_screw(grasp_pose) if res == -1: return res + # Close gripper planner.close_gripper() - # -------------------------------------------------------------------------- # - # Stage 3: Pull Drawer - # -------------------------------------------------------------------------- # - # Define pull trajectory - pull_distance = env.max_pull_distance * 0.8 # Pull 80% of max distance - pull_direction = np.array([-1, 0, 0]) # Pull along drawer's movement axis + # Pull drawer + pull_offset = sapien.Pose([-env.max_pull_distance * 0.8, 0, 0]) + pull_pose = grasp_pose * pull_offset + res = planner.move_to_pose_with_screw(pull_pose) - - for fraction in [0.25, 0.5, 0.75, 1.0]: - pull_pose = Pose.create_from_pq( - p=grasp_center + pull_direction * (pull_distance * fraction), - q=grasp_pose.q - ) - - res = planner.move_to_pose_with_screw(pull_pose) - if res == -1: - return res - - # Final stage: release and verify - planner.open_gripper() - - return 0 + planner.close() + return res +def main(): + env = gym.make( + "PullDrawer-v1", + obs_mode="none", + control_mode="pd_joint_pos", + render_mode="rgb_array" + ) + + for seed in range(100): + res = solve(env, seed=seed, debug=False, vis=True) + print(f"Seed {seed}: {res}") + + env.close() if __name__ == "__main__": main() From 8299c48f54ed6ab82d5f81b31ed33f690846013b Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 00:12:33 +0530 Subject: [PATCH 40/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 4b1b8a493..65938b937 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -260,7 +260,7 @@ def _load_scene(self, options: dict): # ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.1, 0.15, 0.12])) + builder.set_initial_pose(sapien.Pose(p=[0.25, 0.15, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From ffd0148934ab3c09b1dbd3070d61a193b649513d Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 00:47:12 +0530 Subject: [PATCH 41/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 66 ++----------------- 1 file changed, 7 insertions(+), 59 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 65938b937..60f5dc7ef 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -306,72 +306,20 @@ def evaluate(self): def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - # Update scene kinematics to ensure latest poses - self.scene._gpu_apply_all() - self.scene.px.gpu_update_articulation_kinematics() - self.scene._gpu_fetch_all() - - # Get TCP pose and drawer link pose - tcp_pose = self.agent.tcp.pose.raw_pose - tcp_pos = tcp_pose[..., :3] - drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose - - # Calculate handle pose - handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) - handle_pose = drawer_link_pose[:, :3] + handle_offset - - # Stage 1: Alignment Reward - # Compute alignment in XZ plane (ensure gripper is roughly parallel to handle's movement axis) - handle_dir = torch.tensor([0, 1, 0], device=tcp_pose.device) # handle moves along Y axis - tcp_forward = tcp_pose[..., 3:6] # gripper's forward direction - alignment_score = torch.abs(torch.nn.functional.cosine_similarity(tcp_forward, handle_dir, dim=-1)) - alignment_reward = 2.0 * (1 - alignment_score) - - # Stage 2: Approach Reward - # Compute distance to handle - reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) - approach_reward = 2.0 * (1 - torch.tanh(5.0 * reach_dist)) - - # Stage 3: Grasping Reward - # Define proximity and orientation conditions for proper grasping - grasp_dist_threshold = 0.02 # Close to handle - grasp_angle_threshold = 0.1 # Roughly aligned - is_near_handle = reach_dist < grasp_dist_threshold - - # Compute grasping reward that considers both distance and alignment - grasping_reward = torch.where( - is_near_handle, - 2.0 * (1 - alignment_score), # Reward for being close and aligned - torch.zeros_like(reach_dist) - ) - - # Stage 4: Pulling Reward + drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - pulling_reward = torch.where( - is_near_handle, # Only reward pulling if properly grasping - 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), - torch.zeros_like(pos_dist) - ) - - # Final Stage: Completion Reward + + pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) + success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) completion_reward = 4.0 * success_mask - - # Combine rewards - total_reward = ( - alignment_reward + - approach_reward + - grasping_reward + - pulling_reward + - completion_reward - ) - - return total_reward + + return pulling_reward + completion_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 7.5 # Sum of max individual reward components + max_reward = 8 # Sum of max individual reward components dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From 810977dda61123252dbf400f0592665c93a4f87c Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 01:21:27 +0530 Subject: [PATCH 42/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 60f5dc7ef..f4d7c7317 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -260,7 +260,7 @@ def _load_scene(self, options: dict): # ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.25, 0.15, 0.12])) + builder.set_initial_pose(sapien.Pose(p=[0.17, 0.15, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] From e37e74fe134dadbe590b84c25431ab1abe0a3cd2 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:29:01 +0530 Subject: [PATCH 43/59] draft planner --- .../panda/solutions/pull_drawer.py | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py index 564a80984..c99ee35f7 100644 --- a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py +++ b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py @@ -20,30 +20,38 @@ def solve(env: PullDrawerEnv, seed=None, debug=False, vis=False): ) # Get drawer handle position + # planner.open_gripper() + drawer_link = env.drawer.links_map['drawer'] + + handle_offset = np.array([-env.inner_width/2 - env.handle_offset, 0, 0]) handle_pose = drawer_link.pose * sapien.Pose(handle_offset) + # Pre-grasp pose slightly behind handle - approach_offset = sapien.Pose([0.05, 0, 0]) # Offset behind handle + approach_offset = sapien.Pose(p = [-0.1, 0, 0]) # Offset behind handle pre_grasp_pose = handle_pose * approach_offset - - # Move to pre-grasp + # First 90-degree rotation around x-axis, then 90-degree rotation around z-axis + pre_grasp_pose.q = torch.tensor([0.5, 0.5, 0.5, 0.5]) + res = planner.move_to_pose_with_screw(pre_grasp_pose) - if res == -1: - return res - - # Move to grasp - grasp_pose = handle_pose + + + move_in_offset = sapien.Pose(p = [0, 0, 0.13]) + grasp_pose = pre_grasp_pose * move_in_offset + res = planner.move_to_pose_with_screw(grasp_pose) + + if res == -1: return res # Close gripper planner.close_gripper() - + # Pull drawer - pull_offset = sapien.Pose([-env.max_pull_distance * 0.8, 0, 0]) + pull_offset = sapien.Pose([0, 0, -env.max_pull_distance * 0.81]) pull_pose = grasp_pose * pull_offset res = planner.move_to_pose_with_screw(pull_pose) @@ -56,6 +64,7 @@ def main(): obs_mode="none", control_mode="pd_joint_pos", render_mode="rgb_array" + sim ) for seed in range(100): From 06443860a092dbb533e67fa891290321ed1fd76f Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:46:34 +0530 Subject: [PATCH 44/59] Updated env with spawn randomness --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index f4d7c7317..4e6ac86d4 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -2,6 +2,7 @@ import numpy as np import sapien import torch +import random from mani_skill.agents.robots import Fetch, Panda from mani_skill.envs.sapien_env import BaseEnv from mani_skill.utils import sapien_utils @@ -9,6 +10,7 @@ from mani_skill.utils.scene_builder.table import TableSceneBuilder from mani_skill.utils.structs.types import SimConfig, GPUMemoryConfig from mani_skill.sensors.camera import CameraConfig +from mani_skill.utils.structs import Pose from mani_skill.utils.building import actors @register_env("PullDrawer-v1", max_episode_steps=200) @@ -249,18 +251,10 @@ def _load_scene(self, options: dict): damping=10 ) - # self.goal_site = actors.build_sphere( - # self.scene, - # radius=0.02, - # color=[0, 1, 0, 1], - # name="goal_site", - # body_type="kinematic", - # add_collision=False, - # initial_pose=sapien.Pose(p = [-0.0095, 0.15, 0.13]), - # ) - builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.17, 0.15, 0.12])) + x = random.random()*0.05 + 0.17 + y = random.random()*0.1 + 0.12 + builder.set_initial_pose(sapien.Pose(p=[x, y, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -269,7 +263,17 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): with torch.device(self.device): b = len(env_idx) self.scene_builder.initialize(env_idx) - + + drawer_xyz = torch.zeros((b,3), device=self.device) + drawer_xyz[..., 0] = torch.rand((b,1), device=self.device)*0.05 + 0.17 + drawer_xyz[..., 1] = torch.rand((b,1), device= self.device)*0.1 + 0.12 + drawer_xyz[..., 2] = self.outer_height/2 + 0.001 + + drawer_pose = Pose.create_from_pq(p = drawer_xyz) + + self.drawer.set_pose(drawer_pose) + + init_pos = torch.zeros((b, 1), device=self.device) self.drawer.set_qpos(init_pos) From 440f65bae8cc2d7f8e21ffd61365cd9b53a9655e Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:48:08 +0530 Subject: [PATCH 45/59] Update pull_drawer.py --- .../examples/motionplanning/panda/solutions/pull_drawer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py index c99ee35f7..fa398e50e 100644 --- a/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py +++ b/mani_skill/examples/motionplanning/panda/solutions/pull_drawer.py @@ -41,6 +41,7 @@ def solve(env: PullDrawerEnv, seed=None, debug=False, vis=False): move_in_offset = sapien.Pose(p = [0, 0, 0.13]) grasp_pose = pre_grasp_pose * move_in_offset + res = planner.move_to_pose_with_screw(grasp_pose) @@ -63,8 +64,8 @@ def main(): "PullDrawer-v1", obs_mode="none", control_mode="pd_joint_pos", - render_mode="rgb_array" - sim + render_mode="rgb_array", + sim_backend = "gpu" ) for seed in range(100): From 70ffa4105000af8e5bcfcb76334c6c0544474881 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:08:03 +0530 Subject: [PATCH 46/59] revert to last working reward version --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 84 ++++++++++++++----- 1 file changed, 61 insertions(+), 23 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 4e6ac86d4..117d792d2 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -2,7 +2,6 @@ import numpy as np import sapien import torch -import random from mani_skill.agents.robots import Fetch, Panda from mani_skill.envs.sapien_env import BaseEnv from mani_skill.utils import sapien_utils @@ -10,7 +9,6 @@ from mani_skill.utils.scene_builder.table import TableSceneBuilder from mani_skill.utils.structs.types import SimConfig, GPUMemoryConfig from mani_skill.sensors.camera import CameraConfig -from mani_skill.utils.structs import Pose from mani_skill.utils.building import actors @register_env("PullDrawer-v1", max_episode_steps=200) @@ -252,9 +250,7 @@ def _load_scene(self, options: dict): ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - x = random.random()*0.05 + 0.17 - y = random.random()*0.1 + 0.12 - builder.set_initial_pose(sapien.Pose(p=[x, y, 0.12])) + builder.set_initial_pose(sapien.Pose(p=[0.17, 0.15, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -263,17 +259,7 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): with torch.device(self.device): b = len(env_idx) self.scene_builder.initialize(env_idx) - - drawer_xyz = torch.zeros((b,3), device=self.device) - drawer_xyz[..., 0] = torch.rand((b,1), device=self.device)*0.05 + 0.17 - drawer_xyz[..., 1] = torch.rand((b,1), device= self.device)*0.1 + 0.12 - drawer_xyz[..., 2] = self.outer_height/2 + 0.001 - - drawer_pose = Pose.create_from_pq(p = drawer_xyz) - - self.drawer.set_pose(drawer_pose) - - + init_pos = torch.zeros((b, 1), device=self.device) self.drawer.set_qpos(init_pos) @@ -310,20 +296,72 @@ def evaluate(self): def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - + # Update scene kinematics to ensure latest poses + self.scene._gpu_apply_all() + self.scene.px.gpu_update_articulation_kinematics() + self.scene._gpu_fetch_all() + + # Get TCP pose and drawer link pose + tcp_pose = self.agent.tcp.pose.raw_pose + tcp_pos = tcp_pose[..., :3] + drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + + # Calculate handle pose + handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) + handle_pose = drawer_link_pose[:, :3] + handle_offset + + # Stage 1: Alignment Reward + # Compute alignment in XZ plane (ensure gripper is roughly parallel to handle's movement axis) + handle_dir = torch.tensor([0, 1, 0], device=tcp_pose.device) # handle moves along Y axis + tcp_forward = tcp_pose[..., 3:6] # gripper's forward direction + alignment_score = torch.abs(torch.nn.functional.cosine_similarity(tcp_forward, handle_dir, dim=-1)) + alignment_reward = 2.0 * (1 - alignment_score) + + # Stage 2: Approach Reward + # Compute distance to handle + reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) + approach_reward = 2.0 * (1 - torch.tanh(5.0 * reach_dist)) + + # Stage 3: Grasping Reward + # Define proximity and orientation conditions for proper grasping + grasp_dist_threshold = 0.02 # Close to handle + grasp_angle_threshold = 0.1 # Roughly aligned + is_near_handle = reach_dist < grasp_dist_threshold + + # Compute grasping reward that considers both distance and alignment + grasping_reward = torch.where( + is_near_handle, + 2.0 * (1 - alignment_score), # Reward for being close and aligned + torch.zeros_like(reach_dist) + ) + + # Stage 4: Pulling Reward drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - - pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - + pulling_reward = torch.where( + is_near_handle, # Only reward pulling if properly grasping + 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), + torch.zeros_like(pos_dist) + ) + + # Final Stage: Completion Reward success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) completion_reward = 4.0 * success_mask - - return pulling_reward + completion_reward + + # Combine rewards + total_reward = ( + alignment_reward + + approach_reward + + grasping_reward + + pulling_reward + + completion_reward + ) + + return total_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 8 # Sum of max individual reward components + max_reward = 7.5 # Sum of max individual reward components dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From 3fe43ab3cb972573533920a54567f54d5ba310bf Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:34:24 +0530 Subject: [PATCH 47/59] orientation expt --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 75 ++++--------------- 1 file changed, 13 insertions(+), 62 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 117d792d2..6d5b6611f 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -296,72 +296,23 @@ def evaluate(self): def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): - # Update scene kinematics to ensure latest poses - self.scene._gpu_apply_all() - self.scene.px.gpu_update_articulation_kinematics() - self.scene._gpu_fetch_all() - - # Get TCP pose and drawer link pose - tcp_pose = self.agent.tcp.pose.raw_pose - tcp_pos = tcp_pose[..., :3] - drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose - - # Calculate handle pose - handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) - handle_pose = drawer_link_pose[:, :3] + handle_offset - - # Stage 1: Alignment Reward - # Compute alignment in XZ plane (ensure gripper is roughly parallel to handle's movement axis) - handle_dir = torch.tensor([0, 1, 0], device=tcp_pose.device) # handle moves along Y axis - tcp_forward = tcp_pose[..., 3:6] # gripper's forward direction - alignment_score = torch.abs(torch.nn.functional.cosine_similarity(tcp_forward, handle_dir, dim=-1)) - alignment_reward = 2.0 * (1 - alignment_score) - - # Stage 2: Approach Reward - # Compute distance to handle - reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) - approach_reward = 2.0 * (1 - torch.tanh(5.0 * reach_dist)) - - # Stage 3: Grasping Reward - # Define proximity and orientation conditions for proper grasping - grasp_dist_threshold = 0.02 # Close to handle - grasp_angle_threshold = 0.1 # Roughly aligned - is_near_handle = reach_dist < grasp_dist_threshold - - # Compute grasping reward that considers both distance and alignment - grasping_reward = torch.where( - is_near_handle, - 2.0 * (1 - alignment_score), # Reward for being close and aligned - torch.zeros_like(reach_dist) - ) - - # Stage 4: Pulling Reward - drawer_qpos = self.drawer.get_qpos() - pos_dist = torch.abs(self.target_pos - drawer_qpos) - pulling_reward = torch.where( - is_near_handle, # Only reward pulling if properly grasping - 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1), - torch.zeros_like(pos_dist) - ) - - # Final Stage: Completion Reward - success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) - completion_reward = 4.0 * success_mask - - # Combine rewards - total_reward = ( - alignment_reward + - approach_reward + - grasping_reward + - pulling_reward + - completion_reward - ) + # Batch size extraction + batch_size = self.drawer.get_qpos().shape[0] + device = self.device + + # 1. Orientation Reward + tcp_pose_q = self.agent.tcp.pose.q + desired_q = torch.tensor([0.5, 0.5, 0.5, 0.5], device=device).expand(batch_size, 4) + orientation_diff = torch.norm(tcp_pose_q - desired_q, dim=-1) < 0.02 + + q_orientation_reward = 4 * orientation_diff - return total_reward + + return q_orientation_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 7.5 # Sum of max individual reward components + max_reward = 4.0 # Maximum possible reward dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From c9044dd58f0315d5c0f63c6cb81d4b7a11c835c3 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Sun, 8 Dec 2024 13:50:54 +0530 Subject: [PATCH 48/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 6d5b6611f..880cc017b 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -300,19 +300,47 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): batch_size = self.drawer.get_qpos().shape[0] device = self.device + self.scene._gpu_apply_all() + self.scene.px.gpu_update_articulation_kinematics() + self.scene._gpu_fetch_all() + + # Get TCP pose and drawer link pose + tcp_pose = self.agent.tcp.pose.raw_pose + tcp_pos = tcp_pose[..., :3] + drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + + handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) + handle_pose = drawer_link_pose[:, :3] + handle_offset + # 1. Orientation Reward tcp_pose_q = self.agent.tcp.pose.q desired_q = torch.tensor([0.5, 0.5, 0.5, 0.5], device=device).expand(batch_size, 4) orientation_diff = torch.norm(tcp_pose_q - desired_q, dim=-1) < 0.02 q_orientation_reward = 4 * orientation_diff + + # 2. Approach Reward + reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) + approach_reward = 4.0 * (1 - torch.tanh(5.0 * reach_dist)) + + # 3. Progress Reward + drawer_qpos = self.drawer.get_qpos() + pos_dist = torch.abs(self.target_pos - drawer_qpos) + + pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) + + # 4. Success Reward + success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) + completion_reward = 4.0 * success_mask + + print(q_orientation_reward, pulling_reward, completion_reward) - return q_orientation_reward + return q_orientation_reward + approach_reward + pulling_reward + completion_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict ): - max_reward = 4.0 # Maximum possible reward + max_reward = 16.0 # Maximum possible reward dense_reward = self.compute_dense_reward(obs=obs, action=action, info=info) return dense_reward / max_reward From a4715595c718d2f8368a9c74f034560778e992b0 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Sun, 8 Dec 2024 13:52:40 +0530 Subject: [PATCH 49/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 880cc017b..2501d6701 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -332,10 +332,7 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): # 4. Success Reward success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) completion_reward = 4.0 * success_mask - - print(q_orientation_reward, pulling_reward, completion_reward) - return q_orientation_reward + approach_reward + pulling_reward + completion_reward def compute_normalized_dense_reward( From b6335f0fa7790d7cf1e55aca56c7b2fc518bd560 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Sat, 14 Dec 2024 03:46:42 +0530 Subject: [PATCH 50/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 2501d6701..efc77173a 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -9,6 +9,7 @@ from mani_skill.utils.scene_builder.table import TableSceneBuilder from mani_skill.utils.structs.types import SimConfig, GPUMemoryConfig from mani_skill.sensors.camera import CameraConfig +from mani_skill.utils.structs import Pose from mani_skill.utils.building import actors @register_env("PullDrawer-v1", max_episode_steps=200) @@ -260,9 +261,14 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): b = len(env_idx) self.scene_builder.initialize(env_idx) - init_pos = torch.zeros((b, 1), device=self.device) + drawer_xyz = torch.zeros((b, 3), device=self.device) + drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * 0.005 + 0.17 + drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * 0.005 + 0.15 + drawer_xyz[..., 2] = self.outer_height / 2 + 0.005 + + init_pos = Pose.create_from_pq(p=drawer_xyz) - self.drawer.set_qpos(init_pos) + self.drawer.set_pose(init_pos) def _get_obs_extra(self, info: Dict): obs = dict( From 7cbb255d72290b14dca799f184332fd77c7baf9e Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Sat, 14 Dec 2024 04:04:58 +0530 Subject: [PATCH 51/59] final working planner and dense reward --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index efc77173a..c3939d45d 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -262,8 +262,8 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.scene_builder.initialize(env_idx) drawer_xyz = torch.zeros((b, 3), device=self.device) - drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * 0.005 + 0.17 - drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * 0.005 + 0.15 + drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * 0.01 + 0.17 + drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * 0.01 + 0.15 drawer_xyz[..., 2] = self.outer_height / 2 + 0.005 init_pos = Pose.create_from_pq(p=drawer_xyz) From e56b17ab1948530800b36f7b57d596fb72bbb7d9 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Sat, 14 Dec 2024 04:09:26 +0530 Subject: [PATCH 52/59] Update pull_drawer.py --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index c3939d45d..8615ef1bd 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -47,6 +47,7 @@ def __init__( # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 + self.k = 0.01 super().__init__( *args, @@ -262,8 +263,8 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.scene_builder.initialize(env_idx) drawer_xyz = torch.zeros((b, 3), device=self.device) - drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * 0.01 + 0.17 - drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * 0.01 + 0.15 + drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * self.k + 0.17 + drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * self.k + 0.15 drawer_xyz[..., 2] = self.outer_height / 2 + 0.005 init_pos = Pose.create_from_pq(p=drawer_xyz) From f8658169cd882acccd6c3bdc7712924e1bc37c17 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh <72874174+Viswesh-N@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:04:51 -0800 Subject: [PATCH 53/59] fully working planner with seeding --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 8615ef1bd..9082d3001 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -47,7 +47,7 @@ def __init__( # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 - self.k = 0.01 + self.k = 0.05 super().__init__( *args, @@ -252,7 +252,7 @@ def _load_scene(self, options: dict): ) builder.set_scene_idxs(scene_idxs=range(self.num_envs)) - builder.set_initial_pose(sapien.Pose(p=[0.17, 0.15, 0.12])) + # builder.set_initial_pose(sapien.Pose(p=[0.17, 0.15, 0.12])) self.drawer = builder.build(fix_root_link=True, name="drawer_articulation") self.drawer_link = self.drawer.get_links()[1] @@ -263,14 +263,18 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.scene_builder.initialize(env_idx) drawer_xyz = torch.zeros((b, 3), device=self.device) - drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * self.k + 0.17 + drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * self.k + 0.22 drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * self.k + 0.15 drawer_xyz[..., 2] = self.outer_height / 2 + 0.005 + init_pos = Pose.create_from_pq(p=drawer_xyz) self.drawer.set_pose(init_pos) + closed_qpos = torch.zeros((b, 1), device=self.device) + self.drawer.set_qpos(closed_qpos) + def _get_obs_extra(self, info: Dict): obs = dict( tcp_pose=self.agent.tcp.pose.raw_pose, From 6fd0cc8d5160baeb74af0e61a7b6f4db18df2dc7 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh Date: Fri, 20 Dec 2024 03:24:06 -0800 Subject: [PATCH 54/59] improved dense reward --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 9082d3001..4734baff6 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -47,7 +47,7 @@ def __init__( # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 - self.k = 0.05 + self.k = 0.03 super().__init__( *args, @@ -263,7 +263,7 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.scene_builder.initialize(env_idx) drawer_xyz = torch.zeros((b, 3), device=self.device) - drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * self.k + 0.22 + drawer_xyz[..., 0] = torch.rand((b,), device=self.device) * self.k + 0.17 drawer_xyz[..., 1] = torch.rand((b,), device=self.device) * self.k + 0.15 drawer_xyz[..., 2] = self.outer_height / 2 + 0.005 @@ -323,12 +323,19 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) handle_pose = drawer_link_pose[:, :3] + handle_offset - # 1. Orientation Reward - tcp_pose_q = self.agent.tcp.pose.q + # 1. Orientation Reward - Modified for continuous feedback + tcp_pose_q = self.agent.tcp.pose.q # Current quaternion desired_q = torch.tensor([0.5, 0.5, 0.5, 0.5], device=device).expand(batch_size, 4) - orientation_diff = torch.norm(tcp_pose_q - desired_q, dim=-1) < 0.02 - - q_orientation_reward = 4 * orientation_diff + + # Calculate quaternion distance (dot product between quaternions) + # Abs because q and -q represent the same rotation + quat_dot = torch.abs(torch.sum(tcp_pose_q * desired_q, dim=-1)) + # Clip to handle numerical errors + quat_dot = torch.clamp(quat_dot, -1.0, 1.0) + # Convert to angle (in radians) + angle_dist = 2.0 * torch.acos(quat_dot) + # Normalize to [0, 1] range and invert so smaller angles give higher rewards + orientation_reward = 4.0 * (1.0 - torch.tanh(2.0 * angle_dist)) # 2. Approach Reward reach_dist = torch.norm(tcp_pos - handle_pose, dim=-1) @@ -337,14 +344,13 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): # 3. Progress Reward drawer_qpos = self.drawer.get_qpos() pos_dist = torch.abs(self.target_pos - drawer_qpos) - pulling_reward = 4.0 * (1 - torch.tanh(5.0 * pos_dist)).squeeze(-1) - + # 4. Success Reward success_mask = info.get("success", torch.zeros_like(pulling_reward, dtype=torch.bool)) completion_reward = 4.0 * success_mask - return q_orientation_reward + approach_reward + pulling_reward + completion_reward + return orientation_reward + approach_reward + pulling_reward + completion_reward def compute_normalized_dense_reward( self, obs: Any, action: torch.Tensor, info: Dict From b711f0bf703b31807a673e7191c1a6034f23a8d1 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh Date: Fri, 3 Jan 2025 11:27:16 -0800 Subject: [PATCH 55/59] update motion planning sh with new env --- scripts/data_generation/motionplanning.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/data_generation/motionplanning.sh b/scripts/data_generation/motionplanning.sh index 3ff42acb9..96fcb1d50 100644 --- a/scripts/data_generation/motionplanning.sh +++ b/scripts/data_generation/motionplanning.sh @@ -2,7 +2,7 @@ ## Panda Arm Solutions ## -for env_id in PushCube-v1 PickCube-v1 StackCube-v1 PegInsertionSide-v1 PlugCharger-v1 LiftPegUpright-v1 PullCubeTool-v1 PullCube-v1 +for env_id in PushCube-v1 PickCube-v1 StackCube-v1 PegInsertionSide-v1 PlugCharger-v1 LiftPegUpright-v1 PullCubeTool-v1 PullCube-v1 PullDrawer-v1 do python -m mani_skill.examples.motionplanning.panda.run --env-id $env_id \ --traj-name="trajectory" --only-count-success --save-video -n 1 \ From bf62882b6564820d06620b69a99ec61d76f2d64b Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh Date: Fri, 3 Jan 2025 11:30:28 -0800 Subject: [PATCH 56/59] added sample ppo script --- examples/baselines/ppo/examples.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/baselines/ppo/examples.sh b/examples/baselines/ppo/examples.sh index b0958b55c..ac2cecb06 100644 --- a/examples/baselines/ppo/examples.sh +++ b/examples/baselines/ppo/examples.sh @@ -15,6 +15,9 @@ python ppo.py --env_id="PushT-v1" \ python ppo.py --env_id="PickSingleYCB-v1" \ --num_envs=1024 --update_epochs=8 --num_minibatches=32 \ --total_timesteps=25_000_000 +python ppo.py --env_id="PullDrawer-v1" \ + --num_envs=1024 --update_epochs=8 --num_minibatches=32 \ + --total_timesteps=100_000_000 python ppo.py --env_id="PegInsertionSide-v1" \ --num_envs=1024 --update_epochs=8 --num_minibatches=32 \ --total_timesteps=250_000_000 --num-steps=100 --num-eval-steps=100 From a1a7a2c325495153a86025b32d5d933b71776024 Mon Sep 17 00:00:00 2001 From: Viswesh Nagaswamy Rajesh Date: Sun, 5 Jan 2025 11:54:11 -0800 Subject: [PATCH 57/59] added docs for new task --- .../PullDrawer-v1_rt_thumb_first.png | Bin 0 -> 95426 bytes .../PullDrawer-v1_rt_thumb_last.png | Bin 0 -> 97437 bytes docs/source/tasks/table_top_gripper/index.md | 8 ++++++++ figures/environment_demos/PullDrawerv1_rt.mp4 | Bin 0 -> 244008 bytes 4 files changed, 8 insertions(+) create mode 100644 docs/source/_static/env_thumbnails/PullDrawer-v1_rt_thumb_first.png create mode 100644 docs/source/_static/env_thumbnails/PullDrawer-v1_rt_thumb_last.png create mode 100644 figures/environment_demos/PullDrawerv1_rt.mp4 diff --git a/docs/source/_static/env_thumbnails/PullDrawer-v1_rt_thumb_first.png b/docs/source/_static/env_thumbnails/PullDrawer-v1_rt_thumb_first.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c0273b251e9735c4a8f0a21cc0b30bc67e7ec0 GIT binary patch literal 95426 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� zC9|CiFS=?q8r+hGL0!|+DBQs-of;siXWPc^OYzo4{h{|&vV(J!cy9@zVJOmlU5skI2}(@D!eNd_2$kFHN5(+?-Duv?lykaI-ZwTC46^? zzUS8HQmZluM3UQteUWFubR3kmGg|(}5=BzgWihWR_gq{S)XnP3IxBLli5LP$MdqLS z)Tb_9y!i6VFXK<=&!6XX%AVPh7fsl>wx9dCpNo^wRLHe34I(ODl#TS`*+W0~!5=^S z4Q)1Sx@OI`t32#YGQjXUGdFPMl6(+5tC%5Z(;^w4uNpN0Yh+_>!GO|Yb#Qbh0pB=ctc#sB>Vw!*lI$%20 z+GgWvNO3E;{{?{`(qVb3%Mt*-x7wls0VNf3LqltX6S(ZLBo;HdTj8oewZJ@;-^NiD;f z1qoO06&aywwJP*%5)H1t{DT)Jw_eYKDP$M!$80$CyqeeUK&t`d)LqwdY4+PdOkk(r zfo|U#PLxXVEmMY+0L;{!+I{;UuTo_j4 z;E^~>bX|(GazxW8bxQ-}D;k~EZZM9b>4J-#^O87(kPV7tSWbU1%A&CD!UgqYP2b$! z3DZP3WZ#e)jpp_M0y@EU(g3_HXYLbR1Cv)rqG|@JA&aTUhnt{nVVyZ@1eMRFpup~fF>vq{e!Oky zjdjmdq2VYG5Ty7vF{GeUM08aU_!JpbKC!yO{lH-@x#gwOILWURT)6-{hd09&p<%Zo z;Q&-InoNM}TpKGu>H5K_Mz4HAGqRh`(3b4k-hC369HY;V{{ zp5Q2&Cuy?UwG}pAc(QZ1^mS@Znj!^mG2C8q1FM42ICQzaAJRN-MUGcnPxLdvhA%+(vpoj z_E%(Sx`nJcx?OMh(Dzs(;M-QcF&@w$Bg6Cf2;n$U>XQgTtRRlkD28sY)m;&Zrlw?r z=DMcP{DDqDzUdSVvz}&gcRbBAd97Iwb1DlU#6n&!6+~baUB8lSSEA+R4svOErpcn& zZ81&-=xS?c3s42lGo!D?0%|<8mFZkq<+G;`>E|j@4lHt;3vm`C@oYTe({lL029?pq z5k)*Dxm~YA?P3=RtBuLt(b1%OOO5F zXoNGU9xzEW;5wQY6^q3?7L}CjpATl1$66YBu?8 z8Vv%Hmf|*?t|~Jnn|o&D=U765v98CC9a~JaWh1_C06k9!;y@6z%=+4a`QDdI5_MY? z1Y?3ysn&y!{``-gddiZOES=&In;XpuQCumwEqp$Xx9PahXe@I)NQ(P_8@`xZT2}q> zlyd)?>e@6{Gn~$_`;^gxFEJkTC;fob2leq zD_QQ@2rLAhuT9sC-AQkmhD`m$`NQ0~!hs!bfya&ULPOR zN4;TpwAOAl3}d%@a~$?>-MD)F#}`K3ZF)|VyWL&fHC%Z|);7nzX&kj`^;Wx`#4(^P zuLFnGeaooZx~-{kB}0FyI;6o&vm}fox@D1T(-axU+|~vAv*AjuL%C{-^pwh7OGFAR za9&kPg2Ypl!H9m*MY+TaFT8N%$dN@^A+OA9GzbjHD@X0w6UP(C%I5<`d=jtVpX;00~5XdG3in&EI}n?{}3E|fe=IpUX9RY>{V zN>{6zYr`SO8SjqAvnV7M$S{;r!8X5=HSoYGf*gTeyQ9>SFdUE|$bIhKl1mqiXStrZQP#9yN>zmjj80 zXa`>&XZZjJhU(C$El1O!hcZJ1JLFVNp|NgKcCg1{2*jho)H0K^>vWgo|I z73R;whQ`8H1QFG)H+_7h7sVkwFje%FQKg2aYK{@a`PHo<@GcZht5NUN9bnc`5Zvr; zQ*Dy#Z|`iwkML@4G#D4-8L&IHe|L8~jZ>d`wLQr9BqP84=-L5X-qtO+^3-a>jK`Wr zAzGX>IBnwyicp8g1jRj`5{WtfDmsWOL#6Im+@@{-_NcS8G7lUtRBIk@qG1*Duq(9+ zSF|9af-}eecLo^O?NwGct_~ZMBAxPC@k3GgS(S*~d^1$~61+=IWmM!Q{ zxmsIa{oc2}5eFlw%xxT2O~=WHMB?o@S9wvknjP3n=)G&(r#o;>l&a%we3c| ziQ{zX@>Q24+ow*qG-@>4fV|;!0w7g)YqKDjOoz5%oH%f3Fd1+4b~MRYTj|v5&0F2w z(QJCSwOXmlIGh$~CfXIOG|i$U!D9Ng7EsJ|O4Z%EW{Me$Fzc$JPyx9lGB7hBT%sM+ zlmmxS%@OU5G+TLNV|^S_Qd3%(C+5{@Lezq%fkXW)%D0D zk8lkLEw#jTF&bNd+Yg-@ETJvWoI3oY{$W`0+q47rXbay&xJAR{8p9IlxI?ah=)1UxnL3N1DMh!9o zEd$$c7}Dy2d#24JV%ad{pb69+BuP?epVT6U6lW#F++k7N2v7rfr zAc#6?1O`!VG2a1(sc5?P#@Y&u?#^&3$uMhb4J#|C{TU#^Vn7~< z8QOM6qXF@w>FRhA`1M+xP^yO7!A)XJNupTNRp|Z*2E=k^X%eTEA(!h--;lMa$|i9j zC&fmi1E|xR3Pi`OJv!M^B!ES$meQ1-D=!?#4;FD||MFG}~ zu&bI=0;NzTGFYx-wOTdE0k%>Wsiil}zpHNZRTObbOfH57q#mYue>4l?SXXt|vAKaJ z$-ha(lf#E)Pft9*JW}woS?HUKd{3tRTV)otVa4T(=!eXOqcfLB8kJ ze4f038*kTZ&^_00?ErcmJh)+L%I0n_jN^mt_Q6i4(2Pr)w;ULO)s^9F0_@kYjE-N6 zCAm8b3?-&(spjl*ugFX(!G&#`xi z@;0fcq(E*p8n&qe;Vim-xsyANBQgc8CI#1J$@S{P5fLc>=u+#jEqI?)jViQpBc@4Y z&Vbg2cA#B{aKw2Ii8o|*V`V)o^POps#JQ(K?o?QNnwnZ`0Heie)*p`KGKFG=UIZo^ z9D1md)O}%P`HgPCa$Ja^qX>N8@oY3$U##?UrR& zSWftwlQ0H0o26xxm6XjV1)V_jT~mi()qF^=NuBdWL1h`0C?%VZSR&dSD7Kv741K*} z+7O+|bhb0c+tnr!K$t zO3T)_cXsnQX+hc6YEW+7!H|cpdyWBBordAg?yf7i&u|UQjnyT3V+}3=jsfx9NYZFL zBg>T+opy@~C8uKs9@Jl@s8N#YRnhd^PR)Y%JI<ei5)0Vv=}ET_!21q)@D99M zv+nr1q5#YdaovjIyOiuV6b+XZ71@ZYF#sQ^R=N^{fbo-MLLK_JTi7W@Y#0^NOO;8t zA-FqAv6WS+iKc8Z98pmPb=~$P+8qIuV?`P@Q*(3~3V%GKbUmaAU*(wUk#-wy`_)~% zwpeXqbG(|V;G6}s@YYs0N+QeFHdXXVioz_3RH3$08jjo4bbY70YlvKF7AIVyQSmfi@i=ni2=zuL$>!!J%QO!5umAe5 zlU`pUJ`jOpRkXyarb(=_R1`#{PMTv{Gnm9?oA{^1K$rE^_7A@CE#EU&g#X&z-601~ zkxiQ_wDD%F;Uo-cLTebLY0~MmAxpqNqQl8b;t2otM(_b}%yUgCSK3V&|5%W|P~!#_ zK2@_ItK_`hg8h{TNjXjmDGS#+t3VK=ID+RUQxmU2)6&Yk(p|s^OV`36oD7FpGl-dz zXP)JalCobvWi;EOR6yA`7nI`%Zyt}b7aiW8J*2h$5C8ll+<+42RL4)%Y_><0p;E<_ z{b^oi#GX5M%U}?>nzvr_NT*cg-lyk_#(Sns7n8Fg{e?;a|AN>XHFXlDIPQ2@29Zqy zd{a0zOTqwP+Jqw$<#F4xS87gN=C`(X(xR+;K3s59P&JNbQNKT|6o?l&?$m*)QJW6- zgJx!#*47S1dw8^9w>ND!yrV0P8~xGlpzqtx!A1v4=JMusY;fDFYqrh>9YUqmfsvTt zsA0(COqzx?-neF$mgNnCd=|yH5zjJ|qRPS$yAM>5N@WB)80wNr18<1?3TMDEc`0~K z6j!TEXJKJlxlv2ZhI!<0YBYu4EYScv%9bc6j~&m-;?ku{moHyFu(sZ)xwyaA z+w1b4&$xz({@(Y#M}%sP#=ZC6oA1>>tIO>mq5#tpF>76P#&R(*)!AqoV~>Q z!4gO$gagWQ7N(*E9ksZw{xbW;I(4-=-41G%I&{ z{c#Y(FgF_wpT=y`gsEGbH+gg>Knv`~p~HuHF6u0jP90u>3A=dhW+Igb+bbKbmF>yk z)!ogGTRQ=q6GyY@1Wp^zV}qT=t^-NqvU`&#Dg!N*hFWSn*Wj`MYD4&ef*QVG6(z91bTX-lpvYh_ zSZQ~dd{UInS3GbeAoYj~)FA!vtYAz0W*yoMdmW`Pn=0i}OanGI%ZkZlR!Vj0=y`>zf2y||U%hC% zTc$@4YWfX`h+nL6XTY4K5}KZT_*hYO$UeWHTYj5@9*a&-nO01Qwda3OOcVZqC_h|Tqrkp;Tg^>m->u7%@n1kjlp;{0ig8jI50Tz!0|QL>rG}?uisJ)1sa;t z&n`4>abtTo&1m8+*2420*Rm&*(aoDTMFZ4vfYH})+@y9ksk(mcb;F|SjJ2A3W2;9k zd43J}Czq=iFI}`v>ph1~0jd1|tiAcGZE1QQw&r=<(;4o$x2n3U2f8J7x7?Df$x0$2 zMJI1Z zv(KK^+H0QI%JY8Txw}qRw}cew7F=%Kd(J*KN=ui!$rx3_ew z{rowWVz(m|eABjcn7k#_?tZ-Hgb#-|2 z&HU2N08+#2+4a>hSc0w%Ajg8Fyj28y?BRTr&XTw+@>A6?fenPjm�#LS%;f-~QMC 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

100

+

PullDrawer-v1

+
PullDrawer-v1 PullDrawer-v1
+

+

+

+

200

+ +

PushCube-v1

PushCube-v1 PushCube-v1

diff --git a/figures/environment_demos/PullDrawerv1_rt.mp4 b/figures/environment_demos/PullDrawerv1_rt.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..72d102218093cd2d1cbd7cde77ab1f57a2b7cd0a GIT binary patch literal 244008 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

+CY)4_{;|0`jPkouhzo6<=63KG%Az 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 MEE#ZQca1&#r-f;_82ia-chQ>y&MNAc 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 <3dtfRXs${4ai{3G8P|Y6 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 Date: Sun, 5 Jan 2025 22:47:35 -0800 Subject: [PATCH 58/59] final cleanup, working dense reward --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 4734baff6..56b0c261e 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -47,7 +47,7 @@ def __init__( # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 - self.k = 0.03 + self.k = 0.005 super().__init__( *args, @@ -319,9 +319,10 @@ def compute_dense_reward(self, obs: Any, action: torch.Tensor, info: Dict): tcp_pose = self.agent.tcp.pose.raw_pose tcp_pos = tcp_pose[..., :3] drawer_link_pose = self.drawer.links_map['drawer'].pose.raw_pose + drawer_pose = self.drawer.pose.raw_pose handle_offset = torch.tensor([-self.inner_width/2 - self.handle_offset, 0, 0], device=drawer_link_pose.device) - handle_pose = drawer_link_pose[:, :3] + handle_offset + handle_pose = drawer_pose[:, :3] + handle_offset # 1. Orientation Reward - Modified for continuous feedback tcp_pose_q = self.agent.tcp.pose.q # Current quaternion From e716253490127902122df2970401569947661364 Mon Sep 17 00:00:00 2001 From: Viswesh N <72874174+Viswesh-N@users.noreply.github.com> Date: Sun, 5 Jan 2025 23:55:59 -0800 Subject: [PATCH 59/59] increase randomness --- mani_skill/envs/tasks/tabletop/pull_drawer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/tabletop/pull_drawer.py b/mani_skill/envs/tasks/tabletop/pull_drawer.py index 56b0c261e..29888cdd2 100644 --- a/mani_skill/envs/tasks/tabletop/pull_drawer.py +++ b/mani_skill/envs/tasks/tabletop/pull_drawer.py @@ -47,7 +47,7 @@ def __init__( # Movement parameters self.max_pull_distance = self.outer_width * 0.8 # Can pull out 80% of width self.target_pos = -self.max_pull_distance * 0.8 - self.k = 0.005 + self.k = 0.03 super().__init__( *args,