# Cinemática III

Hasta el momento hemos usado solamente numeros para representar las transformaciones que describen la cinematica de los manipuladores, pero dentro del ambiente de IPython tenemos una libreria que nos va a ayudar mucho cuando queremos calcular una formula general.

## Sympy

La libreria de sympy nos ofrece herramientas de calculo analitico y numerico para analisis simbolico (por lo general nos referimos a el simplemente como calculo simbolico). Lo primero que tenemos que hacer es inicializar las funciones de sympy que vamos a necesitar.


```
# Importa la función para imprimir LaTeX en el notebook de IPython
from sympy.interactive import printing
printing.init_printing()
# Importamos funciones utiles para algebra
from sympy import var, simplify, collect, expand, solve, sin, cos, Matrix
```

Y ahora podemos inicializar las variables que vamos a ocupar, esto lo hacemos asi:


```
var("x y z")
```

Podemos representar cualquier tipo de expresión que queramos:


```
x**2 + sin(y) + 3*x + 1
```

Incluso resolver algunas formulas con algebra o trigonometria:


```
solve(x**2 + 2*x + 1, x)
```


```
solve(sin(y) + cos(y), y)
```

Podemos guardar estas expresiones en variables, y estas variables van a tener metodos especiales, como por ejemplo la derivada.


```
f = sin(x) + x
```


```
f.diff(x)
```

Y tambien podemos representar matrices.


```
Rz = Matrix([[cos(x), -sin(x), 0, 0],
             [sin(x),  cos(x), 0, 0],
             [     0,       0, 1, 0],
             [     0,       0, 0, 1]])
Rz
```

y usarla para operaciones:


```
Rz*Rz
```

Nuestras funciones de Python, tambien nos pueden regresar objetos de sympy:


```
def rotacionz(theta):
    '''
    Esta función devuelve una matriz de rotación con respecto al eje z
    con una magnitud de theta.
    
    Uso:
    
    >>> rotacionz(y)
    Matrix([
    [cos(y), -sin(y), 0, 0],
    [sin(y),  cos(y), 0, 0],
    [     0,       0, 1, 0],
    [     0,       0, 0, 1]])
    '''
    Rz = Matrix([[cos(theta), -sin(theta), 0, 0],
                 [sin(theta),  cos(theta), 0, 0],
                 [         0,           0, 1, 0],
                 [         0,           0, 0, 1]])
    return Rz
```


```
var("q_1")
rotacionz(q_1)
```

## Ejercicios

1. Implemente el codigo necesario para tener funciones que describan las rotaciones en $x$ y en $y$ y las traslaciones en $x$, $y$ y $z$.
2. Implemente una función que nos devuelva la transformación homogenea de un manipulador PUMA.

ba5658ab417f6bbac50e8f3a4a4e16253916c4e7
ipynb
Jupyter Notebook
Practicas/Practica 3 - Cinematica III.ipynb
robblack007/clase-robotica-industrial
4d763e4b2de51d82ae1d44739e8ac6dcf970209a
MIT
Practicas/Practica 3 - Cinematica III.ipynb
robblack007/clase-robotica-industrial
4d763e4b2de51d82ae1d44739e8ac6dcf970209a
MIT
Practicas/Practica 3 - Cinematica III.ipynb
robblack007/clase-robotica-industrial
4d763e4b2de51d82ae1d44739e8ac6dcf970209a
MIT
Qwen/Qwen-72B
1. YES
2. YES