From 173ab90402f85c07cd65750c7f31cc97a8b07d59 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Fri, 27 Sep 2024 23:30:28 -0700 Subject: [PATCH] Re-apply "Lexus ES TSS2: improve start from stop response time" (#1303) * Revert "Revert "Lexus ES TSS2: improve start from stop response time" (#1302)" This reverts commit c696545153415a2931744625caab1d569d59df4a. * something like this? check it allows start from stop --- opendbc/car/toyota/carcontroller.py | 15 ++++++++++++--- opendbc/car/toyota/toyotacan.py | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/opendbc/car/toyota/carcontroller.py b/opendbc/car/toyota/carcontroller.py index b45c79a547..ef9be010e4 100644 --- a/opendbc/car/toyota/carcontroller.py +++ b/opendbc/car/toyota/carcontroller.py @@ -45,6 +45,7 @@ def __init__(self, dbc_name, CP): self.distance_button = 0 self.pcm_accel_compensation = 0.0 + self.permit_braking = 0.0 self.packer = CANPacker(dbc_name) self.accel = 0 @@ -125,9 +126,17 @@ def update(self, CC, CS, now_nanos): self.pcm_accel_compensation = rate_limit(pcm_accel_compensation, self.pcm_accel_compensation, -0.01, 0.01) pcm_accel_cmd = actuators.accel - self.pcm_accel_compensation + + # Along with rate limiting positive jerk below, this greatly improves gas response time + # Consider the net acceleration request that the PCM should be applying (pitch included) + if net_acceleration_request < 0.1: + self.permit_braking = True + elif net_acceleration_request > 0.2: + self.permit_braking = False else: self.pcm_accel_compensation = 0.0 pcm_accel_cmd = actuators.accel + self.permit_braking = True pcm_accel_cmd = clip(pcm_accel_cmd, self.params.ACCEL_MIN, self.params.ACCEL_MAX) @@ -163,11 +172,11 @@ def update(self, CC, CS, now_nanos): # internal PCM gas command can get stuck unwinding from negative accel so we apply a generous rate limit pcm_accel_cmd = min(pcm_accel_cmd, self.accel + ACCEL_WINDUP_LIMIT) if CC.longActive else 0.0 - can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.standstill_req, lead, CS.acc_type, fcw_alert, - self.distance_button)) + can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.permit_braking, self.standstill_req, lead, + CS.acc_type, fcw_alert, self.distance_button)) self.accel = pcm_accel_cmd else: - can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, False, lead, CS.acc_type, False, self.distance_button)) + can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, True, False, lead, CS.acc_type, False, self.distance_button)) # *** hud ui *** if self.CP.carFingerprint != CAR.TOYOTA_PRIUS_V: diff --git a/opendbc/car/toyota/toyotacan.py b/opendbc/car/toyota/toyotacan.py index 2ac1093ea7..7110c9202a 100644 --- a/opendbc/car/toyota/toyotacan.py +++ b/opendbc/car/toyota/toyotacan.py @@ -33,14 +33,14 @@ def create_lta_steer_command(packer, steer_control_type, steer_angle, steer_req, return packer.make_can_msg("STEERING_LTA", 0, values) -def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_type, fcw_alert, distance): +def create_accel_command(packer, accel, pcm_cancel, permit_braking, standstill_req, lead, acc_type, fcw_alert, distance): # TODO: find the exact canceling bit that does not create a chime values = { "ACCEL_CMD": accel, "ACC_TYPE": acc_type, "DISTANCE": distance, "MINI_CAR": lead, - "PERMIT_BRAKING": 1, + "PERMIT_BRAKING": permit_braking, "RELEASE_STANDSTILL": not standstill_req, "CANCEL_REQ": pcm_cancel, "ALLOW_LONG_PRESS": 1,