|  |  | @ -69,6 +69,7 @@ class Localizer(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.unix_timestamp_millis = 0 |  |  |  |     self.unix_timestamp_millis = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.last_gps_fix = 0 |  |  |  |     self.last_gps_fix = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.device_fell = False | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   @staticmethod |  |  |  |   @staticmethod | 
			
		
	
		
		
			
				
					
					|  |  |  |   def msg_from_state(converter, calib_from_device, H, predicted_state, predicted_cov): |  |  |  |   def msg_from_state(converter, calib_from_device, H, predicted_state, predicted_cov): | 
			
		
	
	
		
		
			
				
					|  |  | @ -142,21 +143,12 @@ class Localizer(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   def liveLocationMsg(self): |  |  |  |   def liveLocationMsg(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |     fix = self.msg_from_state(self.converter, self.calib_from_device, self.H, self.kf.x, self.kf.P) |  |  |  |     fix = self.msg_from_state(self.converter, self.calib_from_device, self.H, self.kf.x, self.kf.P) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |     # experimentally found these values, no false positives in 20k minutes of driving | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     #if abs(self.posenet_speed - self.car_speed) > max(0.4 * self.car_speed, 5.0): |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     #  self.posenet_invalid_count += 1 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     #else: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     #  self.posenet_invalid_count = 0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     #fix.posenetOK = self.posenet_invalid_count < 4 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # experimentally found these values |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     old_mean, new_mean = np.mean(self.posenet_stds[:POSENET_STD_HIST//2]), np.mean(self.posenet_stds[POSENET_STD_HIST//2:]) |  |  |  |     old_mean, new_mean = np.mean(self.posenet_stds[:POSENET_STD_HIST//2]), np.mean(self.posenet_stds[POSENET_STD_HIST//2:]) | 
			
		
	
		
		
			
				
					
					|  |  |  |     std_spike = new_mean/old_mean > 4 and new_mean > 5 |  |  |  |     std_spike = new_mean/old_mean > 4 and new_mean > 7 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if std_spike and self.car_speed > 5: |  |  |  |     fix.posenetOK = not (std_spike and self.car_speed > 5) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       fix.posenetOK = False |  |  |  |     fix.deviceStable = not self.device_fell | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       fix.posenetOK = True |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #fix.gpsWeek = self.time.week |  |  |  |     #fix.gpsWeek = self.time.week | 
			
		
	
		
		
			
				
					
					|  |  |  |     #fix.gpsTimeOfWeek = self.time.tow |  |  |  |     #fix.gpsTimeOfWeek = self.time.tow | 
			
		
	
	
		
		
			
				
					|  |  | @ -251,6 +243,10 @@ class Localizer(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       # Accelerometer |  |  |  |       # Accelerometer | 
			
		
	
		
		
			
				
					
					|  |  |  |       if sensor_reading.sensor == 1 and sensor_reading.type == 1: |  |  |  |       if sensor_reading.sensor == 1 and sensor_reading.type == 1: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         # check if device fell, estimate 10 for g | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         # 40g is a good filter for falling detection, no false positives in 20k minutes of driving | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         self.device_fell = abs(sensor_reading.acceleration.v[0] - 10) > 40 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         self.acc_counter += 1 |  |  |  |         self.acc_counter += 1 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if self.acc_counter % SENSOR_DECIMATION == 0: |  |  |  |         if self.acc_counter % SENSOR_DECIMATION == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |           v = sensor_reading.acceleration.v |  |  |  |           v = sensor_reading.acceleration.v | 
			
		
	
	
		
		
			
				
					|  |  | 
 |