示例#1
0
    def activate(self):
        if (self.state == State.PRIMARY_STATE_INACTIVE):

            self.state = State.TRANSITION_STATE_ACTIVATING

            self.pub_transition_event.publish(
                TransitionEvent(
                    timestamp=self.get_clock().now().nanoseconds,
                    transition=Transition(id=Transition.TRANSITION_ACTIVATE,
                                          label=self.get_label(
                                              Transition,
                                              Transition.TRANSITION_ACTIVATE)),
                    start_state=State(id=State.PRIMARY_STATE_INACTIVE,
                                      label=self.get_label(
                                          State,
                                          State.PRIMARY_STATE_INACTIVE)),
                    goal_state=State(id=self.state,
                                     label=self.get_label(State, self.state))))

            task_activate = self.executor.create_task(self.on_activate)

            self.executor.spin_until_future_complete(task_activate)

            result_transition = None
            if (task_activate.result() ==
                    Transition.TRANSITION_CALLBACK_SUCCESS):
                self.state = State.PRIMARY_STATE_ACTIVE
                result_transition = Transition.TRANSITION_ON_ACTIVATE_SUCCESS

            elif (task_activate.result() ==
                  Transition.TRANSITION_CALLBACK_FAILURE):
                self.state = State.PRIMARY_STATE_INACTIVE
                result_transition = Transition.TRANSITION_ON_ACTIVATE_FAILURE

            else:
                self.state = State.TRANSITION_STATE_ERRORPROCESSING
                result_transition = Transition.TRANSITION_ON_CONFIGURE_ERROR

            self.pub_transition_event.publish(
                TransitionEvent(
                    timestamp=self.get_clock().now().nanoseconds,
                    transition=Transition(id=result_transition,
                                          label=self.get_label(
                                              Transition, result_transition)),
                    start_state=State(id=State.TRANSITION_STATE_ACTIVATING,
                                      label=self.get_label(
                                          State,
                                          State.TRANSITION_STATE_ACTIVATING)),
                    goal_state=State(id=self.state,
                                     label=self.get_label(State, self.state))))

            return task_activate.result()

        else:
            return Transition.TRANSITION_CALLBACK_FAILURE
示例#2
0
 def do_transition_(self, id):
     req = ChangeState.Request()
     req.transition = Transition()
     req.transition.id = id
     fut = self.change_state_client_.call_async(req)
     rclpy.spin_until_future_complete(self.node_, fut, executor=self.exe_)
     resp = fut.result()
     self.assertTrue(resp is not None)
     self.assertTrue(resp.success)
示例#3
0
 def __init__(self, **kwargs):
     assert all(['_' + key in self.__slots__ for key in kwargs.keys()]), \
         "Invalid arguments passed to constructor: %r" % kwargs.keys()
     from lifecycle_msgs.msg import Transition
     self.transition = kwargs.get('transition', Transition())
     from lifecycle_msgs.msg import State
     self.start_state = kwargs.get('start_state', State())
     from lifecycle_msgs.msg import State
     self.goal_state = kwargs.get('goal_state', State())
 def __init__(self, **kwargs):
     assert all('_' + key in self.__slots__ for key in kwargs.keys()), \
         'Invalid arguments passed to constructor: %s' % \
         ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__))
     from lifecycle_msgs.msg import Transition
     self.transition = kwargs.get('transition', Transition())
     from lifecycle_msgs.msg import State
     self.start_state = kwargs.get('start_state', State())
     from lifecycle_msgs.msg import State
     self.goal_state = kwargs.get('goal_state', State())
示例#5
0
    def create(self):
        if (self.state == State.PRIMARY_STATE_UNKNOWN):
            self.pub_transition_event.publish(
                TransitionEvent(
                    timestamp=self.get_clock().now().nanoseconds,
                    transition=Transition(id=Transition.TRANSITION_CREATE,
                                          label=self.get_label(
                                              Transition,
                                              Transition.TRANSITION_CREATE)),
                    start_state=State(id=State.PRIMARY_STATE_UNKNOWN,
                                      label=self.get_label(
                                          State, State.PRIMARY_STATE_UNKNOWN)),
                    goal_state=State(id=State.PRIMARY_STATE_UNCONFIGURED,
                                     label=self.get_label(
                                         State,
                                         State.PRIMARY_STATE_UNCONFIGURED))))

            self.state = State.PRIMARY_STATE_UNCONFIGURED
            return Transition.TRANSITION_CALLBACK_SUCCESS
        else:
            return Transition.TRANSITION_CALLBACK_FAILURE
 def __init__(self, **kwargs):
     assert all(['_' + key in self.__slots__ for key in kwargs.keys()]), \
         "Invalid arguments passed to constructor: %r" % kwargs.keys()
     self.node_name = kwargs.get('node_name', str())
     from lifecycle_msgs.msg import Transition
     self.transition = kwargs.get('transition', Transition())
