import math
from cereal import log
from openpilot . selfdrive . controls . lib . latcontrol import LatControl
STEER_ANGLE_SATURATION_THRESHOLD = 2.5 # Degrees
class LatControlAngle ( LatControl ) :
def __init__ ( self , CP , CI ) :
super ( ) . __init__ ( CP , CI )
self . sat_check_min_speed = 5.
def update ( self , active , CS , VM , params , steer_limited , desired_curvature , calibrated_pose ) :
angle_log = log . ControlsState . LateralAngleState . new_message ( )
if not active :
angle_log . active = False
angle_steers_des = float ( CS . steeringAngleDeg )
else :
angle_log . active = True
angle_steers_des = math . degrees ( VM . get_steer_from_curvature ( - desired_curvature , CS . vEgo , params . roll ) )
angle_steers_des + = params . angleOffsetDeg
angle_control_saturated = abs ( angle_steers_des - CS . steeringAngleDeg ) > STEER_ANGLE_SATURATION_THRESHOLD
angle_log . saturated = self . _check_saturation ( angle_control_saturated , CS , False )
angle_log . steeringAngleDeg = float ( CS . steeringAngleDeg )
angle_log . steeringAngleDesiredDeg = angle_steers_des
return 0 , float ( angle_steers_des ) , angle_log