Práctica 1 - Introducción a Jupyter lab y libreria robots

Introducción al calculo simbólico numérico y librería sympy

En este documento se describe el proceso de obtención de la dinámica de un robot manipulador (pendulo simple) por medio de la ecuación de Euler-Lagrange, empecemos importando las librerias necesarias:


In [ ]:
from sympy import var, sin, cos, pi, Matrix, Function, Rational
from sympy.physics.mechanics import mechanics_printing
mechanics_printing()

Una vez que hemos importado las funciones necesarias, podemos empezar definiendo las variables a utilizar dentro del calculo:


In [ ]:
var("l1")

Cuando se definen las variables, se pueden mandar a llamar con el mismo nombre:


In [ ]:
l1

Definimos de una vez todas las variables necesarias:


In [ ]:
var("m1 J1 t g")

Y definimos las variables que dependen de otra variable, especificamente en este calculo, todo lo anterior es constante y solo $q_1$ es una variable dependiente del tiempo:


In [ ]:
q1 = Function("q1")(t)

Ya con las variables definidas, puedo empezar a definir la posición del centro de masa del primer (y único eslabon):


In [ ]:
x1 = l1*cos(q1)
y1 = l1*sin(q1)

In [ ]:
x1

In [ ]:
y1

De manera que si necesitamos calcular la derivada con respecto del tiempo de $x_1$, tenemos que hacer:


In [ ]:
x1.diff(t)

Calculamos el cuadrado de la velocidad traslacional del primer centro de masa:


In [ ]:
v1c = x1.diff(t)**2 + y1.diff(t)**2

In [ ]:
v1c

Pero como se puede ver, no necesariamente se va a simplificar completamente la expresión calculada; por lo que podemos decir explicitamente que trate de simplificar más, el motor de algebra simbolica:


In [ ]:
v1c.simplify()

Guardando esta expresion simplificada:


In [ ]:
v1c = v1c.simplify()

Y calculando la altura y velocidad rotacional del eslabon:


In [ ]:
h1 = y1
ω1 = q1.diff(t)

Calculando la energía cinética y potencial:


In [ ]:
K = Rational(1,2)*m1*v1c + Rational(1,2)*J1*ω1**2

In [ ]:
U = m1*g*h1

Con estas energias se puede calcular el Lagrangiano:


In [ ]:
L = K - U

In [ ]:
L

Y una vez obtenido el Lagrangiano, podemos empezar a derivar, $\frac{\partial L}{\partial \dot{q}_1}$, $\frac{d}{dt}\left( \frac{\partial L}{\partial \dot{q}_1} \right)$ y $\frac{\partial L}{\partial q_1}$


In [ ]:
L.diff(q1.diff(t))

In [ ]:
L.diff(q1.diff(t)).diff(t)

In [ ]:
L.diff(q1)

O bien, agrupandolo en la ecuación de Euler - Lagrange:

$$ \tau_1 = \frac{d}{dt}\left( \frac{\partial L}{\partial \dot{q}_1} \right) - \frac{\partial L}{\partial q_1} $$

In [ ]:
L.diff(q1.diff(t)).diff(t) - L.diff(q1)

En este caso, podemos utilizar el metodo collect para factorizar con respecto a ciertos terminos, en este caso $\ddot{q}_1$:


In [ ]:
τ1 = (L.diff(q1.diff(t)).diff(t) - L.diff(q1)).collect(q1.diff(t).diff(t))

In [ ]:
τ1

Una vez que hemos concluido este proceso, podemos pasar al documento llamado numerico.ipynb