Esempio n. 1
0
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)
Esempio n. 2
0
          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)
Esempio n. 3
0
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