Пример #1
0
    def __init__(self,
                 ns,
                 ActionSpec,
                 goal_cb,
                 cancel_cb=nop_cb,
                 auto_start=True):
        self.ns = ns

        try:
            a = ActionSpec()

            self.ActionSpec = ActionSpec
            self.ActionGoal = type(a.action_goal)
            self.ActionResult = type(a.action_result)
            self.ActionResultType = type(a.action_result.result)
            self.ActionFeedback = type(a.action_feedback)
        except AttributeError:
            raise ActionException("Type is not an action spec: %s" %
                                  str(ActionSpec))

        self.goal_sub = None
        self.cancel_sub = None
        self.status_pub = None
        self.result_pub = None
        self.feedback_pub = None

        self.lock = threading.RLock()

        self.status_timer = None

        self.status_list = []

        self.last_cancel = rospy.Time()
        self.status_list_timeout = rospy.Duration()

        self.id_generator = GoalIDGenerator()

        self.goal_callback = goal_cb
        assert (self.goal_callback)

        self.cancel_callback = cancel_cb
        self.auto_start = auto_start

        self.started = False

        if self.auto_start:
            rospy.logwarn(
                "You've passed in true for auto_start to the python action server, you should always pass "
                "in false to avoid race conditions.")
            self.start()
Пример #2
0
    def __init__(self, ActionSpec):
        self.list_mutex = threading.RLock()
        self.statuses = []
        self.send_goal_fn = None

        try:
            a = ActionSpec()

            self.ActionSpec = ActionSpec
            self.ActionGoal = type(a.action_goal)
            self.ActionResult = type(a.action_result)
            self.ActionFeedback = type(a.action_feedback)
        except AttributeError:
            raise ActionException("Type is not an action spec: %s" %
                                  str(ActionSpec))
Пример #3
0
    def __init__(self, ns, ActionSpec):
        self.ns = ns
        self.last_status_msg = None

        try:
            a = ActionSpec()

            self.ActionSpec = ActionSpec
            self.ActionGoal = type(a.action_goal)
            self.ActionResult = type(a.action_result)
            self.ActionFeedback = type(a.action_feedback)
        except AttributeError:
            raise ActionException("Type is not an action spec: %s" %
                                  str(ActionSpec))

        self.pub_queue_size = rospy.get_param(
            'actionlib_client_pub_queue_size', 10)
        if self.pub_queue_size < 0:
            self.pub_queue_size = 10
        self.pub_goal = rospy.Publisher(rospy.remap_name(ns) + '/goal',
                                        self.ActionGoal,
                                        queue_size=self.pub_queue_size)
        self.pub_cancel = rospy.Publisher(rospy.remap_name(ns) + '/cancel',
                                          GoalID,
                                          queue_size=self.pub_queue_size)

        self.manager = GoalManager(ActionSpec)
        self.manager.register_send_goal_fn(self.pub_goal.publish)
        self.manager.register_cancel_fn(self.pub_cancel.publish)

        self.sub_queue_size = rospy.get_param(
            'actionlib_client_sub_queue_size', -1)
        if self.sub_queue_size < 0:
            self.sub_queue_size = None
        self.status_sub = rospy.Subscriber(rospy.remap_name(ns) + '/status',
                                           GoalStatusArray,
                                           callback=self._status_cb,
                                           queue_size=self.sub_queue_size)
        self.result_sub = rospy.Subscriber(rospy.remap_name(ns) + '/result',
                                           self.ActionResult,
                                           callback=self._result_cb,
                                           queue_size=self.sub_queue_size)
        self.feedback_sub = rospy.Subscriber(rospy.remap_name(ns) +
                                             '/feedback',
                                             self.ActionFeedback,
                                             callback=self._feedback_cb,
                                             queue_size=self.sub_queue_size)