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 |
version https://git-lfs.github.com/spec/v1 |
||||||
oid sha256:b5bca4529ca5c2d6c12f2faa48265f706c057ec1d1243587fc8e4f31233bdf94 |
oid sha256:e1094ebfbe14692cdfe9645aedd36680ed83b40a7afe0fc5d3943d7a2df0ee9a |
||||||
size 27183806 |
size 26664761 |
||||||
|
@ -1,3 +1,3 @@ |
|||||||
version https://git-lfs.github.com/spec/v1 |
version https://git-lfs.github.com/spec/v1 |
||||||
oid sha256:7370937c2e9f271273bb2d2f8a41e574eda3f347d9926c3f91d9894828cb2999 |
oid sha256:c7b36f2273a3f2f5b418642d2aa2b4c39a9a9c6579e2c88ec9b1615038f7751f |
||||||
size 28035608 |
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