Fired the babysitter

Added toggles to disable driver monitoring, the "Door Open", "Seatbelt Unlatched", and "System Overheated" alerts and all logging.
This commit is contained in:
FrogAi
2024-01-12 22:39:30 -07:00
parent 64b7f5b401
commit ac5eb105f0
11 changed files with 60 additions and 12 deletions

View File

@@ -247,6 +247,7 @@ std::unordered_map<std::string, uint32_t> keys = {
{"DisableOnroadUploads", PERSISTENT},
{"DriverCamera", PERSISTENT},
{"ExperimentalModeViaPress", PERSISTENT},
{"FireTheBabysitter", PERSISTENT},
{"FrogPilotTogglesUpdated", PERSISTENT},
{"GasRegenCmd", PERSISTENT},
{"GoatScream", PERSISTENT},
@@ -255,6 +256,11 @@ std::unordered_map<std::string, uint32_t> keys = {
{"LeadInfo", PERSISTENT},
{"LongitudinalTune", PERSISTENT},
{"ModelUI", PERSISTENT},
{"MuteDM", PERSISTENT},
{"MuteDoor", PERSISTENT},
{"MuteOverheated", PERSISTENT},
{"MuteSeatbelt", PERSISTENT},
{"NoLogging", PERSISTENT},
{"OfflineMode", PERSISTENT},
{"PathEdgeWidth", PERSISTENT},
{"PathWidth", PERSISTENT},

View File

@@ -251,9 +251,9 @@ class CarInterfaceBase(ABC):
enable_buttons=(ButtonType.accelCruise, ButtonType.decelCruise)):
events = Events()
if cs_out.doorOpen:
if cs_out.doorOpen and not self.mute_door:
events.add(EventName.doorOpen)
if cs_out.seatbeltUnlatched:
if cs_out.seatbeltUnlatched and not self.mute_seatbelt:
events.add(EventName.seatbeltNotLatched)
if cs_out.gearShifter != GearShifter.drive and (extra_gears is None or
cs_out.gearShifter not in extra_gears):
@@ -324,6 +324,10 @@ class CarInterfaceBase(ABC):
if hasattr(self.CC, 'update_frogpilot_variables'):
self.CC.update_frogpilot_variables(params)
fire_the_babysitter = params.get_bool("FireTheBabysitter")
self.mute_door = fire_the_babysitter and params.get_bool("MuteDoor")
self.mute_seatbelt = fire_the_babysitter and params.get_bool("MuteSeatbelt")
class RadarInterfaceBase(ABC):
def __init__(self, CP):
self.rcp = None

View File

@@ -79,9 +79,15 @@ class Controls:
self.params = Params()
self.params_memory = Params("/dev/shm/params")
fire_the_babysitter = self.params.get_bool("FireTheBabysitter")
mute_dm = fire_the_babysitter and self.params.get_bool("MuteDM")
ignore = self.sensor_packets + ['testJoystick']
if SIMULATION:
ignore += ['driverCameraState', 'managerState']
if mute_dm:
ignore += ['driverMonitoringState']
self.params.put_bool("DmModelInitialized", True)
self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration',
'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman',
'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters',

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -16,6 +16,13 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil
{"DeviceShutdown", "Device Shutdown Timer", "Configure the timer for automatic device shutdown when offroad conserving energy and preventing battery drain.", "../frogpilot/assets/toggle_icons/icon_time.png"},
{"ExperimentalModeViaPress", "Experimental Mode Via 'LKAS' Button / Screen", "Toggle Experimental Mode by double-clicking the 'Lane Departure'/'LKAS' button or double tapping screen.\n\nOverrides 'Conditional Experimental Mode'.", "../assets/img_experimental_white.svg"},
{"FireTheBabysitter", "Fire the Babysitter", "Deactivate some of openpilot's 'Babysitter' protocols for more user autonomy.", "../frogpilot/assets/toggle_icons/icon_babysitter.png"},
{"NoLogging", "Disable All Logging", "Turn off all data tracking to enhance privacy or reduce thermal load.\n\nWARNING: This action will prevent drive recording and data cannot be recovered!", ""},
{"MuteDoor", "Mute Door Open Alert", "Disable alerts for open doors.", ""},
{"MuteDM", "Mute Driver Monitoring", "Disable driver monitoring.", ""},
{"MuteOverheated", "Mute Overheated System Alert", "Disable alerts for the device being overheated.", ""},
{"MuteSeatbelt", "Mute Seatbelt Unlatched Alert", "Disable alerts for unlatched seatbelts.", ""},
{"LateralTune", "Lateral Tuning", "Modify openpilot's steering behavior.", "../frogpilot/assets/toggle_icons/icon_lateral_tune.png"},
{"AverageCurvature", "Average Desired Curvature", "Use Pfeiferj's distance-based curvature adjustment for improved curve handling.", ""},
@@ -123,6 +130,16 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil
}
toggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 33, shutdownLabels, this, false);
} else if (param == "FireTheBabysitter") {
FrogPilotParamManageControl *fireTheBabysitterToggle = new FrogPilotParamManageControl(param, title, desc, icon, this);
QObject::connect(fireTheBabysitterToggle, &FrogPilotParamManageControl::manageButtonClicked, this, [this]() {
parentToggleClicked();
for (auto &[key, toggle] : toggles) {
toggle->setVisible(fireTheBabysitterKeys.find(key.c_str()) != fireTheBabysitterKeys.end());
}
});
toggle = fireTheBabysitterToggle;
} else if (param == "LateralTune") {
FrogPilotParamManageControl *lateralTuneToggle = new FrogPilotParamManageControl(param, title, desc, icon, this);
QObject::connect(lateralTuneToggle, &FrogPilotParamManageControl::manageButtonClicked, this, [this]() {
@@ -178,7 +195,7 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil
});
}
std::set<std::string> rebootKeys = {"AlwaysOnLateral"};
std::set<std::string> rebootKeys = {"AlwaysOnLateral", "FireTheBabysitter", "MuteDM"};
for (const std::string &key : rebootKeys) {
QObject::connect(toggles[key], &ToggleControl::toggleFlipped, [this]() {
if (FrogPilotConfirmationDialog::toggle("Reboot required to take effect.", "Reboot Now", this)) {
@@ -188,7 +205,7 @@ FrogPilotControlsPanel::FrogPilotControlsPanel(SettingsWindow *parent) : FrogPil
}
conditionalExperimentalKeys = {"CECurves", "CECurvesLead", "CESlowerLead", "CENavigation", "CEStopLights", "CESignal"};
fireTheBabysitterKeys = {};
fireTheBabysitterKeys = {"NoLogging", "MuteDM", "MuteDoor", "MuteOverheated", "MuteSeatbelt"};
laneChangeKeys = {};
lateralTuneKeys = {"AverageCurvature"};
longitudinalTuneKeys = {"AccelerationProfile", "AggressiveAcceleration"};

View File

@@ -45,23 +45,30 @@ def only_offroad(started, params, CP: car.CarParams) -> bool:
# FrogPilot functions
def allow_uploads(started, params, CP: car.CarParams) -> bool:
enable_logging = not (params.get_bool("FireTheBabysitter") and params.get_bool("NoLogging"))
wifi_connected = HARDWARE.get_network_type() == WIFI and not started
return wifi_connected if params.get_bool("DisableOnroadUploads") else True
return wifi_connected if params.get_bool("DisableOnroadUploads") else enable_logging
def enable_dm(started, params, CP: car.CarParams) -> bool:
return (started or params.get_bool("IsDriverViewEnabled")) and not (params.get_bool("FireTheBabysitter") and params.get_bool("MuteDM"))
def enable_logging(started, params, CP: car.CarParams) -> bool:
return not (params.get_bool("FireTheBabysitter") and params.get_bool("NoLogging"))
procs = [
DaemonProcess("manage_athenad", "selfdrive.athena.manage_athenad", "AthenadPid"),
NativeProcess("camerad", "system/camerad", ["./camerad"], driverview),
NativeProcess("logcatd", "system/logcatd", ["./logcatd"], only_onroad),
NativeProcess("logcatd", "system/logcatd", ["./logcatd"], (enable_logging and only_onroad)),
NativeProcess("proclogd", "system/proclogd", ["./proclogd"], only_onroad),
PythonProcess("logmessaged", "system.logmessaged", always_run),
PythonProcess("logmessaged", "system.logmessaged", enable_logging),
PythonProcess("micd", "system.micd", iscar),
PythonProcess("timezoned", "system.timezoned", always_run, enabled=not PC),
PythonProcess("dmonitoringmodeld", "selfdrive.modeld.dmonitoringmodeld", driverview, enabled=(not PC or WEBCAM)),
PythonProcess("dmonitoringmodeld", "selfdrive.modeld.dmonitoringmodeld", enable_dm, enabled=(not PC or WEBCAM)),
NativeProcess("encoderd", "system/loggerd", ["./encoderd"], only_onroad),
NativeProcess("stream_encoderd", "system/loggerd", ["./encoderd", "--stream"], notcar),
NativeProcess("loggerd", "system/loggerd", ["./loggerd"], logging),
NativeProcess("loggerd", "system/loggerd", ["./loggerd"], (enable_logging and logging)),
NativeProcess("modeld", "selfdrive/modeld", ["./modeld"], only_onroad),
NativeProcess("mapsd", "selfdrive/navd", ["./mapsd"], only_onroad),
PythonProcess("navmodeld", "selfdrive.modeld.navmodeld", only_onroad),
@@ -74,7 +81,7 @@ procs = [
PythonProcess("torqued", "selfdrive.locationd.torqued", only_onroad),
PythonProcess("controlsd", "selfdrive.controls.controlsd", only_onroad),
PythonProcess("deleter", "system.loggerd.deleter", always_run),
PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", driverview, enabled=(not PC or WEBCAM)),
PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", enable_dm, enabled=(not PC or WEBCAM)),
PythonProcess("qcomgpsd", "system.qcomgpsd.qcomgpsd", qcomgps, enabled=TICI),
PythonProcess("navd", "selfdrive.navd.navd", only_onroad),
PythonProcess("pandad", "selfdrive.boardd.pandad", always_run),
@@ -84,7 +91,7 @@ procs = [
PythonProcess("plannerd", "selfdrive.controls.plannerd", only_onroad),
PythonProcess("radard", "selfdrive.controls.radard", only_onroad),
PythonProcess("thermald", "selfdrive.thermald.thermald", always_run),
PythonProcess("tombstoned", "selfdrive.tombstoned", always_run, enabled=not PC),
PythonProcess("tombstoned", "selfdrive.tombstoned", enable_logging, enabled=not PC),
PythonProcess("updated", "selfdrive.updated", only_offroad, enabled=not PC),
PythonProcess("uploader", "system.loggerd.uploader", allow_uploads),
PythonProcess("statsd", "selfdrive.statsd", always_run),

View File

@@ -298,6 +298,10 @@ def thermald_thread(end_event, hw_queue) -> None:
elif current_band.max_temp is not None and all_comp_temp > current_band.max_temp:
thermal_status = list(THERMAL_BANDS.keys())[band_idx + 1]
if params.get_bool("FireTheBabysitter"):
if params.get_bool("MuteOverheated"):
thermal_status = ThermalStatus.green
# **** starting logic ****
# Ensure date/time are valid

View File

@@ -974,7 +974,7 @@ void AnnotatedCameraWidget::paintGL() {
}
// DMoji
if (!hideBottomIcons && (sm.rcv_frame("driverStateV2") > s->scene.started_frame)) {
if (!hideBottomIcons && (sm.rcv_frame("driverStateV2") > s->scene.started_frame) && !muteDM) {
update_dmonitoring(s, sm["driverStateV2"].getDriverStateV2(), dm_fade_state, rightHandDM);
drawDriverState(painter, s);
}
@@ -1058,6 +1058,7 @@ void AnnotatedCameraWidget::updateFrogPilotWidgets(QPainter &p) {
laneWidthRight = scene.lane_width_right;
leadInfo = scene.lead_info;
mapOpen = scene.map_open;
muteDM = scene.mute_dm;
obstacleDistance = scene.obstacle_distance;
obstacleDistanceStock = scene.obstacle_distance_stock;
showDriverCamera = scene.show_driver_camera;

View File

@@ -135,6 +135,7 @@ private:
bool experimentalMode;
bool leadInfo;
bool mapOpen;
bool muteDM;
bool showDriverCamera;
bool turnSignalLeft;
bool turnSignalRight;

View File

@@ -306,6 +306,7 @@ void ui_update_params(UIState *s) {
scene.driver_camera = params.getBool("DriverCamera");
scene.experimental_mode_via_press = params.getBool("ExperimentalModeViaPress");
scene.mute_dm = params.getBool("FireTheBabysitter") && params.getBool("MuteDM");
scene.screen_brightness = params.getInt("ScreenBrightness");
scene.wheel_icon = params.getInt("WheelIcon");
}

View File

@@ -186,6 +186,7 @@ typedef struct UIScene {
bool lead_info;
bool map_open;
bool model_ui;
bool mute_dm;
bool show_driver_camera;
bool show_fps;
bool turn_signal_left;