示例#1
0
 def __init__(self, check_designator):
     """
     :param check_designator: designator resolving to True or False
     """
     super(CheckBool, self).__init__(outcomes=["true", "false"])
     ds.check_type(check_designator, bool)
     self._check_designator = check_designator
示例#2
0
    def __init__(self,
                 robot,
                 sentence=None,
                 language=None,
                 personality=None,
                 voice=None,
                 mood=None,
                 block=True,
                 look_at_standing_person=False,
                 **place_holders):
        """
        Constructor

        State exits with 'spoken'.

        :param robot: robot object
        :type robot: Robot
        :param sentence: Sentence to be spoken, can contain place holders to  be filled in at runtime
        :type sentence: str, [str], designator to str or [str]
        :param language: Language of speech module
        :type language: str
        :param personality: Personality of speech module
        :type personality: str
        :param voice: Voice of speech module
        :type voice: str
        :param mood: Mood of speech module
        :type mood: str
        :param block: Wait for talking to be completed before returning, if true
        :type block: bool
        :param look_at_standing_person: Look at standing person if true, otherwise keep current head pose
        :type look_at_standing_person: bool
        :param place_holders: place holders to be filled in at runtime
        :type place_holders: designator to str
        """
        smach.State.__init__(self, outcomes=["spoken"])

        ds.check_type(sentence, [str], str)
        assert (isinstance(language, str) or isinstance(language, type(None)))
        assert (isinstance(personality, str)
                or isinstance(personality, type(None)))
        assert (isinstance(voice, str) or isinstance(voice, type(None)))
        assert (isinstance(mood, str) or isinstance(mood, type(None)))
        assert (isinstance(block, bool))

        assert (all(
            isinstance(v, ds.Designator) for v in place_holders.values()))

        self.ph_designators = place_holders

        if isinstance(sentence, str) or isinstance(sentence, list):
            self._check_place_holders(sentence)

        self.robot = robot
        self.sentence = sentence
        self.language = language
        self.personality = personality
        self.voice = voice
        self.mood = mood
        self.block = block
        self.look_at_standing_person = look_at_standing_person
示例#3
0
    def __init__(self, robot, item, arm):
        """
        Let the given robot move to an entity and grab that entity using some arm
        :param robot: Robot to use
        :param item: Designator that resolves to the item to grab. E.g. EntityByIdDesignator
        :param arm: Designator that resolves to the arm to use for grabbing. Eg. UnoccupiedArmDesignator
        :return:
        """
        smach.StateMachine.__init__(self, outcomes=['done', 'failed'])

        # Check types or designator resolve types
        check_type(item, Entity)
        check_type(arm, PublicArm)

        with self:
            smach.StateMachine.add('NAVIGATE_TO_GRAB', NavigateToGrasp(robot, item, arm),
                                   transitions={'unreachable': 'RESET_FAILURE',
                                                'goal_not_defined': 'RESET_FAILURE',
                                                'arrived': 'PREPARE_GRASP'})

            smach.StateMachine.add('PREPARE_GRASP', PrepareEdGrasp(robot, arm, item),
                                   transitions={'succeeded': 'GRAB',
                                                'failed': 'RESET_FAILURE'})

            smach.StateMachine.add('GRAB', PickUp(robot, arm, item),
                                   transitions={'succeeded': 'done',
                                                'failed': 'RESET_FAILURE'})

            smach.StateMachine.add("RESET_FAILURE", ResetOnFailure(robot, arm),
                                   transitions={'done': 'failed'})
示例#4
0
    def __init__(self, robot, arm_designator, grabbed_entity_label="", grabbed_entity_designator=None, timeout=10, arm_configuration="handover_to_human"):
        """
        Hold up hand to accept an object and close hand once something is inserted
        :param robot: Robot with which to execute this behavior
        :param arm_designator: ArmDesignator resolving to arm accept item into
        :param grabbed_entity_label: What ID to give a dummy item in case no grabbed_entity_designator is supplied
        :param grabbed_entity_designator: EntityDesignator resolving to the accepted item. Can be a dummy
        :param timeout: How long to hold hand over before closing without anything
        :param arm_configuration: Which pose to put arm in when holding hand up for the item.
        """
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed','timeout'])

        check_type(arm_designator, PublicArm)
        if not grabbed_entity_designator and grabbed_entity_label == "":
            rospy.logerr("No grabbed entity label or grabbed entity designator given")

        with self:
            smach.StateMachine.add("POSE", ArmToJointConfig(robot, arm_designator, arm_configuration),
                            transitions={'succeeded':'OPEN_BEFORE_INSERT','failed':'OPEN_BEFORE_INSERT'})

            smach.StateMachine.add( 'OPEN_BEFORE_INSERT', SetGripper(robot, arm_designator, gripperstate=GripperState.OPEN),
                                transitions={'succeeded'    :   'SAY1',
                                             'failed'       :   'SAY1'})

            smach.StateMachine.add("SAY1", Say(robot,'Please hand over the object by pushing it gently in my gripper'),
                            transitions={'spoken':'CLOSE_AFTER_INSERT'})

            smach.StateMachine.add( 'CLOSE_AFTER_INSERT', CloseGripperOnHandoverToRobot(robot,
                                                                                        arm_designator,
                                                                                        grabbed_entity_label=grabbed_entity_label,
                                                                                        grabbed_entity_designator=grabbed_entity_designator,
                                                                                        timeout=timeout),
                                transitions={'succeeded'    :   'succeeded',
                                             'timeout'      :   'timeout',
                                             'failed'       :   'failed'})
    def __init__(self, robot, arm_designator, grabbed_entity_label="", grabbed_entity_designator=None, timeout=10):
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed'])

        check_type(arm_designator, Arm)
        if not grabbed_entity_designator and grabbed_entity_label == "":
            rospy.logerr("No grabbed entity label or grabbed entity designator given")

        with self:
            smach.StateMachine.add("POSE", ArmToJointConfig(robot, arm_designator, "handover_to_human"),
                            transitions={'succeeded':'OPEN_BEFORE_INSERT','failed':'OPEN_BEFORE_INSERT'})

            smach.StateMachine.add( 'OPEN_BEFORE_INSERT', SetGripper(robot, arm_designator, gripperstate='open'),
                                transitions={'succeeded'    :   'SAY1',
                                             'failed'       :   'SAY1'})

            smach.StateMachine.add("SAY1", Say(robot,'Please hand over the object by pushing it gently in my gripper'),
                            transitions={'spoken':'CLOSE_AFTER_INSERT'})

            smach.StateMachine.add( 'CLOSE_AFTER_INSERT', CloseGripperOnHandoverToRobot(robot, 
                                                                                        arm_designator, 
                                                                                        grabbed_entity_label=grabbed_entity_label, 
                                                                                        grabbed_entity_designator=grabbed_entity_designator,
                                                                                        timeout=timeout),
                                transitions={'succeeded'    :   'succeeded',
                                             'failed'       :   'failed'})
