# mock_gps.py: Publishes a generated path moving at 15m/s to gpsLocation 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# USAGE: python mock_gps.py 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# Then start manager 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  itertools  import  cycle 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  time 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  zmq 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  cereal  import  log 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  cereal . messaging  as  messaging 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  cereal . services  import  service_list 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								degrees_per_meter  =  0.000009000009  # approximation 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								start_lat  =  43.64199141443989 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								start_lng  =  - 94.97520411931725 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  gen_path ( length_seconds ,  speed = 15 ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  [ { " lat " :  start_lat , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             " lng " :  start_lng  +  speed  *  i  *  degrees_per_meter ,  # moving along longitudinal axis at speed m/s 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             " speed " :  speed } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             for  i  in  range ( 1 ,  length_seconds  +  1 ) ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  ' __main__ ' : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gpsLocation  =  messaging . pub_sock ( ' gpsLocation ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path_stopped_5s  =  [ { " lat " :  start_lat ,  " lng " :  start_lng ,  " speed " :  0 } ]  *  5 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path_moving  =  gen_path ( 30 ,  speed = 15 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path_stopped_5s_then_moving  =  path_stopped_5s  +  path_moving 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  point  in  cycle ( path_stopped_5s_then_moving ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        print ( ' sending gpsLocation from point:  {} ' . format ( str ( point ) ) ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        dat  =  messaging . new_message ( ' gpsLocation ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . latitude  =  point [ ' lat ' ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . longitude  =  point [ ' lng ' ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . speed  =  point [ ' speed ' ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . flags  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . altitude  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . bearing  =  0  # todo we can mock this 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . accuracy  =  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . timestamp  =  int ( time . time ( )  *  1000 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dat . gpsLocation . source  =  log . GpsLocationData . SensorSource . android 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        gpsLocation . send ( dat . to_bytes ( ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        time . sleep ( 1 )