From 807e84d900ccb8fd2545bcfbe9c5aaffa0cbef2c Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 28 Nov 2021 14:19:49 -0800 Subject: [PATCH] juggle: add demo flag and improve README old-commit-hash: 920b751888a09192f055241c7db6cfdfc5f1bf57 --- tools/plotjuggler/README.md | 23 +++++++++++++++-------- tools/plotjuggler/juggle.py | 10 +++++++--- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/tools/plotjuggler/README.md b/tools/plotjuggler/README.md index f462cadece..8ab150e821 100644 --- a/tools/plotjuggler/README.md +++ b/tools/plotjuggler/README.md @@ -1,10 +1,12 @@ # PlotJuggler -We've extended [PlotJuggler](https://github.com/facontidavide/PlotJuggler) to plot all of your openpilot logs. Check out our plugins: https://github.com/commaai/PlotJuggler. +[PlotJuggler](https://github.com/facontidavide/PlotJuggler) is a tool to quickly visualize time series data, and we've written plugins to parse openpilot logs. Check out our plugins: https://github.com/commaai/PlotJuggler. ## Installation -Once you've cloned and are in openpilot, download PlotJuggler and install our plugins with this command: +**NOTE: this is Ubuntu only for now. Pull requests for macOS support are welcome.** + +Once you've cloned and are in openpilot, this command will download PlotJuggler and install our plugins: `cd tools/plotjuggler && ./install.sh` @@ -12,9 +14,9 @@ Once you've cloned and are in openpilot, download PlotJuggler and install our pl ``` $ ./juggle.py -h -usage: juggle.py [-h] [--qlog] [--can] [--stream] [--layout [LAYOUT]] [route_name] [segment_number] [segment_count] +usage: juggle.py [-h] [--demo] [--qlog] [--can] [--stream] [--layout [LAYOUT]] [route_name] [segment_number] [segment_count] -PlotJuggler plugin for reading openpilot logs +A helper to run PlotJuggler on openpilot routes positional arguments: route_name The route name to plot (cabana share URL accepted) (default: None) @@ -23,9 +25,10 @@ positional arguments: optional arguments: -h, --help show this help message and exit + --demo Use the demo route instead of providing one (default: False) --qlog Use qlogs (default: False) --can Parse CAN data (default: False) - --stream Start PlotJuggler without a route to stream data using Cereal (default: False) + --stream Start PlotJuggler in streaming mode (default: False) --layout [LAYOUT] Run PlotJuggler with a pre-defined layout (default: None) ``` @@ -47,11 +50,15 @@ If streaming to PlotJuggler from a replay on your PC, simply run: `./juggle.py - For a quick demo, go through the installation step and run this command: -`./juggle.py "https://commadataci.blob.core.windows.net/openpilotci/d83f36766f8012a5/2020-02-05--18-42-21/0/rlog.bz2" --layout=layouts/demo.xml` +`./juggle.py --demo --qlog --layout=layouts/demo.xml` + +## Layouts + +If you create a layout that's useful for others, consider upstreaming it. -## Tuning +### Tuning -Use this layout to generate plots for tuning PRs. Also see tuning wiki and tuning PR template. +Use this layout to improve your car's tuning and generate plots for tuning PRs. Also see the tuning wiki and tuning PR template. `--layout layouts/tuning.xml` diff --git a/tools/plotjuggler/juggle.py b/tools/plotjuggler/juggle.py index 151e4a49c4..d488750701 100755 --- a/tools/plotjuggler/juggle.py +++ b/tools/plotjuggler/juggle.py @@ -16,6 +16,8 @@ from urllib.parse import urlparse, parse_qs juggle_dir = os.path.dirname(os.path.realpath(__file__)) +DEMO_ROUTE = "4cf7a6ad03080c90|2021-09-29--13-46-36" + def load_segment(segment_name): print(f"Loading {segment_name}") if segment_name is None: @@ -94,12 +96,13 @@ def juggle_route(route_name, segment_number, segment_count, qlog, can, layout): start_juggler(tempfile.name, dbc, layout) def get_arg_parser(): - parser = argparse.ArgumentParser(description="PlotJuggler plugin for reading openpilot logs", + parser = argparse.ArgumentParser(description="A helper to run PlotJuggler on openpilot routes", formatter_class=argparse.ArgumentDefaultsHelpFormatter) + 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("--can", action="store_true", help="Parse CAN data") - parser.add_argument("--stream", action="store_true", help="Start PlotJuggler without a route to stream data using Cereal") + 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("route_name", nargs='?', help="The route name to plot (cabana share URL accepted)") parser.add_argument("segment_number", type=int, nargs='?', help="The index of the segment to plot") @@ -116,4 +119,5 @@ if __name__ == "__main__": if args.stream: start_juggler(layout=args.layout) else: - juggle_route(args.route_name.strip(), args.segment_number, args.segment_count, args.qlog, args.can, args.layout) + route = DEMO_ROUTE if args.demo else args.route_name.strip() + juggle_route(route, args.segment_number, args.segment_count, args.qlog, args.can, args.layout)