September 5th, 2024 Patch

This commit is contained in:
FrogAi
2024-09-05 08:04:05 -07:00
parent 2da496e862
commit c10b7f39ba
10 changed files with 46 additions and 51 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ FrogPilot is a fully open-sourced fork of openpilot, featuring clear and concise
------
FrogPilot was last updated on:
**September 1st, 2024**
**September 5th, 2024**
Features
------
+2 -1
View File
@@ -717,6 +717,7 @@ class Controls:
self.always_on_lateral_active &= self.sm['frogpilotPlan'].lateralCheck
self.always_on_lateral_active &= not (self.frogpilot_toggles.always_on_lateral_lkas and self.sm['frogpilotCarState'].alwaysOnLateralDisabled)
self.always_on_lateral_active &= not (CS.brakePressed and CS.vEgo < self.frogpilot_toggles.always_on_lateral_pause_speed) or CS.standstill
self.always_on_lateral_active = bool(self.always_on_lateral_active)
if self.frogpilot_toggles.conditional_experimental_mode:
self.experimental_mode = self.sm['frogpilotPlan'].experimentalMode
@@ -735,7 +736,7 @@ class Controls:
self.resume_previously_pressed = self.resume_pressed
FPCC = custom.FrogPilotCarControl.new_message()
FPCC.alwaysOnLateralActive = bool(self.always_on_lateral_active)
FPCC.alwaysOnLateralActive = self.always_on_lateral_active
FPCC.fcwEventTriggered = self.fcw_event_triggered
FPCC.noEntryEventTriggered = self.no_entry_alert_triggered
FPCC.resumePressed = self.resume_previously_pressed
@@ -13,7 +13,7 @@ from openpilot.selfdrive.frogpilot.controls.lib.conditional_experimental_mode im
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_acceleration import FrogPilotAcceleration
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_events import FrogPilotEvents
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_following import FrogPilotFollowing
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import WeightedMovingAverageCalculator, calculate_lane_width, calculate_road_curvature, update_frogpilot_toggles
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import MovingAverageCalculator, calculate_lane_width, calculate_road_curvature, update_frogpilot_toggles
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_variables import CITY_SPEED_LIMIT, CRUISING_SPEED, MODEL_LENGTH, PLANNER_TIME, THRESHOLD
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_vcruise import FrogPilotVCruise
@@ -30,7 +30,7 @@ class FrogPilotPlanner:
self.frogpilot_vcruise = FrogPilotVCruise(self)
self.lead_one = Lead()
self.tracking_lead_mac = WeightedMovingAverageCalculator(window_size=5)
self.tracking_lead_mac = MovingAverageCalculator()
self.lateral_check = False
self.lead_departing = False
@@ -128,7 +128,7 @@ class FrogPilotPlanner:
following_lead &= v_ego > CRUISING_SPEED or self.tracking_lead
self.tracking_lead_mac.add_data(following_lead)
return self.tracking_lead_mac.get_weighted_average() >= THRESHOLD
return self.tracking_lead_mac.get_moving_average() >= THRESHOLD
def publish(self, sm, pm, frogpilot_toggles):
frogpilot_plan_send = messaging.new_message('frogpilotPlan')
@@ -1,6 +1,6 @@
from openpilot.common.params import Params
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import WeightedMovingAverageCalculator
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import MovingAverageCalculator
from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_variables import CITY_SPEED_LIMIT, THRESHOLD
class ConditionalExperimentalMode:
@@ -9,8 +9,8 @@ class ConditionalExperimentalMode:
self.params_memory = Params("/dev/shm/params")
self.curvature_wmac = WeightedMovingAverageCalculator(window_size=5)
self.stop_light_wmac = WeightedMovingAverageCalculator(window_size=5)
self.curvature_mac = MovingAverageCalculator()
self.stop_light_mac = MovingAverageCalculator()
self.curve_detected = False
self.experimental_mode = False
@@ -74,10 +74,10 @@ class ConditionalExperimentalMode:
curve_detected = (1 / self.frogpilot_planner.road_curvature)**0.5 < v_ego
curve_active = (0.9 / self.frogpilot_planner.road_curvature)**0.5 < v_ego and self.curve_detected
self.curvature_wmac.add_data(curve_detected or curve_active)
self.curve_detected = self.curvature_wmac.get_weighted_average() >= THRESHOLD
self.curvature_mac.add_data(curve_detected or curve_active)
self.curve_detected = self.curvature_mac.get_moving_average() >= THRESHOLD
else:
self.curvature_wmac.reset_data()
self.curvature_mac.reset_data()
self.curve_detected = False
def slow_lead(self, tracking_lead, v_lead, frogpilot_toggles):
@@ -93,8 +93,8 @@ class ConditionalExperimentalMode:
if not (self.curve_detected or tracking_lead):
model_stopping = self.frogpilot_planner.model_length < v_ego * frogpilot_toggles.conditional_model_stop_time
self.stop_light_wmac.add_data(self.frogpilot_planner.model_stopped or model_stopping)
self.stop_light_detected = self.stop_light_wmac.get_weighted_average() >= THRESHOLD
self.stop_light_mac.add_data(self.frogpilot_planner.model_stopped or model_stopping)
self.stop_light_detected = self.stop_light_mac.get_moving_average() >= THRESHOLD
else:
self.stop_light_wmac.reset_data()
self.stop_light_mac.reset_data()
self.stop_light_detected = False
@@ -169,6 +169,14 @@ def convert_params(params, params_storage):
for key in ["CustomColors", "CustomDistanceIcons", "CustomIcons", "CustomSignals", "CustomSounds", "WheelIcon"]:
remove_param(key)
if params.get("LowVoltageShutdown", encoding='utf-8') == "VBATT_PAUSE_CHARGING":
params.remove("LowVoltageShutdown")
params_storage.remove("LowVoltageShutdown")
if params.get("MinimumLaneChangeSpeed", encoding='utf-8') == "LANE_CHANGE_SPEED_MIN":
params.remove("MinimumLaneChangeSpeed")
params_storage.remove("MinimumLaneChangeSpeed")
print("Param conversion completed")
def delete_file(file):
@@ -284,23 +292,21 @@ def uninstall_frogpilot():
HARDWARE.uninstall()
class WeightedMovingAverageCalculator:
def __init__(self, window_size):
self.window_size = window_size
self.data = []
self.weights = np.linspace(1, 2, window_size)
class MovingAverageCalculator:
def __init__(self):
self.reset_data()
def add_data(self, value):
if len(self.data) == self.window_size:
self.data.pop(0)
if len(self.data) == 5:
self.total -= self.data.pop(0)
self.data.append(value)
self.total += value
def get_weighted_average(self):
def get_moving_average(self):
if len(self.data) == 0:
return None
weighted_sum = np.dot(self.data, self.weights[-len(self.data):])
weight_total = np.sum(self.weights[-len(self.data):])
return weighted_sum / weight_total
return self.total / len(self.data)
def reset_data(self):
self.data = []
self.total = 0
@@ -125,7 +125,7 @@ class FrogPilotVariables:
device_shutdown_setting = self.params.get_int("DeviceShutdown") if toggle.device_management else 33
toggle.device_shutdown_time = (device_shutdown_setting - 3) * 3600 if device_shutdown_setting >= 4 else device_shutdown_setting * (60 * 15)
toggle.increase_thermal_limits = toggle.device_management and self.params.get_bool("IncreaseThermalLimits")
toggle.low_voltage_shutdown = self.params.get_float("LowVoltageShutdown") if toggle.device_management else VBATT_PAUSE_CHARGING
toggle.low_voltage_shutdown = self.params.get_float("LowVoltageShutdown") if toggle.device_management and openpilot_installed else VBATT_PAUSE_CHARGING
toggle.offline_mode = toggle.device_management and self.params.get_bool("OfflineMode")
driving_personalities = toggle.openpilot_longitudinal and self.params.get_bool("DrivingPersonalities")
@@ -161,7 +161,7 @@ class FrogPilotVariables:
toggle.lane_change_delay = self.params.get_int("LaneChangeTime") if lane_change_customizations else 0
toggle.lane_detection_width = self.params.get_int("LaneDetectionWidth") * distance_conversion / 10. if lane_change_customizations else 0
toggle.lane_detection = toggle.lane_detection_width != 0
toggle.minimum_lane_change_speed = self.params.get_int("MinimumLaneChangeSpeed") * speed_conversion if lane_change_customizations else LANE_CHANGE_SPEED_MIN
toggle.minimum_lane_change_speed = self.params.get_int("MinimumLaneChangeSpeed") * speed_conversion if lane_change_customizations and openpilot_installed else LANE_CHANGE_SPEED_MIN
toggle.nudgeless = lane_change_customizations and self.params.get_bool("NudgelessLaneChange")
toggle.one_lane_change = lane_change_customizations and self.params.get_bool("OneLaneChange")
@@ -173,17 +173,11 @@ class ModelManager:
print(f"Source default model not found at {source_path}. Exiting...")
def update_models(self, boot_run=True):
self.repo_url = get_repository_url()
if boot_run:
self.copy_default_model()
boot_checks = 0
while self.repo_url is None and boot_checks < 60:
boot_checks += 1
if boot_checks > 60:
break
time.sleep(1)
self.validate_models()
elif self.repo_url is None:
self.repo_url = get_repository_url()
if self.repo_url is None:
print("GitHub and GitLab are offline...")
return
@@ -366,20 +366,12 @@ class ThemeManager:
self.previous_assets = {}
self.update_active_theme()
def update_themes(self, boot_run=True):
def update_themes(self):
if not os.path.exists(THEME_SAVE_PATH):
return
repo_url = get_repository_url()
if boot_run:
boot_checks = 0
while repo_url is None and boot_checks < 60:
boot_checks += 1
if boot_checks > 60:
break
time.sleep(1)
self.validate_themes()
elif repo_url is None:
if repo_url is None:
print("GitHub and GitLab are offline...")
return
+4 -3
View File
@@ -89,7 +89,7 @@ def time_checks(automatic_updates, deviceState, model_manager, now, started, the
model_manager.update_models(boot_run=False)
with locks["update_themes"]:
theme_manager.update_themes(boot_run=False)
theme_manager.update_themes()
def toggle_updates(frogpilot_toggles, started, time_validated, params, params_storage):
FrogPilotVariables.update_frogpilot_params(started, True)
@@ -194,8 +194,9 @@ def frogpilot_thread():
time_validated = system_time_valid()
if not time_validated:
continue
run_thread_with_lock("update_models", model_manager.update_models)
run_thread_with_lock("update_themes", theme_manager.update_themes)
if deviceState.networkType == WIFI:
run_thread_with_lock("update_models", model_manager.update_models)
run_thread_with_lock("update_themes", theme_manager.update_themes)
theme_manager.update_holiday()
+3 -2
View File
@@ -9,6 +9,7 @@ import traceback
from cereal import log
import cereal.messaging as messaging
import openpilot.system.sentry as sentry
from openpilot.common.conversions import Conversions as CV
from openpilot.common.params import Params, ParamKeyType
from openpilot.common.text_window import TextWindow
from openpilot.selfdrive.controls.lib.desire_helper import LANE_CHANGE_SPEED_MIN
@@ -203,7 +204,7 @@ def manager_init() -> None:
("LosAngelesLiveTorqueParameters", ""),
("LosAngelesScore", "0"),
("LoudBlindspotAlert", "0"),
("LowVoltageShutdown", "VBATT_PAUSE_CHARGING"),
("LowVoltageShutdown", str(VBATT_PAUSE_CHARGING)),
("MapAcceleration", "0"),
("MapDeceleration", "0"),
("MapGears", "0"),
@@ -211,7 +212,7 @@ def manager_init() -> None:
("MapboxSecretKey", ""),
("MapsSelected", ""),
("MapStyle", "10"),
("MinimumLaneChangeSpeed", "LANE_CHANGE_SPEED_MIN"),
("MinimumLaneChangeSpeed", str(LANE_CHANGE_SPEED_MIN / CV.MPH_TO_MS)),
("Model", DEFAULT_MODEL),
("ModelManagement", "0"),
("ModelName", DEFAULT_MODEL_NAME),