<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Problemas
Implemente el código para las funciones que devuelvan matrices de rotación en $x$ y $y$.
Step1:  Implemente el código para las funciones que devuelvan matrices de traslación en $x$, $y$ y $z$.
Step2:  Implemente una cadena cinemática que describa la transformación hecha por una rotacion en $z$ de $30^o$, una rotación en $y$ de $50^o$ y una traslación en $z$ de $1m$, y guardela en la variable T.
Step3:  Sabemos que un pendulo doble puede ser descrito por una cadena cinemática; implemente una función que tome como argumento los parametros de rotación y traslación de cada uno de sus ejes, y devuelva la posición del actuador final.
<ASSISTANT_TASK:>
Python Code:
def rotacion_x(θ):
    # YOUR CODE HERE
    raise NotImplementedError()
    
def rotacion_y(θ):
    # YOUR CODE HERE
    raise NotImplementedError()
from numpy.testing import assert_allclose
from numpy import eye, pi, matrix
assert_allclose(rotacion_x(0), eye(4))
assert_allclose(rotacion_x(pi), matrix([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
assert_allclose(rotacion_y(0), eye(4))
assert_allclose(rotacion_y(pi), matrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
Explanation: Problemas
Implemente el código para las funciones que devuelvan matrices de rotación en $x$ y $y$.
End of explanation
def traslacion_x(x):
    # YOUR CODE HERE
    raise NotImplementedError()
def traslacion_y(y):
    # YOUR CODE HERE
    raise NotImplementedError()
    
def traslacion_z(z):
    # YOUR CODE HERE
    raise NotImplementedError()
from numpy.testing import assert_allclose
from numpy import eye, pi, matrix, array
assert_allclose(traslacion_x(0), eye(4), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_x(1), matrix([[1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_y(0), eye(4), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_y(1), matrix([[1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_z(0), eye(4), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_z(1), matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
Explanation: Implemente el código para las funciones que devuelvan matrices de traslación en $x$, $y$ y $z$.
End of explanation
from numpy import pi
τ = 2*pi
# YOUR CODE HERE
raise NotImplementedError()
from numpy.testing import assert_allclose
Explanation: Implemente una cadena cinemática que describa la transformación hecha por una rotacion en $z$ de $30^o$, una rotación en $y$ de $50^o$ y una traslación en $z$ de $1m$, y guardela en la variable T.
End of explanation
def pendulo_doble(q1, q2, l1, l2):
    # YOUR CODE HERE
    raise NotImplementedError()
from numpy.testing import assert_allclose
from numpy import eye, pi, matrix, array
assert_allclose(pendulo_doble(0,0,1,1), matrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
assert_allclose(pendulo_doble(pi/2,pi/2,1,1), matrix([[-1, 0, 0, -1], [0, -1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
Explanation: Sabemos que un pendulo doble puede ser descrito por una cadena cinemática; implemente una función que tome como argumento los parametros de rotación y traslación de cada uno de sus ejes, y devuelva la posición del actuador final.
End of explanation
<END_TASK>