class ai(subsystem): """Main statemachine ai process""" def __init__(self, default_state_subs=[], loop_time=0.5): self.state_subs = default_state_subs self.loop_time = loop_time self.last_face_number = 0 super().__init__("ai", "id_only") def _run(self): self.robot = StateMachine() t1 = time() self.status = "Idle()" self.last_state = "Idle()" while True: slp = self.loop_time - (time() - t1) if slp > 0: sleep(slp) t1 = time() self.check_messages() self.robot.event() new_state = self.robot.state if self.last_state != new_state: #print("state update:", new_state) self.last_state = new_state self.send_state_update(new_state) def check_messages(self): #Update flags: #Receive most recent number of faces in frame. num_faces = self.get_messages(ref="num_faces") num_faces = num_faces[0] if len(num_faces) else [] if num_faces and self.last_face_number != num_faces.message: #print("Number of faces:", num_faces.message) self.last_face_number = num_faces.message self.robot.flags.person = bool(num_faces) #Add processing for the rest of the flags here... #Handle remaining messages messages = self.get_messages() #Subscriber updates for m in messages: if m.ref == "state_update_subscribe": self.state_subs.append(m.sender_id) if m.ref == "state_update_unsubscribe" and m.sender_id in self.state_subs: self.state_subs.remove(m.sender_id) def send_state_update(self, state): self.status = state for s in self.state_subs: self.send_message(s, "ai_state_update", state)
s(log[cycle + 6]), "\n name = ", flag.name, "\n question = ", flag.question, end="") cuteRobot = StateMachine() # Keep track of states log = [" ", " ", " ", " ", " ", " ", " "] for i in range(3000): cuteRobot.event("") t_end = time.time() + 2 while time.time() < t_end: if keyboard.is_pressed('1'): flag.person = not flag.person if keyboard.is_pressed('2'): flag.listening = not flag.listening if keyboard.is_pressed('3'): flag.processing = not flag.processing if keyboard.is_pressed('4'): flag.talking = not flag.talking log.append(flag.currentState)
from states import flag from stateMachine import StateMachine import os robot = StateMachine() prompt = "\n> " while True: os.system('clear') print("") robot.event("") print("\nCurrent State:", robot.state) flag.printFlags() x = input(prompt) if x == "person appears": flag.person = True prompt = "\n> person " elif x == "disappears" or x == "(person disappears)": flag.person = False prompt = "\n> " elif x == "asks question": flag.processing = True prompt = "\n> their question is " elif x == "invalid": flag.processing = False flag.question = -1