regen: send wideRoadCameraState (#24863)

* fix camera malfunction

* revert

* send in one process to fix frames out of sync

* not used

* revert

* fix and add --no-upload for CI testing

* fingerprint if source is fw

* no FW versions
old-commit-hash: 5dce006a82
taco
Shane Smiskol 3 years ago committed by GitHub
parent d15f07433c
commit 9f395d26d2
  1. 3
      selfdrive/test/process_replay/process_replay.py
  2. 22
      selfdrive/test/process_replay/regen.py
  3. 9
      selfdrive/test/process_replay/regen_all.py

@ -15,7 +15,6 @@ from cereal.services import service_list
from common.params import Params from common.params import Params
from common.timeout import Timeout from common.timeout import Timeout
from panda.python import ALTERNATIVE_EXPERIENCE from panda.python import ALTERNATIVE_EXPERIENCE
from selfdrive.car.fingerprints import FW_VERSIONS
from selfdrive.car.car_helpers import get_car, interfaces from selfdrive.car.car_helpers import get_car, interfaces
from selfdrive.test.process_replay.helpers import OpenpilotPrefix from selfdrive.test.process_replay.helpers import OpenpilotPrefix
from selfdrive.manager.process import PythonProcess from selfdrive.manager.process import PythonProcess
@ -372,7 +371,7 @@ def setup_env(simulation=False, CP=None):
if CP.alternativeExperience == ALTERNATIVE_EXPERIENCE.DISABLE_DISENGAGE_ON_GAS: if CP.alternativeExperience == ALTERNATIVE_EXPERIENCE.DISABLE_DISENGAGE_ON_GAS:
params.put_bool("DisengageOnAccelerator", False) params.put_bool("DisengageOnAccelerator", False)
if CP.fingerprintSource == "fw" and CP.carFingerprint in FW_VERSIONS: if CP.fingerprintSource == "fw":
params.put("CarParamsCache", CP.as_builder().to_bytes()) params.put("CarParamsCache", CP.as_builder().to_bytes())
else: else:
os.environ['SKIP_FW_QUERY'] = "1" os.environ['SKIP_FW_QUERY'] = "1"

@ -127,7 +127,10 @@ def replay_cameras(lr, frs, disable_tqdm=False):
] ]
def replay_camera(s, stream, dt, vipc_server, frames, size, use_extra_client): def replay_camera(s, stream, dt, vipc_server, frames, size, use_extra_client):
pm = messaging.PubMaster([s, ]) services = [(s, stream)]
if use_extra_client:
services.append(("wideRoadCameraState", VisionStreamType.VISION_STREAM_WIDE_ROAD))
pm = messaging.PubMaster([s for s, _ in services])
rk = Ratekeeper(1 / dt, print_delay_threshold=None) rk = Ratekeeper(1 / dt, print_delay_threshold=None)
img = b"\x00" * int(size[0] * size[1] * 3 / 2) img = b"\x00" * int(size[0] * size[1] * 3 / 2)
@ -137,16 +140,15 @@ def replay_cameras(lr, frs, disable_tqdm=False):
rk.keep_time() rk.keep_time()
m = messaging.new_message(s) for s, stream in services:
msg = getattr(m, s) m = messaging.new_message(s)
msg.frameId = rk.frame msg = getattr(m, s)
msg.timestampSof = m.logMonoTime msg.frameId = rk.frame
msg.timestampEof = m.logMonoTime msg.timestampSof = m.logMonoTime
pm.send(s, m) msg.timestampEof = m.logMonoTime
pm.send(s, m)
vipc_server.send(stream, img, msg.frameId, msg.timestampSof, msg.timestampEof) vipc_server.send(stream, img, msg.frameId, msg.timestampSof, msg.timestampEof)
if use_extra_client:
vipc_server.send(VisionStreamType.VISION_STREAM_WIDE_ROAD, img, msg.frameId, msg.timestampSof, msg.timestampEof)
init_data = [m for m in lr if m.which() == 'initData'][0] init_data = [m for m in lr if m.which() == 'initData'][0]
cameras = tici_cameras if (init_data.initData.deviceType == 'tici') else eon_cameras cameras = tici_cameras if (init_data.initData.deviceType == 'tici') else eon_cameras

@ -11,12 +11,12 @@ from selfdrive.test.process_replay.test_processes import FAKEDATA, original_segm
from tools.lib.route import SegmentName from tools.lib.route import SegmentName
def regen_job(segment, disable_tqdm): def regen_job(segment, upload, disable_tqdm):
with OpenpilotPrefix(): with OpenpilotPrefix():
sn = SegmentName(segment[1]) sn = SegmentName(segment[1])
fake_dongle_id = 'regen' + ''.join(random.choice('0123456789ABCDEF') for _ in range(11)) fake_dongle_id = 'regen' + ''.join(random.choice('0123456789ABCDEF') for _ in range(11))
try: try:
relr = regen_and_save(sn.route_name.canonical_name, sn.segment_num, upload=True, use_route_meta=False, outdir=os.path.join(FAKEDATA, fake_dongle_id), disable_tqdm=disable_tqdm) relr = regen_and_save(sn.route_name.canonical_name, sn.segment_num, upload=upload, use_route_meta=False, outdir=os.path.join(FAKEDATA, fake_dongle_id), disable_tqdm=disable_tqdm)
relr = '|'.join(relr.split('/')[-2:]) relr = '|'.join(relr.split('/')[-2:])
return f' ("{segment[0]}", "{relr}"), ' return f' ("{segment[0]}", "{relr}"), '
except Exception as e: except Exception as e:
@ -26,12 +26,13 @@ def regen_job(segment, disable_tqdm):
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Generate new segments from old ones") parser = argparse.ArgumentParser(description="Generate new segments from old ones")
parser.add_argument("-j", "--jobs", type=int, default=1) parser.add_argument("-j", "--jobs", type=int, default=1)
parser.add_argument("--no-upload", action="store_true")
args = parser.parse_args() args = parser.parse_args()
with concurrent.futures.ProcessPoolExecutor(max_workers=args.jobs) as pool: with concurrent.futures.ProcessPoolExecutor(max_workers=args.jobs) as pool:
p = list(pool.map(regen_job, segments, [args.jobs > 1] * args.jobs)) p = pool.map(regen_job, segments, [not args.no_upload] * len(segments), [args.jobs > 1] * len(segments))
msg = "Copy these new segments into test_processes.py:" msg = "Copy these new segments into test_processes.py:"
for seg in tqdm(p, desc="Generating segments"): for seg in tqdm(p, desc="Generating segments", total=len(segments)):
msg += "\n" + str(seg) msg += "\n" + str(seg)
print() print()
print() print()

Loading…
Cancel
Save