|  |  |  | @ -5,28 +5,33 @@ import time | 
			
		
	
		
			
				
					|  |  |  |  | import threading | 
			
		
	
		
			
				
					|  |  |  |  | from typing import SupportsFloat | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from cereal import car, log | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.numpy_fast import clip | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper, DT_CTRL | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.params import Params | 
			
		
	
		
			
				
					|  |  |  |  | import cereal.messaging as messaging | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from cereal import car, log | 
			
		
	
		
			
				
					|  |  |  |  | from cereal.visionipc import VisionIpcClient, VisionStreamType | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.conversions import Conversions as CV | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from panda import ALTERNATIVE_EXPERIENCE | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.conversions import Conversions as CV | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.numpy_fast import clip | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.params import Params | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper, DT_CTRL | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.swaglog import cloudlog | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.system.version import get_short_branch | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.boardd.boardd import can_list_to_can_capnp | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.car.car_helpers import get_car, get_startup_event, get_one_can | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.alertmanager import AlertManager, set_offroad_alert | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.drive_helpers import VCruiseHelper, clip_curvature | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.events import Events, ET | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol import LatControl, MIN_LATERAL_CONTROL_SPEED | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.longcontrol import LongControl | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle, STEER_ANGLE_SATURATION_THRESHOLD | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.events import Events, ET | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.alertmanager import AlertManager, set_offroad_alert | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.longcontrol import LongControl | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.system.hardware import HARDWARE | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.system.version import get_short_branch | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | SOFT_DISABLE_TIME = 3  # seconds | 
			
		
	
		
			
				
					|  |  |  |  | LDW_MIN_SPEED = 31 * CV.MPH_TO_MS | 
			
		
	
	
		
			
				
					|  |  |  | 
 |