mirror of
https://github.com/MoreTore/openpilot.git
synced 2026-09-30 11:23:55 +08:00
September 5th, 2024 Patch
This commit is contained in:
@@ -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
|
||||
------
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user