|
|
|
@ -69,8 +69,8 @@ class CarInterface(CarInterfaceBase): |
|
|
|
|
# Tire stiffness factor fictitiously lower if it includes the steering column torsion effect. |
|
|
|
|
# For modeling details, see p.198-200 in "The Science of Vehicle Dynamics (2014), M. Guiggiani" |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0], [0]] |
|
|
|
|
ret.lateralTuning.kiBP, ret.lateralTuning.kpBP = [[0.], [0.]] |
|
|
|
|
ret.lateralTuning.kf = 0.00006 # conservative feed-forward |
|
|
|
|
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]] |
|
|
|
|
ret.lateralTuning.pid.kf = 0.00006 # conservative feed-forward |
|
|
|
|
|
|
|
|
|
if candidate in HONDA_BOSCH: |
|
|
|
|
ret.longitudinalActuatorDelay = 0.5 # s |
|
|
|
@ -95,30 +95,30 @@ class CarInterface(CarInterfaceBase): |
|
|
|
|
# modified filter output values: 0x009F, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0400, 0x0480 |
|
|
|
|
# note: max request allowed is 4096, but request is capped at 3840 in firmware, so modifications result in 2x max |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 2560, 8000], [0, 2560, 3840]] |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.3], [0.1]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.3], [0.1]] |
|
|
|
|
else: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 2560], [0, 2560]] |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[1.1], [0.33]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[1.1], [0.33]] |
|
|
|
|
|
|
|
|
|
elif candidate in (CAR.HONDA_CIVIC_BOSCH, CAR.HONDA_CIVIC_BOSCH_DIESEL, CAR.HONDA_CIVIC_2022): |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.8], [0.24]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_ACCORD: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
|
|
|
|
|
if eps_modified: |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.3], [0.09]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.3], [0.09]] |
|
|
|
|
else: |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.6], [0.18]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.ACURA_ILX: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 3840], [0, 3840]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.8], [0.24]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] |
|
|
|
|
|
|
|
|
|
elif candidate in (CAR.HONDA_CRV, CAR.HONDA_CRV_EU): |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 1000], [0, 1000]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.8], [0.24]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] |
|
|
|
|
ret.wheelSpeedFactor = 1.025 |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_CRV_5G: |
|
|
|
@ -127,43 +127,43 @@ class CarInterface(CarInterfaceBase): |
|
|
|
|
# stock request output values: 0x0000, 0x0500, 0x0A15, 0x0E6D, 0x1100, 0x1200, 0x129A, 0x134D, 0x1400 |
|
|
|
|
# modified request output values: 0x0000, 0x0500, 0x0A15, 0x0E6D, 0x1100, 0x1200, 0x1ACD, 0x239A, 0x2800 |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 2560, 10000], [0, 2560, 3840]] |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.21], [0.07]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.21], [0.07]] |
|
|
|
|
else: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 3840], [0, 3840]] |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.64], [0.192]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.64], [0.192]] |
|
|
|
|
ret.wheelSpeedFactor = 1.025 |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_CRV_HYBRID: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.6], [0.18]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]] |
|
|
|
|
ret.wheelSpeedFactor = 1.025 |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_FIT: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.2], [0.05]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.2], [0.05]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_FREED: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.2], [0.05]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.2], [0.05]] |
|
|
|
|
|
|
|
|
|
elif candidate in (CAR.HONDA_HRV, CAR.HONDA_HRV_3G): |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] |
|
|
|
|
if candidate == CAR.HONDA_HRV: |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.16], [0.025]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.16], [0.025]] |
|
|
|
|
ret.wheelSpeedFactor = 1.025 |
|
|
|
|
else: |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.8], [0.24]] # TODO: can probably use some tuning |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] # TODO: can probably use some tuning |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.ACURA_RDX: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 1000], [0, 1000]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.8], [0.24]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.ACURA_RDX_3G: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 3840], [0, 3840]] |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.2], [0.06]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.2], [0.06]] |
|
|
|
|
|
|
|
|
|
elif candidate in (CAR.HONDA_ODYSSEY, CAR.HONDA_ODYSSEY_CHN): |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.28], [0.08]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.28], [0.08]] |
|
|
|
|
if candidate == CAR.HONDA_ODYSSEY_CHN: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 32767], [0, 32767]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
else: |
|
|
|
@ -171,19 +171,19 @@ class CarInterface(CarInterfaceBase): |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_PILOT: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.38], [0.11]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.38], [0.11]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_RIDGELINE: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.38], [0.11]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.38], [0.11]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_INSIGHT: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.6], [0.18]] |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]] |
|
|
|
|
|
|
|
|
|
elif candidate == CAR.HONDA_E: |
|
|
|
|
ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end |
|
|
|
|
ret.lateralTuning.kpV, ret.lateralTuning.kiV = [[0.6], [0.18]] # TODO: can probably use some tuning |
|
|
|
|
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]] # TODO: can probably use some tuning |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
raise ValueError(f"unsupported car {candidate}") |
|
|
|
|