In [1]:
%matplotlib notebook
DEFAULT_FIGSIZE = (8, 6)
#%matplotlib inline
#DEFAULT_FIGSIZE = (12, 8)
import sys
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plot_sim as ps
%load_ext autoreload
%autoreload 2
import matplotlib as mpl
mpl.rcParams['figure.figsize'] = DEFAULT_FIGSIZE
In [29]:
sns.palplot(color)
In [2]:
log = ps.ProcessedRecord('../tools/build/test.pb.cobs')
In [4]:
log.messages[0].controller
Out[4]:
In [17]:
import scipy.signal
from dtk.bicycle import benchmark_state_space_vs_speed, benchmark_matrices
_, A, B = benchmark_state_space_vs_speed(*benchmark_matrices(), [log.messages[0].model.v])
A = np.squeeze(A)
B = np.squeeze(B)
system = scipy.signal.lti(A, B, np.eye(4), np.zeros((4, 2)))
u = log.records.input.reshape((-1, 2, 1))
_, _, x = scipy.signal.lsim(system, u, log.t)
dx = np.dot(A, x.transpose()) + np.dot(B, u.reshape(-1, 2).transpose())
dx = dx.transpose()
In [44]:
steer_angle = log.states[:, 1]
a = scipy.signal.savgol_filter(
steer_angle, 111, 3, deriv=2, delta=0.001)
In [46]:
plt.close('all')
fig, ax = plt.subplots()
color = sns.color_palette('Paired', 10)
ax.plot(log.t,
log.records.controller.feedforward.torque,
linestyle='--',
color=color[9],
label='feedfoward torque')
ax.plot(log.t,
x[:, 3],
linestyle='--',
color=color[1],
label='steer rate (x)')
ax.plot(log.t,
dx[:, 1],
color=color[0],
label='steer rate (dx)')
ax.plot(log.t,
dx[:, 3],
color=color[2],
label='steer accel (dx)')
ax.plot(log.t,
dx[:, 3]*log.messages[0].controller.feedforward.inertia,
color=color[8],
label='feedforward torque (dx)')
ax.plot(log.t,
a,
linestyle='-.',
color=color[3],
label='steer accel (savgol)')
ax.legend()
#log.plot_controller_states(degrees=True)
#log.plot_torque_signals()
plt.show()