Rotar y trasladar funciones 2D y 3D con MATLAB

DESCARGAR EL CÓDIGO AQUÍ.

EXPLICACIÓN BREVE DEL FUNCIONAMIENTO:

INTRODUCCIÓN 


La cinemática es la ciencia del movimiento que trata el tema sin considerar las fuerzas que lo ocasionan. Dentro de esa ciencia se estudian la posición, la velocidad, la aceleración y todas las demás derivadas de alto orden de las variables de posición. En consecuencia, el estudio de la cinemática de manipuladores se refiere a todas las propiedades geométricas y basadas en el tiempo del movimiento. La manipulación de robots implica el movimiento de piezas y diferentes herramientas en el espacio. Para hacer la representación de estas piezas es necesario definir sistemas de coordenadas. Para que un robot pueda manipular ciertos objetos, es necesario saber la posición y orientación de la pieza respecto al robot. Para poder hacer esto, existen métodos para la representación de posición y orientación espacial de un objeto. Utilizar la matriz de transformación homogénea es uno de ellos. También se pueden desarrollar por cuaterniones, el cual es un método computacional que se utiliza por algunos robots comerciales para la representación de la orientación.

DESARROLLO 

Para este desarrollo es importante recordar las matrices de rotación. 

Y la matriz de transformación general:



A continuación se muestra la interfaz GUI creada con ayuda de GUIDE-MATLAB, que sirve para rotar funciones con respecto a cualquiera de los ejes X, Y o Z, aplicando matrices de transformación básicas, y la matriz de transformación general. Se puede seleccionar una cuarta opción referente a rotar la función, que es empleando la matriz de ‘eje arbitrario’ estudiada en cinemática de robots manipuladores.

La interfaz cuenta con una parte donde se grafica la función que el usuario ingrese, ya sea f(x) o en su defecto f(x,y), además de seis cajas de texto, dos para ingresar las respectivas funciones, una tercera para el ángulo que se rotará, y las últimas tres son para ingresar cada uno de los tres componentes del vector arbitrario con respecto al cual rotará (si así se elige) la función, cuenta también con dos ‘popupmenu’ en los cuales se elige una de las tres trayectorias, y en el otro uno de los cuatro diferentes ejes con respecto a los cuales rotar. Finalmente la interfaz tiene un ‘slider’ que sirve para aumentar la velocidad de la animación hasta veinte veces y un botón que sirve para iniciar la animación como se puede visualizar en la siguiente figura:


GRAFICAR EN 2D


Primero se obtiene la función en la variable ‘S’ pero en forma de cadena de carácter, utiliza la función ‘vectorize(inline(s))’ para evaluar dichos caracteres y si el programa lo reconoce, lo convierte a una función. Los arreglos ‘salidaxx’, ‘salidayy’, y ‘salidazz’, son los vectores que se utilizarán para guardar todo los conjuntos de datos de la función, que después se multiplicarán por la matriz de rotación. En el ciclo se observa cómo se crea un vector ‘b’ que contiene todos los datos de pares ordenados de la función. Y también se observa cómo se rellena ‘salidaxx’ y ‘salidayy’ con los datos de la función, nótese que dichos vectores primero se declaran con un tamaño necesario pero rellenenos de ceros.

ROTAR Y TRASLADAR FUNCIONES EN 2D


En cuanto se presiona el botón ‘¡INICIAR!’ se entra a una serie de condiciones que están delimitadas principalmente por la variable ‘rotar’, la cual se utiliza como un ‘switch’ que puede contener hasta cuatro casos diferentes, uno para si el usuario elige rotar con respecto a ‘X’, ‘Y’ o ‘Z’, o en su defecto si se elige rotar con respecto a un eje arbitrario. 

Como se puede observar en la figura anterior, el caso mostrado es para cuando se requiera girar con respecto a X. ‘co’ es un vector de 3x1 que tiene los valores de la función f(x) en las tres coordenadas. Nótese que la trayectoria uno que es la que se muestra es una circunferencia parametrizada. ‘Rx’ es la matriz de rotación básica con respecto al eje ‘X’. Se aprecia que ‘co_R’ es el resultado de multiplicar la matriz de rotación con respecto a ‘X’ de 3x3, por el vector de 3x1 que contiene todos los elementos de la función a rotar, por ello ‘co_R’ es de dimensiones de 3x1. Y dicho vector contiene todas las coordenadas de la función ya rotada. Por ello se nota un efecto de rotación. Para trasladar dicha función por la circunferencia parametrizada (que representa la trayectoria número 1), simplemente se le suman a cada uno de los elementos del vector que contiene los elementos de la función ya rotada, los elementos en ‘X’, ‘Y’ y ‘Z’ de la circunferencia para que se vea el efecto de que no sólo está rotando la función, sino que también se mueve a lo largo de dicha circunferencia.

GRAFICAR EN 3D 



Cuando se teclea en el cuadro de texto correspondiente a la función f(x,y), automáticamente el valor de la variable llamada ‘variables’ cambia a 2, como se puede observar en la línea 88. Pero para poder graficar en 3 dimensiones es necesario crear un mallado en MATLAB con la función ‘meshgrid’, pero antes de ello es imperativo declarar los valores del dominio, tanto de la variable independiente ‘x’ como los de la variable ‘y’, por ello se declara con la función ‘linspace’ un vector de veinticinco valores que irán de ‘-2*pi’ hasta ‘2*pi’. 

Después se utiliza la función ‘vectorize’ de la misma forma que ya se había comentado anteriormente, pero ahora, con el fin de reconocer una función de dos variables independientes f(x,y) con el fin de graficar en tres dimensiones. Como se puede observar en ña línea 100, directamente después de teclear la función, la misma se grafica. esto con la ayuda de la función ‘surfc’.

ROTAR Y TRASLADAR UNA FUNCIÓN EN 2D


En esta parte del código se observa que si la función ‘variables’ toma el valor de dos, entonces entra a dichas líneas de código. La variable ‘th2’ es la variable del ángulo, aquí es donde también se toma en cuenta la condición de que si el ángulo es positivo o negativo, esto para controlar el movimiento de la animación, tanto de rotación como de traslación. 

Asimismo, si la trayectoria es la numero uno, entonces se utiliza la misma circunferencia parametrizada como trayectoria uno. Es necesario tener en un vector los elementos de ‘X’, ‘Y’ y ‘Z’ de la función de tres dimensiones, para eso, se utilizan dos iteraciones, que estarán llenando el número de filas y columnas de cada uno de los elementos de la función, y a la vez, guardando dichos elementos como partes de un vector de 3x1, el cual es el ‘vector_z’, dicho vector se multiplicará por la matriz de rotación de ‘X’ y así se obtendrán en el vector ‘Rot_x’ los valores de los componentes de ‘X’, ‘Y’ y ‘Z’ de la función pero ya rotada con respecto a ‘X’. Pero para trasladar la función a lo largo de la circunferencia que representa la trayectoria uno, se empleó la misma técnica que se utilizó en dos dimensiones, simplemente se le suman a cada uno de los elementos del vector que contiene los elementos de la función ya rotada, los elementos en ‘X’, ‘Y’ y ‘Z’ de la circunferencia para que se vea el efecto de que no sólo está rotando la función, sino que también se mueve a lo largo de dicha trayectoria, esto se ve en la línea de código donde aparece la función surf(X+x1,Y+y1,Z+z1). 

Y de esa forma, básicamente es como se realizó esta interfaz. Lo demás son una serie de sentencias y condiciones necesarias para que se pudiera realizar como se esperaba. 

DESCARGAR EL CÓDIGO AQUÍ.


Comentarios

Entradas populares