|  |  |  | @ -5,14 +5,12 @@ import os | 
			
		
	
		
			
				
					|  |  |  |  | import threading | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import requests | 
			
		
	
		
			
				
					|  |  |  |  | import numpy as np | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import cereal.messaging as messaging | 
			
		
	
		
			
				
					|  |  |  |  | from cereal import log | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.api import Api | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.params import Params | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.realtime import Ratekeeper | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.transformations.coordinates import ecef2geodetic | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.navd.helpers import (Coordinate, coordinate_from_param, | 
			
		
	
		
			
				
					|  |  |  |  |                                     distance_along_geometry, maxspeed_to_ms, | 
			
		
	
		
			
				
					|  |  |  |  |                                     minimum_distance, | 
			
		
	
	
		
			
				
					|  |  |  | @ -21,7 +19,6 @@ from openpilot.system.swaglog import cloudlog | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | REROUTE_DISTANCE = 25 | 
			
		
	
		
			
				
					|  |  |  |  | MANEUVER_TRANSITION_THRESHOLD = 10 | 
			
		
	
		
			
				
					|  |  |  |  | VALID_POS_STD = 50.0 | 
			
		
	
		
			
				
					|  |  |  |  | REROUTE_COUNTER_MIN = 3 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -79,21 +76,13 @@ class RouteEngine: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def update_location(self): | 
			
		
	
		
			
				
					|  |  |  |  |     location = self.sm['liveLocationKalman'] | 
			
		
	
		
			
				
					|  |  |  |  |     laikad = self.sm['gnssMeasurements'] | 
			
		
	
		
			
				
					|  |  |  |  |     self.gps_ok = location.gpsOK | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     locationd_valid = (location.status == log.LiveLocationKalman.Status.valid) and location.positionGeodetic.valid | 
			
		
	
		
			
				
					|  |  |  |  |     laikad_valid = laikad.positionECEF.valid and np.linalg.norm(laikad.positionECEF.std) < VALID_POS_STD | 
			
		
	
		
			
				
					|  |  |  |  |     self.localizer_valid = (location.status == log.LiveLocationKalman.Status.valid) and location.positionGeodetic.valid | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     self.localizer_valid = locationd_valid or laikad_valid | 
			
		
	
		
			
				
					|  |  |  |  |     self.gps_ok = location.gpsOK or laikad_valid | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if locationd_valid: | 
			
		
	
		
			
				
					|  |  |  |  |     if self.localizer_valid: | 
			
		
	
		
			
				
					|  |  |  |  |       self.last_bearing = math.degrees(location.calibratedOrientationNED.value[2]) | 
			
		
	
		
			
				
					|  |  |  |  |       self.last_position = Coordinate(location.positionGeodetic.value[0], location.positionGeodetic.value[1]) | 
			
		
	
		
			
				
					|  |  |  |  |     elif laikad_valid: | 
			
		
	
		
			
				
					|  |  |  |  |       geodetic = ecef2geodetic(laikad.positionECEF.value) | 
			
		
	
		
			
				
					|  |  |  |  |       self.last_position = Coordinate(geodetic[0], geodetic[1]) | 
			
		
	
		
			
				
					|  |  |  |  |       self.last_bearing = None | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def recompute_route(self): | 
			
		
	
		
			
				
					|  |  |  |  |     if self.last_position is None: | 
			
		
	
	
		
			
				
					|  |  |  | @ -357,7 +346,7 @@ class RouteEngine: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def main(sm=None, pm=None): | 
			
		
	
		
			
				
					|  |  |  |  |   if sm is None: | 
			
		
	
		
			
				
					|  |  |  |  |     sm = messaging.SubMaster(['liveLocationKalman', 'gnssMeasurements', 'managerState']) | 
			
		
	
		
			
				
					|  |  |  |  |     sm = messaging.SubMaster(['liveLocationKalman', 'managerState']) | 
			
		
	
		
			
				
					|  |  |  |  |   if pm is None: | 
			
		
	
		
			
				
					|  |  |  |  |     pm = messaging.PubMaster(['navInstruction', 'navRoute']) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |