#!/usr/bin/env python3 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  matplotlib 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								matplotlib . use ( ' TkAgg ' ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  sys 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  cereal . messaging  as  messaging 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  numpy  as  np 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  matplotlib . pyplot  as  plt 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# debug liateral MPC by plotting its trajectory. To receive liveLongitudinalMpc packets, 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# set on LOG_MPC env variable and run plannerd on a replay 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  mpc_vwr_thread ( addr = " 127.0.0.1 " ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . ion ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  fig  =  plt . figure ( figsize = ( 15 ,  20 ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax  =  fig . add_subplot ( 131 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aa  =  fig . add_subplot ( 132 ,  sharey = ax ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ap  =  fig . add_subplot ( 133 ,  sharey = ax ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax . set_xlim ( [ - 10 ,  10 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax . set_ylim ( [ 0. ,  100. ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aa . set_xlim ( [ - 20. ,  20 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ap . set_xlim ( [ - 5 ,  5 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax . set_xlabel ( ' x [m] ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax . set_ylabel ( ' y [m] ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aa . set_xlabel ( ' steer_angle [deg] ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ap . set_xlabel ( ' asset angle [deg] ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax . grid ( True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aa . grid ( True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ap . grid ( True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  path_x  =  np . arange ( 0 ,  100 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mpc_path_x  =  np . arange ( 0 ,  49 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p_path_y  =  np . zeros ( 100 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  l_path_y  =  np . zeros ( 100 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  r_path_y  =  np . zeros ( 100 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mpc_path_y  =  np . zeros ( 49 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mpc_steer_angle  =  np . zeros ( 49 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mpc_psi  =  np . zeros ( 49 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  line1 ,  =  ax . plot ( mpc_path_y ,  mpc_path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # line1b, = ax.plot(mpc_path_y, mpc_path_x, 'o') 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  lineP ,  =  ax . plot ( p_path_y ,  path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  lineL ,  =  ax . plot ( l_path_y ,  path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  lineR ,  =  ax . plot ( r_path_y ,  path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  line3 ,  =  aa . plot ( mpc_steer_angle ,  mpc_path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  line4 ,  =  ap . plot ( mpc_psi ,  mpc_path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ax . invert_xaxis ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  aa . invert_xaxis ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  plt . show ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # *** log *** 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  livempc  =  messaging . sub_sock ( ' liveMpc ' ,  addr = addr ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  model  =  messaging . sub_sock ( ' model ' ,  addr = addr ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  path_plan_sock  =  messaging . sub_sock ( ' lateralPlan ' ,  addr = addr ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  while  1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    lMpc  =  messaging . recv_sock ( livempc ,  wait = True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    md  =  messaging . recv_sock ( model ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    pp  =  messaging . recv_sock ( path_plan_sock ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  md  is  not  None : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      p_poly  =  np . array ( md . model . path . poly ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      l_poly  =  np . array ( md . model . leftLane . poly ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      r_poly  =  np . array ( md . model . rightLane . poly ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      p_path_y  =  np . polyval ( p_poly ,  path_x )   # lgtm[py/multiple-definition] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      l_path_y  =  np . polyval ( r_poly ,  path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      r_path_y  =  np . polyval ( l_poly ,  path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  pp  is  not  None : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      p_path_y  =  np . polyval ( pp . lateralPlan . dPolyDEPRECATED ,  path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lineP . set_xdata ( p_path_y ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lineP . set_ydata ( path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  lMpc  is  not  None : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      mpc_path_x  =  list ( lMpc . liveMpc . x ) [ 1 : ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mpc_path_y  =  list ( lMpc . liveMpc . y ) [ 1 : ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mpc_steer_angle  =  list ( lMpc . liveMpc . delta ) [ 1 : ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mpc_psi  =  list ( lMpc . liveMpc . psi ) [ 1 : ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      line1 . set_xdata ( mpc_path_y ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      line1 . set_ydata ( mpc_path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lineL . set_xdata ( l_path_y ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lineL . set_ydata ( path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lineR . set_xdata ( r_path_y ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lineR . set_ydata ( path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      line3 . set_xdata ( np . asarray ( mpc_steer_angle ) * 180. / np . pi  *  14 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      line3 . set_ydata ( mpc_path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      line4 . set_xdata ( np . asarray ( mpc_psi ) * 180. / np . pi ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      line4 . set_ydata ( mpc_path_x ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      aa . relim ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      aa . autoscale_view ( True ,  scaley = True ,  scalex = True ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      fig . canvas . draw ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      fig . canvas . flush_events ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  " __main__ " : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  len ( sys . argv )  >  1 : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mpc_vwr_thread ( sys . argv [ 1 ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mpc_vwr_thread ( )