openpilot crashed alert
This commit is contained in:
@@ -124,6 +124,7 @@ struct CarEvent @0x9b1657f34caf3ad3 {
|
|||||||
laneChangeBlockedLoud @125;
|
laneChangeBlockedLoud @125;
|
||||||
leadDeparting @126;
|
leadDeparting @126;
|
||||||
noLaneAvailable @127;
|
noLaneAvailable @127;
|
||||||
|
openpilotCrashed @128;
|
||||||
torqueNNLoad @132;
|
torqueNNLoad @132;
|
||||||
|
|
||||||
radarCanErrorDEPRECATED @15;
|
radarCanErrorDEPRECATED @15;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from types import SimpleNamespace
|
|||||||
from typing import SupportsFloat
|
from typing import SupportsFloat
|
||||||
|
|
||||||
import cereal.messaging as messaging
|
import cereal.messaging as messaging
|
||||||
|
import openpilot.selfdrive.sentry as sentry
|
||||||
|
|
||||||
from cereal import car, log, custom
|
from cereal import car, log, custom
|
||||||
from cereal.visionipc import VisionIpcClient, VisionStreamType
|
from cereal.visionipc import VisionIpcClient, VisionStreamType
|
||||||
@@ -180,6 +181,7 @@ class Controls:
|
|||||||
self.driving_gear = False
|
self.driving_gear = False
|
||||||
self.holiday_theme_alerted = False
|
self.holiday_theme_alerted = False
|
||||||
self.previously_enabled = False
|
self.previously_enabled = False
|
||||||
|
self.openpilot_crashed = False
|
||||||
self.stopped_for_light_previously = False
|
self.stopped_for_light_previously = False
|
||||||
|
|
||||||
self.previous_lead_distance = 0
|
self.previous_lead_distance = 0
|
||||||
@@ -323,6 +325,11 @@ class Controls:
|
|||||||
|
|
||||||
frogpilot_plan = self.sm['frogpilotPlan']
|
frogpilot_plan = self.sm['frogpilotPlan']
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
# Show holiday related event to indicate which holiday is active
|
# 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:
|
if self.sm.frame >= 1000 and self.holiday_themes and self.params_memory.get_int("CurrentHolidayTheme") != 0 and not self.holiday_theme_alerted:
|
||||||
self.events.add(EventName.holidayActive)
|
self.events.add(EventName.holidayActive)
|
||||||
@@ -762,8 +769,8 @@ class Controls:
|
|||||||
# Check which actuators can be enabled
|
# Check which actuators can be enabled
|
||||||
standstill = CS.vEgo <= max(self.CP.minSteerSpeed, MIN_LATERAL_CONTROL_SPEED) or CS.standstill
|
standstill = CS.vEgo <= max(self.CP.minSteerSpeed, MIN_LATERAL_CONTROL_SPEED) or CS.standstill
|
||||||
CC.latActive = (self.active or self.FPCC.alwaysOnLateral) and not CS.steerFaultTemporary and not CS.steerFaultPermanent and \
|
CC.latActive = (self.active or self.FPCC.alwaysOnLateral) and not CS.steerFaultTemporary and not CS.steerFaultPermanent and \
|
||||||
(not standstill or self.joystick_mode)
|
(not standstill or self.joystick_mode) and not self.openpilot_crashed
|
||||||
CC.longActive = self.enabled and not self.events.contains(ET.OVERRIDE_LONGITUDINAL) and self.CP.openpilotLongitudinalControl
|
CC.longActive = self.enabled and not self.events.contains(ET.OVERRIDE_LONGITUDINAL) and self.CP.openpilotLongitudinalControl and not self.openpilot_crashed
|
||||||
|
|
||||||
actuators = CC.actuators
|
actuators = CC.actuators
|
||||||
actuators.longControlState = self.LoC.long_control_state
|
actuators.longControlState = self.LoC.long_control_state
|
||||||
|
|||||||
@@ -1049,6 +1049,14 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = {
|
|||||||
ET.PERMANENT: no_lane_available_alert,
|
ET.PERMANENT: no_lane_available_alert,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
EventName.openpilotCrashed: {
|
||||||
|
ET.PERMANENT: Alert(
|
||||||
|
"openpilot crashed",
|
||||||
|
"Please post the error log in the FrogPilot Discord!",
|
||||||
|
AlertStatus.normal, AlertSize.mid,
|
||||||
|
Priority.HIGH, VisualAlert.none, AudibleAlert.none, .1),
|
||||||
|
},
|
||||||
|
|
||||||
EventName.torqueNNLoad: {
|
EventName.torqueNNLoad: {
|
||||||
ET.PERMANENT: torque_nn_load_alert,
|
ET.PERMANENT: torque_nn_load_alert,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -76,7 +76,12 @@ struct Alert {
|
|||||||
const int controls_missing = (nanos_since_boot() - sm.rcv_time("controlsState")) / 1e9;
|
const int controls_missing = (nanos_since_boot() - sm.rcv_time("controlsState")) / 1e9;
|
||||||
|
|
||||||
// Handle controls timeout
|
// Handle controls timeout
|
||||||
if (controls_frame < started_frame) {
|
if (std::ifstream("/data/community/crashes/error.txt")) {
|
||||||
|
alert = {"openpilot crashed", "Please post the error log in the FrogPilot Discord!",
|
||||||
|
"controlsWaiting", cereal::ControlsState::AlertSize::MID,
|
||||||
|
cereal::ControlsState::AlertStatus::NORMAL,
|
||||||
|
AudibleAlert::NONE};
|
||||||
|
} else if (controls_frame < started_frame) {
|
||||||
// car is started, but controlsState hasn't been seen at all
|
// car is started, but controlsState hasn't been seen at all
|
||||||
alert = {"openpilot Unavailable", "Waiting for controls to start",
|
alert = {"openpilot Unavailable", "Waiting for controls to start",
|
||||||
"controlsWaiting", cereal::ControlsState::AlertSize::MID,
|
"controlsWaiting", cereal::ControlsState::AlertSize::MID,
|
||||||
|
|||||||
Reference in New Issue
Block a user