Rotar y trasladar funciones 2D y 3D con MATLAB
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
Publicar un comentario