# 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:


```python
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:


```python
var("l1")
```

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


```python
l1
```

Definimos de una vez todas las variables necesarias:


```python
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:


```python
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):


```python
x1 = l1*cos(q1)
y1 = l1*sin(q1)
```


```python
x1
```


```python
y1
```

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


```python
x1.diff(t)
```

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


```python
v1c = x1.diff(t)**2 + y1.diff(t)**2
```


```python
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:


```python
v1c.simplify()
```

Guardando esta expresion simplificada:


```python
v1c = v1c.simplify()
```

Y calculando la altura y velocidad rotacional del eslabon:


```python
h1 = y1
ω1 = q1.diff(t)
```

Calculando la energía cinética y potencial:


```python
K = Rational(1,2)*m1*v1c + Rational(1,2)*J1*ω1**2
```


```python
U = m1*g*h1
```

Con estas energias se puede calcular el Lagrangiano:


```python
L = K - U
```


```python
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}$


```python
L.diff(q1.diff(t))
```


```python
L.diff(q1.diff(t)).diff(t)
```


```python
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}
$$


```python
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$:


```python
τ1 = (L.diff(q1.diff(t)).diff(t) - L.diff(q1)).collect(q1.diff(t).diff(t))
```


```python
τ1
```

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

4dfd764fc1412064703a50f8c16cf6c8887a1c6b
ipynb
Jupyter Notebook
Practicas/practica1/simbolico.ipynb
robblack007/clase-dinamica-robot
f38cb358f2681e9c0dce979acbdcd81bf63bd59c
MIT
Practicas/practica1/simbolico.ipynb
robblack007/clase-dinamica-robot
f38cb358f2681e9c0dce979acbdcd81bf63bd59c
MIT
2016-01-26T18:33:11.000Z
2016-05-30T23:58:07.000Z
Practicas/practica1/simbolico.ipynb
robblack007/clase-dinamica-robot
f38cb358f2681e9c0dce979acbdcd81bf63bd59c
MIT
Qwen/Qwen-72B
1. YES
2. YES