From 8c23fdde2b50244369ebc6f6750b536ba0cfb88a Mon Sep 17 00:00:00 2001 From: Rick Lan Date: Sat, 19 Apr 2025 16:00:17 +0800 Subject: [PATCH] No Gas-Gating (NoGG) - init --- common/params_keys.h | 1 + selfdrive/controls/lib/longitudinal_planner.py | 3 ++- selfdrive/controls/plannerd.py | 2 ++ selfdrive/ui/qt/offroad/dp_panel.cc | 5 +++++ system/manager/manager.py | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/params_keys.h b/common/params_keys.h index b576f1a97..51ddf07f6 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -119,4 +119,5 @@ inline static std::unordered_map keys = { {"Version", PERSISTENT}, {"dp_device_last_log", CLEAR_ON_MANAGER_START}, {"dp_device_reset_conf", CLEAR_ON_MANAGER_START}, + {"dp_lon_no_gas_gating", PERSISTENT}, }; diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index 2621dd11d..81bb411e5 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -27,6 +27,7 @@ _A_TOTAL_MAX_V = [1.7, 3.2] _A_TOTAL_MAX_BP = [20., 40.] class DPFlags: + NO_GAS_GATING = 2 pass def get_max_accel(v_ego): @@ -151,7 +152,7 @@ class LongitudinalPlanner: # Don't clip at low speeds since throttle_prob doesn't account for creep self.allow_throttle = throttle_prob > ALLOW_THROTTLE_THRESHOLD or v_ego <= MIN_ALLOW_THROTTLE_SPEED - if not self.allow_throttle: + if not (dp_flags & DPFlags.NO_GAS_GATING) and not self.allow_throttle: clipped_accel_coast = max(accel_coast, accel_clip[0]) clipped_accel_coast_interp = np.interp(v_ego, [MIN_ALLOW_THROTTLE_SPEED, MIN_ALLOW_THROTTLE_SPEED*2], [accel_clip[1], clipped_accel_coast]) accel_clip[1] = min(accel_clip[1], clipped_accel_coast_interp) diff --git a/selfdrive/controls/plannerd.py b/selfdrive/controls/plannerd.py index 646c00669..a4442fb73 100755 --- a/selfdrive/controls/plannerd.py +++ b/selfdrive/controls/plannerd.py @@ -23,6 +23,8 @@ def main(): poll='modelV2') dp_flags = 0 + if params.get_bool("dp_lon_no_gas_gating"): + dp_flags |= DPFlags.NO_GAS_GATING while True: sm.update() if sm.updated['modelV2']: diff --git a/selfdrive/ui/qt/offroad/dp_panel.cc b/selfdrive/ui/qt/offroad/dp_panel.cc index 548b02be5..f626bc069 100644 --- a/selfdrive/ui/qt/offroad/dp_panel.cc +++ b/selfdrive/ui/qt/offroad/dp_panel.cc @@ -139,6 +139,11 @@ void DPPanel::add_longitudinal_toggles() { QString::fromUtf8("🐉 ") + tr("Longitudinal Ctrl"), "", }, + { + "dp_lon_no_gas_gating", + tr("Enable No Gas Gating (NoGG)"), + tr("Allows the car to accelerate in situations where Gas Gating would normally prevent it, like approaching traffic lights or exits."), + }, }; QWidget *label = nullptr; diff --git a/system/manager/manager.py b/system/manager/manager.py index 9fe81947f..eb7178cd3 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -41,6 +41,7 @@ def manager_init() -> None: ("OpenpilotEnabledToggle", "1"), ("LongitudinalPersonality", str(log.LongitudinalPersonality.standard)), ("DisableLogging", "0"), + ("dp_lon_no_gas_gating", "0"), ] if params.get_bool("RecordFrontLock"):