示例#6
0
    def __init__(self, robot, arm_designator, grabbed_entity_label="", grabbed_entity_designator=None, timeout=10, arm_configuration="handover_to_human"):
        """
        Hold up hand to accept an object and close hand once something is inserted
        :param robot: Robot with which to execute this behavior
        :param arm_designator: ArmDesignator resolving to arm accept item into
        :param grabbed_entity_label: What ID to give a dummy item in case no grabbed_entity_designator is supplied
        :param grabbed_entity_designator: EntityDesignator resolving to the accepted item. Can be a dummy
        :param timeout: How long to hold hand over before closing without anything
        :param arm_configuration: Which pose to put arm in when holding hand up for the item.
        """
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed','timeout'])

        check_type(arm_designator, Arm)
        if not grabbed_entity_designator and grabbed_entity_label == "":
            rospy.logerr("No grabbed entity label or grabbed entity designator given")

        with self:
            smach.StateMachine.add("POSE", ArmToJointConfig(robot, arm_designator, arm_configuration),
                            transitions={'succeeded':'OPEN_BEFORE_INSERT','failed':'OPEN_BEFORE_INSERT'})

            smach.StateMachine.add( 'OPEN_BEFORE_INSERT', SetGripper(robot, arm_designator, gripperstate=GripperState.OPEN),
                                transitions={'succeeded'    :   'SAY1',
                                             'failed'       :   'SAY1'})

            smach.StateMachine.add("SAY1", Say(robot,'Please hand over the object by pushing it gently in my gripper'),
                            transitions={'spoken':'CLOSE_AFTER_INSERT'})

            smach.StateMachine.add( 'CLOSE_AFTER_INSERT', CloseGripperOnHandoverToRobot(robot,
                                                                                        arm_designator,
                                                                                        grabbed_entity_label=grabbed_entity_label,
                                                                                        grabbed_entity_designator=grabbed_entity_designator,
                                                                                        timeout=timeout),
                                transitions={'succeeded'    :   'succeeded',
                                             'timeout'      :   'timeout',
                                             'failed'       :   'failed'})
    def __init__(self, robot, arm_designator, point_entity_designator):
        smach.State.__init__(self, outcomes=['point_succeeded','point_failed','target_lost'])

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.robot = robot
        self.point_entity_designator = point_entity_designator
示例#8
0
    def __init__(self, robot, item, arm):
        """
        Let the given robot move to an entity and grab that entity using some arm
        :param robot: Robot to use
        :param item: Designator that resolves to the item to grab. E.g. EntityByIdDesignator
        :param arm: Designator that resolves to the arm to use for grabbing. Eg. UnoccupiedArmDesignator
        :return:
        """
        smach.StateMachine.__init__(self, outcomes=['done', 'failed'])

        # Check types or designator resolve types
        check_type(item, Entity)
        check_type(arm, Arm)

        with self:
            smach.StateMachine.add('PREPARE_GRASP', PrepareEdGrasp(robot, arm, item),
                                   transitions={'succeeded': 'NAVIGATE_TO_GRAB',
                                                'failed': 'RESET_FAILURE'})

            smach.StateMachine.add('NAVIGATE_TO_GRAB', NavigateToGrasp(robot, item, arm),
                                   transitions={'unreachable': 'RESET_FAILURE',
                                                'goal_not_defined': 'RESET_FAILURE',
                                                'arrived': 'GRAB'})

            smach.StateMachine.add('GRAB', PickUp(robot, arm, item),
                                   transitions={'succeeded': 'done',
                                                'failed': 'RESET_FAILURE'})

            smach.StateMachine.add("RESET_FAILURE", ResetOnFailure(robot),
                                   transitions={'done': 'failed'})
    def __init__(self,
                 robot,
                 sentence=None,
                 language=None,
                 personality=None,
                 voice=None,
                 mood=None,
                 block=True,
                 look_at_standing_person=False):
        smach.State.__init__(self, outcomes=["spoken"])
        ds.check_type(sentence, str, list)
        #ds.check_type(language, str)
        #ds.check_type(personality, str)
        #ds.check_type(voice, str)
        #ds.check_type(mood, str)
        ds.check_type(block, bool)

        self.robot = robot
        self.sentence = sentence
        self.language = language
        self.personality = personality
        self.voice = voice
        self.mood = mood
        self.block = block
        self.look_at_standing_person = look_at_standing_person
