El objetivo de esta simulación va a ser comprobar las ganancias obtenidas en la sintonización del documento numerico.ipynb
, por lo que es necesario que sustituyas estas en la función en donde se calcula la señal de control:
In [ ]:
def f(t, x, params):
def control(x, params):
qd = params[0]
q1, q̇1 = x
# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
u = kp*(qd - q1) + kd*(0 - q̇1)
return u
# Se importan funciones matematicas necesarias
from numpy import cos
# Se desenvuelven las variables que componen al estado
q1, q̇1 = x
# Se definen constantes del sistema
g = 9.81
m1, J1 = 0.3, 0.0005
l1 = 0.4
τ1 = control(x, params)
# Se calculan las variables a devolver por el sistema
q1p = q̇1
q1pp = 1/(m1*l1**2 + J1)*(τ1 - g*m1*l1*cos(q1))
# Se devuelve la derivada de las variables de entrada
return [q1p, q1pp]
In [ ]:
from numpy.testing import assert_almost_equal
assert_almost_equal(f(0, [0,0], [0.1]), [0, 140.67], 2)
assert_almost_equal(f(0, [0.1,0], [0.1]), [0, -24.15], 2)
print("Sin errores")
Mandamos llamar al simulador
In [ ]:
from robots.simuladores import simulador
In [ ]:
%matplotlib widget
ts, xs = simulador(f=f, x0=[0, 0], dt=0.02, puertos_zmq=["5551", "5552"], control=True)
Este simulador no solo se puede visualizar por medio del documento visualizacion.ipynb
, sino que tambien necesita del documento referencias.ipynb
para tomar la posición deseada del manipulador.