Pulse desire (#1172)
* initial * compilation fixes * add desire * pulse desire * 0d5728f6-a918-40a6-bce3-a9d0f1238180/20 * cleaner * inject model * inject model * test runs * ah already done I see * remove useless * update * updates, doesnt work * fix generating new references Co-authored-by: Willem Melching <willem.melching@gmail.com>pull/1202/head
parent
bae7816999
commit
63d3bb517f
12 changed files with 194 additions and 35 deletions
@ -1,3 +1,3 @@ |
||||
version https://git-lfs.github.com/spec/v1 |
||||
oid sha256:b5bca4529ca5c2d6c12f2faa48265f706c057ec1d1243587fc8e4f31233bdf94 |
||||
size 27183806 |
||||
oid sha256:e1094ebfbe14692cdfe9645aedd36680ed83b40a7afe0fc5d3943d7a2df0ee9a |
||||
size 26664761 |
||||
|
@ -1,3 +1,3 @@ |
||||
version https://git-lfs.github.com/spec/v1 |
||||
oid sha256:7370937c2e9f271273bb2d2f8a41e574eda3f347d9926c3f91d9894828cb2999 |
||||
size 28035608 |
||||
oid sha256:c7b36f2273a3f2f5b418642d2aa2b4c39a9a9c6579e2c88ec9b1615038f7751f |
||||
size 27524584 |
||||
|
@ -0,0 +1,92 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import os |
||||
import time |
||||
|
||||
|
||||
from tqdm import tqdm |
||||
from cereal.messaging import PubMaster, recv_one, sub_sock |
||||
from tools.lib.framereader import FrameReader |
||||
import subprocess |
||||
import selfdrive.manager as manager |
||||
|
||||
|
||||
def rreplace(s, old, new, occurrence): |
||||
li = s.rsplit(old, occurrence) |
||||
return new.join(li) |
||||
|
||||
|
||||
def regen_model(msgs, pm, frame_reader, model_sock): |
||||
# Send some livecalibration messages to initalize visiond |
||||
for msg in msgs: |
||||
if msg.which() == 'liveCalibration': |
||||
pm.send('liveCalibration', msg.as_builder()) |
||||
|
||||
|
||||
out_msgs = [] |
||||
fidx = 0 |
||||
for msg in tqdm(msgs): |
||||
w = msg.which() |
||||
|
||||
if w == 'frame': |
||||
msg = msg.as_builder() |
||||
|
||||
img = frame_reader.get(fidx, pix_fmt="rgb24")[0][:,::-1] |
||||
|
||||
msg.frame.image = img.flatten().tobytes() |
||||
|
||||
pm.send(w, msg) |
||||
model = recv_one(model_sock) |
||||
fidx += 1 |
||||
out_msgs.append(model) |
||||
elif w == 'liveCalibration': |
||||
pm.send(w, msg.as_builder()) |
||||
|
||||
return out_msgs |
||||
|
||||
|
||||
def inject_model(msgs, segment_name): |
||||
if segment_name.count('--') == 2: |
||||
segment_name = rreplace(segment_name, '--', '/', 1) |
||||
frame_reader = FrameReader('cd:/'+segment_name.replace("|", "/") + "/fcamera.hevc") |
||||
|
||||
manager.start_managed_process('camerad') |
||||
manager.start_managed_process('modeld') |
||||
# TODO do better than just wait for modeld to boot |
||||
time.sleep(5) |
||||
|
||||
pm = PubMaster(['liveCalibration', 'frame']) |
||||
model_sock = sub_sock('model') |
||||
try: |
||||
out_msgs = regen_model(msgs, pm, frame_reader, model_sock) |
||||
except (KeyboardInterrupt, SystemExit, Exception) as e: |
||||
manager.kill_managed_process('modeld') |
||||
time.sleep(2) |
||||
manager.kill_managed_process('camerad') |
||||
raise e |
||||
manager.kill_managed_process('modeld') |
||||
time.sleep(2) |
||||
manager.kill_managed_process('camerad') |
||||
|
||||
|
||||
new_msgs = [] |
||||
midx = 0 |
||||
for msg in msgs: |
||||
if (msg.which() == 'model') and (midx < len(out_msgs)): |
||||
model = out_msgs[midx].as_builder() |
||||
model.logMonoTime = msg.logMonoTime |
||||
model = model.as_reader() |
||||
new_msgs.append(model) |
||||
midx += 1 |
||||
else: |
||||
new_msgs.append(msg) |
||||
|
||||
print(len(new_msgs), len(list(msgs))) |
||||
assert abs(len(new_msgs) - len(list(msgs))) < 2 |
||||
|
||||
return new_msgs |
||||
|
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
inject_model("0375fdf7b1ce594d|2019-06-13--08-32-25/3") |
@ -0,0 +1 @@ |
||||
95638846316e5de7f0314ed2330b01428792c889 |
@ -1 +1 @@ |
||||
a8f2dbe727e8b999a4e1df024abf919c35b1ac7d |
||||
43b4e291bb92ee02066c59a13ef28aa900a3f092 |
||||
|
@ -0,0 +1,45 @@ |
||||
#!/usr/bin/env python3 |
||||
import os |
||||
import sys |
||||
|
||||
from selfdrive.test.openpilotci_upload import upload_file |
||||
from selfdrive.test.process_replay.compare_logs import save_log |
||||
from selfdrive.test.process_replay.test_processes import segments, get_segment |
||||
from selfdrive.version import get_git_commit |
||||
from tools.lib.logreader import LogReader |
||||
from inject_model import inject_model |
||||
|
||||
if __name__ == "__main__": |
||||
|
||||
no_upload = "--no-upload" in sys.argv |
||||
|
||||
process_replay_dir = os.path.dirname(os.path.abspath(__file__)) |
||||
ref_commit_fn = os.path.join(process_replay_dir, "model_ref_commit") |
||||
|
||||
ref_commit = get_git_commit() |
||||
with open(ref_commit_fn, "w") as f: |
||||
f.write(ref_commit) |
||||
|
||||
for car_brand, segment in segments: |
||||
rlog_fn = get_segment(segment, original=True) |
||||
|
||||
if rlog_fn is None: |
||||
print("failed to get segment %s" % segment) |
||||
sys.exit(1) |
||||
|
||||
lr = LogReader(rlog_fn) |
||||
print('injecting model into % s' % segment) |
||||
lr = inject_model(lr, segment) |
||||
|
||||
route_name, segment_num = segment.rsplit("--", 1) |
||||
log_fn = "%s/%s/rlog_%s.bz2" % (route_name.replace("|", "/"), segment_num, ref_commit) |
||||
tmp_name = 'tmp_%s_%s' % (route_name, segment_num) |
||||
save_log(tmp_name, lr) |
||||
|
||||
if not no_upload: |
||||
upload_file(tmp_name, log_fn) |
||||
print('uploaded %s', log_fn) |
||||
os.remove(tmp_name) |
||||
os.remove(rlog_fn) |
||||
|
||||
print("done") |
Loading…
Reference in new issue