Práctica 4 - Control

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.