Está en la página 1de 8

19/3/23, 23:14 Untitled

Acontinuación se modelará la funcion de transferencia para la base de un robot cilindrico

In [1]: #Importar librerias


import numpy as np
import matplotlib.pyplot as plt

#Importar libreria de control


import control as ctr

In [2]: # Construir el sistema en función de transferencia

num = [285.7]
den = [1, 34.02, 326.9]
s1f = ctr.TransferFunction(num,den)
print("Componentes del sistema: ")
print(s1f)

#Extraer la informacion del sistema

print("Los Polos del sistema son: "+ str(s1f.pole()))


print("==========================")
print("Los Polos del sistema son: "+ str(s1f.zero()))

#Respuesta al escalon unitario


t, y = ctr.step_response(s1f)
#Grafica la respuesta
plt.figure(1)
plt.title("Respuesta al escalon")#Colocamos el titulo
plt.plot(t, y, 'r')#Graficamos
plt.xlabel("Tiempo(s)")#Etiquetas a los ejes
plt.ylabel("Salida")
plt.grid()#Generamos la rejilla
plt.show()#Mostramos la figura

#Respuesta al impulso
t, y = ctr.impulse_response(s1f)
#Grafica la respuesta
plt.figure(2)
plt.title("Respuesta al impulso")#Colocamos el titulo
plt.plot(t, y, 'b')#Graficamos
plt.xlabel("Tiempo(s)")#Etiquetas a los ejes
plt.ylabel("Salida")
plt.grid()#Generamos la rejilla
plt.show()#Mostramos la figura

#Respuesta libre (escalon con magnitud)

t_d = np.linspace(0, 7, 100) #(inicio, fin, cantidad de puntos)


u = 10.0*np.ones([1, 100])
t, y = ctr.forced_response(s1f, t_d, u)
#Grafica la respuesta
plt.figure(3)
plt.title("Respuesta al escalon con magnitud 10")#Colocamos el titulo
plt.plot(t, y, 'g')#Graficamos
plt.xlabel("Tiempo(s)")#Etiquetas a los ejes
plt.ylabel("Salida")

file:///C:/Users/USUARIO/Downloads/Untitled.html 1/8
19/3/23, 23:14 Untitled
plt.grid()#Generamos la rejilla
plt.show()#Mostramos la figura

Componentes del sistema:

285.7
---------------------
s^2 + 34.02 s + 326.9

Los Polos del sistema son: [-17.01+6.12861322j -17.01-6.12861322j]


==========================
Los Polos del sistema son: []

file:///C:/Users/USUARIO/Downloads/Untitled.html 2/8
19/3/23, 23:14 Untitled

In [19]: #Crear el sistema en espacio de estados


A = np.array([[-34.02, -326.9],[1, 0]])
B = np.array([[1],[0]])
file:///C:/Users/USUARIO/Downloads/Untitled.html 3/8
19/3/23, 23:14 Untitled
C = np.array([0, 285.7])
D = np.array([[0]])

s2 = ctr.StateSpace(A, B, C, D)

#Matrices de controlabilidad y observabilidad


Cont = ctr.ctrb(A, B)
rank_ctrl = np.linalg.matrix_rank(Cont) ##
print("Contr" + str(Cont))

Obs=ctr.obsv(A,C)
rank_obs = np.linalg.matrix_rank(Obs) ##
print("Osb" + str(Obs))

# Verificación de si el sistema es controlable y observable


if rank_ctrl == len(A) and rank_obs == len(A): #Los dos puntos representan el inicio d
print("El sistema es controlable y observable")
else:
print("El sistema no es controlable y/o observable")

#Crear escalón unitario


u = 1.0*np.ones([1,100])
t_d = np.linspace(0,7,100)

#Someter sistema a una entrada


t, y2 = ctr.forced_response(s2, t_d, u, X0=[0.0, 0.0])
t, y2f = ctr.forced_response(s1f, t_d, u, X0=[0.0, 0.0])

#Grafica de la respuesta
plt.figure(4, figsize=(8,6))
plt.plot(t, y2, 'r', label='ss')
plt.plot(t, y2f, '--b', label='tf')
plt.legend(loc='best')
plt.xlabel('$tiempo$')
plt.ylabel('y')
plt.grid()
plt.show()

#Someter sistema a una entrada


t, y2 = ctr.forced_response(s2, t_d, u, X0=[0.003, 0.005])
t, y2f = ctr.forced_response(s1f, t_d, u, X0=[0.0, 0.0])

#Grafica de la respuesta
plt.figure(5, figsize=(8,6))
plt.plot(t, y2, 'r', label='ss')
plt.plot(t, y2f, '--b', label='tf')
plt.legend(loc='best')
plt.xlabel('$tiempo$')
plt.ylabel('y')
plt.grid()
plt.show()

#Someter sistema a una entrada


t, y2 = ctr.forced_response(s2, t_d, u, X0=[0.03,0.01 ])
t, y2f = ctr.forced_response(s1f, t_d, u, X0=[0.0, 0.0])

#Grafica de la respuesta
plt.figure(5, figsize=(8,6))
plt.plot(t, y2, 'r', label='ss')
file:///C:/Users/USUARIO/Downloads/Untitled.html 4/8
19/3/23, 23:14 Untitled
plt.plot(t, y2f, '--b', label='tf')
plt.legend(loc='best')
plt.xlabel('$tiempo$')
plt.ylabel('y')
plt.grid()
plt.show()

Contr[[ 1. -34.02]
[ 0. 1. ]]
Osb[[ 0. 285.7]
[285.7 0. ]]
El sistema es controlable y observable

file:///C:/Users/USUARIO/Downloads/Untitled.html 5/8
19/3/23, 23:14 Untitled

file:///C:/Users/USUARIO/Downloads/Untitled.html 6/8
19/3/23, 23:14 Untitled

In [20]: #Imprimir diagramas de polos y ceros


plt.figure(1)
polos, zeros = ctr.pzmap(s1f, plot=True, grid=True, title='Mapa de polos y ceros')

#Imprimir el diagrama de rlocus


plt.figure(2)
rlist, klist = ctr.root_locus(s1f)

#Diagrama de Bode
plt.figure(3)
mag, phase, omega = ctr.bode(s1f)

file:///C:/Users/USUARIO/Downloads/Untitled.html 7/8
19/3/23, 23:14 Untitled

In [ ]:

file:///C:/Users/USUARIO/Downloads/Untitled.html 8/8

También podría gustarte