示例#10
0
    def __init__(self, robot, arm_designator, drop_bag_pose):
        """
        :param robot: the robot with which to execute this state machine
        :param arm_designator: ArmDesignator resolving to Arm holding the bag to drop

        """
        smach.StateMachine.__init__(self, outcomes=['done'])

        check_type(arm_designator, Arm)

        with self:
            smach.StateMachine.add('DROP_POSE',
                                   states.ArmToJointConfig(
                                       robot, arm_designator, drop_bag_pose),
                                   transitions={
                                       'succeeded': 'OPEN_AFTER_DROP',
                                       'failed': 'OPEN_AFTER_DROP'
                                   })

            smach.StateMachine.add('OPEN_AFTER_DROP',
                                   states.SetGripper(
                                       robot,
                                       arm_designator,
                                       gripperstate=GripperState.OPEN),
                                   transitions={
                                       'succeeded': 'RESET_ARM',
                                       'failed': 'RESET_ARM'
                                   })

            smach.StateMachine.add('RESET_ARM',
                                   states.ResetArms(robot),
                                   transitions={'done': 'done'})
示例#11
0
 def __init__(self, check_designator):
     """
     :param check_designator: boolean designator to be toggled
     """
     super(ToggleBool, self).__init__(outcomes=["done"])
     ds.is_writeable(check_designator)
     ds.check_type(check_designator, bool)
     self._check_designator = check_designator
示例#12
0
    def __init__(self, unavailable_drink_list_designator, drink_to_add_designator):
        super(UpdateUnavailableDrinkList, self).__init__(outcomes=["done", "failed"])
        ds.is_writeable(unavailable_drink_list_designator)
        ds.check_type(unavailable_drink_list_designator, [str])
        ds.check_type(drink_to_add_designator, str)

        self.unavailable_drink_list_designator = unavailable_drink_list_designator
        self.drink_to_add_designator = drink_to_add_designator
    def __init__(self, robot, arm_designator, grab_entity_designator):
        # Similar to PrepareGrasp but has a more elaborate joint trajectory to avoid hitting the table when standing close to it
        smach.State.__init__(self, outcomes=['succeeded','failed'])

        self.robot = robot
        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.grab_entity_designator = grab_entity_designator
    def __init__(self, robot, arm_designator, point_entity_designator):
        smach.State.__init__(
            self, outcomes=['point_succeeded', 'point_failed', 'target_lost'])

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.robot = robot
        self.point_entity_designator = point_entity_designator
    def __init__(self, robot, arm_designator, grab_entity_designator):
        # Similar to PrepareGrasp but has a more elaborate joint trajectory to avoid hitting the table when standing close to it
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        self.robot = robot
        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.grab_entity_designator = grab_entity_designator
示例#16
0
    def __init__(self, robot, item, arm=None):
        """
    Let the given robot move to an entity and grab that entity using some arm.
    Supervisory implementation with arm reservation and choosing.
    :param robot: Robot to use
    :param item: Designator that resolves to the item to grab.
                 E.g. EntityByIdDesignator
    :param arm: Designator that resolves to the arm to use for grabbing.
                Eg. UnoccupiedArmDesignator
    :return:
    """
        smach.StateMachine.__init__(self, outcomes=['done', 'failed'])

        # Check types or designator resolve types
        check_type(item, Entity)
        if arm is not None:
            check_type(arm, Arm)
            if arm.locked:
                rospy.logwarn('Prefered arm in use picking other arm')
                arm = pickClosestArm(item)
        else:
            arm = pickClosestArm(item)

        if arm is None:
            rospy.logerr('No free arm for grabSU')
            return 'failed'

        with self:
            smach.StateMachine.add(
                'CHECK_IN_WORKSPACE',  # better call this init
                CheckObjectInWS(robot, arm, item),
                transitions={
                    'inWS': 'PREPARE_GRASP',
                    'notInWs': 'MOVE_ARM',
                    'failed': 'RESET_FAILURE'
                })

            smach.StateMachine.add('MOVE_ARM_TO_OBJECT',
                                   MoveArmToObjectSU(robot, arm, item),
                                   transitions={'succes'})

            smach.StateMachine.add('PREPARE_GRASP',
                                   PrepareEdGraspSU(robot, arm, item),
                                   transitions={
                                       'succeeded': 'NAVIGATE_TO_GRAB',
                                       'failed': 'RESET_FAILURE'
                                   })

            smach.StateMachine.add('GRAB',
                                   PickUpSU(robot, arm, item),
                                   transitions={
                                       'succeeded': 'done',
                                       'failed': 'RESET_FAILURE'
                                   })

            smach.StateMachine.add("RESET_FAILURE",
                                   ResetOnFailure(robot),
                                   transitions={'done': 'failed'})
    def __init__(self, robot, arm_designator, gripperstate='open', drop_from_frame=None, grab_entity_designator=None, timeout=10):
        smach.State.__init__(self, outcomes=['succeeded','failed'])

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.robot = robot
        self.gripperstate = gripperstate
        self.grab_entity_designator = grab_entity_designator
        self.timeout = timeout
    def __init__(self, robot, arm_designator, timeout=10):
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed'])

        #A designator can resolve to a different item every time its resolved. We don't want that here, so lock
        check_type(arm_designator, Arm)
        locked_arm = LockingDesignator(arm_designator)

        with self:
            smach.StateMachine.add("LOCK_ARM",
                        LockDesignator(locked_arm),
                        transitions={'locked'         :'SPINDLE_MEDIUM'})

            smach.StateMachine.add("SPINDLE_MEDIUM",
                        ResetTorso(robot),
                        transitions={'done'         :'MOVE_HUMAN_HANDOVER_JOINT_GOAL'})

            smach.StateMachine.add("MOVE_HUMAN_HANDOVER_JOINT_GOAL",
                        ArmToJointConfig(robot, locked_arm, 'handover_to_human'),
                        transitions={ 'succeeded'   :'SAY_OPEN_GRIPPER',
                                      'failed'      :'SAY_OPEN_GRIPPER'})
            
            smach.StateMachine.add("SAY_OPEN_GRIPPER",
                        Say(robot, [ "Watch out, I will open my gripper in one second. Please take it from me."]),
                        transitions={   'spoken'    :'OPEN_GRIPPER_HANDOVER'})

            smach.StateMachine.add('OPEN_GRIPPER_HANDOVER', SetGripper(robot, locked_arm, gripperstate=ArmState.OPEN, timeout=2.0),
                        transitions={'succeeded'    :   'SAY_CLOSE_NOW_GRIPPER',
                                     'failed'       :   'SAY_CLOSE_NOW_GRIPPER'})

            smach.StateMachine.add("SAY_CLOSE_NOW_GRIPPER",
                        Say(robot, [ "I will close my gripper now"]),
                        transitions={   'spoken'    :'CLOSE_GRIPPER_HANDOVER'})

            # smach.StateMachine.add('OPEN_GRIPPER_ON_HANDOVER', OpenGripperOnHandoverToHuman(robot, locked_arm, timeout=timeout),
            #             transitions={'succeeded'    :   'CLOSE_GRIPPER_HANDOVER',
            #                          'failed'       :   'SAY_I_WILL_KEEP_IT'})

            smach.StateMachine.add('CLOSE_GRIPPER_HANDOVER', SetGripper(robot, locked_arm, gripperstate=ArmState.CLOSE, timeout=0.0),
                        transitions={'succeeded'    :   'RESET_ARM',
                                     'failed'       :   'RESET_ARM'})

            # smach.StateMachine.add("SAY_I_WILL_KEEP_IT",
            #             Say(robot, [ "If you don't want it, I will keep it"]),
            #             transitions={   'spoken'    :'RESET_ARM'})

            smach.StateMachine.add('RESET_ARM',
                        ArmToJointConfig(robot, locked_arm, 'reset'),
                        transitions={'succeeded'    :'RESET_TORSO',
                                      'failed'      :'RESET_TORSO'    })

            smach.StateMachine.add('RESET_TORSO',
                        ResetTorso(robot),
                        transitions={'done':'UNLOCK_ARM'})

            smach.StateMachine.add("UNLOCK_ARM",
                        UnlockDesignator(locked_arm),
                        transitions={'unlocked'         :'succeeded'})
