@ -49,15 +49,14 @@ T_IDXS_LST = [index_function(idx, max_val=MAX_T, max_idx=N+1) for idx in range(N 
			
		
	
		
			
				
					T_IDXS  =  np . array ( T_IDXS_LST )  
			
		
	
		
			
				
					T_DIFFS  =  np . diff ( T_IDXS ,  prepend = [ 0. ] )  
			
		
	
		
			
				
					MIN_ACCEL  =  - 3.5  
			
		
	
		
			
				
					T_REACT  =  1.8  
			
		
	
		
			
				
					MAX_BRAKE  =  9.81  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					T_REACT  =  1.45  
			
		
	
		
			
				
					COMFORT_BRAKE  =  2.0  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					def  get_stopped_equivalence_factor ( v_lead ) :  
			
		
	
		
			
				
					  return  T_REACT  *  v_lead  +  ( v_lead * v_lead )  /  ( 2  *  MAX_BRAKE )   
			
		
	
		
			
				
					  return  v_lead * * 2  /  ( 2  *  COMFORT_BRAKE )  -  T_REACT  *  v_lead   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					def  get_safe_obstacle_distance ( v_ego ) :  
			
		
	
		
			
				
					  return  2  *  T_REACT  *  v_ego  +  ( v_ego * v_ego )  /  ( 2  *  MAX_BRAKE )  +  4 .0  
			
		
	
		
			
				
					  return  ( v_ego * v_ego )  /  ( 2  *  COMFORT_BRAKE )  +  6 .0  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					def  desired_follow_distance ( v_ego ,  v_lead ) :  
			
		
	
		
			
				
					  return  get_safe_obstacle_distance ( v_ego )  -  get_stopped_equivalence_factor ( v_lead )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -242,7 +241,7 @@ class LongitudinalMpc(): 
			
		
	
		
			
				
					      self . solver . cost_set ( i ,  ' Zl ' ,  Zl )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  def  set_weights_for_xva_policy ( self ) :   
			
		
	
		
			
				
					    W  =  np . asfortranarray ( np . diag ( [ 0. ,  10. ,  1. ,  10. ,  0.0 ,  1. ] ) )   
			
		
	
		
			
				
					    W  =  np . asfortranarray ( np . diag ( [ 0. ,  10. ,  1. ,  10. ,  1. ] ) )   
			
		
	
		
			
				
					    for  i  in  range ( N ) :   
			
		
	
		
			
				
					      self . solver . cost_set ( i ,  ' W ' ,  W )   
			
		
	
		
			
				
					    # Setting the slice without the copy make the array not contiguous,   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -318,12 +317,12 @@ class LongitudinalMpc(): 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # Fake an obstacle for cruise, this ensures smooth acceleration to set speed   
			
		
	
		
			
				
					    # when the leads are no factor.   
			
		
	
		
			
				
					    cruise_lower_bound =  v_ego  +  ( 3 / 4 )  *  self . cruise_min_a  *  T_IDXS   
			
		
	
		
			
				
					    cruise_upper_bound =  v_ego  +  ( 3 / 4 )  *  self . cruise_max_a  *  T_IDXS   
			
		
	
		
			
				
					    v_lower =  v_ego  +  ( T_IDXS  *  self . cruise_min_a  *  1.05 )   
			
		
	
		
			
				
					    v_upper =  v_ego  +  ( T_IDXS  *  self . cruise_max_a  *  1.05 )   
			
		
	
		
			
				
					    v_cruise_clipped  =  np . clip ( v_cruise  *  np . ones ( N + 1 ) ,   
			
		
	
		
			
				
					                               cruise_lower_bound ,   
			
		
	
		
			
				
					                               cruise_upper_bound )   
			
		
	
		
			
				
					    cruise_obstacle  =  T_IDXS * v_cruise_clipped +  get_safe_obstacle_distance ( v_cruise_clipped )   
			
		
	
		
			
				
					                               v_lower ,   
			
		
	
		
			
				
					                               v_upper )   
			
		
	
		
			
				
					    cruise_obstacle  =  np . cumsum ( T_DIFFS  *  v_cruise_clipped ) +  get_safe_obstacle_distance ( v_cruise_clipped )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    x_obstacles  =  np . column_stack ( [ lead_0_obstacle ,  lead_1_obstacle ,  cruise_obstacle ] )   
			
		
	
		
			
				
					    self . source  =  SOURCES [ np . argmin ( x_obstacles [ 0 ] ) ]