Beispiel #1
0
	def select(self, read, write, have_expt, timeout):
		while 1:
			try:
				self.flush_queues()
				(s_read, s_write, s_expt) = select.select(read, write, 
					have_expt, timeout)
				return s_read, s_write, s_expt
			except select.error, e:
				Debug.print_stacktrace()
				Logger.log('Vision Server: Currpupted socket, ' +
					'trying to recover ...')
				for sock in self.descriptors_:
					try:
						# timeout 0 to remove delay
						select.select([sock], [], [], 0)
					except select.error, e:
						Debug.print_stacktrace()
						self.descriptors_.remove(sock)
						Logger.log('Socket deleted ...')
						if len(self.descriptors_) == 0:
							Logger.log('Vision Server: It was server socket, ' +
								' restarting ...')
							self.srv_sock_ = socket.socket(socket.AF_INET, 
								socket.SOCK_STREAM)
							self.descriptors_.append(slef.srv_sock_)
							self.start_server()
						break
Beispiel #2
0
	def start_server(self):
		# bind to port at ip
		for i in range(V_SETT.STARTUP_ATTEMPTS)[1:]:
			try:
				print
				Logger.log('Vision Server: Start attempt [%d] ...' % i)
				self.srv_sock_.bind((self.ip_, self.port_))
				# set maximum number of requests in the queue
				self.srv_sock_.listen(self.max_req_)
				self.alive_ = True
				break
			except:
				Debug.print_stacktrace()
				if i >= V_SETT.STARTUP_ATTEMPTS: break
				Logger.log('Vision Server: Could not bind to [%s, %d]' % ( 
					self.ip_, self.port_))
				Logger.log('Vision Server: Retrying in %d seconds' % (
					V_SETT.STARTUP_ATTEMPT_TIMEOUT))
				time.sleep(V_SETT.STARTUP_ATTEMPT_TIMEOUT)

		if not self.alive_:
			Logger.log('Vision Server: Could not connect to ' +
				'[%s, %d]' % (self.ip_, self.port_))
			self.kill_processor()

		Logger.log('Vision Server: Started on [%s, %d]' % (
			self.ip_, self.port_))
		print 'To kill server, press with CTRL+C.'
Beispiel #3
0
 def select(self, read, write, have_expt, timeout):
     while 1:
         try:
             self.flush_queues()
             (s_read, s_write,
              s_expt) = select.select(read, write, have_expt, timeout)
             return s_read, s_write, s_expt
         except select.error, e:
             Debug.print_stacktrace()
             Logger.log('Vision Server: Currpupted socket, ' +
                        'trying to recover ...')
             for sock in self.descriptors_:
                 try:
                     # timeout 0 to remove delay
                     select.select([sock], [], [], 0)
                 except select.error, e:
                     Debug.print_stacktrace()
                     self.descriptors_.remove(sock)
                     Logger.log('Socket deleted ...')
                     if len(self.descriptors_) == 0:
                         Logger.log(
                             'Vision Server: It was server socket, ' +
                             ' restarting ...')
                         self.srv_sock_ = socket.socket(
                             socket.AF_INET, socket.SOCK_STREAM)
                         self.descriptors_.append(slef.srv_sock_)
                         self.start_server()
                     break
Beispiel #4
0
    def start_server(self):
        # bind to port at ip
        for i in range(V_SETT.STARTUP_ATTEMPTS)[1:]:
            try:
                print
                Logger.log('Vision Server: Start attempt [%d] ...' % i)
                self.srv_sock_.bind((self.ip_, self.port_))
                # set maximum number of requests in the queue
                self.srv_sock_.listen(self.max_req_)
                self.alive_ = True
                break
            except:
                Debug.print_stacktrace()
                if i >= V_SETT.STARTUP_ATTEMPTS: break
                Logger.log('Vision Server: Could not bind to [%s, %d]' %
                           (self.ip_, self.port_))
                Logger.log('Vision Server: Retrying in %d seconds' %
                           (V_SETT.STARTUP_ATTEMPT_TIMEOUT))
                time.sleep(V_SETT.STARTUP_ATTEMPT_TIMEOUT)

        if not self.alive_:
            Logger.log('Vision Server: Could not connect to ' + '[%s, %d]' %
                       (self.ip_, self.port_))
            self.kill_processor()

        Logger.log('Vision Server: Started on [%s, %d]' %
                   (self.ip_, self.port_))
        print 'To kill server, press with CTRL+C.'
Beispiel #5
0
	def decode(msg):
		result = []
		try:
			msg_type = CommProto.decode_chunk(msg[0:4])	# extract message type
			nr_args = CommProto.decode_chunk(msg[4:8])	# extract number of arugments
			result.extend([msg_type, nr_args])		# put them into the result
			offset = 8
			for i in range(nr_args):
				beg = offset + i * 4
				end = beg + 4
				result.append(struct.unpack('!i', msg[beg:end])[0])
			return result
		except:
			Debug.print_stacktrace()
			return None
