GMC Acadia: Add lateral feedforward function (#22899)

* GM Acadia lateral tuning

* old tune was not returning to center, nor strong enough. Trying to make P and F equal.

* reduce integral, and eyeball actuator delay

* return PI to openpilot default

* remove default values from acadia

Co-authored-by: qadmus <42746943+qadmus@users.noreply.github.com>
old-commit-hash: 957864019a
commatwo_master
Dave 3 years ago committed by GitHub
parent ee8addb8c5
commit 1ed29c23cb
  1. 17
      selfdrive/car/gm/interface.py

@ -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 determined by iteratively plotting and minimizing error for f(angle, speed) = steer. # Determined 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
@ -121,7 +128,7 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.13, 0.24], [0.01, 0.02]] ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.13, 0.24], [0.01, 0.02]]
ret.lateralTuning.pid.kf = 0.000045 ret.lateralTuning.pid.kf = 0.000045
tire_stiffness_factor = 1.0 tire_stiffness_factor = 1.0
# TODO: get actual value, for now starting with reasonable value for # TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase # civic and scaling by mass and wheelbase
ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase) ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)

Loading…
Cancel
Save