示例#19
0
    def __init__(self, robot, arm_designator, timeout=10):
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed'])

        #A designator can resolve to a different item every time its resolved. We don't want that here, so lock
        check_type(arm_designator, Arm)
        locked_arm = LockingDesignator(arm_designator)

        with self:
            smach.StateMachine.add("LOCK_ARM",
                        LockDesignator(locked_arm),
                        transitions={'locked'         :'SPINDLE_MEDIUM'})

            smach.StateMachine.add("SPINDLE_MEDIUM",
                        ResetPart(robot, robot.torso),
                        transitions={'done'         :'MOVE_HUMAN_HANDOVER_JOINT_GOAL'})

            smach.StateMachine.add("MOVE_HUMAN_HANDOVER_JOINT_GOAL",
                        ArmToJointConfig(robot, locked_arm, 'handover_to_human'),
                        transitions={ 'succeeded'   :'SAY_OPEN_GRIPPER',
                                      'failed'      :'SAY_OPEN_GRIPPER'})

            smach.StateMachine.add("SAY_OPEN_GRIPPER",
                        Say(robot, [ "Watch out, I will open my gripper in one second. Please take it from me."]),
                        transitions={   'spoken'    :'OPEN_GRIPPER_HANDOVER'})

            smach.StateMachine.add('OPEN_GRIPPER_HANDOVER', SetGripper(robot, locked_arm, gripperstate=GripperState.OPEN, timeout=2.0),
                        transitions={'succeeded'    :   'SAY_CLOSE_NOW_GRIPPER',
                                     'failed'       :   'SAY_CLOSE_NOW_GRIPPER'})

            smach.StateMachine.add("SAY_CLOSE_NOW_GRIPPER",
                        Say(robot, [ "I will close my gripper now"]),
                        transitions={   'spoken'    :'CLOSE_GRIPPER_HANDOVER'})

            # smach.StateMachine.add('OPEN_GRIPPER_ON_HANDOVER', OpenGripperOnHandoverToHuman(robot, locked_arm, timeout=timeout),
            #             transitions={'succeeded'    :   'CLOSE_GRIPPER_HANDOVER',
            #                          'failed'       :   'SAY_I_WILL_KEEP_IT'})

            smach.StateMachine.add('CLOSE_GRIPPER_HANDOVER', SetGripper(robot, locked_arm, gripperstate=GripperState.CLOSE, timeout=0.0),
                        transitions={'succeeded'    :   'RESET_ARM',
                                     'failed'       :   'RESET_ARM'})

            # smach.StateMachine.add("SAY_I_WILL_KEEP_IT",
            #             Say(robot, [ "If you don't want it, I will keep it"]),
            #             transitions={   'spoken'    :'RESET_ARM'})

            smach.StateMachine.add('RESET_ARM',
                        ArmToJointConfig(robot, locked_arm, 'reset'),
                        transitions={'succeeded'    :'RESET_TORSO',
                                      'failed'      :'RESET_TORSO'    })

            smach.StateMachine.add('RESET_TORSO',
                        ResetPart(robot, robot.torso),
                        transitions={'done':'UNLOCK_ARM'})

            smach.StateMachine.add("UNLOCK_ARM",
                        UnlockDesignator(locked_arm),
                        transitions={'unlocked'         :'succeeded'})
示例#20
0
    def __init__(self, robot, arm_designator, gripperstate=GripperState.OPEN, drop_from_frame=None, grab_entity_designator=None, timeout=10):
        smach.State.__init__(self, outcomes=['succeeded','failed'])

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.robot = robot
        self.gripperstate = gripperstate
        self.grab_entity_designator = grab_entity_designator
        self.timeout = timeout
示例#21
0
    def __init__(self, message_type, drink_request_des, operator_name_des, name=None):
        super(DescriptionStrDesignator, self).__init__(resolve_type=str, name=name)

        ds.check_type(operator_name_des, str)
        ds.check_type(drink_request_des, str)

        self.message_type = message_type
        self.operator_name_des = operator_name_des
        self.drink_request_des = drink_request_des
