@@ -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
8596def 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