from abc import abstractmethod , ABC
from common . numpy_fast import clip
from common . realtime import DT_CTRL
MIN_LATERAL_CONTROL_SPEED = 0.3 # m/s
class LatControl ( ABC ) :
def __init__ ( self , CP , CI ) :
self . sat_count_rate = 1.0 * DT_CTRL
self . sat_limit = CP . steerLimitTimer
self . sat_count = 0.
self . sat_check_min_speed = 10.
# we define the steer torque scale as [-1.0...1.0]
self . steer_max = 1.0
@abstractmethod
def update ( self , active , CS , VM , params , last_actuators , steer_limited , desired_curvature , desired_curvature_rate , llk ) :
pass
def reset ( self ) :
self . sat_count = 0.
def _check_saturation ( self , saturated , CS , steer_limited ) :
if saturated and CS . vEgo > self . sat_check_min_speed and not steer_limited and not CS . steeringPressed :
self . sat_count + = self . sat_count_rate
else :
self . sat_count - = self . sat_count_rate
self . sat_count = clip ( self . sat_count , 0.0 , self . sat_limit )
return self . sat_count > ( self . sat_limit - 1e-3 )