Para aquellos que busquen un sustituto de código abierto para Matlab hay una buena noticia: Existe el módulo Python Control Systems Library. Acabo de probarlo y me parece mucho mejor que otras alternativas como los toolbox de control para Scilab y Octave. Si usan Anaconda, pueden instalarlo desde la terminal usando conda:
$ conda install -c conda-forge control
Quiero mostrarles algunos ejemplos simples utilizando el modelo de un motor NXT de Lego que describo en una entrada anterior. El modelo es el siguiente:
Creamos el objeto del modelo de la siguiente forma:
#Modelo como función de transferencia
num = [193.3]
den = [1.0, 18.735, 0.0]
sys = ctrl.tf(num,den) #Lazo abierto
print(sys)
El print nos mostrara la función de transferencia como una fracción en texto (al igual que en Matlab). Vamos a graficar ahora la respuesta al escalón de la planta en lazo cerrado:
#Modelo en lazo cerrado
sys_cl = ctrl.feedback(sys,1)
#Respuesta al escalón
t,y = ctrl.step_response(sys_cl)
#Graficas
plt.plot(t,y)
plt.grid(True)
plt.title(u"Respuesta al escalón")
plt.xlabel("segundos")
Lo que nos dará el siguiente resultado:
Para obtener el diagrama de bode:
plt.figure(2)
ctrl.bode_plot(sys)
Para visualizar el diagrama de polos y zeros:
from control.pzmap import pzmap
plt.figure(3)
polos,zeros = pzmap(sys_cl), plt.grid(True)
print(polos[0])
print(polos[1])
¡Trataré de crear notebook's con más ejemplos y subirlos en mi GitHub!
No hay comentarios:
Publicar un comentario