示例#22
0
    def __init__(self, robot, seat_ids, room, name=None):
        super(SeatsInRoomDesignator, self).__init__(resolve_type=[Entity],
                                                    name=name)

        self.robot = robot

        ds.check_type(seat_ids, [str])
        ds.check_type(room, Entity)

        self.room = room
        self.seat_ids = seat_ids
示例#23
0
    def __init__(self, robot, entity, area, waittime=2.0):
        """ Constructor
        :param robot: robot object
        :param entity: EdEntityDesignator with the area to look at
        :param area: string with the area to look at
        :param waittime: (optional) waittime (in seconds) between giving a head target and returning
        :return:
        """
        ds.check_type(entity, EntityInfo)

        State.__init__(self, locals(), outcomes=['succeeded', 'failed'])
    def __init__(self, robot, entity, area, waittime=2.0):
        """ Constructor
        :param robot: robot object
        :param entity: EdEntityDesignator with the area to look at
        :param area: string with the area to look at
        :param waittime: (optional) waittime (in seconds) between giving a head target and returning
        :return:
        """
        ds.check_type(entity, EntityInfo)

        State.__init__(self, locals(), outcomes=['succeeded', 'failed'])
示例#25
0
    def __init__(self, objects, classification_list_designator, unavailable_drink_designator, max_unavailable_drinks):
        # TODO: Change unavailable_drink_designator resolve type to list to make the implementation more generalized as
        # this state becomes a bug when max_unavailable_drinks > 1
        super(IdentifyUnavailableDrinkFromRecognitions, self).__init__(outcomes=["done", "failed"])
        ds.is_writeable(unavailable_drink_designator)
        ds.check_type(unavailable_drink_designator, str)
        ds.check_type(classification_list_designator, [ClassificationResult])

        self._drinks_list = [obj["name"] for obj in objects if obj["category"] == "drink"]
        self._classification_list_designator = classification_list_designator
        self._unavailable_drink_designator = unavailable_drink_designator
        self._max_unavailable_drinks = max_unavailable_drinks
示例#26
0
    def __init__(self, robot, arm_designator, configuration):
        """
        Put arm of robot in some joint configuration
        :param robot: robot to execute state with
        :param arm_designator: designator that resolves to arm to put in given configuration
        :param configuration: joint configuration to put arm in
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        self.robot = robot
        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.configuration = configuration
    def __init__(self, robot, arm_designator, configuration):
        """
        Put arm of robot in some joint configuration
        :param robot: robot to execute state with
        :param arm_designator: designator that resolves to arm to put in given configuration
        :param configuration: joint configuration to put arm in
        """
        smach.State.__init__(self, outcomes=['succeeded','failed'])

        self.robot = robot
        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.configuration = configuration
    def __init__(self, robot, arm_designator, trajectory):
        """
        Make arm of robot follow a joint trajectory
        :param robot: robot to execute state with
        :param arm_designator: designator that resolves to arm that must follow the given joint trajectory
        :param trajectory: joint trajectory for the arm
        """
        smach.State.__init__(self, outcomes=['succeeded','failed'])

        self.robot = robot
        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.trajectory = trajectory
    def __init__(self, robot, arm_designator, trajectory):
        """
        Make arm of robot follow a joint trajectory
        :param robot: robot to execute state with
        :param arm_designator: designator that resolves to arm that must follow the given joint trajectory
        :param trajectory: joint trajectory for the arm
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        self.robot = robot
        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.trajectory = trajectory
