|
|
|
@ -20,14 +20,17 @@ from system.version import get_commit |
|
|
|
|
from tools.lib.framereader import FrameReader |
|
|
|
|
from tools.lib.logreader import LogReader |
|
|
|
|
|
|
|
|
|
TEST_ROUTE = "4cf7a6ad03080c90|2021-09-29--13-46-36" |
|
|
|
|
SEGMENT = 0 |
|
|
|
|
TEST_ROUTE = "2f4452b03ccb98f0|2022-12-03--13-45-30" |
|
|
|
|
SEGMENT = 6 |
|
|
|
|
MAX_FRAMES = 100 if PC else 600 |
|
|
|
|
NAV_FRAMES = 20 |
|
|
|
|
|
|
|
|
|
NO_NAV = "NO_NAV" in os.environ # TODO: make map renderer work in CI |
|
|
|
|
SEND_EXTRA_INPUTS = bool(os.getenv("SEND_EXTRA_INPUTS", "0")) |
|
|
|
|
|
|
|
|
|
VIPC_STREAM = {"roadCameraState": VisionStreamType.VISION_STREAM_ROAD, "driverCameraState": VisionStreamType.VISION_STREAM_DRIVER, |
|
|
|
|
"wideRoadCameraState": VisionStreamType.VISION_STREAM_WIDE_ROAD} |
|
|
|
|
|
|
|
|
|
def get_log_fn(ref_commit, test_route): |
|
|
|
|
return f"{test_route}_model_tici_{ref_commit}.bz2" |
|
|
|
|
|
|
|
|
@ -39,6 +42,47 @@ def replace_calib(msg, calib): |
|
|
|
|
return msg |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def nav_model_replay(lr): |
|
|
|
|
pm = messaging.PubMaster(['liveLocationKalman', 'navRoute']) |
|
|
|
|
sock = messaging.sub_sock('navModel', conflate=False, timeout=1000) |
|
|
|
|
|
|
|
|
|
log_msgs = [] |
|
|
|
|
try: |
|
|
|
|
managed_processes['mapsd'].start() |
|
|
|
|
managed_processes['navmodeld'].start() |
|
|
|
|
|
|
|
|
|
# setup position and route |
|
|
|
|
nav = [m for m in lr if m.which() == 'navRoute'] |
|
|
|
|
llk = [m for m in lr if m.which() == 'liveLocationKalman'] |
|
|
|
|
assert len(nav) > 0 and len(llk) > 0 |
|
|
|
|
|
|
|
|
|
for _ in range(30): |
|
|
|
|
for s in (llk, nav): |
|
|
|
|
msg = s[0] |
|
|
|
|
pm.send(msg.which(), msg.as_builder().to_bytes()) |
|
|
|
|
if messaging.recv_one(sock) is not None: |
|
|
|
|
break |
|
|
|
|
else: |
|
|
|
|
raise Exception("no navmodeld outputs") |
|
|
|
|
|
|
|
|
|
time.sleep(2) |
|
|
|
|
messaging.drain_sock_raw(sock) |
|
|
|
|
|
|
|
|
|
# run replay |
|
|
|
|
for _ in range(NAV_FRAMES): |
|
|
|
|
# 2Hz decimation |
|
|
|
|
for _ in range(10): |
|
|
|
|
pm.send(llk[0].which(), llk[0].as_builder().to_bytes()) |
|
|
|
|
time.sleep(0.1) |
|
|
|
|
with Timeout(5, "timed out waiting for nav model outputs"): |
|
|
|
|
log_msgs.append(messaging.recv_one_retry(sock)) |
|
|
|
|
finally: |
|
|
|
|
managed_processes['mapsd'].stop() |
|
|
|
|
managed_processes['navmodeld'].stop() |
|
|
|
|
|
|
|
|
|
return log_msgs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def model_replay(lr, frs): |
|
|
|
|
if not PC: |
|
|
|
|
spinner = Spinner() |
|
|
|
@ -154,8 +198,10 @@ if __name__ == "__main__": |
|
|
|
|
'wideRoadCameraState': FrameReader(get_url(TEST_ROUTE, SEGMENT, log_type="ecamera"), readahead=True) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# run replay |
|
|
|
|
# run replays |
|
|
|
|
log_msgs = model_replay(lr, frs) |
|
|
|
|
if not NO_NAV: |
|
|
|
|
log_msgs += nav_model_replay(lr) |
|
|
|
|
|
|
|
|
|
# get diff |
|
|
|
|
failed = False |
|
|
|
@ -164,15 +210,29 @@ if __name__ == "__main__": |
|
|
|
|
ref_commit = f.read().strip() |
|
|
|
|
log_fn = get_log_fn(ref_commit, TEST_ROUTE) |
|
|
|
|
try: |
|
|
|
|
cmp_log = list(LogReader(BASE_URL + log_fn))[:2*MAX_FRAMES] |
|
|
|
|
expected_msgs = 2*MAX_FRAMES |
|
|
|
|
if not NO_NAV: |
|
|
|
|
expected_msgs += NAV_FRAMES |
|
|
|
|
cmp_log = list(LogReader(BASE_URL + log_fn))[:expected_msgs] |
|
|
|
|
|
|
|
|
|
ignore = [ |
|
|
|
|
'logMonoTime', |
|
|
|
|
'modelV2.frameDropPerc', |
|
|
|
|
'modelV2.modelExecutionTime', |
|
|
|
|
'driverStateV2.modelExecutionTime', |
|
|
|
|
'driverStateV2.dspExecutionTime' |
|
|
|
|
'driverStateV2.dspExecutionTime', |
|
|
|
|
'navModel.dspExecutionTime', |
|
|
|
|
'navModel.modelExecutionTime', |
|
|
|
|
] |
|
|
|
|
if PC: |
|
|
|
|
ignore += [ |
|
|
|
|
'modelV2.laneLines.0.t', |
|
|
|
|
'modelV2.laneLines.1.t', |
|
|
|
|
'modelV2.laneLines.2.t', |
|
|
|
|
'modelV2.laneLines.3.t', |
|
|
|
|
'modelV2.roadEdges.0.t', |
|
|
|
|
'modelV2.roadEdges.1.t', |
|
|
|
|
] |
|
|
|
|
# TODO this tolerance is absurdly large |
|
|
|
|
tolerance = 2.0 if PC else None |
|
|
|
|
results: Any = {TEST_ROUTE: {}} |
|
|
|
|