Skip to content

Commit

Permalink
less replay
Browse files Browse the repository at this point in the history
  • Loading branch information
adeebshihadeh committed Aug 16, 2024
1 parent 19ab44f commit bb787c9
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
2 changes: 1 addition & 1 deletion selfdrive/pandad/tests/test_pandad_loopback.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def test_loopback(self):
sm = messaging.SubMaster(['pandaStates'])
time.sleep(1)

n = 200
n = 20
for i in range(n):
print(f"pandad loopback {i}/{n}")

Expand Down
2 changes: 1 addition & 1 deletion selfdrive/test/process_replay/model_replay.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

TEST_ROUTE = "2f4452b03ccb98f0|2022-12-03--13-45-30"
SEGMENT = 6
MAX_FRAMES = 100 if PC else 600
MAX_FRAMES = 100 if PC else 60

NO_MODEL = "NO_MODEL" in os.environ
SEND_EXTRA_INPUTS = bool(int(os.getenv("SEND_EXTRA_INPUTS", "0")))
Expand Down
29 changes: 15 additions & 14 deletions system/camerad/test/test_camerad.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from cereal.services import SERVICE_LIST
from openpilot.system.manager.process_config import managed_processes

TEST_TIMESPAN = 30
TEST_TIMESPAN = 10
LAG_FRAME_TOLERANCE = {log.FrameData.ImageSensor.ar0231: 0.5, # ARs use synced pulses for frame starts
log.FrameData.ImageSensor.ox03c10: 1.1} # OXs react to out-of-sync at next frame
FRAME_DELTA_TOLERANCE = {log.FrameData.ImageSensor.ar0231: 1.0,
Expand All @@ -21,39 +21,40 @@
@flaky(max_runs=3)
@pytest.mark.tici
class TestCamerad:
def setup_method(self):
@classmethod
def setup_method(cls):
# run camerad and record logs
managed_processes['camerad'].start()
time.sleep(3)
socks = {c: messaging.sub_sock(c, conflate=False, timeout=100) for c in CAMERAS}

self.logs = defaultdict(list)
cls.logs = defaultdict(list)
start_time = time.monotonic()
while time.monotonic()- start_time < TEST_TIMESPAN:
for cam, s in socks.items():
self.logs[cam] += messaging.drain_sock(s)
cls.logs[cam] += messaging.drain_sock(s)
time.sleep(0.2)
managed_processes['camerad'].stop()

self.log_by_frame_id = defaultdict(list)
self.sensor_type = None
for cam, msgs in self.logs.items():
if self.sensor_type is None:
self.sensor_type = getattr(msgs[0], msgs[0].which()).sensor.raw
cls.log_by_frame_id = defaultdict(list)
cls.sensor_type = None
for cam, msgs in cls.logs.items():
if cls.sensor_type is None:
cls.sensor_type = getattr(msgs[0], msgs[0].which()).sensor.raw
expected_frames = SERVICE_LIST[cam].frequency * TEST_TIMESPAN
assert expected_frames*0.95 < len(msgs) < expected_frames*1.05, f"unexpected frame count {cam}: {expected_frames=}, got {len(msgs)}"

dts = np.abs(np.diff([getattr(m, m.which()).timestampSof/1e6 for m in msgs]) - 1000/SERVICE_LIST[cam].frequency)
assert (dts < FRAME_DELTA_TOLERANCE[self.sensor_type]).all(), f"{cam} dts(ms) out of spec: max diff {dts.max()}, 99 percentile {np.percentile(dts, 99)}"
assert (dts < FRAME_DELTA_TOLERANCE[cls.sensor_type]).all(), f"{cam} dts(ms) out of spec: max diff {dts.max()}, 99 percentile {np.percentile(dts, 99)}"

for m in msgs:
self.log_by_frame_id[getattr(m, m.which()).frameId].append(m)
cls.log_by_frame_id[getattr(m, m.which()).frameId].append(m)

# strip beginning and end
for _ in range(3):
mn, mx = min(self.log_by_frame_id.keys()), max(self.log_by_frame_id.keys())
del self.log_by_frame_id[mn]
del self.log_by_frame_id[mx]
mn, mx = min(cls.log_by_frame_id.keys()), max(cls.log_by_frame_id.keys())
del cls.log_by_frame_id[mn]
del cls.log_by_frame_id[mx]

def test_frame_skips(self):
skips = {}
Expand Down

0 comments on commit bb787c9

Please sign in to comment.