示例#30
0
    def __init__(self, robot, arm_designator, timeout=10):
        """
        Handover the object in arm to a human.
        :param robot: robot to execute state with
        :param arm_designator: designator that resolves to arm holding an object
        :param timeout: float time the operation may take
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        self.robot = robot
        check_type(arm_designator, PublicArm)
        self.arm_designator = arm_designator
        self.timeout = timeout
    def __init__(self, robot, room, found_people_designator,
                 look_range=(-np.pi/2, np.pi/2),
                 look_steps=8):
        """
        Constructor

        :param robot: robot object
        :param area: (str) if a waypoint "<area>_waypoint" is present in the world model, the robot will navigate
            to this waypoint. Else, it will navigate to the room called "<area>"
        :param name: (str) Name of the person to look for
        :param discard_other_labels: (bool) Whether or not to discard faces based on label
        :param found_person_designator: (Designator) A designator that will resolve to the found object
        """
        smach.StateMachine.__init__(self, outcomes=["found", "not_found"])

        waypoint_designator = ds.EntityByIdDesignator(robot=robot, id=room + "_waypoint")
        room_designator = ds.EntityByIdDesignator(robot=robot, id=room)
        ds.check_type(found_people_designator, [Entity])
        ds.is_writeable(found_people_designator)

        with self:
            smach.StateMachine.add("DECIDE_NAVIGATE_STATE",
                                   _DecideNavigateState(robot=robot, waypoint_designator=waypoint_designator,
                                                        room_designator=room_designator),
                                   transitions={"waypoint": "NAVIGATE_TO_WAYPOINT",
                                                "room": "NAVIGATE_TO_ROOM",
                                                "none": "not_found"})

            smach.StateMachine.add("NAVIGATE_TO_WAYPOINT",
                                   states.NavigateToWaypoint(robot=robot,
                                                             waypoint_designator=waypoint_designator, radius=0.15),
                                   transitions={"arrived": "FIND_PEOPLE",
                                                "unreachable": "not_found",
                                                "goal_not_defined": "not_found"})

            smach.StateMachine.add("NAVIGATE_TO_ROOM", states.NavigateToRoom(robot=robot,
                                                                             entity_designator_room=room_designator),
                                   transitions={"arrived": "FIND_PEOPLE",
                                                "unreachable": "not_found",
                                                "goal_not_defined": "not_found"})

            # Wait for the operator to appear and detect what he's pointing at
            smach.StateMachine.add("FIND_PEOPLE",
                                   FindPeople(robot=robot,
                                              query_entity_designator=room_designator,
                                              found_people_designator=found_people_designator,
                                              speak=True,
                                              look_range=look_range,
                                              look_steps=look_steps),
                                   transitions={"found": "found",
                                                "failed": "not_found"})
    def __init__(self,
                 robot,
                 arm_designator,
                 grabbed_entity_label="",
                 grabbed_entity_designator=None,
                 timeout=10):
        smach.StateMachine.__init__(self, outcomes=['succeeded', 'failed'])

        check_type(arm_designator, Arm)
        if not grabbed_entity_designator and grabbed_entity_label == "":
            rospy.logerr(
                "No grabbed entity label or grabbed entity designator given")

        with self:
            smach.StateMachine.add("POSE",
                                   ArmToJointConfig(robot, arm_designator,
                                                    "handover_to_human"),
                                   transitions={
                                       'succeeded': 'OPEN_BEFORE_INSERT',
                                       'failed': 'OPEN_BEFORE_INSERT'
                                   })

            smach.StateMachine.add('OPEN_BEFORE_INSERT',
                                   SetGripper(robot,
                                              arm_designator,
                                              gripperstate='open'),
                                   transitions={
                                       'succeeded': 'SAY1',
                                       'failed': 'SAY1'
                                   })

            smach.StateMachine.add(
                "SAY1",
                Say(
                    robot,
                    'Please hand over the object by pushing it gently in my gripper'
                ),
                transitions={'spoken': 'CLOSE_AFTER_INSERT'})

            smach.StateMachine.add(
                'CLOSE_AFTER_INSERT',
                CloseGripperOnHandoverToRobot(
                    robot,
                    arm_designator,
                    grabbed_entity_label=grabbed_entity_label,
                    grabbed_entity_designator=grabbed_entity_designator,
                    timeout=timeout),
                transitions={
                    'succeeded': 'succeeded',
                    'failed': 'failed'
                })
示例#33
0
    def __init__(self, robot, arm_designator, grabbed_entity_label="", grabbed_entity_designator=None, timeout=15,
                 arm_configuration="handover_to_human"):
        """
        Hold up hand to accept an object and close hand once something is inserted
        :param robot: Robot with which to execute this behavior
        :param arm_designator: ArmDesignator resolving to arm accept item into
        :param grabbed_entity_label: What ID to give a dummy item in case no grabbed_entity_designator is supplied
        :param grabbed_entity_designator: EntityDesignator resolving to the accepted item. Can be a dummy
        :param timeout: How long to hold hand over before closing without anything
        :param arm_configuration: Which pose to put arm in when holding hand up for the item.
        """
        smach.StateMachine.__init__(self, outcomes=['succeeded', 'failed', 'timeout'])

        ds.check_type(arm_designator, PublicArm)
        if not grabbed_entity_designator and grabbed_entity_label == "":
            rospy.logerr("No grabbed entity label or grabbed entity designator given")

        with self:
            smach.StateMachine.add("POSE", manipulation.ArmToJointConfig(robot, arm_designator, arm_configuration),
                                   transitions={'succeeded': 'OPEN_BEFORE_INSERT', 'failed': 'OPEN_BEFORE_INSERT'})

            smach.StateMachine.add('OPEN_BEFORE_INSERT', manipulation.SetGripper(robot=robot,
                                                                                 arm_designator=arm_designator,
                                                                                 gripperstate=manipulation.GripperState.
                                                                                 OPEN),
                                   transitions={'succeeded': 'SAY1', 'failed': 'SAY1'})

            smach.StateMachine.add("SAY1", states.Say(robot, 'Please hand over the trash by putting the top of the bag'
                                                             ' between my grippers and push firmly into my camera as'
                                                             ' will be shown on my screen.'),
                                   transitions={'spoken': 'SHOW_IMAGE'})

            smach.StateMachine.add("SHOW_IMAGE",
                                   states.ShowImageState(
                                        robot=robot,
                                        image_filename="~/ros/kinetic/system/src/challenge_take_out_the_garbage/src"
                                                       "/challenge_take_out_the_garbage/beun_picture.png",
                                        seconds=5),
                                   transitions={'succeeded': 'CLOSE_AFTER_INSERT'})

            smach.StateMachine.add('CLOSE_AFTER_INSERT', manipulation.CloseGripperOnHandoverToRobot(
                robot,
                arm_designator,
                grabbed_entity_label=grabbed_entity_label,
                grabbed_entity_designator=grabbed_entity_designator,
                timeout=timeout),
                                   transitions={'succeeded': 'succeeded',
                                                'timeout': 'failed',
                                                'failed': 'failed'})
示例#34
0
    def __init__(self, robot, arm):
        """
        Drive the robot back a little and move the designated arm to place the designated item at the designated pose
        :param robot: Robot to execute state with
        :param arm: Designator -> arm to place with, so Arm that holds entity_to_place, e.g. via
        ArmHoldingEntityDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        # Check types or designator resolve types
        check_type(arm, PublicArm)

        # Assign member variables
        self._robot = robot
        self._arm_designator = arm
示例#35
0
    def __init__(self, robot, arm, grab_entity):
        """
        Set the arm in the appropriate position before actually grabbing
        :param robot: robot to execute state with
        :param arm: Designator that resolves to arm to grab with. E.g. UnoccupiedArmDesignator
        :param grab_entity: Designator that resolves to the entity to grab. e.g EntityByIdDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'], output_keys=['arm'])

        # Assign member variables
        self.robot = robot
        self.arm_designator = arm
        self.grab_entity_designator = grab_entity

        check_type(grab_entity, Entity)
    def __init__(self, robot, arm_designator, grab_point_designator):
        """
        Grab an entity using visual servoing.
        :param robot: Robot to use for grabbing
        :param arm_designator: Designator that resolves to arm to grab with. E.g. UnoccupiedArmDesignator
        :param grab_point_designator: Designator that resolves to a PointStamped
        :return:
        """
        smach.State.__init__(self, outcomes=['succeeded','failed','target_lost'])

        self.robot = robot

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.grab_point_designator = grab_point_designator
示例#37
0
    def __init__(self, robot, arm, grab_entity):
        """
        Pick up an item given an arm and an entity to be picked up
        :param robot: robot to execute this state with
        :param arm: Designator that resolves to the arm to grab the grab_entity with. E.g. UnoccupiedArmDesignator
        :param grab_entity: Designator that resolves to the entity to grab. e.g EntityByIdDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'], output_keys=['arm'])

        # Assign member variables
        self.robot = robot
        self.arm_designator = arm

        check_type(grab_entity, Entity)
        self.grab_entity_designator = grab_entity
        self._gpd = GraspPointDeterminant(robot)
