From 092c728e766bc17a63279b42ea88a4f0f1c51a6d Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 10 Jul 2021 01:53:14 -0700 Subject: [PATCH] fix unnecessary harsh steering unavailable alerts (#21541) --- cereal | 2 +- selfdrive/car/hyundai/interface.py | 1 - selfdrive/car/interfaces.py | 19 ++++++++++++++----- selfdrive/controls/lib/events.py | 2 +- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/cereal b/cereal index 5383d9edda..b372ab3ae1 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 5383d9eddabec9f9a4d3bcded227dcd375174162 +Subproject commit b372ab3ae1a3a1097e1de87e3092ca4b05cd0471 diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index 1b24cd8a9c..6f643f1188 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -265,7 +265,6 @@ class CarInterface(CarInterfaceBase): ret.steeringRateLimited = self.CC.steer_rate_limited if self.CC is not None else False events = self.create_common_events(ret) - # TODO: addd abs(self.CS.angle_steers) > 90 to 'steerTempUnavailable' event # low speed steer alert hysteresis logic (only for cars with steer cut off above 10 m/s) if ret.vEgo < (self.CP.minSteerSpeed + 2.) and self.CP.minSteerSpeed > 10.: diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 9bceff63f4..32fb34c97a 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -27,6 +27,8 @@ class CarInterfaceBase(): self.VM = VehicleModel(CP) self.frame = 0 + self.steer_warning = 0 + self.steering_unpressed = 0 self.low_speed_alert = False if CarState is not None: @@ -97,14 +99,15 @@ class CarInterfaceBase(): def apply(self, c): raise NotImplementedError - def create_common_events(self, cs_out, extra_gears=[], gas_resume_speed=-1, pcm_enable=True): # pylint: disable=dangerous-default-value + def create_common_events(self, cs_out, extra_gears=None, gas_resume_speed=-1, pcm_enable=True): events = Events() if cs_out.doorOpen: events.add(EventName.doorOpen) if cs_out.seatbeltUnlatched: events.add(EventName.seatbeltNotLatched) - if cs_out.gearShifter != GearShifter.drive and cs_out.gearShifter not in extra_gears: + if cs_out.gearShifter != GearShifter.drive and (extra_gears is None or + cs_out.gearShifter not in extra_gears): events.add(EventName.wrongGear) if cs_out.gearShifter == GearShifter.reverse: events.add(EventName.reverseGear) @@ -123,13 +126,19 @@ class CarInterfaceBase(): if cs_out.cruiseState.nonAdaptive: events.add(EventName.wrongCruiseMode) + self.steer_warning = self.steer_warning + 1 if cs_out.steerWarning else 0 + self.steering_unpressed = 0 if cs_out.steeringPressed else self.steering_unpressed + 1 + + # Handle permanent and temporary steering faults if cs_out.steerError: events.add(EventName.steerUnavailable) elif cs_out.steerWarning: - if cs_out.steeringPressed: - events.add(EventName.steerTempUnavailableUserOverride) - else: + # only escalate to the harsher alert after the condition has + # persisted for 0.5s and we're certain that the user isn't overriding + if self.steering_unpressed > int(0.5/DT_CTRL) and self.steer_warning > int(0.5/DT_CTRL): events.add(EventName.steerTempUnavailable) + else: + events.add(EventName.steerTempUnavailableSilent) # Disable on rising edge of gas or brake. Also disable on brake when speed > 0. # Optionally allow to press gas at zero speed to resume. diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index ac194693b8..ef150709a5 100644 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -410,7 +410,7 @@ EVENTS: Dict[int, Dict[str, Union[Alert, Callable[[Any, messaging.SubMaster, boo Priority.LOWEST, VisualAlert.steerRequired, AudibleAlert.none, .0, .0, .1), }, - EventName.steerTempUnavailableUserOverride: { + EventName.steerTempUnavailableSilent: { ET.WARNING: Alert( "Steering Temporarily Unavailable", "",