mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-10-01 03:43:42 +08:00
add debug script to run paramsd on route
This commit is contained in:
+149
@@ -0,0 +1,149 @@
|
||||
#!/usr/bin/env python3
|
||||
# pylint: skip-file
|
||||
# flake8: noqa
|
||||
# type: ignore
|
||||
|
||||
import math
|
||||
import multiprocessing
|
||||
|
||||
import numpy as np
|
||||
from tqdm import tqdm
|
||||
|
||||
from selfdrive.locationd.paramsd import ParamsLearner, States
|
||||
from tools.lib.logreader import LogReader
|
||||
from tools.lib.route import Route
|
||||
|
||||
ROUTE = "b2f1615665781088|2021-03-14--17-27-47"
|
||||
PLOT = True
|
||||
|
||||
|
||||
def load_segment(segment_name):
|
||||
print(f"Loading {segment_name}")
|
||||
if segment_name is None:
|
||||
return []
|
||||
|
||||
try:
|
||||
return list(LogReader(segment_name))
|
||||
except ValueError as e:
|
||||
print(f"Error parsing {segment_name}: {e}")
|
||||
return []
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
route = Route(ROUTE)
|
||||
|
||||
msgs = []
|
||||
with multiprocessing.Pool(24) as pool:
|
||||
for d in pool.map(load_segment, route.log_paths()):
|
||||
msgs += d
|
||||
|
||||
for m in msgs:
|
||||
if m.which() == 'carParams':
|
||||
CP = m.carParams
|
||||
break
|
||||
|
||||
params = {
|
||||
'carFingerprint': CP.carFingerprint,
|
||||
'steerRatio': CP.steerRatio,
|
||||
'stiffnessFactor': 1.0,
|
||||
'angleOffsetAverageDeg': 0.0,
|
||||
}
|
||||
|
||||
for m in msgs:
|
||||
if m.which() == 'liveParameters':
|
||||
params['steerRatio'] = m.liveParameters.steerRatio
|
||||
params['angleOffsetAverageDeg'] = m.liveParameters.angleOffsetAverageDeg
|
||||
break
|
||||
|
||||
for m in msgs:
|
||||
if m.which() == 'carState':
|
||||
last_carstate = m
|
||||
break
|
||||
|
||||
print(params)
|
||||
learner = ParamsLearner(CP, params['steerRatio'], params['stiffnessFactor'], math.radians(params['angleOffsetAverageDeg']))
|
||||
msgs = [m for m in tqdm(msgs) if m.which() in ('liveLocationKalman', 'carState', 'liveParameters')]
|
||||
|
||||
ts = []
|
||||
ts_log = []
|
||||
results = []
|
||||
results_log = []
|
||||
for m in tqdm(msgs):
|
||||
if m.which() == 'carState':
|
||||
last_carstate = m
|
||||
|
||||
elif m.which() == 'liveLocationKalman':
|
||||
t = last_carstate.logMonoTime / 1e9
|
||||
learner.handle_log(t, 'carState', last_carstate.carState)
|
||||
|
||||
t = m.logMonoTime / 1e9
|
||||
learner.handle_log(t, 'liveLocationKalman', m.liveLocationKalman)
|
||||
|
||||
x = learner.kf.x
|
||||
sr = float(x[States.STEER_RATIO])
|
||||
st = float(x[States.STIFFNESS])
|
||||
ao_avg = math.degrees(x[States.ANGLE_OFFSET])
|
||||
ao = ao_avg + math.degrees(x[States.ANGLE_OFFSET_FAST])
|
||||
r = [sr, st, ao_avg, ao]
|
||||
if any(math.isnan(v) for v in r):
|
||||
print("NaN", t)
|
||||
|
||||
ts.append(t)
|
||||
results.append(r)
|
||||
|
||||
elif m.which() == 'liveParameters':
|
||||
t = m.logMonoTime / 1e9
|
||||
mm = m.liveParameters
|
||||
|
||||
r = [mm.steerRatio, mm.stiffnessFactor, mm.angleOffsetAverageDeg, mm.angleOffsetDeg]
|
||||
if any(math.isnan(v) for v in r):
|
||||
print("NaN in log", t)
|
||||
ts_log.append(t)
|
||||
results_log.append(r)
|
||||
|
||||
results = np.asarray(results)
|
||||
results_log = np.asarray(results_log)
|
||||
|
||||
if PLOT:
|
||||
import matplotlib.pyplot as plt
|
||||
plt.figure()
|
||||
|
||||
plt.subplot(3, 2, 1)
|
||||
plt.plot(ts, results[:, 0], label='Steer Ratio')
|
||||
plt.grid()
|
||||
plt.ylim([0, 20])
|
||||
plt.legend()
|
||||
|
||||
plt.subplot(3, 2, 3)
|
||||
plt.plot(ts, results[:, 1], label='Stiffness')
|
||||
plt.ylim([0, 2])
|
||||
plt.grid()
|
||||
plt.legend()
|
||||
|
||||
plt.subplot(3, 2, 5)
|
||||
plt.plot(ts, results[:, 2], label='Angle offset (average)')
|
||||
plt.plot(ts, results[:, 3], label='Angle offset (instant)')
|
||||
plt.ylim([-5, 5])
|
||||
plt.grid()
|
||||
plt.legend()
|
||||
|
||||
plt.subplot(3, 2, 2)
|
||||
plt.plot(ts_log, results_log[:, 0], label='Steer Ratio')
|
||||
plt.grid()
|
||||
plt.ylim([0, 20])
|
||||
plt.legend()
|
||||
|
||||
plt.subplot(3, 2, 4)
|
||||
plt.plot(ts_log, results_log[:, 1], label='Stiffness')
|
||||
plt.ylim([0, 2])
|
||||
plt.grid()
|
||||
plt.legend()
|
||||
|
||||
plt.subplot(3, 2, 6)
|
||||
plt.plot(ts_log, results_log[:, 2], label='Angle offset (average)')
|
||||
plt.plot(ts_log, results_log[:, 3], label='Angle offset (instant)')
|
||||
plt.ylim([-5, 5])
|
||||
plt.grid()
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
Reference in New Issue
Block a user