From 1a33c93961236f4198d48ac8ce9510f9025a0d43 Mon Sep 17 00:00:00 2001 From: FrogAi <91348155+FrogAi@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:34:47 -0700 Subject: [PATCH] Pause lateral control with turn signal Added toggle to pause lateral control when a turn signal is active below a set speed. --- common/params.cc | 1 + selfdrive/controls/controlsd.py | 5 ++++- .../assets/toggle_icons/icon_pause_lane.png | Bin 0 -> 21410 bytes selfdrive/frogpilot/ui/control_settings.cc | 8 ++++++++ selfdrive/frogpilot/ui/control_settings.h | 2 +- 5 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 selfdrive/frogpilot/assets/toggle_icons/icon_pause_lane.png diff --git a/common/params.cc b/common/params.cc index d12ee2c..619d9f3 100644 --- a/common/params.cc +++ b/common/params.cc @@ -325,6 +325,7 @@ std::unordered_map keys = { {"OSMDownloadProgress", CLEAR_ON_MANAGER_START}, {"PathEdgeWidth", PERSISTENT}, {"PathWidth", PERSISTENT}, + {"PauseLateralOnSignal", PERSISTENT}, {"PreferredSchedule", PERSISTENT}, {"PromptVolume", PERSISTENT}, {"PromptDistractedVolume", PERSISTENT}, diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 92aba6d..503fc6e 100644 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -756,6 +756,8 @@ class Controls: # Gear Check self.driving_gear = CS.gearShifter not in (GearShifter.neutral, GearShifter.park, GearShifter.reverse, GearShifter.unknown) + signal_check = not ((CS.leftBlinker or CS.rightBlinker) and CS.vEgo < self.pause_lateral_on_signal and not CS.standstill) + # Always on lateral self.FPCC.alwaysOnLateral |= CS.cruiseState.enabled or self.always_on_lateral_main self.FPCC.alwaysOnLateral &= self.always_on_lateral @@ -768,7 +770,7 @@ class Controls: # Check which actuators can be enabled standstill = CS.vEgo <= max(self.CP.minSteerSpeed, MIN_LATERAL_CONTROL_SPEED) or CS.standstill - CC.latActive = (self.active or self.FPCC.alwaysOnLateral) and not CS.steerFaultTemporary and not CS.steerFaultPermanent and \ + CC.latActive = (self.active or self.FPCC.alwaysOnLateral) and signal_check and not CS.steerFaultTemporary and not CS.steerFaultPermanent and \ (not standstill or self.joystick_mode) and not self.openpilot_crashed CC.longActive = self.enabled and not self.events.contains(ET.OVERRIDE_LONGITUDINAL) and self.CP.openpilotLongitudinalControl and not self.openpilot_crashed @@ -1104,6 +1106,7 @@ class Controls: self.lane_detection_width = self.params.get_int("LaneDetectionWidth") * (1 if self.is_metric else CV.FOOT_TO_METER) / 10 if self.lane_detection else 0 quality_of_life = self.params.get_bool("QOLControls") + self.pause_lateral_on_signal = self.params.get_int("PauseLateralOnSignal") * (CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS) if quality_of_life else 0 self.frogpilot_variables.reverse_cruise_increase = quality_of_life and self.params.get_bool("ReverseCruise") def main(): diff --git a/selfdrive/frogpilot/assets/toggle_icons/icon_pause_lane.png b/selfdrive/frogpilot/assets/toggle_icons/icon_pause_lane.png new file mode 100644 index 0000000000000000000000000000000000000000..4f521a549fec839262234a6db4c71a7113b30933 GIT binary patch literal 21410 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 literal 0 HcmV?d00001 diff --git a/selfdrive/frogpilot/ui/control_settings.cc b/selfdrive/frogpilot/ui/control_settings.cc index 829b779..38e7c5e 100644 --- a/selfdrive/frogpilot/ui/control_settings.cc +++ b/selfdrive/frogpilot/ui/control_settings.cc @@ -53,6 +53,7 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil {"DisableOnroadUploads", "Disable Onroad Uploads", "Prevent large data uploads when onroad.", ""}, {"HigherBitrate", "Higher Bitrate Recording", "Increases the quality of the footage uploaded to comma connect.", ""}, {"NavChill", "Navigate on Chill Mode", "Allows cars without longitudinal support to navigate. Allows navigation without experimental mode.", ""}, + {"PauseLateralOnSignal", "Pause Lateral On Turn Signal Below", "Temporarily disable lateral control during turn signal use below the set speed.", ""}, {"ReverseCruise", "Reverse Cruise Increase", "Reverses the 'long press' functionality when increasing the max set speed. Useful to increase the max speed quickly.", ""}, }; @@ -281,6 +282,8 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil } }); toggle = qolToggle; + } else if (param == "PauseLateralOnSignal") { + toggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 99, std::map(), this, false, " mph"); } else if (param == "ReverseCruise") { std::vector reverseCruiseToggles{"ReverseCruiseUI"}; std::vector reverseCruiseNames{tr("Control Via UI")}; @@ -388,29 +391,34 @@ void FrogPilotControlsPanel::updateMetric() { params.putIntNonBlocking("CESpeedLead", std::nearbyint(params.getInt("CESpeedLead") * speedConversion)); params.putIntNonBlocking("LaneDetectionWidth", std::nearbyint(params.getInt("LaneDetectionWidth") * distanceConversion)); params.putIntNonBlocking("MTSCLimit", std::nearbyint(params.getInt("MTSCLimit") * speedConversion)); + params.putIntNonBlocking("PauseLateralOnSignal", std::nearbyint(params.getInt("PauseLateralOnSignal") * speedConversion)); params.putIntNonBlocking("StoppingDistance", std::nearbyint(params.getInt("StoppingDistance") * distanceConversion)); } FrogPilotParamValueControl *laneWidthToggle = static_cast(toggles["LaneDetectionWidth"]); FrogPilotParamValueControl *mtscLimitToggle = static_cast(toggles["MTSCLimit"]); + FrogPilotParamValueControl *pauseLateralToggle = static_cast(toggles["PauseLateralOnSignal"]); FrogPilotParamValueControl *stoppingDistanceToggle = static_cast(toggles["StoppingDistance"]); if (isMetric) { laneWidthToggle->updateControl(0, 30, " meters", 10); mtscLimitToggle->updateControl(0, 99, " kph"); + pauseLateralToggle->updateControl(0, 150, " kph"); stoppingDistanceToggle->updateControl(0, 5, " meters"); } else { laneWidthToggle->updateControl(0, 100, " feet", 10); mtscLimitToggle->updateControl(0, 99, " mph"); + pauseLateralToggle->updateControl(0, 99, " mph"); stoppingDistanceToggle->updateControl(0, 10, " feet"); } laneWidthToggle->refresh(); mtscLimitToggle->refresh(); + pauseLateralToggle->refresh(); stoppingDistanceToggle->refresh(); previousIsMetric = isMetric; diff --git a/selfdrive/frogpilot/ui/control_settings.h b/selfdrive/frogpilot/ui/control_settings.h index 031697c..3aa7209 100644 --- a/selfdrive/frogpilot/ui/control_settings.h +++ b/selfdrive/frogpilot/ui/control_settings.h @@ -44,7 +44,7 @@ private: std::set lateralTuneKeys = {"ForceAutoTune", "NNFF"}; std::set longitudinalTuneKeys = {"AccelerationProfile", "DecelerationProfile", "AggressiveAcceleration", "StoppingDistance"}; std::set mtscKeys = {"DisableMTSCSmoothing", "MTSCAggressiveness", "MTSCCurvatureCheck", "MTSCLimit"}; - std::set qolKeys = {"DisableOnroadUploads", "HigherBitrate", "NavChill", "ReverseCruise"}; + std::set qolKeys = {"DisableOnroadUploads", "HigherBitrate", "NavChill", "PauseLateralOnSignal", "ReverseCruise"}; std::set speedLimitControllerKeys = {}; std::set speedLimitControllerControlsKeys = {}; std::set speedLimitControllerQOLKeys = {};