class LauncherServer(object): address_family = socket.AF_INET socket_type = socket.SOCK_DGRAM max_packet_size = 1024 def __init__(self, address=("localhost", 9999)): self.address = address self.shutdown_event = threading.Event() self.should_shutdown = False self.socket = socket.socket(self.address_family, self.socket_type) print "bound to: ", address self.socket.bind(self.address) self.address = self.socket.getsockname() self.launcher = USBMissileLauncher() self.last_status_time = 0 def fileno(self): return self.socket.fileno() def serve(self, sleep=0.01): self.shutdown_event.clear() try: while not self.should_shutdown: t = time.time() if t - self.last_status_time > STATUS_INTERVAL: # heartbeat self.launcher.status() r, w, e = select.select([self], [], [], sleep) if self in r: self.handle_request() # sleep time.sleep(max(0.001, POLL_RATE - (time.time() - t))) finally: self.socket.close() self.should_shutdown = False self.shutdown_event.set() def handle_request(self): try: data, address = self.socket.recvfrom(self.max_packet_size) print "processing: ", data if data == LAUNCHER_EXIT: self.should_shutdown = True elif int(data) == FIRE: # don't respond to requests self.launcher.fire() elif int(data) == PRIME: # don't respond to requests self.launcher.prime() else: self.launcher.send_command(int(data)) except socket.error: return
next_targets.append(( fixed_rect, 0, VELOCITY_DECAY*velocity+(1-VELOCITY_DECAY)*np.array(diff(c_last, c)), karlness )) else: # draw_rects(vis, [rect], (0,0,255)) if misses < MAX_MISSES: next_targets.append((rect, misses+1, np.zeros(2), 0)) targets = next_targets if is_auto: if firing and not primed: launcher.prime() primed = True locked_counter = 0 else: # either not firing, or already primed victims = [tgt for tgt in targets if tgt[3] >= KARLNESS_THRESHOLD] last_cmd_sent = targeter.update_targets(victims) if last_cmd_sent == STOP and victims: locked_counter += 1 if locked_counter > 4 and firing and primed: print "firing" lolz = threading.Thread(target=lolz_thread, args=("pics/%d" % int(time.time()), cam)) lolz.start() launcher.fire() lolz.join() primed = False
s_last, c_last = size_and_center(fixed_rect) next_targets.append( (fixed_rect, 0, VELOCITY_DECAY * velocity + (1 - VELOCITY_DECAY) * np.array(diff(c_last, c)), karlness)) else: # draw_rects(vis, [rect], (0,0,255)) if misses < MAX_MISSES: next_targets.append((rect, misses + 1, np.zeros(2), 0)) targets = next_targets if is_auto: if firing and not primed: launcher.prime() primed = True locked_counter = 0 else: # either not firing, or already primed victims = [ tgt for tgt in targets if tgt[3] >= KARLNESS_THRESHOLD ] last_cmd_sent = targeter.update_targets(victims) if last_cmd_sent == STOP and victims: locked_counter += 1 if locked_counter > 4 and firing and primed: print "firing" lolz = threading.Thread(target=lolz_thread, args=("pics/%d" % int(time.time()), cam)) lolz.start()