From fb87ba681ad79995f63015ad4ede0c1778ae3e9b Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Apr 2025 16:06:45 -0400 Subject: [PATCH] MADS: transition to soft-disable for specific gear states (#791) * MADS: transition to soft-disable for specific gear states This commit enhances the condition checking functionality of the Modular Assistive Driving System (MADS) to implement a 'soft-disable' feature during the vehicle's active motion when a non-forward drive gear is engaged. It includes utilizing structs to reference various car state attributes and modifying a function definition to improve clarity. This adjustment boosts the system's reaction to gear shifts, increasing the safety and efficiency of the driving assist system. * structs --- sunnypilot/mads/mads.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sunnypilot/mads/mads.py b/sunnypilot/mads/mads.py index 93f4ad37e..2d7d41b4b 100644 --- a/sunnypilot/mads/mads.py +++ b/sunnypilot/mads/mads.py @@ -5,16 +5,18 @@ This file is part of sunnypilot and is licensed under the MIT License. See the LICENSE.md file in the root directory for more details. """ -from cereal import car, log, custom +from cereal import log, custom +from opendbc.car import structs from opendbc.car.hyundai.values import HyundaiFlags from openpilot.sunnypilot.mads.state import StateMachine, GEARS_ALLOW_PAUSED_SILENT State = custom.ModularAssistiveDrivingSystem.ModularAssistiveDrivingSystemState -ButtonType = car.CarState.ButtonEvent.Type +ButtonType = structs.CarState.ButtonEvent.Type EventName = log.OnroadEvent.EventName EventNameSP = custom.OnroadEventSP.EventName -SafetyModel = car.CarParams.SafetyModel +GearShifter = structs.CarState.GearShifter +SafetyModel = structs.CarParams.SafetyModel SET_SPEED_BUTTONS = (ButtonType.accelCruise, ButtonType.resumeCruise, ButtonType.decelCruise, ButtonType.setCruise) IGNORED_SAFETY_MODES = (SafetyModel.silent, SafetyModel.noOutput) @@ -48,7 +50,7 @@ class ModularAssistiveDrivingSystem: self.main_enabled_toggle = self.params.get_bool("MadsMainCruiseAllowed") self.unified_engagement_mode = self.params.get_bool("MadsUnifiedEngagementMode") - def update_events(self, CS: car.CarState): + def update_events(self, CS: structs.CarState): def update_unified_engagement_mode(): uem_blocked = self.enabled or (self.selfdrive.enabled and self.selfdrive.enabled_prev) if (self.unified_engagement_mode and uem_blocked) or not self.unified_engagement_mode: @@ -70,7 +72,7 @@ class ModularAssistiveDrivingSystem: if self.events.has(EventName.seatbeltNotLatched): replace_event(EventName.seatbeltNotLatched, EventNameSP.silentSeatbeltNotLatched) transition_paused_state() - if self.events.has(EventName.wrongGear): + if self.events.has(EventName.wrongGear) and (CS.standstill or CS.gearShifter == GearShifter.reverse): replace_event(EventName.wrongGear, EventNameSP.silentWrongGear) transition_paused_state() if self.events.has(EventName.reverseGear): @@ -133,7 +135,7 @@ class ModularAssistiveDrivingSystem: else: self.events.remove(EventName.wrongCarMode) - def update(self, CS: car.CarState): + def update(self, CS: structs.CarState): if not self.enabled_toggle: return