Toggle to always enable DM (#32205)

* permanent

* param

* correct behavior

* toggle

* need trans

* ref_commit

* translate for chs/t

* disable on P and R

* read
old-commit-hash: 1d05704d27
pull/32199/head
ZwX1616 1 year ago committed by GitHub
parent bcf9f08563
commit c741dca04c
  1. 1
      common/params.cc
  2. 12
      selfdrive/controls/lib/events.py
  3. 8
      selfdrive/monitoring/dmonitoringd.py
  4. 15
      selfdrive/monitoring/driver_monitor.py
  5. 2
      selfdrive/monitoring/test_monitoring.py
  6. 2
      selfdrive/test/process_replay/ref_commit
  7. 6
      selfdrive/ui/qt/offroad/settings.cc
  8. 8
      selfdrive/ui/translations/main_ar.ts
  9. 8
      selfdrive/ui/translations/main_de.ts
  10. 8
      selfdrive/ui/translations/main_fr.ts
  11. 8
      selfdrive/ui/translations/main_ja.ts
  12. 8
      selfdrive/ui/translations/main_ko.ts
  13. 8
      selfdrive/ui/translations/main_pt-BR.ts
  14. 8
      selfdrive/ui/translations/main_th.ts
  15. 8
      selfdrive/ui/translations/main_tr.ts
  16. 8
      selfdrive/ui/translations/main_zh-CHS.ts
  17. 8
      selfdrive/ui/translations/main_zh-CHT.ts

@ -89,6 +89,7 @@ private:
std::unordered_map<std::string, uint32_t> keys = { std::unordered_map<std::string, uint32_t> keys = {
{"AccessToken", CLEAR_ON_MANAGER_START | DONT_LOG}, {"AccessToken", CLEAR_ON_MANAGER_START | DONT_LOG},
{"AlwaysOnDM", PERSISTENT},
{"ApiCache_Device", PERSISTENT}, {"ApiCache_Device", PERSISTENT},
{"ApiCache_NavDestinations", PERSISTENT}, {"ApiCache_NavDestinations", PERSISTENT},
{"AssistNowToken", PERSISTENT}, {"AssistNowToken", PERSISTENT},

@ -433,7 +433,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
}, },
EventName.preDriverDistracted: { EventName.preDriverDistracted: {
ET.WARNING: Alert( ET.PERMANENT: Alert(
"Pay Attention", "Pay Attention",
"", "",
AlertStatus.normal, AlertSize.small, AlertStatus.normal, AlertSize.small,
@ -441,7 +441,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
}, },
EventName.promptDriverDistracted: { EventName.promptDriverDistracted: {
ET.WARNING: Alert( ET.PERMANENT: Alert(
"Pay Attention", "Pay Attention",
"Driver Distracted", "Driver Distracted",
AlertStatus.userPrompt, AlertSize.mid, AlertStatus.userPrompt, AlertSize.mid,
@ -449,7 +449,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
}, },
EventName.driverDistracted: { EventName.driverDistracted: {
ET.WARNING: Alert( ET.PERMANENT: Alert(
"DISENGAGE IMMEDIATELY", "DISENGAGE IMMEDIATELY",
"Driver Distracted", "Driver Distracted",
AlertStatus.critical, AlertSize.full, AlertStatus.critical, AlertSize.full,
@ -457,7 +457,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
}, },
EventName.preDriverUnresponsive: { EventName.preDriverUnresponsive: {
ET.WARNING: Alert( ET.PERMANENT: Alert(
"Touch Steering Wheel: No Face Detected", "Touch Steering Wheel: No Face Detected",
"", "",
AlertStatus.normal, AlertSize.small, AlertStatus.normal, AlertSize.small,
@ -465,7 +465,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
}, },
EventName.promptDriverUnresponsive: { EventName.promptDriverUnresponsive: {
ET.WARNING: Alert( ET.PERMANENT: Alert(
"Touch Steering Wheel", "Touch Steering Wheel",
"Driver Unresponsive", "Driver Unresponsive",
AlertStatus.userPrompt, AlertSize.mid, AlertStatus.userPrompt, AlertSize.mid,
@ -473,7 +473,7 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
}, },
EventName.driverUnresponsive: { EventName.driverUnresponsive: {
ET.WARNING: Alert( ET.PERMANENT: Alert(
"DISENGAGE IMMEDIATELY", "DISENGAGE IMMEDIATELY",
"Driver Unresponsive", "Driver Unresponsive",
AlertStatus.critical, AlertSize.full, AlertStatus.critical, AlertSize.full,

@ -17,7 +17,7 @@ def dmonitoringd_thread():
pm = messaging.PubMaster(['driverMonitoringState']) pm = messaging.PubMaster(['driverMonitoringState'])
sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'controlsState', 'modelV2'], poll='driverStateV2') sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'controlsState', 'modelV2'], poll='driverStateV2')
driver_status = DriverStatus(rhd_saved=params.get_bool("IsRhdDetected")) driver_status = DriverStatus(rhd_saved=params.get_bool("IsRhdDetected"), always_on=params.get_bool("AlwaysOnDM"))
v_cruise_last = 0 v_cruise_last = 0
driver_engaged = False driver_engaged = False
@ -52,7 +52,8 @@ def dmonitoringd_thread():
events.add(car.CarEvent.EventName.tooDistracted) events.add(car.CarEvent.EventName.tooDistracted)
# Update events from driver state # Update events from driver state
driver_status.update_events(events, driver_engaged, sm['controlsState'].enabled, sm['carState'].standstill) driver_status.update_events(events, driver_engaged, sm['controlsState'].enabled,
sm['carState'].standstill, sm['carState'].gearShifter in [car.CarState.GearShifter.reverse, car.CarState.GearShifter.park])
# build driverMonitoringState packet # build driverMonitoringState packet
dat = messaging.new_message('driverMonitoringState', valid=sm.all_checks()) dat = messaging.new_message('driverMonitoringState', valid=sm.all_checks())
@ -76,6 +77,9 @@ def dmonitoringd_thread():
} }
pm.send('driverMonitoringState', dat) pm.send('driverMonitoringState', dat)
if sm['driverStateV2'].frameId % 40 == 1:
driver_status.always_on = params.get_bool("AlwaysOnDM")
# save rhd virtual toggle every 5 mins # save rhd virtual toggle every 5 mins
if (sm['driverStateV2'].frameId % 6000 == 0 and if (sm['driverStateV2'].frameId % 6000 == 0 and
driver_status.wheelpos_learner.filtered_stat.n > driver_status.settings._WHEELPOS_FILTER_MIN_COUNT and driver_status.wheelpos_learner.filtered_stat.n > driver_status.settings._WHEELPOS_FILTER_MIN_COUNT and

@ -121,7 +121,7 @@ class DriverBlink():
self.right_blink = 0. self.right_blink = 0.
class DriverStatus(): class DriverStatus():
def __init__(self, rhd_saved=False, settings=None): def __init__(self, rhd_saved=False, settings=None, always_on=False):
if settings is None: if settings is None:
settings = DRIVER_MONITOR_SETTINGS() settings = DRIVER_MONITOR_SETTINGS()
# init policy settings # init policy settings
@ -139,6 +139,7 @@ class DriverStatus():
self.ee1_calibrated = False self.ee1_calibrated = False
self.ee2_calibrated = False self.ee2_calibrated = False
self.always_on = always_on
self.awareness = 1. self.awareness = 1.
self.awareness_active = 1. self.awareness_active = 1.
self.awareness_passive = 1. self.awareness_passive = 1.
@ -301,8 +302,12 @@ class DriverStatus():
elif self.face_detected and self.pose.low_std: elif self.face_detected and self.pose.low_std:
self.hi_stds = 0 self.hi_stds = 0
def update_events(self, events, driver_engaged, ctrl_active, standstill): def update_events(self, events, driver_engaged, ctrl_active, standstill, wrong_gear):
if (driver_engaged and self.awareness > 0 and not self.active_monitoring_mode) or not ctrl_active: # reset only when on disengagement if red reached always_on_valid = self.always_on and not wrong_gear
if (driver_engaged and self.awareness > 0 and not self.active_monitoring_mode) or \
(not always_on_valid and not ctrl_active) or \
(always_on_valid and not ctrl_active and self.awareness <= 0):
# always reset on disengage with normal mode; disengage resets only on red if always on
self._reset_awareness() self._reset_awareness()
return return
@ -323,11 +328,13 @@ class DriverStatus():
return return
standstill_exemption = standstill and self.awareness - self.step_change <= self.threshold_prompt standstill_exemption = standstill and self.awareness - self.step_change <= self.threshold_prompt
always_on_red_exemption = always_on_valid and not ctrl_active and self.awareness - self.step_change <= 0
certainly_distracted = self.driver_distraction_filter.x > 0.63 and self.driver_distracted and self.face_detected certainly_distracted = self.driver_distraction_filter.x > 0.63 and self.driver_distracted and self.face_detected
maybe_distracted = self.hi_stds > self.settings._HI_STD_FALLBACK_TIME or not self.face_detected maybe_distracted = self.hi_stds > self.settings._HI_STD_FALLBACK_TIME or not self.face_detected
if certainly_distracted or maybe_distracted: if certainly_distracted or maybe_distracted:
# should always be counting if distracted unless at standstill and reaching orange # should always be counting if distracted unless at standstill and reaching orange
if not standstill_exemption: # also will not be reaching 0 if DM is active when not engaged
if not standstill_exemption and not always_on_red_exemption:
self.awareness = max(self.awareness - self.step_change, -0.1) self.awareness = max(self.awareness - self.step_change, -0.1)
alert = None alert = None

@ -63,7 +63,7 @@ class TestMonitoring(unittest.TestCase):
# cal_rpy and car_speed don't matter here # cal_rpy and car_speed don't matter here
# evaluate events at 10Hz for tests # evaluate events at 10Hz for tests
DS.update_events(e, interaction[idx], engaged[idx], standstill[idx]) DS.update_events(e, interaction[idx], engaged[idx], standstill[idx], 0)
events.append(e) events.append(e)
assert len(events) == len(msgs), f"got {len(events)} for {len(msgs)} driverState input msgs" assert len(events) == len(msgs), f"got {len(events)} for {len(msgs)} driverState input msgs"
return events, DS return events, DS

@ -1 +1 @@
28001018eae89eb4906717bebf892345ad590b5a f759be555103697918d5d6c22292ef10536e68bd

@ -51,6 +51,12 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
tr("Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31 mph (50 km/h)."), tr("Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31 mph (50 km/h)."),
"../assets/offroad/icon_warning.png", "../assets/offroad/icon_warning.png",
}, },
{
"AlwaysOnDM",
tr("Always-On Driver Monitoring"),
tr("Enable driver monitoring even when openpilot is not engaged."),
"../assets/offroad/icon_monitoring.png",
},
{ {
"RecordFront", "RecordFront",
tr("Record and Upload Driver Camera"), tr("Record and Upload Driver Camera"),

@ -1182,6 +1182,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1168,6 +1168,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1166,6 +1166,14 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation>La visualisation de la conduite passera sur la caméra grand angle dirigée vers la route à faible vitesse afin de mieux montrer certains virages. Le logo du mode expérimental s&apos;affichera également dans le coin supérieur droit.</translation> <translation>La visualisation de la conduite passera sur la caméra grand angle dirigée vers la route à faible vitesse afin de mieux montrer certains virages. Le logo du mode expérimental s&apos;affichera également dans le coin supérieur droit.</translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1160,6 +1160,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1162,6 +1162,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1166,6 +1166,14 @@ Isso pode levar até um minuto.</translation>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation>A visualização de condução fará a transição para a câmera grande angular voltada para a estrada em baixas velocidades para mostrar melhor algumas curvas. O logotipo do modo Experimental também será mostrado no canto superior direito.</translation> <translation>A visualização de condução fará a transição para a câmera grande angular voltada para a estrada em baixas velocidades para mostrar melhor algumas curvas. O logotipo do modo Experimental também será mostrado no canto superior direito.</translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1162,6 +1162,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1160,6 +1160,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1162,6 +1162,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation>使openpilot未激活时也启用驾驶员监控</translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

@ -1162,6 +1162,14 @@ This may take up to a minute.</source>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source> <source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Always-On Driver Monitoring</source>
<translation></translation>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation>使openpilot未激活時也啟用駕駛監控</translation>
</message>
</context> </context>
<context> <context>
<name>Updater</name> <name>Updater</name>

Loading…
Cancel
Save