|
|
@ -12,6 +12,7 @@ import argparse |
|
|
|
|
|
|
|
|
|
|
|
from common.basedir import BASEDIR |
|
|
|
from common.basedir import BASEDIR |
|
|
|
from selfdrive.test.process_replay.compare_logs import save_log |
|
|
|
from selfdrive.test.process_replay.compare_logs import save_log |
|
|
|
|
|
|
|
from selfdrive.test.openpilotci import get_url |
|
|
|
from tools.lib.logreader import LogReader |
|
|
|
from tools.lib.logreader import LogReader |
|
|
|
from tools.lib.route import Route, SegmentName |
|
|
|
from tools.lib.route import Route, SegmentName |
|
|
|
from urllib.parse import urlparse, parse_qs |
|
|
|
from urllib.parse import urlparse, parse_qs |
|
|
@ -51,7 +52,7 @@ def load_segment(segment_name): |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
try: |
|
|
|
return list(LogReader(segment_name)) |
|
|
|
return list(LogReader(segment_name)) |
|
|
|
except ValueError as e: |
|
|
|
except (AssertionError, ValueError) as e: |
|
|
|
print(f"Error parsing {segment_name}: {e}") |
|
|
|
print(f"Error parsing {segment_name}: {e}") |
|
|
|
return [] |
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
|
@ -73,7 +74,7 @@ def start_juggler(fn=None, dbc=None, layout=None): |
|
|
|
subprocess.call(cmd, shell=True, env=env, cwd=juggle_dir) |
|
|
|
subprocess.call(cmd, shell=True, env=env, cwd=juggle_dir) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=None): |
|
|
|
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=None, ci=False): |
|
|
|
segment_start = 0 |
|
|
|
segment_start = 0 |
|
|
|
if 'cabana' in route_or_segment_name: |
|
|
|
if 'cabana' in route_or_segment_name: |
|
|
|
query = parse_qs(urlparse(route_or_segment_name).query) |
|
|
|
query = parse_qs(urlparse(route_or_segment_name).query) |
|
|
@ -81,6 +82,11 @@ def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=No |
|
|
|
|
|
|
|
|
|
|
|
if route_or_segment_name.startswith(("http://", "https://")) or os.path.isfile(route_or_segment_name): |
|
|
|
if route_or_segment_name.startswith(("http://", "https://")) or os.path.isfile(route_or_segment_name): |
|
|
|
logs = [route_or_segment_name] |
|
|
|
logs = [route_or_segment_name] |
|
|
|
|
|
|
|
elif ci: |
|
|
|
|
|
|
|
route_or_segment_name = SegmentName(route_or_segment_name, allow_route_name=True) |
|
|
|
|
|
|
|
route = route_or_segment_name.route_name.canonical_name |
|
|
|
|
|
|
|
segment_start = max(route_or_segment_name.segment_num, 0) |
|
|
|
|
|
|
|
logs = [get_url(route, i) for i in range(100)] # Assume there not more than 100 segments |
|
|
|
else: |
|
|
|
else: |
|
|
|
route_or_segment_name = SegmentName(route_or_segment_name, allow_route_name=True) |
|
|
|
route_or_segment_name = SegmentName(route_or_segment_name, allow_route_name=True) |
|
|
|
segment_start = max(route_or_segment_name.segment_num, 0) |
|
|
|
segment_start = max(route_or_segment_name.segment_num, 0) |
|
|
@ -132,6 +138,7 @@ if __name__ == "__main__": |
|
|
|
|
|
|
|
|
|
|
|
parser.add_argument("--demo", action="store_true", help="Use the demo route instead of providing one") |
|
|
|
parser.add_argument("--demo", action="store_true", help="Use the demo route instead of providing one") |
|
|
|
parser.add_argument("--qlog", action="store_true", help="Use qlogs") |
|
|
|
parser.add_argument("--qlog", action="store_true", help="Use qlogs") |
|
|
|
|
|
|
|
parser.add_argument("--ci", action="store_true", help="Download data from openpilot CI bucket") |
|
|
|
parser.add_argument("--can", action="store_true", help="Parse CAN data") |
|
|
|
parser.add_argument("--can", action="store_true", help="Parse CAN data") |
|
|
|
parser.add_argument("--stream", action="store_true", help="Start PlotJuggler in streaming mode") |
|
|
|
parser.add_argument("--stream", action="store_true", help="Start PlotJuggler in streaming mode") |
|
|
|
parser.add_argument("--layout", nargs='?', help="Run PlotJuggler with a pre-defined layout") |
|
|
|
parser.add_argument("--layout", nargs='?', help="Run PlotJuggler with a pre-defined layout") |
|
|
@ -157,4 +164,4 @@ if __name__ == "__main__": |
|
|
|
start_juggler(layout=args.layout) |
|
|
|
start_juggler(layout=args.layout) |
|
|
|
else: |
|
|
|
else: |
|
|
|
route_or_segment_name = DEMO_ROUTE if args.demo else args.route_or_segment_name.strip() |
|
|
|
route_or_segment_name = DEMO_ROUTE if args.demo else args.route_or_segment_name.strip() |
|
|
|
juggle_route(route_or_segment_name, args.segment_count, args.qlog, args.can, args.layout, args.dbc) |
|
|
|
juggle_route(route_or_segment_name, args.segment_count, args.qlog, args.can, args.layout, args.dbc, args.ci) |
|
|
|