| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -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 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |