From 87475e02cb63cc39c9b16edc67f303e02d17e6ef Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 14 Jan 2022 23:24:00 -0500 Subject: [PATCH 01/23] Disengage on gas toggle --- selfdrive/car/interfaces.py | 5 +++-- selfdrive/common/params.cc | 1 + selfdrive/manager/manager.py | 1 + selfdrive/ui/qt/offroad/settings.cc | 6 ++++++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 1af03065a..3a98883d6 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -32,6 +32,7 @@ class CarInterfaceBase(ABC): self.steering_unpressed = 0 self.low_speed_alert = False self.silent_steer_warning = True + self.disengage_on_gas = params.get("DisengageOnGas", encoding='utf8') if CarState is not None: self.CS = CarState(CP) @@ -123,7 +124,7 @@ class CarInterfaceBase(ABC): events.add(EventName.wrongCarMode) if cs_out.espDisabled: events.add(EventName.espDisabled) - if cs_out.gasPressed: + if cs_out.gasPressed and self.disengage_on_gas: events.add(EventName.gasPressed) if cs_out.stockFcw: events.add(EventName.stockFcw) @@ -152,7 +153,7 @@ class CarInterfaceBase(ABC): events.add(EventName.steerUnavailable) # Disable on rising edge of gas or brake. Also disable on brake when speed > 0. - if (cs_out.gasPressed and not self.CS.out.gasPressed) or \ + if (self.disengage_on_gas and cs_out.gasPressed and not self.CS.out.gasPressed) or \ (cs_out.brakePressed and (not self.CS.out.brakePressed or not cs_out.standstill)): events.add(EventName.pedalPressed) diff --git a/selfdrive/common/params.cc b/selfdrive/common/params.cc index ef19f4491..e425fda81 100644 --- a/selfdrive/common/params.cc +++ b/selfdrive/common/params.cc @@ -99,6 +99,7 @@ std::unordered_map keys = { {"DisableRadar_Allow", PERSISTENT}, {"DisableRadar", PERSISTENT}, // WARNING: THIS DISABLES AEB {"DisableUpdates", PERSISTENT}, + {"DisengageOnGas", PERSISTENT}, {"DongleId", PERSISTENT}, {"DoReboot", CLEAR_ON_MANAGER_START}, {"DoShutdown", CLEAR_ON_MANAGER_START}, diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 77fb9543d..ba2ce9143 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -38,6 +38,7 @@ def manager_init() -> None: default_params: List[Tuple[str, Union[str, bytes]]] = [ ("CompletedTrainingVersion", "0"), + ("DisengageOnGas", "1"), ("HasAcceptedTerms", "0"), ("OpenpilotEnabledToggle", "1"), ] diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 8e8989995..1f284877c 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -71,6 +71,12 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { "In this mode openpilot will ignore lanelines and just drive how it thinks a human would.", "../assets/offroad/icon_road.png", }, + { + "DisengageOnGas", + "Disengage openpilot On Gas Press", + "Disengage openpilot on gas pedal press.", + "../assets/offroad/icon_speed_limit.png", + }, #ifdef ENABLE_MAPS { "NavSettingTime24h", From 2230254ca709625d591b0c73d1a6022c450f6ef6 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 14 Jan 2022 23:38:46 -0500 Subject: [PATCH 02/23] Disengage on gas toggle --- selfdrive/boardd/boardd.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 9cf3cbc04..09120f1ec 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -174,7 +174,7 @@ bool safety_setter_thread(std::vector pandas) { LOGW("panda %d: setting safety model: %d with param %d", i, (int)safety_model, safety_param); - panda->set_unsafe_mode(0); // see safety_declarations.h for allowed values + panda->set_unsafe_mode(p.getBool("DisengageOnGas") ? 0 : 1); // see safety_declarations.h for allowed values panda->set_safety_model(safety_model, safety_param); } From 99cf13caeb4d9f2c95c25e1e78b6e353ea508cb6 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 15 Jan 2022 00:03:38 -0500 Subject: [PATCH 03/23] Fix missing params lib --- selfdrive/car/interfaces.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 3a98883d6..ce6e29eeb 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -11,6 +11,7 @@ from selfdrive.config import Conversions as CV from selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX from selfdrive.controls.lib.events import Events from selfdrive.controls.lib.vehicle_model import VehicleModel +from common.params import Params GearShifter = car.CarState.GearShifter EventName = car.CarEvent.EventName @@ -32,7 +33,7 @@ class CarInterfaceBase(ABC): self.steering_unpressed = 0 self.low_speed_alert = False self.silent_steer_warning = True - self.disengage_on_gas = params.get("DisengageOnGas", encoding='utf8') + self.disengage_on_gas = Params().get("DisengageOnGas", encoding='utf8') if CarState is not None: self.CS = CarState(CP) From 04c0ad1a54f4fea5efe74b3203d9bdbd693b64a6 Mon Sep 17 00:00:00 2001 From: Jason Wen <47793918+sunnyhaibin@users.noreply.github.com> Date: Wed, 19 Jan 2022 00:28:49 -0500 Subject: [PATCH 04/23] Update interfaces.py Co-authored-by: Willem Melching --- selfdrive/car/interfaces.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index ce6e29eeb..261ce2f16 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -33,7 +33,7 @@ class CarInterfaceBase(ABC): self.steering_unpressed = 0 self.low_speed_alert = False self.silent_steer_warning = True - self.disengage_on_gas = Params().get("DisengageOnGas", encoding='utf8') + self.disengage_on_gas = Params().get_bool("DisengageOnGas") if CarState is not None: self.CS = CarState(CP) From f27203af3afe612173bf9a63e15c57118598b5b8 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Wed, 19 Jan 2022 00:30:09 -0500 Subject: [PATCH 05/23] Add param to process replay --- selfdrive/test/process_replay/process_replay.py | 1 + 1 file changed, 1 insertion(+) diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index 8a13e4b18..a16f417b5 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -347,6 +347,7 @@ def setup_env(): params.put_bool("OpenpilotEnabledToggle", True) params.put_bool("Passive", False) params.put_bool("CommunityFeaturesToggle", True) + params.put_bool("DisengageOnGas", True) os.environ['NO_RADAR_SLEEP'] = "1" os.environ["SIMULATION"] = "1" From e3be32afc2bb2423d29e2b4f85b3cff3fe72aab9 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Feb 2022 10:51:08 -0500 Subject: [PATCH 06/23] Resolve conflicts --- selfdrive/boardd/boardd.cc | 5 ++--- selfdrive/car/interfaces.py | 1 + selfdrive/test/process_replay/process_replay.py | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 09120f1ec..6ef964270 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -172,9 +172,8 @@ bool safety_setter_thread(std::vector pandas) { safety_param = 0; } - LOGW("panda %d: setting safety model: %d with param %d", i, (int)safety_model, safety_param); - - panda->set_unsafe_mode(p.getBool("DisengageOnGas") ? 0 : 1); // see safety_declarations.h for allowed values + LOGW("panda %d: setting safety model: %d, param: %d, unsafe mode: %d", i, (int)safety_model, safety_param, unsafe_mode); + panda->set_unsafe_mode(unsafe_mode); panda->set_safety_model(safety_model, safety_param); } diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 261ce2f16..530396820 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -74,6 +74,7 @@ class CarInterfaceBase(ABC): def get_std_params(candidate, fingerprint): ret = car.CarParams.new_message() ret.carFingerprint = candidate + ret.unsafeMode = 1 # standard ALC params ret.steerControlType = car.CarParams.SteerControlType.torque diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index a16f417b5..69d79cdcc 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -346,8 +346,6 @@ def setup_env(): params.clear_all() params.put_bool("OpenpilotEnabledToggle", True) params.put_bool("Passive", False) - params.put_bool("CommunityFeaturesToggle", True) - params.put_bool("DisengageOnGas", True) os.environ['NO_RADAR_SLEEP'] = "1" os.environ["SIMULATION"] = "1" From 1a85afd60c2f0d3140dfa8e7cd574d6b88abd5e3 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Feb 2022 10:51:50 -0500 Subject: [PATCH 07/23] Resolve conflicts --- selfdrive/car/interfaces.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 530396820..1746cbfb6 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -74,7 +74,7 @@ class CarInterfaceBase(ABC): def get_std_params(candidate, fingerprint): ret = car.CarParams.new_message() ret.carFingerprint = candidate - ret.unsafeMode = 1 + ret.unsafeMode = 0 # standard ALC params ret.steerControlType = car.CarParams.SteerControlType.torque From d273bb78acbc23ee5255e461fa71b2f0400a5e03 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Feb 2022 10:52:22 -0500 Subject: [PATCH 08/23] Resolve conflicts --- selfdrive/car/interfaces.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 1746cbfb6..9dab21619 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -74,7 +74,7 @@ class CarInterfaceBase(ABC): def get_std_params(candidate, fingerprint): ret = car.CarParams.new_message() ret.carFingerprint = candidate - ret.unsafeMode = 0 + ret.unsafeMode = 0 # see safety_declarations.h for allowed values # standard ALC params ret.steerControlType = car.CarParams.SteerControlType.torque From 220ce272fee1f7f5ace2a04052605a6e4f95712b Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Feb 2022 10:54:16 -0500 Subject: [PATCH 09/23] Add param to unsafeMode --- selfdrive/car/interfaces.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 9dab21619..4e35f7dd2 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -74,7 +74,7 @@ class CarInterfaceBase(ABC): def get_std_params(candidate, fingerprint): ret = car.CarParams.new_message() ret.carFingerprint = candidate - ret.unsafeMode = 0 # see safety_declarations.h for allowed values + ret.unsafeMode = 1 if Params().get_bool("DisengageOnGas") else 0 # see safety_declarations.h for allowed values # standard ALC params ret.steerControlType = car.CarParams.SteerControlType.torque From 700efcb3f444092f99ef10e9908f83402429d742 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Feb 2022 11:04:39 -0500 Subject: [PATCH 10/23] Add param to unsafeMode --- selfdrive/car/interfaces.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 4e35f7dd2..701bf7cff 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -74,7 +74,8 @@ class CarInterfaceBase(ABC): def get_std_params(candidate, fingerprint): ret = car.CarParams.new_message() ret.carFingerprint = candidate - ret.unsafeMode = 1 if Params().get_bool("DisengageOnGas") else 0 # see safety_declarations.h for allowed values + ret.unsafeMode = 0 # see safety_declarations.h for allowed values + ret.unsafeMode = 1 if Params().get_bool("DisengageOnGas") else 0 # sets unsafeMode to 1 if DisengageOnGas is True # standard ALC params ret.steerControlType = car.CarParams.SteerControlType.torque From 465811f0b4776e43a289398e4d4369362b7da58c Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 11 Feb 2022 11:20:32 -0500 Subject: [PATCH 11/23] Add param to process replay --- selfdrive/test/process_replay/process_replay.py | 1 + 1 file changed, 1 insertion(+) diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index da9c71728..83596420c 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -346,6 +346,7 @@ def setup_env(simulation=False): params.clear_all() params.put_bool("OpenpilotEnabledToggle", True) params.put_bool("Passive", False) + params.put_bool("DisengageOnGas", False) os.environ["NO_RADAR_SLEEP"] = "1" os.environ["REPLAY"] = "1" From 91763f9ff4321986babce1a7b1272fcf64c8f753 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 24 Feb 2022 20:15:26 -0800 Subject: [PATCH 12/23] =?UTF-8?q?add=20icon=20from=20jozef=20=F0=9F=94=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- selfdrive/assets/offroad/icon_disengage_on_accelerator.svg | 7 +++++++ selfdrive/ui/qt/offroad/settings.cc | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 selfdrive/assets/offroad/icon_disengage_on_accelerator.svg diff --git a/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg b/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg new file mode 100644 index 000000000..0175e672c --- /dev/null +++ b/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 00e371178..cd4d3ace4 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -67,9 +67,9 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { }, { "DisengageOnGas", - "Disengage openpilot On Gas Press", - "Disengage openpilot on gas pedal press.", - "../assets/offroad/icon_speed_limit.png", + "Disengage On Accelerator Pedal", + "openpilot will disengage when accelerator pedal is pressed.", + "../assets/offroad/icon_disengage_on_accelerator.svg", }, #ifdef ENABLE_MAPS { From f0bd4c47e9d27061c6cd3b88765a7c10995f42db Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 15 Mar 2022 22:26:24 -0700 Subject: [PATCH 13/23] this was flipped --- selfdrive/controls/controlsd.py | 2 +- selfdrive/test/process_replay/process_replay.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index a9a2415da..f9a2a420f 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -96,7 +96,7 @@ class Controls: self.CI, self.CP = get_car(self.can_sock, self.pm.sock['sendcan']) # see panda/board/safety_declarations.h for allowed values - self.CP.unsafeMode = 1 if Params().get_bool("DisengageOnGas") else 0 + self.CP.unsafeMode = 0 if Params().get_bool("DisengageOnGas") else 1 # read params self.is_metric = params.get_bool("IsMetric") diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index d62484c43..f2e1dd5b8 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -346,7 +346,7 @@ def setup_env(simulation=False): params.clear_all() params.put_bool("OpenpilotEnabledToggle", True) params.put_bool("Passive", False) - params.put_bool("DisengageOnGas", False) + params.put_bool("DisengageOnGas", True) os.environ["NO_RADAR_SLEEP"] = "1" os.environ["REPLAY"] = "1" From be1978e29c03d8843cf073cc9ddf84020fd2b378 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 15 Mar 2022 22:36:16 -0700 Subject: [PATCH 14/23] stash --- selfdrive/car/interfaces.py | 2 -- selfdrive/controls/controlsd.py | 3 ++- selfdrive/controls/lib/events.py | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index d42b7ef47..6761179b8 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -127,8 +127,6 @@ class CarInterfaceBase(ABC): events.add(EventName.wrongCarMode) if cs_out.espDisabled: events.add(EventName.espDisabled) - if cs_out.gasPressed and self.disengage_on_gas: - events.add(EventName.gasPressed) if cs_out.stockFcw: events.add(EventName.stockFcw) if cs_out.stockAeb: diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index f9a2a420f..a660b5a5b 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -96,7 +96,8 @@ class Controls: self.CI, self.CP = get_car(self.can_sock, self.pm.sock['sendcan']) # see panda/board/safety_declarations.h for allowed values - self.CP.unsafeMode = 0 if Params().get_bool("DisengageOnGas") else 1 + self.disengage_on_gas = Params().get_bool("DisengageOnGas") + self.CP.unsafeMode = 1 if not self.disengage_on_gas else 0 # read params self.is_metric = params.get_bool("IsMetric") diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index e04ec262d..4967be8d0 100644 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -358,7 +358,7 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { EventName.gasPressed: { ET.PRE_ENABLE: Alert( - "Release Gas Pedal to Engage", + "Car Will Not Brake While Gas Pressed", "", AlertStatus.normal, AlertSize.small, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1, creation_delay=1.), From 408f5f1d633521b29b08d966c9b387fa79dff0d6 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 15 Mar 2022 22:51:14 -0700 Subject: [PATCH 15/23] should work --- cereal | 2 +- selfdrive/controls/controlsd.py | 10 ++++++++-- selfdrive/controls/lib/events.py | 8 ++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/cereal b/cereal index 64b601419..566d04f4e 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 64b6014193a69fe2e2b3b7a17f9e228162081ddf +Subproject commit 566d04f4ed9652e8afede5c491782aca0f16c183 diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index a660b5a5b..fa40bc0f7 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -197,9 +197,15 @@ class Controls: self.events.add(EventName.controlsInitializing) return + if CS.gasPressed: + if self.disengage_on_gas: + self.events.add(EventName.gasPressedPreEnable) + else: + self.events.add(EventName.gasPressed) + # Disable on rising edge of gas or brake. Also disable on brake when speed > 0 if (CS.gasPressed and not self.CS_prev.gasPressed and self.disengage_on_gas) or \ - (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)): + (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)): self.events.add(EventName.pedalPressed) self.events.add_from_msg(CS.events) @@ -493,7 +499,7 @@ class Controls: # Check which actuators can be enabled CC.latActive = self.active and not CS.steerFaultTemporary and not CS.steerFaultPermanent and \ CS.vEgo > self.CP.minSteerSpeed and not CS.standstill - CC.longActive = self.active + CC.longActive = self.active and not CS.gasPressed actuators = CC.actuators actuators.longControlState = self.LoC.long_control_state diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 4967be8d0..8d7ef9b59 100644 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -357,6 +357,14 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { # ********** events only containing alerts that display while engaged ********** EventName.gasPressed: { + ET.WARNING: Alert( + "Car Will Not Brake While Gas Is Pressed", + "", + AlertStatus.normal, AlertSize.small, + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1), + }, + + EventName.gasPressedPreEnable: { ET.PRE_ENABLE: Alert( "Car Will Not Brake While Gas Pressed", "", From 7516ed9b786536a07f00a92b9c1742ca252a01d1 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 15 Mar 2022 22:55:09 -0700 Subject: [PATCH 16/23] these are null checks right now --- selfdrive/controls/lib/longcontrol.py | 2 +- selfdrive/controls/lib/longitudinal_planner.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/selfdrive/controls/lib/longcontrol.py b/selfdrive/controls/lib/longcontrol.py index 21682d826..f91ddcf44 100644 --- a/selfdrive/controls/lib/longcontrol.py +++ b/selfdrive/controls/lib/longcontrol.py @@ -87,7 +87,7 @@ class LongControl(): v_target, v_target_future, CS.brakePressed, CS.cruiseState.standstill) - if self.long_control_state == LongCtrlState.off or CS.gasPressed: + if self.long_control_state == LongCtrlState.off: self.reset(CS.vEgo) output_accel = 0. diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index fd7614236..e7adf0627 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -69,7 +69,6 @@ class Planner: # Reset current state when not engaged, or user is controlling the speed reset_state = long_control_state == LongCtrlState.off - reset_state = reset_state or sm['carState'].gasPressed # No change cost when user is controlling the speed, or when standstill prev_accel_constraint = not (reset_state or sm['carState'].standstill) From bad1bdc7428c5d8a4a765b259da504f0ade84424 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 15 Mar 2022 23:03:56 -0700 Subject: [PATCH 17/23] clean up a bit --- selfdrive/car/interfaces.py | 1 - selfdrive/controls/controlsd.py | 5 +---- selfdrive/controls/lib/events.py | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 6761179b8..1af49ada9 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -11,7 +11,6 @@ from common.conversions import Conversions as CV from selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX from selfdrive.controls.lib.events import Events from selfdrive.controls.lib.vehicle_model import VehicleModel -from common.params import Params GearShifter = car.CarState.GearShifter EventName = car.CarEvent.EventName diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index fa40bc0f7..7cdffdb63 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -198,10 +198,7 @@ class Controls: return if CS.gasPressed: - if self.disengage_on_gas: - self.events.add(EventName.gasPressedPreEnable) - else: - self.events.add(EventName.gasPressed) + self.events.add(EventName.gasPressedPreEnable if self.disengage_on_gas else EventName.gasPressed) # Disable on rising edge of gas or brake. Also disable on brake when speed > 0 if (CS.gasPressed and not self.CS_prev.gasPressed and self.disengage_on_gas) or \ diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 8d7ef9b59..c91a65c0b 100644 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -366,7 +366,7 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { EventName.gasPressedPreEnable: { ET.PRE_ENABLE: Alert( - "Car Will Not Brake While Gas Pressed", + "Release Gas Pedal to Engage", "", AlertStatus.normal, AlertSize.small, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1, creation_delay=1.), From 8d82e697dc2efade307413e767d14b56b4d2d079 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Wed, 16 Mar 2022 22:40:13 -0700 Subject: [PATCH 18/23] send pre-enable state when gas is pressed formatting and it's out forgot one allow gas press show toggle revert changes revert changes --- selfdrive/car/hyundai/carcontroller.py | 3 ++- selfdrive/car/hyundai/hyundaican.py | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py index 6b2cbd422..54ff0ad19 100644 --- a/selfdrive/car/hyundai/carcontroller.py +++ b/selfdrive/car/hyundai/carcontroller.py @@ -97,7 +97,8 @@ class CarController(): stopping = (actuators.longControlState == LongCtrlState.stopping) set_speed_in_units = hud_speed * (CV.MS_TO_MPH if CS.clu11["CF_Clu_SPEED_UNIT"] == 1 else CV.MS_TO_KPH) - can_sends.extend(create_acc_commands(self.packer, c.enabled, accel, jerk, int(frame / 2), lead_visible, set_speed_in_units, stopping)) + can_sends.extend(create_acc_commands(self.packer, c.enabled, accel, jerk, int(frame / 2), lead_visible, + set_speed_in_units, stopping, CS.out.gasPressed)) self.accel = accel # 20 Hz LFA MFA message diff --git a/selfdrive/car/hyundai/hyundaican.py b/selfdrive/car/hyundai/hyundaican.py index fd3fc78e8..011381082 100644 --- a/selfdrive/car/hyundai/hyundaican.py +++ b/selfdrive/car/hyundai/hyundaican.py @@ -78,7 +78,7 @@ def create_lfahda_mfc(packer, enabled, hda_set_speed=0): } return packer.make_can_msg("LFAHDA_MFC", 0, values) -def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_speed, stopping): +def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_speed, stopping, gas_pressed): commands = [] scc11_values = { @@ -95,7 +95,7 @@ def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_spe commands.append(packer.make_can_msg("SCC11", 0, scc11_values)) scc12_values = { - "ACCMode": 1 if enabled else 0, + "ACCMode": 2 if enabled and gas_pressed else 1 if enabled else 0, "StopReq": 1 if enabled and stopping else 0, "aReqRaw": accel if enabled else 0, "aReqValue": accel if enabled else 0, # stock ramps up and down respecting jerk limit until it reaches aReqRaw @@ -111,8 +111,8 @@ def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_spe "ComfortBandLower": 0.0, # stock usually is 0 but sometimes uses higher values "JerkUpperLimit": max(jerk, 1.0) if (enabled and not stopping) else 0, # stock usually is 1.0 but sometimes uses higher values "JerkLowerLimit": max(-jerk, 1.0) if enabled else 0, # stock usually is 0.5 but sometimes uses higher values - "ACCMode": 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage - "ObjGap": 2 if lead_visible else 0, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead + "ACCMode": 2 if enabled and gas_pressed else 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage + "ObjGap": 2 if lead_visible else 0, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead } commands.append(packer.make_can_msg("SCC14", 0, scc14_values)) From a219defe5342efa731a957b2ff4fd86292c1f239 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 17 Mar 2022 12:50:46 -0700 Subject: [PATCH 19/23] bump cereal --- cereal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cereal b/cereal index 7a0dae04d..af6612206 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 7a0dae04db2583ae730a1017e5febb197ca86445 +Subproject commit af6612206f8129b6af9070c4faeb1de494d16a75 From 2aed64157d6e9dc993d103a2c6abf7e643410562 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Fri, 18 Mar 2022 19:03:03 -0700 Subject: [PATCH 20/23] Revert "send pre-enable state when gas is pressed" This reverts commit 8d82e697dc2efade307413e767d14b56b4d2d079. --- selfdrive/car/hyundai/carcontroller.py | 3 +-- selfdrive/car/hyundai/hyundaican.py | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py index 54ff0ad19..6b2cbd422 100644 --- a/selfdrive/car/hyundai/carcontroller.py +++ b/selfdrive/car/hyundai/carcontroller.py @@ -97,8 +97,7 @@ class CarController(): stopping = (actuators.longControlState == LongCtrlState.stopping) set_speed_in_units = hud_speed * (CV.MS_TO_MPH if CS.clu11["CF_Clu_SPEED_UNIT"] == 1 else CV.MS_TO_KPH) - can_sends.extend(create_acc_commands(self.packer, c.enabled, accel, jerk, int(frame / 2), lead_visible, - set_speed_in_units, stopping, CS.out.gasPressed)) + can_sends.extend(create_acc_commands(self.packer, c.enabled, accel, jerk, int(frame / 2), lead_visible, set_speed_in_units, stopping)) self.accel = accel # 20 Hz LFA MFA message diff --git a/selfdrive/car/hyundai/hyundaican.py b/selfdrive/car/hyundai/hyundaican.py index 011381082..fd3fc78e8 100644 --- a/selfdrive/car/hyundai/hyundaican.py +++ b/selfdrive/car/hyundai/hyundaican.py @@ -78,7 +78,7 @@ def create_lfahda_mfc(packer, enabled, hda_set_speed=0): } return packer.make_can_msg("LFAHDA_MFC", 0, values) -def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_speed, stopping, gas_pressed): +def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_speed, stopping): commands = [] scc11_values = { @@ -95,7 +95,7 @@ def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_spe commands.append(packer.make_can_msg("SCC11", 0, scc11_values)) scc12_values = { - "ACCMode": 2 if enabled and gas_pressed else 1 if enabled else 0, + "ACCMode": 1 if enabled else 0, "StopReq": 1 if enabled and stopping else 0, "aReqRaw": accel if enabled else 0, "aReqValue": accel if enabled else 0, # stock ramps up and down respecting jerk limit until it reaches aReqRaw @@ -111,8 +111,8 @@ def create_acc_commands(packer, enabled, accel, jerk, idx, lead_visible, set_spe "ComfortBandLower": 0.0, # stock usually is 0 but sometimes uses higher values "JerkUpperLimit": max(jerk, 1.0) if (enabled and not stopping) else 0, # stock usually is 1.0 but sometimes uses higher values "JerkLowerLimit": max(-jerk, 1.0) if enabled else 0, # stock usually is 0.5 but sometimes uses higher values - "ACCMode": 2 if enabled and gas_pressed else 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage - "ObjGap": 2 if lead_visible else 0, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead + "ACCMode": 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage + "ObjGap": 2 if lead_visible else 0, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead } commands.append(packer.make_can_msg("SCC14", 0, scc14_values)) From d2b64b89cf8d7265bc90848b4e3a2276c9a4cb78 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 24 Mar 2022 16:19:34 -0700 Subject: [PATCH 21/23] these changes will be in border PR these changes will be border PR --- selfdrive/car/interfaces.py | 2 ++ selfdrive/controls/controlsd.py | 3 --- selfdrive/controls/lib/events.py | 10 +--------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 53888f5bb..452ea0095 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -126,6 +126,8 @@ class CarInterfaceBase(ABC): events.add(EventName.wrongCarMode) if cs_out.espDisabled: events.add(EventName.espDisabled) + if cs_out.gasPressed: + events.add(EventName.gasPressed) if cs_out.stockFcw: events.add(EventName.stockFcw) if cs_out.stockAeb: diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index fb1ff8b2f..b26d52b83 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -197,9 +197,6 @@ class Controls: self.events.add(EventName.controlsInitializing) return - if CS.gasPressed: - self.events.add(EventName.gasPressedPreEnable if self.disengage_on_gas else EventName.gasPressed) - # Disable on rising edge of gas or brake. Also disable on brake when speed > 0 if (CS.gasPressed and not self.CS_prev.gasPressed and self.disengage_on_gas) or \ (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)): diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index c91a65c0b..963f9fea0 100644 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -358,18 +358,10 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { EventName.gasPressed: { ET.WARNING: Alert( - "Car Will Not Brake While Gas Is Pressed", - "", - AlertStatus.normal, AlertSize.small, - Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1), - }, - - EventName.gasPressedPreEnable: { - ET.PRE_ENABLE: Alert( "Release Gas Pedal to Engage", "", AlertStatus.normal, AlertSize.small, - Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1, creation_delay=1.), + Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1), }, # openpilot tries to learn certain parameters about your car by observing From 0798eadb82749e12ecbaa86f4e57b21bd3dbc7e8 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 24 Mar 2022 17:52:06 -0700 Subject: [PATCH 22/23] =?UTF-8?q?=E2=9B=BD=20=E2=9E=A1=EF=B8=8F=20?= =?UTF-8?q?=F0=9F=94=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bump --- selfdrive/common/params.cc | 2 +- selfdrive/controls/controlsd.py | 8 ++++---- selfdrive/controls/lib/events.py | 2 +- selfdrive/manager/manager.py | 2 +- selfdrive/test/process_replay/process_replay.py | 2 +- selfdrive/ui/qt/offroad/settings.cc | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/selfdrive/common/params.cc b/selfdrive/common/params.cc index 20eafb265..0c36511be 100644 --- a/selfdrive/common/params.cc +++ b/selfdrive/common/params.cc @@ -98,7 +98,7 @@ std::unordered_map keys = { {"DisableRadar_Allow", PERSISTENT}, {"DisableRadar", PERSISTENT}, // WARNING: THIS DISABLES AEB {"DisableUpdates", PERSISTENT}, - {"DisengageOnGas", PERSISTENT}, + {"DisengageOnAccelerator", PERSISTENT}, {"DongleId", PERSISTENT}, {"DoReboot", CLEAR_ON_MANAGER_START}, {"DoShutdown", CLEAR_ON_MANAGER_START}, diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index b26d52b83..0dacc2674 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -96,8 +96,8 @@ class Controls: self.CI, self.CP = get_car(self.can_sock, self.pm.sock['sendcan']) # see panda/board/safety_declarations.h for allowed values - self.disengage_on_gas = Params().get_bool("DisengageOnGas") - self.CP.alternativeExperience = 1 if not self.disengage_on_gas else 0 + self.disengage_on_accelerator = Params().get_bool("DisengageOnAccelerator") + self.CP.alternativeExperience = 1 if not self.disengage_on_accelerator else 0 # read params self.is_metric = params.get_bool("IsMetric") @@ -197,8 +197,8 @@ class Controls: self.events.add(EventName.controlsInitializing) return - # Disable on rising edge of gas or brake. Also disable on brake when speed > 0 - if (CS.gasPressed and not self.CS_prev.gasPressed and self.disengage_on_gas) or \ + # Disable on rising edge of accelerator or brake. Also disable on brake when speed > 0 + if (CS.gasPressed and not self.CS_prev.gasPressed and self.disengage_on_accelerator) or \ (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)): self.events.add(EventName.pedalPressed) diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 963f9fea0..37f9ad352 100644 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -358,7 +358,7 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { EventName.gasPressed: { ET.WARNING: Alert( - "Release Gas Pedal to Engage", + "Release Accelerator Pedal to Engage", "", AlertStatus.normal, AlertSize.small, Priority.LOWEST, VisualAlert.none, AudibleAlert.none, .1), diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 95a214689..b5fa43967 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -38,7 +38,7 @@ def manager_init() -> None: default_params: List[Tuple[str, Union[str, bytes]]] = [ ("CompletedTrainingVersion", "0"), - ("DisengageOnGas", "1"), + ("DisengageOnAccelerator", "1"), ("HasAcceptedTerms", "0"), ("OpenpilotEnabledToggle", "1"), ] diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index f2e1dd5b8..4f273d1e9 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -346,7 +346,7 @@ def setup_env(simulation=False): params.clear_all() params.put_bool("OpenpilotEnabledToggle", True) params.put_bool("Passive", False) - params.put_bool("DisengageOnGas", True) + params.put_bool("DisengageOnAccelerator", True) os.environ["NO_RADAR_SLEEP"] = "1" os.environ["REPLAY"] = "1" diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index cd4d3ace4..0b684fe3b 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -66,7 +66,7 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { "../assets/offroad/icon_road.png", }, { - "DisengageOnGas", + "DisengageOnAccelerator", "Disengage On Accelerator Pedal", "openpilot will disengage when accelerator pedal is pressed.", "../assets/offroad/icon_disengage_on_accelerator.svg", From 475b27e74fd6479f1d148e9ded1eca6ee476865c Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 24 Mar 2022 20:24:59 -0700 Subject: [PATCH 23/23] update SAFETY.md --- docs/SAFETY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/SAFETY.md b/docs/SAFETY.md index 23ee251af..49f88df8c 100644 --- a/docs/SAFETY.md +++ b/docs/SAFETY.md @@ -22,7 +22,7 @@ Following Hazard and Risk Analysis and FMEA, at a very high level, we have desig ensuring two main safety requirements. 1. The driver must always be capable to immediately retake manual control of the vehicle, - by stepping on either pedal or by pressing the cancel button. + by stepping on the brake pedal or by pressing the cancel button. 2. The vehicle must not alter its trajectory too quickly for the driver to safely react. This means that while the system is engaged, the actuators are constrained to operate within reasonable limits.