GM: improved Volt lateral tuning (#22621)

* GM Volt lateral tuning and feedforward function

* improve comments, lower P 5% to 0.17, which matches all my notes over time, 0.18 was a last test change.

* don't justify actuator delay for now

* update refs

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
pull/22688/head
qadmus 4 years ago committed by GitHub
parent 6a587ac873
commit 2e0bc9d365
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      selfdrive/car/gm/interface.py
  2. 2
      selfdrive/test/process_replay/ref_commit

@ -1,5 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from cereal import car from cereal import car
from math import fabs
from selfdrive.config import Conversions as CV from selfdrive.config import Conversions as CV
from selfdrive.car.gm.values import CAR, CruiseButtons, \ from selfdrive.car.gm.values import CAR, CruiseButtons, \
AccState, CarControllerParams AccState, CarControllerParams
@ -15,6 +16,21 @@ 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.
@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)
def get_steer_feedforward_function(self):
if self.CP.carFingerprint in [CAR.VOLT]:
return self.get_steer_feedforward_volt
else:
return CarInterfaceBase.get_steer_feedforward_default
@staticmethod @staticmethod
def get_params(candidate, fingerprint=gen_empty_fingerprint(), car_fw=None): def get_params(candidate, fingerprint=gen_empty_fingerprint(), car_fw=None):
ret = CarInterfaceBase.get_std_params(candidate, fingerprint) ret = CarInterfaceBase.get_std_params(candidate, fingerprint)
@ -41,9 +57,17 @@ class CarInterface(CarInterfaceBase):
ret.minEnableSpeed = 18 * CV.MPH_TO_MS ret.minEnableSpeed = 18 * CV.MPH_TO_MS
ret.mass = 1607. + STD_CARGO_KG ret.mass = 1607. + STD_CARGO_KG
ret.wheelbase = 2.69 ret.wheelbase = 2.69
ret.steerRatio = 15.7 ret.steerRatio = 17.7 # Stock 15.7, LiveParameters
tire_stiffness_factor = 0.469 # Stock Michelin Energy Saver A/S, LiveParameters
ret.steerRatioRear = 0. ret.steerRatioRear = 0.
ret.centerToFront = ret.wheelbase * 0.4 # wild guess ret.centerToFront = ret.wheelbase * 0.45 # Volt Gen 1, TODO corner weigh
ret.lateralTuning.pid.kpBP = [0., 40.]
ret.lateralTuning.pid.kpV = [0., 0.17]
ret.lateralTuning.pid.kiBP = [0.]
ret.lateralTuning.pid.kiV = [0.]
ret.lateralTuning.pid.kf = 1. # get_steer_feedforward_volt()
ret.steerActuatorDelay = 0.2
elif candidate == CAR.MALIBU: elif candidate == CAR.MALIBU:
# supports stop and go, but initial engage must be above 18mph (which include conservatism) # supports stop and go, but initial engage must be above 18mph (which include conservatism)

@ -1 +1 @@
5522675909c1af529323735a02ae2186dbed898d d616c135e470264dbc40e77b25a4dab1fc449d75
Loading…
Cancel
Save