11from __future__ import absolute_import , print_function
2+ from typing import Union , Optional
23
34# ROS
45from pykdl_ros import FrameStamped
89# TU/e Robotics
910from ed .entity import Entity
1011from robot_skills .arm .arms import PublicArm , GripperTypes
12+ from robot_skills .robot import Robot
1113from .place_designator import EmptySpotDesignator
1214from ..navigation .navigate_to_place import NavigateToPlace
1315from ..utility import LockDesignator , ResolveArm , check_arm_requirements
1416from ..util .designators import check_type
1517from ..util .designators .utility import LockingDesignator
1618from robot_smach_states .world_model .world_model import Inspect
19+ from ..util .designators .core import Designator
1720
1821
1922class Put (smach .State ):
2023 REQUIRED_ARM_PROPERTIES = {"required_gripper_types" : [GripperTypes .GRASPING ], }
2124
22- def __init__ (self , robot , item_to_place , placement_pose , arm ) :
25+ def __init__ (self , robot : Robot , item_to_place : Entity , placement_pose : FrameStamped , arm : PublicArm ) -> None :
2326 """
2427 Drive the robot back a little and move the designated arm to place the designated item at the designated pose
2528
@@ -75,7 +78,7 @@ def execute(self, userdata=None):
7578
7679 # Pre place
7780 if not arm .send_goal (FrameStamped .from_xyz_rpy (place_pose_bl .frame .p .x (), place_pose_bl .frame .p .y (),
78- height + 0.15 , 0 , 0 , 0 , rospy .Time (0 ),
81+ height + 0.15 , 0 , 0 , 0 , rospy .Time (0 ),
7982 frame_id = self ._robot .base_link_frame ),
8083 timeout = 10 ,
8184 pre_grasp = True ):
@@ -84,7 +87,7 @@ def execute(self, userdata=None):
8487
8588 rospy .loginfo ("Retrying preplace" )
8689 if not arm .send_goal (FrameStamped .from_xyz_rpy (place_pose_bl .frame .p .x (), place_pose_bl .frame .p .y (),
87- height + 0.15 , 0 , 0 , 0 , rospy .Time (0 ),
90+ height + 0.15 , 0 , 0 , 0 , rospy .Time (0 ),
8891 frame_id = self ._robot .base_link_frame ),
8992 timeout = 10 , pre_grasp = True ):
9093 rospy .logwarn ("Cannot pre-place the object" )
@@ -94,8 +97,8 @@ def execute(self, userdata=None):
9497 # Place
9598 place_pose_bl = self ._robot .tf_buffer .transform (placement_fs , self ._robot .base_link_frame )
9699 actual_place_pose_bl = FrameStamped .from_xyz_rpy (place_pose_bl .frame .p .x (), place_pose_bl .frame .p .y (),
97- height + 0.1 , 0 , 0 , 0 , rospy .Time (0 ),
98- frame_id = self ._robot .base_link_frame )
100+ height + 0.1 , 0 , 0 , 0 , rospy .Time (0 ),
101+ frame_id = self ._robot .base_link_frame )
99102 if not arm .send_goal (actual_place_pose_bl , timeout = 10 , pre_grasp = False ):
100103 rospy .logwarn ("Cannot place the object, dropping it..." )
101104
@@ -104,9 +107,9 @@ def execute(self, userdata=None):
104107 rospy .logerr ("Arm not holding an entity to place. This should never happen" )
105108 else :
106109 place_pose_map = self ._robot .tf_buffer .transform (actual_place_pose_bl , "map" )
107- new_entity_pose = FrameStamped (place_pose_map .frame * place_entity .pose .frame ,
110+ new_entity_pose = FrameStamped (place_pose_map .frame * place_entity .pose .frame ,
108111 place_pose_bl .header .stamp ,
109- "map" )
112+ "map" )
110113 self ._robot .ed .update_entity (place_entity .uuid , frame_stamped = new_entity_pose )
111114 arm .gripper .occupied_by = None
112115
@@ -144,7 +147,8 @@ def execute(self, userdata=None):
144147
145148class Place (smach .StateMachine ):
146149
147- def __init__ (self , robot , item_to_place , place_pose , arm , place_volume = None , update_supporting_entity = False ):
150+ def __init__ (self , robot : Robot , item_to_place : Entity , place_pose : Union [str , FrameStamped , Entity ],
151+ arm : PublicArm , place_volume : Optional [str ] = None ) -> None :
148152 """
149153 Drive the robot to be close to the designated place_pose and move the designated arm to place the designated
150154 item there
@@ -159,8 +163,6 @@ def __init__(self, robot, item_to_place, place_pose, arm, place_volume=None, upd
159163 ArmHoldingEntityDesignator
160164 :param place_volume: (optional) string identifying the volume where to place the object, e.g., 'on_top_of',
161165 'shelf3'
162- :param update_supporting_entity: (optional) bool to indicate whether the supporting entity should be updated.
163- This can only be used if the supporting entity is supplied, case 2 or 3 mentioned under item_to_place
164166 """
165167 smach .StateMachine .__init__ (self , outcomes = ['done' , 'failed' ])
166168
@@ -239,5 +241,6 @@ def __init__(self, robot, item_to_place, place_pose, arm, place_volume=None, upd
239241 arm = ArmDesignator (robot , arm_properties = {"required_trajectories" : ["prepare_place" ],
240242 "required_gripper_types" : [arms .GripperTypes .GRASPING ]})
241243
242- sm = Place (robot = robot , item_to_place = place_entity , place_pose = 'dinner_table' , arm = arm .lockable (), place_volume = 'on_top_of' )
244+ sm = Place (robot = robot , item_to_place = place_entity , place_pose = 'dinner_table' , arm = arm .lockable (),
245+ place_volume = 'on_top_of' )
243246 print (sm .execute ())
0 commit comments