mirror of
https://github.com/MoreTore/openpilot.git
synced 2026-08-05 16:26:14 +08:00
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
This commit is contained in:
@@ -16,18 +16,24 @@ class CarInterface(CarInterfaceBase):
|
||||
params = CarControllerParams()
|
||||
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
|
||||
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
|
||||
sigmoid = desired_angle / (1 + fabs(desired_angle))
|
||||
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):
|
||||
if self.CP.carFingerprint in [CAR.VOLT]:
|
||||
if self.CP.carFingerprint == CAR.VOLT:
|
||||
return self.get_steer_feedforward_volt
|
||||
elif self.CP.carFingerprint == CAR.ACADIA:
|
||||
return self.get_steer_feedforward_acadia
|
||||
else:
|
||||
return CarInterfaceBase.get_steer_feedforward_default
|
||||
|
||||
@@ -94,6 +100,7 @@ class CarInterface(CarInterfaceBase):
|
||||
ret.steerRatio = 14.4 # end to end is 13.46
|
||||
ret.steerRatioRear = 0.
|
||||
ret.centerToFront = ret.wheelbase * 0.4
|
||||
ret.lateralTuning.pid.kf = 1. # get_steer_feedforward_acadia()
|
||||
|
||||
elif candidate == CAR.BUICK_REGAL:
|
||||
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.kf = 0.000045
|
||||
tire_stiffness_factor = 1.0
|
||||
|
||||
|
||||
# TODO: get actual value, for now starting with reasonable value for
|
||||
# civic and scaling by mass and wheelbase
|
||||
ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
|
||||
|
||||
Reference in New Issue
Block a user