Skip to content

Commit b31699e

Browse files
committed
fix(added lab scene for pickup):converting geom pose to robot_base frame and detecting an ik failure
1 parent 8fc2991 commit b31699e

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

python/examples/grasp_demo.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ def get_object_pose(self, geom_name) -> Pose:
2424
data = self.env.get_wrapper_attr("sim").data
2525

2626
geom_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_GEOM, geom_name)
27-
return Pose(translation=data.geom_xpos[geom_id], rotation=data.geom_xmat[geom_id].reshape(3, 3))
27+
obj_pose_world_coordinates = Pose(translation=data.geom_xpos[geom_id],
28+
rotation=data.geom_xmat[geom_id].reshape(3, 3))
29+
obj_pose_robot_coordinates = self.env.unwrapped.robot.to_pose_in_robot_coordinates(obj_pose_world_coordinates)
30+
return obj_pose_robot_coordinates
2831

2932
def generate_waypoints(self, start_pose: Pose, end_pose: Pose, num_waypoints: int) -> list[Pose]:
3033
waypoints = []
@@ -36,7 +39,7 @@ def generate_waypoints(self, start_pose: Pose, end_pose: Pose, num_waypoints: in
3639
def step(self, action: np.ndarray) -> dict:
3740
re = self.env.step(action)
3841
s: FR3State = self.env.unwrapped.robot.get_state()
39-
return re[0]
42+
return re
4043

4144
def plan_linear_motion(self, geom_name: str, delta_up: float, num_waypoints: int = 20) -> list[Pose]:
4245
end_eff_pose = self.env.unwrapped.robot.get_cartesian_position()
@@ -55,6 +58,14 @@ def execute_motion(self, waypoints: list[Pose], gripper: float = GripperWrapper.
5558
# calculate delta action
5659
delta_action = waypoints[i] * waypoints[i - 1].inverse()
5760
obs = self.step(self._action(delta_action, gripper))
61+
ik_success = obs[-1]['ik_success']
62+
if not obs[-1]['ik_success']:
63+
trans_source, rot_source = waypoints[i - 1].translation(), waypoints[i - 1].rotation_rpy().as_vector()
64+
trans_dest, rot_des = waypoints[i].translation(), waypoints[i].rotation_rpy().as_vector()
65+
print(f"ik success: {ik_success} when attempting to move from trans: {trans_source}, rot: {rot_source}\n"
66+
f" to trans: {trans_dest} rot: {rot_des}!")
67+
print(f"aborting motion!")
68+
exit(-1)
5869
return obs
5970

6071
def approach(self, geom_name: str):
@@ -84,7 +95,7 @@ def pickup(self, geom_name: str):
8495

8596
def main():
8697
# available envs: "rcs/SimplePickUpSim-v0", "rcs/FR3LabPickUpSimDigitHand-v0", "SimplePickUpSimDigitHand-v0"
87-
env = gym.make("rcs/FR3LabPickUpSimDigitHand-v0", render_mode="human", delta_actions=True)
98+
env = gym.make("rcs/SimplePickUpSim-v0", render_mode="human", delta_actions=True)
8899
env.reset()
89100
controller = PickUpDemo(env)
90101
controller.pickup("yellow_box_geom")

0 commit comments

Comments
 (0)