Skip to content

Commit 566a674

Browse files
authored
Merge pull request #190 from utn-mi/juelg/add-is-grasped
feat(gripper): adds is_grapsed and width to info dict
2 parents af2e506 + 29dad2e commit 566a674

2 files changed

Lines changed: 8 additions & 99 deletions

File tree

python/rcs/envs/creators.py

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,13 @@
2323
)
2424
from rcs.envs.hw import FR3HW
2525
from rcs.envs.sim import (
26-
CamRobot,
2726
CollisionGuard,
2827
GripperWrapperSim,
2928
PickCubeSuccessWrapper,
3029
RandomCubePos,
3130
RobotSimWrapper,
3231
SimWrapper,
3332
)
34-
from rcs.envs.space_utils import VecType
3533
from rcs.envs.utils import (
3634
default_fr3_hw_gripper_cfg,
3735
default_fr3_hw_robot_cfg,
@@ -352,68 +350,3 @@ def __call__( # type: ignore
352350
}
353351

354352
return SimTaskEnvCreator()("fr3_simple_pick_up", render_mode, control_mode, delta_actions, cameras)
355-
356-
357-
class FR3SimplePickUpSimDigitHandEnvCreator(EnvCreator):
358-
def __call__( # type: ignore
359-
self,
360-
render_mode: str = "human",
361-
control_mode: ControlMode = ControlMode.CARTESIAN_TRPY,
362-
resolution: tuple[int, int] | None = None,
363-
frame_rate: int = 0,
364-
delta_actions: bool = True,
365-
) -> gym.Env:
366-
if resolution is None:
367-
resolution = (256, 256)
368-
369-
cameras = {
370-
"wrist": SimCameraConfig(
371-
identifier="wrist_0",
372-
type=CameraType.fixed,
373-
resolution_height=resolution[1],
374-
resolution_width=resolution[0],
375-
frame_rate=frame_rate,
376-
)
377-
}
378-
379-
return SimTaskEnvCreator()("fr3_simple_pick_up_digit_hand", render_mode, control_mode, delta_actions, cameras)
380-
381-
382-
class FR3LabPickUpSimDigitHandEnvCreator(EnvCreator):
383-
def __call__( # type: ignore
384-
self,
385-
cam_robot_joints: VecType,
386-
render_mode: str = "human",
387-
control_mode: ControlMode = ControlMode.CARTESIAN_TRPY,
388-
resolution: tuple[int, int] | None = None,
389-
frame_rate: int = 0,
390-
delta_actions: bool = True,
391-
) -> gym.Env:
392-
if resolution is None:
393-
resolution = (256, 256)
394-
395-
cameras = {
396-
"wrist": SimCameraConfig(
397-
identifier="wrist_0",
398-
type=CameraType.fixed,
399-
resolution_height=resolution[1],
400-
resolution_width=resolution[0],
401-
frame_rate=frame_rate,
402-
),
403-
"side": SimCameraConfig(
404-
identifier="wrist_1",
405-
type=CameraType.fixed,
406-
resolution_height=resolution[1],
407-
resolution_width=resolution[0],
408-
frame_rate=frame_rate,
409-
),
410-
}
411-
412-
env_rel = SimTaskEnvCreator()(
413-
"lab_simple_pick_up_digit_hand",
414-
render_mode,
415-
control_mode,
416-
delta_actions,
417-
cameras,
418-
)
419-
return CamRobot(env_rel, cam_robot_joints, "lab_simple_pick_up_digit_hand")

python/rcs/envs/sim.py

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import rcs
77
from rcs import sim
88
from rcs.envs.base import ControlMode, GripperWrapper, MultiRobotWrapper, RobotEnv
9-
from rcs.envs.space_utils import ActObsInfoWrapper, VecType
9+
from rcs.envs.space_utils import ActObsInfoWrapper
1010
from rcs.envs.utils import default_fr3_sim_robot_cfg
1111

1212
logger = logging.getLogger(__name__)
@@ -108,6 +108,8 @@ def observation(self, observation: dict[str, Any], info: dict[str, Any]) -> tupl
108108
state = self._gripper.get_state()
109109
if "collision" not in info or not info["collision"]:
110110
info["collision"] = state.collision
111+
info["gripper_width"] = self._gripper.get_normalized_width()
112+
info["is_grasped"] = self._gripper.get_normalized_width() > 0.01 and self._gripper.get_normalized_width() < 0.99
111113
return observation, info
112114

113115

@@ -258,9 +260,9 @@ def reset(
258260
pos_y = iso_cube[1] + np.random.random() * 0.2 - 0.1
259261

260262
if self.include_rotation:
261-
self.sim.data.joint("box-joint").qpos = [pos_x, pos_y, pos_z, 2 * np.random.random() - 1, 0, 0, 1]
263+
self.sim.data.joint("box_joint").qpos = [pos_x, pos_y, pos_z, 2 * np.random.random() - 1, 0, 0, 1]
262264
else:
263-
self.sim.data.joint("box-joint").qpos = [pos_x, pos_y, pos_z, 0, 0, 0, 1]
265+
self.sim.data.joint("box_joint").qpos = [pos_x, pos_y, pos_z, 0, 0, 0, 1]
264266

265267
return obs, info
266268

@@ -280,17 +282,17 @@ def step(self, action: dict[str, Any]):
280282
obs, reward, _, truncated, info = super().step(action)
281283

282284
success = (
283-
self.sim.data.joint("box-joint").qpos[2] > 0.15 + 0.852
285+
self.sim.data.joint("box_joint").qpos[2] > 0.15 + 0.852
284286
and obs["gripper"] == GripperWrapper.BINARY_GRIPPER_CLOSED
285287
)
286288
info["success"] = success
287289
if success:
288290
reward = 5
289291
else:
290292
tcp_to_obj_dist = np.linalg.norm(
291-
self.sim.data.joint("box-joint").qpos[:3] - self.unwrapped.robot.get_cartesian_position().translation()
293+
self.sim.data.joint("box_joint").qpos[:3] - self.unwrapped.robot.get_cartesian_position().translation()
292294
)
293-
obj_to_goal_dist = np.linalg.norm(self.sim.data.joint("box-joint").qpos[:3] - self.EE_HOME)
295+
obj_to_goal_dist = np.linalg.norm(self.sim.data.joint("box_joint").qpos[:3] - self.EE_HOME)
294296

295297
# old reward
296298
# reward = -obj_to_goal_dist - tcp_to_obj_dist
@@ -311,29 +313,3 @@ def step(self, action: dict[str, Any]):
311313
# normalize
312314
reward /= 5 # type: ignore
313315
return obs, reward, success, truncated, info
314-
315-
316-
class CamRobot(gym.Wrapper):
317-
"""Use this wrapper in lab setups where the second arm is used as a camera holder."""
318-
319-
def __init__(self, env, cam_robot_joints: VecType, scene: str = "lab_simple_pick_up_digit_hand"):
320-
super().__init__(env)
321-
self.unwrapped: RobotEnv
322-
assert isinstance(self.unwrapped.robot, sim.SimRobot), "Robot must be a sim.SimRobot instance."
323-
self.sim = env.get_wrapper_attr("sim")
324-
cfg = default_fr3_sim_robot_cfg(scene, "1")
325-
self.cam_robot = rcs.sim.SimRobot(
326-
self.sim, env.unwrapped.robot.get_ik(), cfg, register_convergence_callback=False
327-
)
328-
self.cam_robot.set_parameters(default_fr3_sim_robot_cfg(scene))
329-
self.cam_robot_joints = cam_robot_joints
330-
331-
def step(self, action: dict):
332-
self.cam_robot.set_joints_hard(self.cam_robot_joints)
333-
obs, reward, done, truncated, info = super().step(action)
334-
return obs, reward, done, truncated, info
335-
336-
def reset(self, *, seed=None, options=None):
337-
re = super().reset(seed=seed, options=options)
338-
self.cam_robot.reset()
339-
return re

0 commit comments

Comments
 (0)