示例#1
0
 def on_event(self, event):
     state = event[:3]
     direction = event[3:6]
     action = event[6:]
     if state != 'joy' or event == 'joyjoyoff':
         logo.stop()
         return Awake()
     if action != 'sta':
         logo.stop()
     else:
         if direction == 'top':
             logo.motor_speed(JOY_SPEED, JOY_SPEED)
         elif direction == 'mid':
             logo.motor_speed(-JOY_SPEED, -JOY_SPEED)
         elif direction == 'lef':
             logo.motor_speed(-JOY_SPEED / 4, JOY_SPEED / 4)
         elif direction == 'rig':
             logo.motor_speed(JOY_SPEED / 4, -JOY_SPEED / 4)
     return self
示例#2
0
 def __init__(self):
     super(Joystick, self).__init__()
     logo.stop()
     k9.speak("Under manual control")
示例#3
0
 def __init__(self):
     super(Following, self).__init__()
     logo.stop()
     k9.speak("Mastah!")
示例#4
0
 def __init__(self):
     super(Awake, self).__init__()
     # turn on lights
     logo.stop()
     k9.speak("K9 operational")
示例#5
0
 def __init__(self):
     super(Asleep, self).__init__()
     # turn all lights off
     logo.stop()
     k9.speak("Conserving battery power")
示例#6
0
        if len(indices[0]) > 0:
            direction = (np.average(indices) - mid_point) / width
        return (direction, final_distance)

    def mqtt_callback(self, client, userdata, message):
        """
        Enables K9 to receive a message from an Epruino Watch via
        MQTT over Bluetooth (BLE) to place it into active or inactive States
        """
        payload = str(message.payload.decode("utf-8"))
        if payload != self.last_message:
            self.last_message = payload
            event = payload[3:-1].lower()
            # print("Event: ",str(event))
            self.on_event(event)


# Create the k9 finite state machine
k9 = K9()

try:
    while True:
        k9.run()
except KeyboardInterrupt:
    logo.stop()
    del body_cam
    del device
    k9.client.loop_stop()
    k9.speak("Inactive")
    print('exiting from', str(k9.state).lower(), 'state.')
    sys.exit(0)