controlsd: ensure actuators packet is finite (#21958)

* controlsd: ensure actuators packet is finite

* do not hardcode fields

* cleaner way to get fields

* move line up
pull/21972/head
Willem Melching 4 years ago committed by GitHub
parent 01e779ef2d
commit 4fcd51e021
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      selfdrive/controls/controlsd.py

@ -37,6 +37,8 @@ IGNORE_PROCESSES = {"rtshield", "uploader", "deleter", "loggerd", "logmessaged",
"logcatd", "proclogd", "clocksd", "updated", "timezoned", "manage_athenad"} | \ "logcatd", "proclogd", "clocksd", "updated", "timezoned", "manage_athenad"} | \
{k for k, v in managed_processes.items() if not v.enabled} {k for k, v in managed_processes.items() if not v.enabled}
ACTUATOR_FIELDS = set(car.CarControl.Actuators.schema.fields.keys())
ThermalStatus = log.DeviceState.ThermalStatus ThermalStatus = log.DeviceState.ThermalStatus
State = log.ControlsState.OpenpilotState State = log.ControlsState.OpenpilotState
PandaType = log.PandaState.PandaType PandaType = log.PandaState.PandaType
@ -500,6 +502,12 @@ class Controls:
if left_deviation or right_deviation: if left_deviation or right_deviation:
self.events.add(EventName.steerSaturated) self.events.add(EventName.steerSaturated)
# Ensure no NaNs/Infs
for p in ACTUATOR_FIELDS:
if not math.isfinite(getattr(actuators, p)):
cloudlog.error(f"actuators.{p} not finite {actuators.to_dict()}")
setattr(actuators, p, 0.0)
return actuators, lac_log return actuators, lac_log
def publish_logs(self, CS, start_time, actuators, lac_log): def publish_logs(self, CS, start_time, actuators, lac_log):

Loading…
Cancel
Save