Skip to content

Commit 9578640

Browse files
Verylukyguyhewers
andauthored
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>
1 parent a36d616 commit 9578640

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

selfdrive/car/gm/interface.py

+12-5
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,24 @@ def get_pid_accel_limits(CP, current_speed, cruise_speed):
1616
params = CarControllerParams()
1717
return params.ACCEL_MIN, params.ACCEL_MAX
1818

19-
# Volt determined by iteratively plotting and minimizing error for f(angle, speed) = steer.
19+
# Determined by iteratively plotting and minimizing error for f(angle, speed) = steer.
2020
@staticmethod
2121
def get_steer_feedforward_volt(desired_angle, v_ego):
22-
# maps [-inf,inf] to [-1,1]: sigmoid(34.4 deg) = sigmoid(1) = 0.5
23-
# 1 / 0.02904609 = 34.4 deg ~= 36 deg ~= 1/10 circle? Arbitrary?
2422
desired_angle *= 0.02904609
2523
sigmoid = desired_angle / (1 + fabs(desired_angle))
2624
return 0.10006696 * sigmoid * (v_ego + 3.12485927)
2725

26+
@staticmethod
27+
def get_steer_feedforward_acadia(desired_angle, v_ego):
28+
desired_angle *= 0.09760208
29+
sigmoid = desired_angle / (1 + fabs(desired_angle))
30+
return 0.04689655 * sigmoid * (v_ego + 10.028217)
31+
2832
def get_steer_feedforward_function(self):
29-
if self.CP.carFingerprint in [CAR.VOLT]:
33+
if self.CP.carFingerprint == CAR.VOLT:
3034
return self.get_steer_feedforward_volt
35+
elif self.CP.carFingerprint == CAR.ACADIA:
36+
return self.get_steer_feedforward_acadia
3137
else:
3238
return CarInterfaceBase.get_steer_feedforward_default
3339

@@ -94,6 +100,7 @@ def get_params(candidate, fingerprint=gen_empty_fingerprint(), car_fw=None):
94100
ret.steerRatio = 14.4 # end to end is 13.46
95101
ret.steerRatioRear = 0.
96102
ret.centerToFront = ret.wheelbase * 0.4
103+
ret.lateralTuning.pid.kf = 1. # get_steer_feedforward_acadia()
97104

98105
elif candidate == CAR.BUICK_REGAL:
99106
ret.minEnableSpeed = 18 * CV.MPH_TO_MS
@@ -121,7 +128,7 @@ def get_params(candidate, fingerprint=gen_empty_fingerprint(), car_fw=None):
121128
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.13, 0.24], [0.01, 0.02]]
122129
ret.lateralTuning.pid.kf = 0.000045
123130
tire_stiffness_factor = 1.0
124-
131+
125132
# TODO: get actual value, for now starting with reasonable value for
126133
# civic and scaling by mass and wheelbase
127134
ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)

0 commit comments

Comments
 (0)