5 import robot_smach_states.util.designators
as ds
6 from ed.entity
import Entity
7 from ed.shape
import RightPrism
8 from pykdl_ros
import FrameStamped
9 from robocup_knowledge
import load_knowledge
10 from robot_skills.arm
import arms
11 from robot_skills.simulation.sim_mode
import is_sim_mode
12 from robot_smach_states.human_interaction
import AskYesNo, AskYesNoPicoVoice, Say
13 from robot_smach_states.manipulation
import HandoverToHuman
14 from robot_smach_states.navigation
import FollowOperator, NavigateToWaypoint, NavigateToPose
15 from robot_smach_states.utility
import Initialize, SetInitialPose
16 from robot_smach_states.utility
import WaitTime
17 from smach
import StateMachine, cb_interface, CBState
21 challenge_knowledge = load_knowledge(
"challenge_carry_my_luggage")
23 STARTING_POINT = challenge_knowledge.starting_point
26 @cb_interface(outcomes=[
"done"])
27 def place(userdata, designator, robot):
30 frame=kdl.Frame(kdl.Rotation.RPY(0.0, 0.0, 0.0), kdl.Vector(1.0, 3.0, 0.3)),
31 stamp=rospy.Time.now(),
34 robot.ed.update_entity(uuid=entity_id, frame_stamped=pose)
36 [kdl.Vector(0, 0, 0), kdl.Vector(0, 0.05, 0), kdl.Vector(0.05, 0.05, 0), kdl.Vector(0.05, 0, 0)], -0.1, 0.1
38 item = Entity(entity_id,
"bag", pose.header.frame_id, pose.frame, shape,
None,
None, rospy.Time.now())
39 designator.write(item)
43 @cb_interface(outcomes=[
"done"])
45 rospy.set_param(f
"/{robot.robot_name}/global_planner/global_costmap/track_unknown_space",
True)
46 os.system(f
"rosnode kill /{robot.robot_name}/global_planner")
57 StateMachine.__init__(self, outcomes=[
"Done",
"Aborted"])
60 start_pose = self.
robot.base.get_location()
61 start_x = start_pose.frame.p.x()
62 start_y = start_pose.frame.p.y()
63 start_rz = start_pose.frame.M.GetRPY()[2]
69 "required_goals": [
"reset",
"handover_to_human",
"carrying_pose"],
70 "required_gripper_types": [arms.GripperTypes.GRASPING],
75 self.
_arm = robot.get_arm()._arm
80 Initialize(self.
robot),
81 transitions={
"initialized":
"MOVE_CUSTOM_CARRY",
"abort":
"MOVE_CUSTOM_CARRY"},
95 @cb_interface(outcomes=[
"done"])
96 def move_to_custom_carry_pose(_):
97 p = [0.15, 0, -1.1, -1.37, 0]
99 self.
_arm._send_joint_trajectory([p], timeout=0)
100 self.
_arm.wait_for_motion_done()
101 self.
_arm.gripper.send_goal(
'open')
102 self.
_arm.wait_for_motion_done()
105 self.add(
"MOVE_CUSTOM_CARRY", CBState(move_to_custom_carry_pose), transitions={
"done":
"ASK_BAG_HANDOVER"})
111 [
"I am unable to pick up the bag, please put it in my gripper"],
113 look_at_standing_person=
True,
116 "spoken":
"WAIT_FOR_OPERATOR",
124 "waited":
"CLOSE_GRIPPER",
125 "preempted":
"CLOSE_GRIPPER"
129 @cb_interface(outcomes=[
"done"])
130 def gripper_close(_):
131 self.
_arm.gripper.send_goal(
'close')
132 self.
_arm.wait_for_motion_done()
135 self.add(
"CLOSE_GRIPPER", CBState(gripper_close),
136 transitions={
"done":
"SAY_BAG_HANDOVER_SUCCESS"})
162 "SAY_BAG_HANDOVER_SUCCESS",
165 [
"Lets go to your car! I will follow you!"],
167 look_at_standing_person=
True,
170 "spoken":
"FOLLOW_OPERATOR",
224 FollowOperator(self.
robot, operator_timeout=30, ask_follow=
True, learn_face=
False, replan=
True),
226 "stopped":
"ASK_FOR_TASK",
227 "lost_operator":
"ASK_FOR_TASK",
228 "no_operator":
"ASK_FOR_TASK",
236 [
"Are we at the car already?"],
238 look_at_standing_person=
True,
241 "spoken":
"WAIT_FOR_TASK",
248 AskYesNo(self.
robot),
249 transitions={
"yes":
"HANDOVER_TO_HUMAN",
"no":
"FOLLOW_OPERATOR",
"no_result":
"FOLLOW_OPERATOR"},
254 AskYesNoPicoVoice(self.
robot),
255 transitions={
"yes":
"HANDOVER_TO_HUMAN",
"no":
"FOLLOW_OPERATOR",
"no_result":
"FOLLOW_OPERATOR"},
262 "succeeded":
"KILL_GLOBAL_PLANNER",
263 "failed":
"KILL_GLOBAL_PLANNER",
278 "KILL_GLOBAL_PLANNER",
279 CBState(kill_global_planner, cb_args=[self.
robot]),
280 transitions={
"done":
"NAVIGATE_TO_ARENA"},
285 NavigateToPose(robot=self.
robot, x=start_x, y=start_y, rz=start_rz, radius=0.3),
288 "unreachable":
"Done",
289 "goal_not_defined":
"Done",
294 if __name__ ==
"__main__":
295 from robot_skills
import get_robot
299 if len(sys.argv) < 2:
300 print(
"Please provide robot name as argument.")
303 rospy.init_node(
"carry_my_luggage_exec")
305 robot_name = sys.argv[1]
306 robot = get_robot(robot_name)