Totally random events

Added toggle to enable a small chance of a random event occuring when certain conditions are met.
This commit is contained in:
FrogAi
2024-02-27 16:34:47 -07:00
parent a0209cf918
commit 075e81ce44
20 changed files with 274 additions and 43 deletions

View File

@@ -181,13 +181,18 @@ class Controls:
self.frogpilot_variables = SimpleNamespace()
self.driving_gear = False
self.fcw_random_event_triggered = False
self.holiday_theme_alerted = False
self.previously_enabled = False
self.openpilot_crashed = False
self.previously_enabled = False
self.random_event_triggered = False
self.stopped_for_light_previously = False
self.max_acceleration = 0
self.previous_lead_distance = 0
self.previous_speed_limit = SpeedLimitController.desired_speed_limit
self.random_event_timer = 0
ignore = self.sensor_packets + ['testJoystick']
if SIMULATION:
@@ -331,7 +336,9 @@ class Controls:
# Show crash log event if openpilot crashed
if os.path.isfile(os.path.join(sentry.CRASHES_DIR, 'error.txt')):
self.events.add(EventName.openpilotCrashed)
return
if self.random_events and not self.openpilot_crashed:
self.events.add(EventName.openpilotCrashedRandomEvents)
self.openpilot_crashed = True
# Show holiday related event to indicate which holiday is active
if self.sm.frame >= 1000 and self.holiday_themes and self.params_memory.get_int("CurrentHolidayTheme") != 0 and not self.holiday_theme_alerted:
@@ -538,6 +545,11 @@ class Controls:
planner_fcw = self.sm['longitudinalPlan'].fcw and self.enabled
if planner_fcw or model_fcw:
self.events.add(EventName.fcw)
self.fcw_random_event_triggered = True
elif self.fcw_random_event_triggered and self.random_events:
self.events.add(EventName.yourFrogTriedToKillMe)
self.fcw_random_event_triggered = False
self.random_event_triggered = True
for m in messaging.drain_sock(self.log_sock, wait_for_one=False):
try:
@@ -562,6 +574,26 @@ class Controls:
if self.sm['modelV2'].frameDropPerc > 20:
self.events.add(EventName.modeldLagging)
# Acceleration Random Event alerts
if self.random_events:
acceleration = CS.aEgo
if not CS.gasPressed:
self.max_acceleration = max(acceleration, self.max_acceleration)
else:
self.max_acceleration = 0
if 3.5 > self.max_acceleration >= 3.0 and acceleration < 1.5:
self.events.add(EventName.accel30)
self.params_memory.put_int("CurrentRandomEvent", 2)
self.random_event_triggered = True
self.max_acceleration = 0
elif self.max_acceleration >= 3.5 and acceleration < 1.5:
self.events.add(EventName.accel35)
self.params_memory.put_int("CurrentRandomEvent", 3)
self.random_event_triggered = True
self.max_acceleration = 0
# Green light alert
if self.green_light_alert:
stopped_for_light = frogpilot_plan.redLight and CS.standstill
@@ -633,6 +665,19 @@ class Controls:
else:
self.FPCC.speedLimitChanged = False
# vCruise set to 69 Random Event alert
if self.random_events:
conversion = 1 if self.is_metric else CV.KPH_TO_MPH
v_cruise = self.v_cruise_helper.v_cruise_cluster_kph if self.v_cruise_helper.v_cruise_cluster_kph != 0.0 else self.v_cruise_helper.v_cruise_kph
v_cruise *= conversion
if 70 > v_cruise >= 69:
if not self.vCruise69_alert_played:
self.events.add(EventName.vCruise69)
self.vCruise69_alert_played = True
else:
self.vCruise69_alert_played = False
def data_sample(self):
"""Receive data from sockets and update carState"""
@@ -793,6 +838,14 @@ class Controls:
# FrogPilot functions
frogpilot_plan = self.sm['frogpilotPlan']
# Reset the Random Event flag after 5 seconds
if self.random_event_triggered:
self.random_event_timer += 1
if self.random_event_timer * DT_CTRL >= 4:
self.random_event_triggered = False
self.random_event_timer = 0
self.params_memory.remove("CurrentRandomEvent")
# Update Experimental Mode
if self.frogpilot_variables.conditional_experimental_mode:
self.experimental_mode = frogpilot_plan.conditionalExperimental
@@ -883,8 +936,13 @@ class Controls:
turning = abs(lac_log.desiredLateralAccel) > 1.0
good_speed = CS.vEgo > 5
max_torque = abs(self.last_actuators.steer) > 0.99
if undershooting and turning and good_speed and max_torque:
lac_log.active and self.events.add(EventName.frogSteerSaturated if self.goat_scream else EventName.steerSaturated)
if undershooting and turning and good_speed and max_torque and not self.random_event_triggered:
if self.sm.frame % 10000 == 0 and self.random_events:
lac_log.active and self.events.add(EventName.firefoxSteerSaturated)
self.params_memory.put_int("CurrentRandomEvent", 1)
self.random_event_triggered = True
else:
lac_log.active and self.events.add(EventName.frogSteerSaturated if self.goat_scream else EventName.steerSaturated)
elif lac_log.saturated:
# TODO probably should not use dpath_points but curvature
dpath_points = model_v2.position.y
@@ -1156,6 +1214,8 @@ class Controls:
self.frogpilot_variables.reverse_cruise_increase = quality_of_life and self.params.get_bool("ReverseCruise")
self.frogpilot_variables.set_speed_offset = self.params.get_int("SetSpeedOffset") * (1 if self.is_metric else CV.MPH_TO_KPH) if quality_of_life else 0
self.random_events = self.params.get_bool("RandomEvents")
self.speed_limit_controller = self.params.get_bool("SpeedLimitController")
self.frogpilot_variables.force_mph_dashboard = self.speed_limit_controller and self.params.get_bool("ForceMPHDashboard")
self.frogpilot_variables.set_speed_limit = self.speed_limit_controller and self.params.get_bool("SetSpeedLimit")