|
|
|
@ -4,16 +4,12 @@ import math |
|
|
|
|
import datetime |
|
|
|
|
from collections import Counter |
|
|
|
|
from pprint import pprint |
|
|
|
|
from tqdm import tqdm |
|
|
|
|
from typing import List, Tuple, cast |
|
|
|
|
|
|
|
|
|
from cereal.services import SERVICE_LIST |
|
|
|
|
from openpilot.tools.lib.route import Route |
|
|
|
|
from openpilot.tools.lib.logreader import LogReader |
|
|
|
|
from openpilot.tools.lib.srreader import SegmentRangeReader, ReadMode |
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
r = Route(sys.argv[1]) |
|
|
|
|
|
|
|
|
|
cnt_valid: Counter = Counter() |
|
|
|
|
cnt_events: Counter = Counter() |
|
|
|
|
|
|
|
|
@ -24,31 +20,29 @@ if __name__ == "__main__": |
|
|
|
|
start_time = math.inf |
|
|
|
|
end_time = -math.inf |
|
|
|
|
ignition_off = None |
|
|
|
|
for q in tqdm(r.qlog_paths()): |
|
|
|
|
if q is None: |
|
|
|
|
continue |
|
|
|
|
lr = list(LogReader(q)) |
|
|
|
|
for msg in lr: |
|
|
|
|
end_time = max(end_time, msg.logMonoTime) |
|
|
|
|
start_time = min(start_time, msg.logMonoTime) |
|
|
|
|
for msg in SegmentRangeReader(sys.argv[1], ReadMode.QLOG): |
|
|
|
|
end_time = max(end_time, msg.logMonoTime) |
|
|
|
|
start_time = min(start_time, msg.logMonoTime) |
|
|
|
|
|
|
|
|
|
if msg.which() == 'onroadEvents': |
|
|
|
|
for e in msg.onroadEvents: |
|
|
|
|
cnt_events[e.name] += 1 |
|
|
|
|
elif msg.which() == 'controlsState': |
|
|
|
|
if len(alerts) == 0 or alerts[-1][1] != msg.controlsState.alertType: |
|
|
|
|
if msg.which() == 'onroadEvents': |
|
|
|
|
for e in msg.onroadEvents: |
|
|
|
|
cnt_events[e.name] += 1 |
|
|
|
|
elif msg.which() == 'controlsState': |
|
|
|
|
at = msg.controlsState.alertType |
|
|
|
|
if "/override" not in at or "lanechange" in at.lower(): |
|
|
|
|
if len(alerts) == 0 or alerts[-1][1] != at: |
|
|
|
|
t = (msg.logMonoTime - start_time) / 1e9 |
|
|
|
|
alerts.append((t, msg.controlsState.alertType)) |
|
|
|
|
elif msg.which() == 'pandaStates': |
|
|
|
|
if ignition_off is None: |
|
|
|
|
ign = any(ps.ignitionLine or ps.ignitionCan for ps in msg.pandaStates) |
|
|
|
|
if not ign: |
|
|
|
|
ignition_off = msg.logMonoTime |
|
|
|
|
elif msg.which() in cams: |
|
|
|
|
cnt_cameras[msg.which()] += 1 |
|
|
|
|
alerts.append((t, at)) |
|
|
|
|
elif msg.which() == 'pandaStates': |
|
|
|
|
if ignition_off is None: |
|
|
|
|
ign = any(ps.ignitionLine or ps.ignitionCan for ps in msg.pandaStates) |
|
|
|
|
if not ign: |
|
|
|
|
ignition_off = msg.logMonoTime |
|
|
|
|
elif msg.which() in cams: |
|
|
|
|
cnt_cameras[msg.which()] += 1 |
|
|
|
|
|
|
|
|
|
if not msg.valid: |
|
|
|
|
cnt_valid[msg.which()] += 1 |
|
|
|
|
if not msg.valid: |
|
|
|
|
cnt_valid[msg.which()] += 1 |
|
|
|
|
|
|
|
|
|
duration = (end_time - start_time) / 1e9 |
|
|
|
|
|
|
|
|
|