示例#7
0
    def shutdown(self):
        if (self.state == State.PRIMARY_STATE_UNCONFIGURED):
            self.pub_transition_event.publish(
                TransitionEvent(
                    timestamp=self.get_clock().now().nanoseconds,
                    transition=Transition(
                        id=Transition.TRANSITION_UNCONFIGURED_SHUTDOWN,
                        label=self.get_label(
                            Transition,
                            Transition.TRANSITION_UNCONFIGURED_SHUTDOWN)),
                    start_state=State(id=State.PRIMARY_STATE_UNCONFIGURED,
                                      label=self.get_label(
                                          State,
                                          State.PRIMARY_STATE_UNCONFIGURED)),
                    goal_state=State(
                        id=State.TRANSITION_STATE_SHUTTINGDOWN,
                        label=self.get_label(
                            State, State.TRANSITION_STATE_SHUTTINGDOWN))))

        elif (self.state == State.PRIMARY_STATE_INACTIVE):
            self.pub_transition_event.publish(
                TransitionEvent(
                    timestamp=self.get_clock().now().nanoseconds,
                    transition=Transition(
                        id=Transition.TRANSITION_INACTIVE_SHUTDOWN,
                        label=self.get_label(
                            Transition,
                            Transition.TRANSITION_INACTIVE_SHUTDOWN)),
                    start_state=State(id=State.PRIMARY_STATE_INACTIVE,
                                      label=self.get_label(
                                          State,
                                          State.PRIMARY_STATE_INACTIVE)),
                    goal_state=State(
                        id=State.TRANSITION_STATE_SHUTTINGDOWN,
                        label=self.get_label(
                            State, State.TRANSITION_STATE_SHUTTINGDOWN))))

        elif (self.state == State.PRIMARY_STATE_ACTIVE):
            self.pub_transition_event.publish(
                TransitionEvent(
                    timestamp=self.get_clock().now().nanoseconds,
                    transition=Transition(
                        id=Transition.TRANSITION_ACTIVE_SHUTDOWN,
                        label=self.get_label(
                            Transition,
                            Transition.TRANSITION_ACTIVE_SHUTDOWN)),
                    start_state=State(id=State.PRIMARY_STATE_ACTIVE,
                                      label=self.get_label(
                                          State, State.PRIMARY_STATE_ACTIVE)),
                    goal_state=State(
                        id=State.TRANSITION_STATE_SHUTTINGDOWN,
                        label=self.get_label(
                            State, State.TRANSITION_STATE_SHUTTINGDOWN))))

        else:
            return Transition.TRANSITION_CALLBACK_FAILURE

        self.state = State.TRANSITION_STATE_SHUTTINGDOWN

        task_shutdown = self.executor.create_task(self.on_shutdown)

        self.executor.spin_until_future_complete(task_shutdown)

        result_transition = None
        if (task_shutdown.result() == Transition.TRANSITION_CALLBACK_SUCCESS):
            self.state = State.PRIMARY_STATE_FINALIZED
            result_transition = Transition.TRANSITION_ON_SHUTDOWN_SUCCESS

        else:
            self.state = State.TRANSITION_STATE_ERRORPROCESSING
            result_transition = Transition.TRANSITION_ON_SHUTDOWN_ERROR

        self.pub_transition_event.publish(
            TransitionEvent(
                timestamp=self.get_clock().now().nanoseconds,
                transition=Transition(id=result_transition,
                                      label=self.get_label(
                                          Transition, result_transition)),
                start_state=State(id=State.TRANSITION_STATE_SHUTTINGDOWN,
                                  label=self.get_label(
                                      State,
                                      State.TRANSITION_STATE_SHUTTINGDOWN)),
                goal_state=State(id=self.state,
                                 label=self.get_label(State, self.state))))

        return task_shutdown.result()
 def send_request(self):
     transition = Transition()
     transition.id = 4  # Disable JointStatePublisher
     self.req.transition = transition
     self.future = self.cli.call_async(self.req)