diff --git a/GPS_receiver.py b/GPS_receiver.py index 799f8aec2423ca405ea7c404cfd70e44b452f8b0..eed24578a6c920e649997119f509b01b412d6351 100644 --- a/GPS_receiver.py +++ b/GPS_receiver.py @@ -38,14 +38,16 @@ class TCPReceiver(socketserver.StreamRequestHandler): #start TCP server which receives the messages from the RUTX11 def start_GPSthread(CONFIG): global TCPServerInstance, GPS_Ringbuffer - GPS_ringbuf.set_min_frame_movement(CONFIG['min-movement-frame']) + GPS_ringbuf.set_min_frame_movement(CONFIG['min-movement-pulse']) GPS_poort = 8500 #port to which the TCP nmea string is send for _ in range(0,5): ip_address = get_ip_address() - if ip_address != None: break + if ip_address != None: + break + sleep(1) if ip_address == None: raise Exception("Router not connected, shutting down!") - sleep(1) + ServerAddress = (ip_address, GPS_poort) TCPServerInstance = socketserver.ThreadingTCPServer(ServerAddress, TCPReceiver) threading.Thread(target=TCPServerInstance.serve_forever).start() diff --git a/camera.py b/camera.py index 471b127f70ee3ade00a3460b1c4d5a1f4ed1d5fd..6822f0a7236cbe64ddcff961e6f6ae5c4a39075d 100644 --- a/camera.py +++ b/camera.py @@ -5,6 +5,7 @@ from threading import Thread from pypylon import pylon #camera from itertools import cycle from glob import glob +from sys import maxsize from global_vars import * from usb_Filestorage import * @@ -50,7 +51,7 @@ class take_img(Thread): #only process images when we are moving & the GPS buffer is filled if (self.GPS_check == False) or (is_moving == True): - if (self.GPS_check == False) or ((data_obj.lat >= 0) and (data_obj.lng >= 0)): + if (self.GPS_check == False) or ((data_obj.lat < maxsize) and (data_obj.lng < maxsize)): #send image to neural network to_process_deque.append({'file_name': filename, 'img': img,'data': data_obj}) if self.save_IMGS == True: diff --git a/cfg/detection.yaml b/cfg/detection.yaml index 06c66747d79bfe0d38a73f388121dea76d20837f..98b6385badfb4bce0f2f4a0e15248a41c0148a08 100644 --- a/cfg/detection.yaml +++ b/cfg/detection.yaml @@ -18,7 +18,7 @@ AGENSO: True save-GPS: True save-IMGS: True save-every-x: 10 #dont save all imgs & GPS coordinates, its simply to much -min-movement-frame: 0.1 #M between GPS pulses (1 puls/2min) +min-movement-pulse: 0.6 #M between GPS pulses (1 puls/2 seconds, 0.6 = 0.3 m/s and 1 km/h) GPS-checks: True #enable/disable GPS moving checks to facilitate desk debugging #AGENSO diff --git a/data_types.py b/data_types.py index f205de21b8f1d704450bdaa3f5f54dd1bd6d912a..0b058f68d1a590f10afd592792e77aed121b8d24 100644 --- a/data_types.py +++ b/data_types.py @@ -1,7 +1,7 @@ import json from datetime import datetime from types import SimpleNamespace as Namespace - +from sys import maxsize #https://medium.com/@yzhong.cs/serialize-and-deserialize-complex-json-in-python-205ecc636caa @@ -19,8 +19,8 @@ class data_class():#lat, lng, hdop, satnum, gps_quality, timestamp def __init__(self): self.timestamp = "0-0-0T0:0:0" self.gps_quality = "Not valid" #values: Not valid, Fixed, Diff fix, RTK, RTK F - self.lat = -1 - self.lng = -1 + self.lat = maxsize + self.lng = maxsize self.hdop = 0 self.satnum = 0 self.diseases = [] @@ -99,8 +99,8 @@ class GPS_Ringbuffer: self.min_movement = 0 #minimal movement over the entire buffer. self.decdegr_to_m = 0.00001 #very rough conversion from DD to M self.size = size - self.prevlat = 0 - self.prevlng = 0 + self.prevlat = maxsize + self.prevlng = maxsize self.prevtimestamp = datetime.utcnow()#.strftime("%y-%m-%dT%H:%M:%S.%f") self.data = [] self.f_pnt = 0 #inital poisition @@ -113,9 +113,9 @@ class GPS_Ringbuffer: def update_pointer(self, pointer): return (pointer + 1) % self.size - def set_min_frame_movement(self, min_movement_frame): - self.min_movement = min_movement_frame * self.decdegr_to_m * self.size - self.min_movement_frame = min_movement_frame * self.decdegr_to_m + def set_min_frame_movement(self, min_movement_pulse): + self.min_movement = min_movement_pulse * self.decdegr_to_m * self.size + self.min_movement_frame = min_movement_pulse * self.decdegr_to_m #put new value in the rinngbuffer en update the values def put(self, nmea_GGA_msg, timestamp): @@ -136,7 +136,7 @@ class GPS_Ringbuffer: self.data[self.f_pnt].gpsquality = nmea_GGA_msg.gps_qual self.data[self.f_pnt].gpstime = nmea_GGA_msg.timestamp.strftime("%y-%m-%dT%H:%M:%S.%f") self.data[self.f_pnt].rectime = timestamp.strftime("%y-%m-%dT%H:%M:%S.%f") - self.data[self.f_pnt].moving = self.determine_hasmoved() + self.data[self.f_pnt].moving = self.determine_hasmoved_fast() #print('prev_lat: %f, lat: %f, diff: %f' %(self.prevlat, lat, self.data[self.f_pnt].latdif)) #print('prev_lng: %f, lng: %f, diff: %f' %(self.prevlng, lng, self.data[self.f_pnt].lngdif)) self.prevtimestamp = timestamp @@ -174,7 +174,7 @@ class GPS_Ringbuffer: for pos in self.data: total_latdiff += pos.latdif total_lngdiff += pos.lngdif - total_movement = total_latdiff + total_lngdiff + total_movement = abs(total_latdiff + total_lngdiff) if (total_movement > self.min_movement): return True else: @@ -187,7 +187,7 @@ class GPS_Ringbuffer: lat_movement = abs(itemone.lat - itemtwo.lat) lng_movement = abs(itemone.lng - itemtwo.lng) - total_movement = lat_movement + lng_movement + total_movement = abs(lat_movement + lng_movement) if (total_movement > self.min_movement): return True else: @@ -220,9 +220,25 @@ class GPS_Ringbuffer: #fake nmea class, used to initialise the RING buffer class fake_nmea_class: def __init__(self,prevtimestamp): - self.latitude = -1 - self.longitude = -1 + self.latitude = maxsize + self.longitude = maxsize self.horizontal_dil = 0 self.num_sats = 0 self.gps_qual = 0 - self.timestamp = prevtimestamp \ No newline at end of file + self.timestamp = prevtimestamp + + +if __name__ == '__main__': + fnc = fake_nmea_class(datetime.now()) + gps_test = GPS_Ringbuffer(5) + gps_test.set_min_frame_movement(0.1) + lat_init = 52.64538985 + lon_init = 5.667874878 + + for i in range(6): + fnc.latitude = lat_init + (i * 1e-6) + fnc.longitude = lon_init + (i * 1e-6) + gps_test.put(fnc, datetime.now()) + + (obj, is_moving) = gps_test.get_dataobject(datetime.now()) + print(is_moving) \ No newline at end of file