@ -16,18 +16,24 @@ class CarInterface(CarInterfaceBase):
params = CarControllerParams ( )
params = CarControllerParams ( )
return params . ACCEL_MIN , params . ACCEL_MAX
return params . ACCEL_MIN , params . ACCEL_MAX
# Volt d etermined by iteratively plotting and minimizing error for f(angle, speed) = steer.
# D etermined by iteratively plotting and minimizing error for f(angle, speed) = steer.
@staticmethod
@staticmethod
def get_steer_feedforward_volt ( desired_angle , v_ego ) :
def get_steer_feedforward_volt ( desired_angle , v_ego ) :
# maps [-inf,inf] to [-1,1]: sigmoid(34.4 deg) = sigmoid(1) = 0.5
# 1 / 0.02904609 = 34.4 deg ~= 36 deg ~= 1/10 circle? Arbitrary?
desired_angle * = 0.02904609
desired_angle * = 0.02904609
sigmoid = desired_angle / ( 1 + fabs ( desired_angle ) )
sigmoid = desired_angle / ( 1 + fabs ( desired_angle ) )
return 0.10006696 * sigmoid * ( v_ego + 3.12485927 )
return 0.10006696 * sigmoid * ( v_ego + 3.12485927 )
@staticmethod
def get_steer_feedforward_acadia ( desired_angle , v_ego ) :
desired_angle * = 0.09760208
sigmoid = desired_angle / ( 1 + fabs ( desired_angle ) )
return 0.04689655 * sigmoid * ( v_ego + 10.028217 )
def get_steer_feedforward_function ( self ) :
def get_steer_feedforward_function ( self ) :
if self . CP . carFingerprint in [ CAR . VOLT ] :
if self . CP . carFingerprint == CAR . VOLT :
return self . get_steer_feedforward_volt
return self . get_steer_feedforward_volt
elif self . CP . carFingerprint == CAR . ACADIA :
return self . get_steer_feedforward_acadia
else :
else :
return CarInterfaceBase . get_steer_feedforward_default
return CarInterfaceBase . get_steer_feedforward_default
@ -94,6 +100,7 @@ class CarInterface(CarInterfaceBase):
ret . steerRatio = 14.4 # end to end is 13.46
ret . steerRatio = 14.4 # end to end is 13.46
ret . steerRatioRear = 0.
ret . steerRatioRear = 0.
ret . centerToFront = ret . wheelbase * 0.4
ret . centerToFront = ret . wheelbase * 0.4
ret . lateralTuning . pid . kf = 1. # get_steer_feedforward_acadia()
elif candidate == CAR . BUICK_REGAL :
elif candidate == CAR . BUICK_REGAL :
ret . minEnableSpeed = 18 * CV . MPH_TO_MS
ret . minEnableSpeed = 18 * CV . MPH_TO_MS