Beispiel #6
0
    def run(self):
        self.server_.start()  # start up communication server
        self.perform_homography()
        VisionGUI.create_gui(self.red_color_, self.blu_color_, self.ylw_color_)

        # Initialise some value in the beginning
        prev_bal_center = (0, 0)
        prev_blu_center = (0, 0)
        prev_ylw_center = (0, 0)

        # should be safe, as during the first frame method should accurately
        # determine direction, if no direction can be determined, than
        # no object is present(or thresholding is broken), so doesn't matter
        prev_blu_dir = (0, -20)
        prev_ylw_dir = (0, -20)

        prev_time = time.time()
        frame_count = 0
        one_sec = 0

        while self.alive_:
            try:
                start = time.time()
                (prev_bal_center, prev_blu_center, prev_ylw_center,
                 prev_blu_dir, prev_ylw_dir) = self.detect_objects(
                     prev_bal_center, prev_blu_center, prev_ylw_center,
                     prev_blu_dir, prev_ylw_dir)

                # update frame rate
                frame_count += 1
                one_sec += time.time() - start
                if one_sec >= 1.0:
                    self.fps_ = frame_count
                    frame_count = 0
                    one_sec = one_sec % 1.0

            except:
                Debug.print_stacktrace()
                self.kill_self()
                time.sleep(1)  # wait for server to finish
                print
        Logger.log('Vision Processor: Exiting ...')
Beispiel #7
0
	def run(self):
		self.server_.start()	# start up communication server
		self.perform_homography()
		VisionGUI.create_gui(self.red_color_, self.blu_color_, self.ylw_color_)

		# Initialise some value in the beginning
		prev_bal_center = (0, 0)
		prev_blu_center = (0, 0)
		prev_ylw_center = (0, 0)

		# should be safe, as during the first frame method should accurately
		# determine direction, if no direction can be determined, than
		# no object is present(or thresholding is broken), so doesn't matter
		prev_blu_dir = (0, -20)
		prev_ylw_dir = (0, -20)

		prev_time = time.time()
		frame_count = 0
		one_sec = 0

		while self.alive_:
			try:
				start = time.time()
				(prev_bal_center, prev_blu_center, prev_ylw_center,
					prev_blu_dir, prev_ylw_dir) = self.detect_objects(
						prev_bal_center, prev_blu_center, prev_ylw_center,
						 prev_blu_dir, prev_ylw_dir)

				# update frame rate
				frame_count += 1
				one_sec += time.time() - start
				if one_sec >= 1.0:
					self.fps_ = frame_count
					frame_count = 0
					one_sec = one_sec % 1.0

			except:
				Debug.print_stacktrace()
				self.kill_self()
				time.sleep(1) # wait for server to finish
				print
		Logger.log('Vision Processor: Exiting ...')
Beispiel #8
0
	def send_data(self, sock, msg, mode = CommProto.MODE_ONCE, peer = None):
		with self.lock_:
			try:
				sock.send(CommProto.encode(msg))
				return True
			except:	# connection died, enqueue message if mode = MODE_SAFE
				Debug.print_stacktrace()
				enqueued = ''
				if mode == CommProto.MODE_SAFE:
					if not peer: return False
					print 'SEND FAILED, ENQUEUEING ...'
					if peer[0] in self.outgoing_q_:			# if in queue
						# append to queue
						self.outgoing_q_[peer[0]].append((msg, time.time()))
					else:
						# or create queue
						self.outgoing_q_[peer[0]] = [(msg, time.time())]
					enqueued = ', but saved in queue '
				self.remove_sock(sock)
				Logger.log('Socket died. Messag not sent%s...' % enqueued)
				return False
Beispiel #9
0
 def send_data(self, sock, msg, mode=CommProto.MODE_ONCE, peer=None):
     with self.lock_:
         try:
             sock.send(CommProto.encode(msg))
             return True
         except:  # connection died, enqueue message if mode = MODE_SAFE
             Debug.print_stacktrace()
             enqueued = ''
             if mode == CommProto.MODE_SAFE:
                 if not peer: return False
                 print 'SEND FAILED, ENQUEUEING ...'
                 if peer[0] in self.outgoing_q_:  # if in queue
                     # append to queue
                     self.outgoing_q_[peer[0]].append((msg, time.time()))
                 else:
                     # or create queue
                     self.outgoing_q_[peer[0]] = [(msg, time.time())]
                 enqueued = ', but saved in queue '
             self.remove_sock(sock)
             Logger.log('Socket died. Messag not sent%s...' % enqueued)
             return False
Beispiel #10
0
	def decode_chunk(msg):
		try:
			return struct.unpack('!i', msg)[0]
		except:
			Debug.print_stacktrace(sys.exc_info())
			return None
Beispiel #11
0
	def raise_exception(self, msg):
		Logger.log(msg)
		raise Exception(msg)
		Debug.print_stacktrace()
Beispiel #12
0
 def raise_exception(self, msg):
     Logger.log(msg)
     raise Exception(msg)
     Debug.print_stacktrace()