Skip to content

Commit 9facd36

Browse files
Add --dbc argument to plotjuggler (commaai#23919)
* add --dbc argument * Update tools/plotjuggler/juggle.py * update readme Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
1 parent 41d8395 commit 9facd36

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

tools/plotjuggler/README.md

+10-9
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ Once you've cloned and are in openpilot, this command will download PlotJuggler
1212

1313
```
1414
$ ./juggle.py -h
15-
usage: juggle.py [-h] [--demo] [--qlog] [--can] [--stream] [--layout [LAYOUT]] [--install]
16-
[route_or_segment_name] [segment_count]
15+
usage: juggle.py [-h] [--demo] [--qlog] [--can] [--stream] [--layout [LAYOUT]] [--install] [--dbc DBC] [route_or_segment_name] [segment_count]
1716
1817
A helper to run PlotJuggler on openpilot routes
1918
@@ -23,13 +22,15 @@ positional arguments:
2322
segment_count The number of segments to plot (default: None)
2423
2524
optional arguments:
26-
-h, --help show this help message and exit
27-
--demo Use the demo route instead of providing one (default: False)
28-
--qlog Use qlogs (default: False)
29-
--can Parse CAN data (default: False)
30-
--stream Start PlotJuggler in streaming mode (default: False)
31-
--layout [LAYOUT] Run PlotJuggler with a pre-defined layout (default: None)
32-
--install Install or update PlotJuggler + plugins (default: False)
25+
-h, --help show this help message and exit
26+
--demo Use the demo route instead of providing one (default: False)
27+
--qlog Use qlogs (default: False)
28+
--can Parse CAN data (default: False)
29+
--stream Start PlotJuggler in streaming mode (default: False)
30+
--layout [LAYOUT] Run PlotJuggler with a pre-defined layout (default: None)
31+
--install Install or update PlotJuggler + plugins (default: False)
32+
--dbc DBC Set the DBC name to load for parsing CAN data. If not set, the DBC will be
33+
automatically inferred from the logs. (default: None)
3334
```
3435

3536
Examples using route name:

tools/plotjuggler/juggle.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def start_juggler(fn=None, dbc=None, layout=None):
7575
subprocess.call(cmd, shell=True, env=env, cwd=juggle_dir)
7676

7777

78-
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout):
78+
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=None):
7979
segment_start = 0
8080
if 'cabana' in route_or_segment_name:
8181
query = parse_qs(urlparse(route_or_segment_name).query)
@@ -113,14 +113,14 @@ def juggle_route(route_or_segment_name, segment_count, qlog, can, layout):
113113
all_data = [d for d in all_data if d.which() not in ['can', 'sendcan']]
114114

115115
# Infer DBC name from logs
116-
dbc = None
117-
for cp in [m for m in all_data if m.which() == 'carParams']:
118-
try:
119-
DBC = __import__(f"selfdrive.car.{cp.carParams.carName}.values", fromlist=['DBC']).DBC
120-
dbc = DBC[cp.carParams.carFingerprint]['pt']
121-
except Exception:
122-
pass
123-
break
116+
if dbc is None:
117+
for cp in [m for m in all_data if m.which() == 'carParams']:
118+
try:
119+
DBC = __import__(f"selfdrive.car.{cp.carParams.carName}.values", fromlist=['DBC']).DBC
120+
dbc = DBC[cp.carParams.carFingerprint]['pt']
121+
except Exception:
122+
pass
123+
break
124124

125125
with tempfile.NamedTemporaryFile(suffix='.rlog', dir=juggle_dir) as tmp:
126126
save_log(tmp.name, all_data, compress=False)
@@ -138,6 +138,7 @@ def juggle_route(route_or_segment_name, segment_count, qlog, can, layout):
138138
parser.add_argument("--stream", action="store_true", help="Start PlotJuggler in streaming mode")
139139
parser.add_argument("--layout", nargs='?', help="Run PlotJuggler with a pre-defined layout")
140140
parser.add_argument("--install", action="store_true", help="Install or update PlotJuggler + plugins")
141+
parser.add_argument("--dbc", help="Set the DBC name to load for parsing CAN data. If not set, the DBC will be automatically inferred from the logs.")
141142
parser.add_argument("route_or_segment_name", nargs='?', help="The route or segment name to plot (cabana share URL accepted)")
142143
parser.add_argument("segment_count", type=int, nargs='?', help="The number of segments to plot")
143144

@@ -158,4 +159,4 @@ def juggle_route(route_or_segment_name, segment_count, qlog, can, layout):
158159
start_juggler(layout=args.layout)
159160
else:
160161
route_or_segment_name = DEMO_ROUTE if args.demo else args.route_or_segment_name.strip()
161-
juggle_route(route_or_segment_name, args.segment_count, args.qlog, args.can, args.layout)
162+
juggle_route(route_or_segment_name, args.segment_count, args.qlog, args.can, args.layout, args.dbc)

0 commit comments

Comments
 (0)