class FakeSteeringWheel(): def __init__(self, dt=0.01): # physical params self.DAC = 4. / 0.625 # convert torque value from can to Nm self.k = 0.035 self.centering_k = 4.1 * 0.9 self.b = 0.1 * 0.8 self.I = 1 * 1.36 * (0.175**2) self.dt = dt # ... self.angle = 0. # start centered # self.omega = 0. def response(self, torque, vego=0): exerted_torque = torque * self.DAC # centering_torque = np.clip(-(self.centering_k * self.angle), -1.1, 1.1) # damping_torque = -(self.b * self.omega) # self.omega += self.dt * (exerted_torque + centering_torque + damping_torque) / self.I # self.omega = np.clip(self.omega, -1.1, 1.1) # self.angle += self.dt * self.omega self.angle += self.dt * self.k * exerted_torque # aristotle # print(" ========== ") # print("angle,", self.angle) # print("omega,", self.omega) # print("torque,", exerted_torque) # print("centering torque,", centering_torque) # print("damping torque,", damping_torque) # print(" ========== ") def set_angle(self, target): self.angle = target # self.omega = 0.