diff --git a/.github/PULL_REQUEST_TEMPLATE/tuning.md b/.github/PULL_REQUEST_TEMPLATE/tuning.md index ea2c8207c6..05e4312699 100644 --- a/.github/PULL_REQUEST_TEMPLATE/tuning.md +++ b/.github/PULL_REQUEST_TEMPLATE/tuning.md @@ -8,15 +8,16 @@ assignees: '' **Description** - + **Verification** - diff --git a/tools/plotjuggler/README.md b/tools/plotjuggler/README.md index f78ae27178..f462cadece 100644 --- a/tools/plotjuggler/README.md +++ b/tools/plotjuggler/README.md @@ -47,7 +47,13 @@ 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=demo_layout.xml` +`./juggle.py "https://commadataci.blob.core.windows.net/openpilotci/d83f36766f8012a5/2020-02-05--18-42-21/0/rlog.bz2" --layout=layouts/demo.xml` + +## Tuning + +Use this layout to generate plots for tuning PRs. Also see tuning wiki and tuning PR template. + +`--layout layouts/tuning.xml` ![screenshot](https://i.imgur.com/cizHCH3.png) diff --git a/tools/plotjuggler/juggle.py b/tools/plotjuggler/juggle.py index 75c3c0e260..3157ff2880 100755 --- a/tools/plotjuggler/juggle.py +++ b/tools/plotjuggler/juggle.py @@ -114,6 +114,6 @@ if __name__ == "__main__": args = arg_parser.parse_args(sys.argv[1:]) if args.stream: - start_juggler() + start_juggler(layout=args.layout) else: juggle_route(args.route_name, args.segment_number, args.segment_count, args.qlog, args.can, args.layout) diff --git a/tools/plotjuggler/demo_layout.xml b/tools/plotjuggler/layouts/demo.xml similarity index 100% rename from tools/plotjuggler/demo_layout.xml rename to tools/plotjuggler/layouts/demo.xml diff --git a/tools/plotjuggler/layouts/tuning.xml b/tools/plotjuggler/layouts/tuning.xml new file mode 100644 index 0000000000..270b4a6284 --- /dev/null +++ b/tools/plotjuggler/layouts/tuning.xml @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + t + + + + + + + + + + + + + engage_delay = 5 +last_bad_time = -engage_delay + accel = value +brake = v1 +gas = v2 +active = v3 + +if (brake ~= 0 or gas ~= 0 or active == 0) then + last_bad_time = time +end + +if (time > last_bad_time + engage_delay) then + return value +else + return 0 +end + /carControl/actuators/accel + + /carState/brakePressed + /carState/gasPressed + /carControl/active + + + + engage_delay = 5 +last_bad_time = -engage_delay + accel = value +brake = v1 +gas = v2 +active = v3 + +if (brake ~= 0 or gas ~= 0 or active == 0) then + last_bad_time = time +end + +if (time > last_bad_time + engage_delay) then + return value +else + return 0 +end + /longitudinalPlan/accels/0 + + /carState/brakePressed + /carState/gasPressed + /carControl/active + + + + engage_delay = 5 +last_bad_time = -engage_delay + accel = value +brake = v1 +gas = v2 +active = v3 + +if (brake ~= 0 or gas ~= 0 or active == 0) then + last_bad_time = time +end + +if (time > last_bad_time + engage_delay) then + return value +else + return 0 +end + /carState/aEgo + + /carState/brakePressed + /carState/gasPressed + /carControl/active + + + + engage_delay = 5 +last_bad_time = -engage_delay + curvature = value +pressed = v1 +active = v2 + +if (pressed == 1 or active == 0) then + last_bad_time = time +end + +if (time > last_bad_time + engage_delay) then + return value +else + return 0 +end + /lateralPlan/curvatures/0 + + /carState/steeringPressed + /carControl/active + + + + engage_delay = 5 +last_bad_time = -engage_delay + curvature = value +pressed = v1 +active = v2 + +if (pressed == 1 or active == 0) then + last_bad_time = time +end + +if (time > last_bad_time + engage_delay) then + return value +else + return 0 +end + /controlsState/curvature + + /carState/steeringPressed + /controlsState/active + + + + engage_delay = 5 +last_bad_time = -engage_delay + curvature = value / v3 +pressed = v1 +active = v2 + +if (pressed == 1 or active == 0) then + last_bad_time = time +end + +if (time > last_bad_time + engage_delay) then + return curvature +else + return 0 +end + /liveLocationKalman/angularVelocityCalibrated/value/2 + + /carState/steeringPressed + /carControl/active + /carState/vEgo + + + + + + +