示例#38
0
    def __init__(self, robot, arm, point_entity_designator):
        """
        Points at an item, similar to picking it up.

        :param robot: robot to execute this state with
        :param arm: Designator that resolves to the arm to point at the entity with. E.g. UnoccupiedArmDesignator
        :param point_entity_designator: Designator that resolves to the entity to point at. e.g EntityByIdDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        # Assign member variables
        self.robot = robot
        self.arm_designator = arm

        ds.check_type(point_entity_designator, Entity)
        self.point_entity_designator = point_entity_designator
示例#39
0
    def __init__(self, robot, arm, grab_entity):
        # type: (Robot, ArmDesignator, Designator) -> None
        """
        Set the arm in the appropriate position before actually grabbing
        :param robot: robot to execute state with
        :param arm: Designator that resolves to arm to grab with. E.g. UnoccupiedArmDesignator
        :param grab_entity: Designator that resolves to the entity to grab. e.g EntityByIdDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        # Assign member variables
        self.robot = robot
        self.arm_designator = arm
        self.grab_entity_designator = grab_entity

        check_type(grab_entity, Entity)
示例#40
0
    def __init__(self, knowledge, room_des, cleanup_locations):
        """
        Determine cleaning locations on runtime
        :param knowledge: challenge knowledge
        :param room_des: Designator resolving to room
        :type room_des: Designator(str)
        :param cleanup_locations: Writable designator, which will be filled with a list of cleaning locations
        """
        smach.State.__init__(self, outcomes=["done"])
        ds.check_type(room_des, str)
        ds.is_writeable(cleanup_locations)
        assert (hasattr(knowledge, "cleaning_locations"))

        self._knowledge = knowledge
        self._room_des = room_des
        self._cleanup_locations = cleanup_locations
    def __init__(self, robot, arm_designator, grab_point_designator):
        """
        Grab an entity using visual servoing.
        :param robot: Robot to use for grabbing
        :param arm_designator: Designator that resolves to arm to grab with. E.g. UnoccupiedArmDesignator
        :param grab_point_designator: Designator that resolves to a PointStamped
        :return:
        """
        smach.State.__init__(self,
                             outcomes=['succeeded', 'failed', 'target_lost'])

        self.robot = robot

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.grab_point_designator = grab_point_designator
示例#42
0
    def __init__(self, robot, arm, grab_entity, check_occupancy=False):
        """
        Pick up an item given an arm and an entity to be picked up
        :param robot: robot to execute this state with
        :param arm: Designator that resolves to the arm to grab the grab_entity with. E.g. UnoccupiedArmDesignator
        :param grab_entity: Designator that resolves to the entity to grab. e.g EntityByIdDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        # Assign member variables
        self.robot = robot
        self.arm_designator = arm

        check_type(grab_entity, Entity)
        self.grab_entity_designator = grab_entity
        self._gpd = GraspPointDeterminant(robot)
        self._check_occupancy = check_occupancy
    def __init__(self, robot, sentence=None, language=None, personality=None, voice=None, mood=None, block=True, look_at_standing_person=False):
        smach.State.__init__(self, outcomes=["spoken"])
        ds.check_type(sentence, str, list)
        #ds.check_type(language, str)
        #ds.check_type(personality, str)
        #ds.check_type(voice, str)
        #ds.check_type(mood, str)
        ds.check_type(block, bool)

        self.robot = robot
        self.sentence = sentence
        self.language = language
        self.personality = personality
        self.voice = voice
        self.mood = mood
        self.block = block
        self.look_at_standing_person = look_at_standing_person
示例#44
0
    def __init__(self, robot, placement_pose, arm):
        """
        Drive the robot back a little and move the designated arm to place the designated item at the designated pose
        :param robot: Robot to execute state with
        :param placement_pose: Designator that resolves to the pose to place at. E.g. an EmptySpotDesignator
        :param arm: Designator -> arm to place with, so Arm that holds entity_to_place, e.g. via ArmHoldingEntityDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        # Check types or designator resolve types
        check_type(placement_pose, PoseStamped)
        check_type(arm, Arm)

        # Assign member variables
        self._robot = robot
        self._placement_pose_designator = placement_pose
        self._arm_designator = arm
