def confirm(self, name, id): """ Confirms the state machine and triggers the creation of the structural message. It is mandatory to call this function at the top-level state machine between building it and starting its execution. @type name: string @param name: The name of this state machine to identify it. """ self.name = name self.id = id self._pub.createPublisher('/flexbe/mirror/sync', BehaviorSync, _latch = True) # Update mirror with currently active state (high bandwidth mode) self._pub.createPublisher('/flexbe/mirror/preempt', Empty, _latch = True) # Preempts the mirror self._pub.createPublisher('/flexbe/mirror/structure', ContainerStructure) # Sends the current structure to the mirror self._pub.createPublisher('/flexbe/log', BehaviorLog) # Topic for logs to the GUI self._pub.createPublisher('/flexbe/command_feedback', CommandFeedback) # Gives feedback about executed commands to the GUI self._sub.subscribe('/flexbe/command/autonomy', UInt8, self._set_autonomy_level) self._sub.subscribe('/flexbe/command/sync', Empty, self._sync_callback) self._sub.subscribe('/flexbe/request_mirror_structure', Int32, self._mirror_structure_callback) StateLogger.initialize(name) if OperatableStateMachine.autonomy_level != 255: self._enable_ros_control() rospy.sleep(0.5) # no clean way to wait for publisher to be ready... self._notify_start()