print("Hello world! - python.jsrun.net .")
class PIDController:
def __init__(self, Kp, Ki, Kd, dt):
self.Kp = Kp
self.Ki = Ki
self.Kd = Kd
self.dt = dt
self.integral = 0
self.previous_error = 0
def compute(self, error):
self.integral += error * self.dt
derivative = (error - self.previous_error) / self.dt
output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative
self.previous_error = error
return output
target_yaw = 10.0
current_yaw = 2.0
dt = 0.1
max_voltage = 15.0
min_voltage = -15.0
Kp = 2.5
Ki = 0.5
Kd = 1.2
pid = PIDController(Kp, Ki, Kd, dt)
for _ in range(100):
error = target_yaw - current_yaw
if abs(error) <= 2.0:
break
u = pid.compute(error)
u = max(min(u, max_voltage), min_voltage)
delta_yaw = 0.3 * u * dt
current_yaw += delta_yaw
print(f"误差: {error:.2f}度, 电压: {u:.2f}V, 当前偏航角: {current_yaw:.2f}度")
print(f"\n最终偏航角: {current_yaw:.2f}度,控制误差: {target_yaw - current_yaw:.2f}度")