示例#45
0
    def __init__(self, robot, placement_pose, arm):
        """
        Drive the robot back a little and move the designated arm to place the designated item at the designated pose
        :param robot: Robot to execute state with
        :param placement_pose: Designator that resolves to the pose to place at. E.g. an EmptySpotDesignator
        :param arm: Designator -> arm to place with, so Arm that holds entity_to_place, e.g. via ArmHoldingEntityDesignator
        """
        smach.State.__init__(self, outcomes=['succeeded', 'failed'])

        # Check types or designator resolve types
        check_type(placement_pose, PoseStamped)
        check_type(arm, Arm)

        # Assign member variables
        self._robot = robot
        self._placement_pose_designator = placement_pose
        self._arm_designator = arm
    def __init__(self, robot, arm_designator, grab_entity_designator):
        """@param grab_entity_designator resolves to an entity to grab.
            Some child states require a (designator of) the PointStamped of that entity. PointStampedOfEntityDesignator does this conversion"""
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed'])

        check_type(arm_designator, Arm)

        # check check input and output keys
        with self:
            smach.StateMachine.add('PREPARE_GRAB', ArmToJointConfig(robot, arm_designator, "prepare_grasp"),
                        transitions={'succeeded'    :   'OPEN_GRIPPER',
                                     'failed'       :   'failed'})

            smach.StateMachine.add('OPEN_GRIPPER', SetGripper(robot, arm_designator, gripperstate=ArmState.OPEN, timeout=0.0),
                        transitions={'succeeded'    :   'PREPARE_ORIENTATION',
                                     'failed'       :   'PREPARE_ORIENTATION'})

            smach.StateMachine.add('PRE_GRASP', ArmToQueryPoint(robot, arm_designator,
                                    PointStampedOfEntityDesignator(grab_entity_designator),
                                    time_out=20, pre_grasp=True, first_joint_pos_only=True),
                        transitions={'succeeded'    :   'GRAB',
                                     'failed'       :   'CLOSE_GRIPPER_UPON_FAIL'})

            smach.StateMachine.add('GRAB', GrabWithVisualServoing(robot, arm_designator, grab_entity_designator),
                        transitions={'grab_succeeded':  'CLOSE_GRIPPER',
                                     'grab_failed'   :  'CLOSE_GRIPPER',
                                     'target_lost'   :  'CLOSE_GRIPPER_UPON_FAIL'})

            smach.StateMachine.add('CLOSE_GRIPPER', SetGripper(robot, arm_designator, gripperstate=ArmState.CLOSE, grab_entity_designator=grab_entity_designator),
                        transitions={'succeeded'    :   'LIFT',
                                     'failed'       :   'LIFT'})

            smach.StateMachine.add('LIFT', ArmToUserPose(arm_designator, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, time_out=20, pre_grasp=False, frame_id="/amigo/base_link", delta=True),
                        transitions={'succeeded':'RETRACT','failed':'RETRACT'})

            smach.StateMachine.add('RETRACT', ArmToUserPose(arm_designator, -0.1, 0.0, 0.0, 0.0, 0.0, 0.0, time_out=20, pre_grasp=False, frame_id="/amigo/base_link", delta=True),
                        transitions={'succeeded':'CARR_POS','failed':'CARR_POS'})

            smach.StateMachine.add('CARR_POS', ArmToJointConfig(robot, arm_designator, "carrying_pose"),
                        transitions={'succeeded':'succeeded','failed':'CLOSE_GRIPPER_UPON_FAIL'})

            smach.StateMachine.add('CLOSE_GRIPPER_UPON_FAIL', SetGripper(robot, arm_designator, gripperstate=ArmState.CLOSE, timeout=0.0),
                        transitions={'succeeded'    :   'failed',
                                     'failed'       :   'failed'})
示例#47
0
    def __init__(self, robot, arm_designator, drop_bag_pose):
        """
        :param robot: the robot with which to execute this state machine
        :param arm_designator: ArmDesignator resolving to Arm holding the bag to drop

        """
        smach.StateMachine.__init__(self, outcomes=['done'])

        check_type(arm_designator, Arm)

        with self:
            smach.StateMachine.add('DROP_POSE', states.ArmToJointConfig(robot, arm_designator, drop_bag_pose),
                                   transitions={'succeeded': 'OPEN_AFTER_DROP',
                                                'failed': 'OPEN_AFTER_DROP'})

            smach.StateMachine.add('OPEN_AFTER_DROP',
                                   states.SetGripper(robot, arm_designator, gripperstate=GripperState.OPEN),
                                   transitions={'succeeded': 'RESET_ARM',
                                                'failed': 'RESET_ARM'})

            smach.StateMachine.add('RESET_ARM', states.ResetArms(robot),
                                   transitions={'done': 'done'})
    def __init__(self, robot, arm_designator, grab_entity_designator):
        smach.StateMachine.__init__(self, outcomes=['succeeded','failed'])

        check_type(arm_designator, Arm)
        self.arm_designator = arm_designator
        self.robot = robot
        self.grab_entity_designator = grab_entity_designator
        '''check check input and output keys'''
        with self:
            smach.StateMachine.add('CLOSE_GRIPPER', SetGripper(robot, arm_designator, gripperstate=ArmState.CLOSE),
                        transitions={'succeeded'    :   'PRE_POINT',
                                     'failed'       :   'PRE_POINT'})

            smach.StateMachine.add('PRE_POINT', ArmToQueryPoint(robot, arm_designator, grab_entity_designator, time_out=20, pre_grasp=True, first_joint_pos_only=True),
                        transitions={'succeeded'    :   'POINT',
                                     'failed'       :   'RESET_ARM_FAILED'})

            smach.StateMachine.add('POINT', Point_at_object(arm_designator, robot, grab_entity_designator),
                        transitions={'point_succeeded':  'SAY_POINTED',
                                     'point_failed'   :  'RETRACT',
                                     'target_lost'   :  'RESET_ARM_FAILED'})

            smach.StateMachine.add('SAY_POINTED',
                                    Say(robot, "I hope this is the object you were looking for."),
                        transitions={ 'spoken':'RETRACT' })

            smach.StateMachine.add('RETRACT',
                                    ArmToJointConfig(robot, arm_designator, 'retract'),
                        transitions={'succeeded':'RESET_ARM_SUCCEEDED','failed':'RESET_ARM_SUCCEEDED'})

            smach.StateMachine.add('RESET_ARM_SUCCEEDED',
                                    ArmToJointConfig(robot, arm_designator, 'reset'),
                        transitions={   'done':'succeeded',
                                        'failed':'succeeded'})

            smach.StateMachine.add('RESET_ARM_FAILED',
                                    ArmToJointConfig(robot, arm_designator, 'reset'),
                        transitions={   'done':'failed',
                                        'failed':'failed'})
    def __init__(self, robot, entity, keep_following=False, waittime=0.0):
        ds.check_type(entity, EntityInfo)

        State.__init__(self, locals(), outcomes=['succeeded', 'failed'])