| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -22,7 +22,7 @@ MAX_USER_TORQUE = 500 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class CarController: | 
					 | 
					 | 
					 | 
					class CarController: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def __init__(self, dbc_name, CP, VM): | 
					 | 
					 | 
					 | 
					  def __init__(self, dbc_name, CP, VM): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.CP = CP | 
					 | 
					 | 
					 | 
					    self.CP = CP | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.torque_rate_limits = CarControllerParams(self.CP) | 
					 | 
					 | 
					 | 
					    self.params = CarControllerParams(self.CP) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.frame = 0 | 
					 | 
					 | 
					 | 
					    self.frame = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.last_steer = 0 | 
					 | 
					 | 
					 | 
					    self.last_steer = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.alert_active = False | 
					 | 
					 | 
					 | 
					    self.alert_active = False | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -56,11 +56,11 @@ class CarController: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      interceptor_gas_cmd = clip(pedal_command, 0., MAX_INTERCEPTOR_GAS) | 
					 | 
					 | 
					 | 
					      interceptor_gas_cmd = clip(pedal_command, 0., MAX_INTERCEPTOR_GAS) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					    else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      interceptor_gas_cmd = 0. | 
					 | 
					 | 
					 | 
					      interceptor_gas_cmd = 0. | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pcm_accel_cmd = clip(actuators.accel, CarControllerParams.ACCEL_MIN, CarControllerParams.ACCEL_MAX) | 
					 | 
					 | 
					 | 
					    pcm_accel_cmd = clip(actuators.accel, self.params.ACCEL_MIN, self.params.ACCEL_MAX) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # steer torque | 
					 | 
					 | 
					 | 
					    # steer torque | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    new_steer = int(round(actuators.steer * CarControllerParams.STEER_MAX)) | 
					 | 
					 | 
					 | 
					    new_steer = int(round(actuators.steer * self.params.STEER_MAX)) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    apply_steer = apply_meas_steer_torque_limits(new_steer, self.last_steer, CS.out.steeringTorqueEps, self.torque_rate_limits) | 
					 | 
					 | 
					 | 
					    apply_steer = apply_meas_steer_torque_limits(new_steer, self.last_steer, CS.out.steeringTorqueEps, self.params) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Count up to MAX_STEER_RATE_FRAMES, at which point we need to cut torque to avoid a steering fault | 
					 | 
					 | 
					 | 
					    # Count up to MAX_STEER_RATE_FRAMES, at which point we need to cut torque to avoid a steering fault | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if lat_active and abs(CS.out.steeringRateDeg) >= MAX_STEER_RATE: | 
					 | 
					 | 
					 | 
					    if lat_active and abs(CS.out.steeringRateDeg) >= MAX_STEER_RATE: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -162,7 +162,7 @@ class CarController: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        can_sends.append(make_can_msg(addr, vl, bus)) | 
					 | 
					 | 
					 | 
					        can_sends.append(make_can_msg(addr, vl, bus)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    new_actuators = actuators.copy() | 
					 | 
					 | 
					 | 
					    new_actuators = actuators.copy() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    new_actuators.steer = apply_steer / CarControllerParams.STEER_MAX | 
					 | 
					 | 
					 | 
					    new_actuators.steer = apply_steer / self.params.STEER_MAX | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    new_actuators.steerOutputCan = apply_steer | 
					 | 
					 | 
					 | 
					    new_actuators.steerOutputCan = apply_steer | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    new_actuators.accel = self.accel | 
					 | 
					 | 
					 | 
					    new_actuators.accel = self.accel | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    new_actuators.gas = self.gas | 
					 | 
					 | 
					 | 
					    new_actuators.gas = self.gas | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |