¿Cómo puedo ejecutar una parte de un módulo de Python solo una vez?
Estoy creando un controlador PID para un coche RC con control de crucero en python, y quiero separarlo en un módulo para que el código principal se vea más limpio. Puedo hacer esto, pero el problema sería que tendría que crear un objeto una vez para el controlador PID y establecer sus constantes, y la parte restante del código debería ejecutarse cada vez que se llame a la función.
Este es mi código para el controlador PID:
from simple_pid import PID
def PID(rpm_array1, target_speed):
Kp = 80
Ki = 60
Kd = 0.01
Kf = 180 / target_speed
pid = PID(Kp, Ki, Kd)
pid.sample_time = 0.05
avg_rpm_rear = (rpm_array1[2]+rpm_array1[3])/2
speed = (avg_rpm_rear/60)*0.355;
pid.setpoint = target_speed
x = pid(speed)
pid_output = x + (target_speed * Kf)
if(pid_output>0):
throttle_target = pid_output+1455
if throttle_target >= 2500 :
throttle_target = 2500
elif throttle_target <= 1455 :
throttle_target = 1455
return throttle_target
Y me gustaría usarlo así:
import PID_module
while True:
target_throttle = PID_module.PID(rpm_array1, target_speed)
¿Cuál sería la manera correcta de hacer esto?
davy.ai
Para separar el controlador PID en un módulo, se pueden definir las constantes PID como variables globales en el módulo y crear el objeto PID en una función separada. Aquí hay una implementación de ejemplo:
Luego se puede usar este módulo de la siguiente manera:
De esta manera, el objeto PID se crea solo una vez cuando se llama a
init_pid()
y las constantes se almacenan en variables globales. La funciónget_throttle_target()
se puede llamar repetidamente con diferentes valores derpm_array1
.