“DESARROLLO DE SOFTWARE PARA EMULAR …148.206.53.84/tesiuami/UAMI12344.pdf · ¿Matlab ó...

63
UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA PROYECTO DE INVESTIGACION “DESARROLLO DE SOFTWARE PARA EMULAR TRAYECTORIAS Y MOVIMIENTOS DE OBJETOS” AUTOR: HERNANDEZ DURAN MARICELA LICENCIATURA EN COMPUTACION 99217893 ASESOR: DR. LEONARDO TRAVERSONI DOMINGUEZ JUNIO DE 2005

Transcript of “DESARROLLO DE SOFTWARE PARA EMULAR …148.206.53.84/tesiuami/UAMI12344.pdf · ¿Matlab ó...

UNIVERSIDAD AUTONOMA METROPOLITANA UNIDAD IZTAPALAPA

PROYECTO DE INVESTIGACION

“DESARROLLO DE SOFTWARE PARA EMULAR

TRAYECTORIAS Y MOVIMIENTOS DE OBJETOS”

AUTOR: HERNANDEZ DURAN MARICELA

LICENCIATURA EN COMPUTACION 99217893

ASESOR: DR. LEONARDO TRAVERSONI DOMINGUEZ

JUNIO DE 2005

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

2

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

3

Índice: Introducción……………………………...……………….. 5

1. Descripción del problema……………………………... 6

2. Conceptos básicos…………………………………....... 8

2.1. Cuaternios………………………………………........ 8

2.1.1. Definición y Representación……………………....... 8

2.1.2. Operaciones Básicas……………………………........ 9

2.1.3. Rotación………………………………………………. 11

2.2. Interpolación……………………………………....... 14

2.2.1. LERP………………………………………………....... 15

2.2.2. SLERP………………………………………………….. 16

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

4

3. Desarrollo del proyecto……………………………….. 17

3.1. ¿Matlab ó Matemática?......................................... 17

3.2. Desarrollo de funciones básicas de algebra de cuaternios 18

3.3. Desarrollo de algoritmos de interpolación………. 20

3.4. Trabajando con el video…………………………… 23

3.4.1. Formato del video…………………………………… 23

3.4.2. Creación de filtros……………………………………. 24

3.5. Creación de burbuja virtual……………………….. 28

3.5.1. Generando burbuja virtual sin interpolación………. 28

4. Conclusión…………………………………………….... 30

5. Bibliografía……………………………………………… 31

6. Anexos…………………………………………………... 33

6.1. Funciones…………………………………………….. 33

6.2. Matlab………………………………………………… 42

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

5

Introducción Generalmente los movimientos de objetos son estudiados por partes, es decir: se estudia la curva de su trayectoria, su velocidad su aceleración y otros componentes importantes todos por separado, y por esta razón cuando se quiere reproducir el movimiento del objeto es necesario realizar un procedimiento para cada uno de los componentes. Al utilizar análisis cuaterniónico es posible reproducir el movimiento del objeto con un solo procedimiento cuyo argumento son cuaterniones. Los cuaterniones son capaces de representar movimiento continuo y variable, además de que brindan gran eficiencia computacional, su composición es simple y sus rotaciones y traslaciones son eficientes. Estos elementos son usados actualmente en varias disciplinas principalmente en la robótica: al manipular piezas mecánicas para tener control del movimiento espacial de un robot surge la necesidad de contar con herramientas matemáticas para especificar la orientación y la posición. Muchos programadores de videojuegos han comenzado a utilizar los cuaternios extensivamente ya que estos facilitan el control de cámaras virtuales mediante movimientos diferentes, como ejemplo tenemos los títulos “TOMB RAIDER”. Muchas veces se conoce de un movimiento varios momentos pero no su totalidad y de lo que se trata es obtener un movimiento que incluya (interpole) todas las observaciones mediante el uso de análisis cuaterniónico.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

6

1 Descripción del problema Teniendo varios videos simultáneos de algún objeto o varios videos no simultáneos y además conociendo la posición relativa de las cámaras en cualquier instante, se quiere construir un nuevo video viendo el objeto desde cualquier otro punto, así como en cámara lenta o con zoom. Una manera de hacer esto es usando interpolación de las diferentes imágenes (cuadros del video) con el fin de obtener el cuadro entero, además de interpolar el movimiento del objeto en cada cuadro para poder reproducirlo con mas detalle en un nuevo video. Con este fin fueron filmados dos videos de una burbuja de aire ascendente dentro de un cubo lleno de agua, la burbuja es reproducida por medio de una aguja hipodérmica la cual esta insertada en la parte inferior del cubo de agua, el diámetro de la burbuja es de un milímetro.

Figura 1. Video esclavo

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

7

Las cámaras fueron colocadas en posición ortogonal, cada cuadro de los dos videos obtenidos están sincronizados uno con otro, es decir, el movimiento de la burbuja del primer cuadro obtenido con la cámara 1 (la cual se denominará “video maestro”) corresponde con el movimiento de la burbuja del primer cuadro obtenido con la cámara 2 (la cual se denominará “video esclavo”), cada video se compone de 51 cuadros sincronizados.

Fig. 2 Posición de las cámaras

Video esclavo

Video maestro

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

8

2 Conceptos básicos

2.1 Cuaternios

2.1.1 Definición y representación

Cada uno de los conjuntos de los números que conocemos extiende al anterior y su construcción es motivada por la necesidad de resolver ecuaciones; sin embargo existe otro conjunto de números que extiende al conjunto de los números complejos cuya construcción no es motivada en la resolución de una ecuación, este conjunto es el conjuntos de los cuaternios y se denota por H , en honor a su creador, el irlandés William Rowan Hamilton (1805 - 1865).

Los cuaternios se definen como el conjunto de números tal que:

},,,:{ RdcbadKcJbIaH ∈+++=

Donde I, J y K son tales que:

1222 −==== IJKKJI La construcción de los cuaternios tiene sentido gracias a que existen I, J y K con las propiedades especificadas, además de que se puede definir:

⎟⎟⎠

⎞⎜⎜⎝

⎛−⎟⎟

⎞⎜⎜⎝

⎛=⎟⎟

⎞⎜⎜⎝

⎛−

=i

iK

ii

JI0

0,

00

,0110

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

9

Mediante las tres matrices complejas de 2x2, con i = 1− . Dada esta construcción, un cuaternio h є H puede pensarse como la matriz de números complejos siguiente:

⎟⎟⎠

⎞⎜⎜⎝

⎛−

+⎟⎟⎠

⎞⎜⎜⎝

⎛+⎟⎟

⎞⎜⎜⎝

⎛−

+⎟⎟⎠

⎞⎜⎜⎝

⎛=

ii

dii

cbah0

00

00110

1001

⎟⎟⎠

⎞⎜⎜⎝

⎛−

+⎟⎟⎠

⎞⎜⎜⎝

⎛+⎟⎟

⎞⎜⎜⎝

⎛−

+⎟⎟⎠

⎞⎜⎜⎝

⎛=

didi

cici

bb

aa

h0

00

00

00

0

⎟⎟⎠

⎞⎜⎜⎝

⎛−+−++

=diacibcibdia

h

Otra forma de representar un número cuaternio en forma matricial es el siguiente:

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

−−−−−−

=

abdcbacddcabcdba

h

Por fines prácticos esta será la forma a representar a los números cuaternios en los diversos algoritmos implementados durante el desarrollo de este proyecto.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

10

2.1.2 Operaciones Básicas Se define la suma y el producto entre cuaternios mediante la aritmética usual de matrices y de los números complejos. El conjunto de los números cuaternios cumple con casi todas las propiedades de campo a excepción de:

Rzzzzzz ∈∀= 211221 , Es decir, el producto no es conmutativo. Un conjunto que posee todas las propiedades de campo excepto por la anterior se conoce como “anillo con división” o “campo asimétrico”. De esta manera, dado un cuaternio zkyjxiwq +++= , donde

Rzyxw ∈,,, , se definen las siguientes operaciones:

- suma y resta

( ) ( )kzjyixwkzjyixwqq 1111000010 +++±+++=±

( ) ( ) ( ) ( )kzzjyyixxwwqq 1010101010 ±+±+±+±=± - multiplicación

( )( )kzjyixwkzjyixwqq 1111000010 ++++++=

( )+−−−= 1010101010 zzyyxxwwqq ( ) +−−− xyzzywxxw 10101010 ( ) +−−− jxzwyzxyw 10101010 ( )kwzxyyxzw 10101010 −−−

- conjugado

( )** zkyjxiwq +++= zkyjxiw −−−=

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

11

El cual satisface las siguientes propiedades: ( ) pp =** ( ) *** pqpq =

- norma

( ) ( ) 2222 zyxwzkyjxiwNqN +++=+++= Y satisface las siguientes propiedades: ( ) ( )qNqN =* ( ) ( ) ( )qNpNpqN = - inverso multiplicativo

( )qNqq *1 =− Con las siguientes propiedades: ( ) pp =−− 11 ( ) 111 −−− = pqpq

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

12

2.1.3 Rotación Un número cuaternio zkyjxiwq +++= también puede ser expresado de la siguiente forma: vwq ˆ+= , donde zkyjxiv ++=ˆ . Si nosotros vemos a v como un vector en 3D ( )zyx ,, , entonces la multiplicación de cuaternios puede ser representada usando el producto punto y el producto cruz de vectores de la siguiente forma:

( )( ) ( ) 10011010101100 ˆˆˆˆˆˆˆˆ vvvwvwvvwwvwvw ×+++•−=++

De esta forma es claro que 0110 qqqq = si y solo si 0ˆˆ 10 =× vv Un cuaternio puede ser expresado como un vector en 4D ( )zyxw ,,, , por lo tanto se define el producto punto de dos cuaternios como:

1010101010 zzyyxxwwqq +++=• Un cuaternio unitario es un cuaternio q tal que ( ) 1=qN , por lo tanto un cuaternio unitario puede ser representado como:

θθ senuq ˆcos += , donde u es un vector en 3D. Y finalmente: ¿cómo girar un punto arbitrario del espacio en torno a un eje arbitrario del espacio?. Bueno, representar un punto (ó un vector ó un eje que pasa por el origen) del espacio en forma de cuaternio es muy fácil, dado el vector ( )zyxp ,,= , el cuaternio que le corresponde es:

( )zyxq ,,,0= , es decir, un cuaternio que contiene al vector, pero cuya magnitud es igual a 0.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

13

Un cuaternio, de alguna manera, representa la rotación de un punto cualquiera alrededor de un eje del espacio arbitrario, ¿Por qué?, consideremos un eje del espacio que pasa por el origen (o lo que es lo mismo, un vector): ( )zyxv ,,= y consideremos también un punto arbitrario en el espacio

( )000 ,, zyxP = que queremos girar θ radianes alrededor de el eje v . Ahora generemos un cuaternio unitario a partir del eje v y del ángulo θ de la siguiente manera: kqzjqyiqxqwq ∗+∗+∗+= , donde:

( )2cos θ=qw

( ) vxsenqx 2θ±=

( ) vysenqy 2θ±=

( ) vzsenqz 2θ±=

Es decir:

( ) ( )( )vvsenq 2,2cos θθ ±=

Pues bien, dado este cuaternio generado a partir del eje (o vector) v y del ángulo θ , obtenemos el siguiente resultado:

( ) 1,0 −=′ qPqP

Es decir, que el punto P una vez rotado, esto es:P′ viene dado por este simple producto de cuaternios.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

14

Fig. 3 Rotación de cuaternios

La rotación también puede verse en forma matricial como se muestra en la siguiente matriz:

⎟⎟⎟

⎜⎜⎜

−−+−−−−++−−−

=22

22

22

221222222221222222221

yxwxyzwyzxwxyzzxwzxywyzxwzxyzy

R

2.2 Interpolación Recordemos que un número cuaternio representa movimiento y para poder reproducir el movimiento de un objeto con mas detalle, es necesario recurrir a la interpolación, existen varios métodos que interpolan el movimiento, en este caso se estudiaron 2 de estos métodos: LERP y SLERP.

X

Z

YP

P’

V

θ

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

15

La idea general detrás de la interpolación de una rotación entre cuaternios consiste en tener una variable [ ]1,0∈t , cuando 0=t el cuaternio de rotación interpolado es igual al cuaternio inicial a , es decir, es igual al punto de inicio del movimiento, y cuando

1=t el cuaternio de rotación interpolado es igual al cuaternio final b , es decir, es igual al punto final del movimiento, para valores entre 1 0 y el cuaternio de rotación interpolado se moverá desde el cuaternio a hasta el cuaternio b , el movimiento resultante dependerá de la cantidad de valores que tome t durante el proceso de interpolación. Es importante notar que los cuaternios al ser normalizados son números que están sobre la esfera unitaria de tres dimensiones, y en una cuarta dimensión se representa la rotación nuevamente sobre la esfera unitaria.

Fig. 4 Interpolación proyectada sobre la esfera unitaria

a

b

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

16

2.2.1 LERP En primer lugar tenemos a la interpolación lineal (LERP), este es el más simple de los métodos, como su nombre lo dice consiste únicamente en la interpolación lineal entre 2 cuaternios y se define de la siguiente manera: sean Hqq ∈1,0 y [ ]1,0∈t , esta interpolación está dada por:

( ) ( ) tqtqtqqLerp 1010 1,, +−=

La curva de interpolación para la interpolación lineal entre cuaternios, da como resultado una línea recta en el espacio de los cuaternios, la curva por consiguiente esta por debajo de la esfera unitaria, además la velocidad del movimiento no es constante, la velocidad es mayor en medio de la curva generada.

Fig. 5 Interpolación lineal

0q

1q

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

17

2.2.2 SLERP EL siguiente método de interpolación utilizado es SLERP (Spherical Linear Quaternion Interpolation), a diferencia de LERP, el movimiento generado con SLERP es constante, esto se debe a que en lugar de realizar interpolación lineal simple, la curva sigue un gran arco sobre la esfera unitaria (cuaternio) desde un marco clave a otro. La formula usada para este método es la siguiente:

( ) ( )( )( )

( )( ) ⎟⎟⎠

⎞⎜⎜⎝

⎛+⎟⎟⎠

⎞⎜⎜⎝

⎛ −=θθ

θθ

sentsenq

sentsenqtqqSlerp 1010

1,,

Donde [ ]1,0∈t y θ es el ángulo entre 0q y 1q , esta dado por:

( )101cos qq−=θ

Fig. 6 interpolación lineal esférica

1q

0q

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

18

3 Desarrollo del proyecto

3.1 ¿Matlab ó Matemática? El primer paso fue elegir el lenguaje de programación a utilizar, era necesario desarrollar funciones que permitieran manipular de una manera sencilla las operaciones con números cuaternios, al principio se pensó en trabajar con matemática, y se desarrollaron algunos algoritmos de rotación de cuaternios, primero con un punto, después con una recta, con un triángulo y finalmente con un cubo. Al mismo tiempo se desarrollaron estos algoritmos en Matlab. Finalmente se decidió trabajar con Matlab ya que el lenguaje de programación que ofrece Matlab es mas flexible con el manejo de funciones y variables, lo que hace los algoritmos menos complejos y mas cortos; lo cual reduce el tiempo de programación. Matlab permite un fácil manejo de operaciones con matrices, como se mencionó al principio, un cuaternio puede representarse por medio de una matriz de 4x4 por lo que de esta manera el problema de sumar, restar, multiplicar un cuaternio se reduce simplemente a operar matrices en Matlab. Por otra parte con Matlab es muy sencillo manipular video, con matemática se puede mostrar una animación a partir de varias graficas generadas y solo puede verse la animación si se está trabajando en Matemática; sin embargo con Matlab esto es totalmente distinto, pueden generarse videos a partir de varias graficas generadas y mostrarse en ese momento como con matemática pero además, pueden generarse videos en formato avi, por lo que una animación generada por matlab puede verse sin necesidad de tener a Matlab en ejecución; además de que cuenta con un gran número de funciones que permiten generar graficas mas completas y vistosas para el usuario.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

19

3.2 Desarrollo de funciones básicas de algebra de cuaternios Al comenzar a manipular números cuaternios se crearon 2 funciones, las cuales permiten representar un cuaternio por medio de un vector en 4R ó como una matriz de 4 x 4, estas funciones son “m=qua_mat(q)” y “q=mat_qua(m)” las cuales solo representan un cuaternio de vector a matriz y viceversa, estas funciones son muy importantes, al representar un cuaternio por medio de la matriz, se puede operar de manera directa, y al terminar de operar un numero cuaternio se regresa a su forma vectorial para poder graficar el resultado. Gracias a estas funciones, no es necesario realizar funciones para las operaciones de suma, resta, multiplicación y división de cuaternios, sin embargo para el conjugado tenemos la función “q=conjq(q)”. Para poder realizar rotaciones con cuaternios primero se necesita un cuaternio unitario, sabemos que la dirección del giro realizado por el cuaternio dependerá del signo utilizado en la formula:

( ) ( )( )vvsenq 2,2cos θθ ±= Por lo que se realizaron 2 funciones “q=qrder(v,r)” que regresa un giro a la derecha y “q=qriz(v,r)” que regresa un giro a la izquierda. Estas funciones a la vez invocan a otra función: “m=modulo(v)” la cual calcula el modulo de un vector.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

20

Con estas funciones se puede ahora realizar la rotación de un cuaternio, la función que realiza las rotaciones de cuaternios es: “p=rotacionqua(p,v,r)”, en esta función solo se aplica la siguiente formula:

( ) 1,0 −=′ qPqP

Con la finalidad de apreciar gráficamente la rotación de puntos utilizando cuaternios, se crearon las funciones “gqua.m” y “g=grqua(p,v,r)”, las cuales son una pequeña demostración de generación de movimiento a partir del uso de números cuaternios. La primer función únicamente muestra la trayectoria del punto rotado, pero la segunda función muestra una pequeña animación del movimiento generado por la rotación, con este fin es creada una nueva función llamada “M=video(X,Y,Z)”, esta función crea un apequeña animación del movimiento pero no crea ningún archivo .avi, pero si regresa una matriz con la información de cada frame generado por la animación del movimiento.

0 1 2 3 4 5 6 7-5

05

-6

-4

-2

0

2

4

6

xy

z

3

45

67

12

34

564

4.5

5

5.5

6

6.5

7

7.5

xy

z

Fig. 7 Rotación con cuaternios

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

21

Nota: Todas las funciones utilizadas se incluyen en el anexo de este reporte.

3.3 Desarrollo de algoritmos de interpolación Con el objetivo de mostrar el movimiento con mas detalle es necesario realizar interpolaciones del mismo, al inicio se mencionaron algunos métodos de interpolación con cuaternios, cada uno de estos métodos fue implementado en Matlab. El primero de estos métodos implementados es lerp en la función “q=lerp(q1,q2,t)”, en este algoritmo se encuentra implementada la siguiente fórmula:

( ) ( ) tqtqtqqLerp 1010 1,, +−= En este caso t está tomando valores entre 0 y 1, y además se indica el número puntos que se quieren obtener entre 1q y 2q , por lo tanto:

numpuntost 1=∆

El siguiente algoritmo de interpolación implementado fue Slerp, este algoritmo se encuentra en la función “q=slerp(q1,q2,t)” en el cual se implementa la siguiente ecuación:

( ) ( )( )( )

( )( ) ⎟⎟⎠

⎞⎜⎜⎝

⎛+⎟⎟⎠

⎞⎜⎜⎝

⎛ −=θθ

θθ

sentsenq

sentsenqtqqSlerp 1010

1,,

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

22

Nuevamente t toma valores entre 0 y 1 y hay que indicar en número de puntos que se desea tener. El resultado de estos algoritmos de manera grafica es mostrado en una función la cual invoca a estas dos funciones de interpolación, esta nueva función únicamente muestra un ejemplo de interpolación de un cuaternio a otro utilizando por un lado lerp y por otro Slerp. Esta función se llama “demointerpolacion.m”. En este programa también nos aseguramos de que los resultados obtenidos sean correctos, por lo que se le aplica una rotación a 0q y el resultado de esta rotación será el cuaternio 1q , con esto se tiene una idea de la trayectoria que describe el movimiento a interpolar.

-3-2

-10

1

-3

-2

-1

0

2

2

2

X

rotacion de q0

Y

Z

-3-2

-10

1

-2

-1

0

2

2

2

2

X

Interpolacion lineal

Y

Z

-3-2

-10

1

-2

-1

02

2.5

3

X

Interpolacion lineal esferica

Y

Z

Fig. 8 Ejemplo de interpolación con cuaternios

0q

1q 1q

0q

0q1q

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

23

Otra representación de la interpolación pero proyectada sobre la esfera unitaria, se obtiene con la función: “demoesfera.m”, para poder realizar esta interpolación primero es necesario realizar una proyección que va del espacio a la esfera unitaria, esto se realiza en la función “mapa.m”.

Fig. 9 Ejemplo de interpolación con cuaternios proyectados sobre la esfera

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

24

3.4 Trabajando con el video

3.4.1 Formato del video Los videos “esclavo” y “maestro” son archivos “.avi”; estos videos contienen 51 cuadros, cada cuadro tiene 480 pixeles de ancho y 420 pixeles de alto, su compresión de video es: Descomprimido y el tamaño de muestra del video es de 8 bits. Para poder trabajar con los videos en Matlab solo se necesita ejecutar el comando “open nomarch.avi” para que queden cargados los datos del video en el “workspace” de Matlab, de esta manera se observa un arreglo de 1 x 51 el cual contiene en cada entrada una estructura; cada estructura contiene 2 variables: cdata y colormap; cdata es una matriz de 420 x 480 y colormap es una matriz de 256 x 3. Estos datos fueron guardados en un archivo con el siguiente comando “save(’arch.mat’,’var1’,’var2’,…)”, de esta forma, los datos correspondientes a los videos estarán disponibles en cualquier momento al ejecutar dentro de las funciones el comando “load arch.mat”. Este formato de video solo se utilizó para el primer filtro (ver 3.4.2), posteriormente se necesito cambiar el formato de video con un tamaño de muestra del video de 24 bits. Con este nuevo formato se tiene ahora un arreglo de 1 x 51 y en cada entrada de este hay únicamente una variable: cdata la cual es un arreglo de 420 x 480 x 3, la cual puede verse como 3 matrices de 420 x480 y donde cada matriz corresponde a un color RGB(Rojo, Verde, Azul). Con este nuevo formato se puede trabajar solo con una matriz de 420 x 480 ya que como el video se encuentra en escala de grises, las 3 matrices contienen exactamente los mismos valores en cada entrada.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

25

3.4.2 Creación de filtros Para poder reproducir el moviendo de la burbuja en un nuevo video, es necesario saber la trayectoria de su movimiento, una vez que se sabe cual es la trayectoria que describe la burbuja al ascender por el tanque de agua es posible construir un nuevo video. Como sabemos, el video está compuesto por 51 cuadros, cada cuadro i contiene a la burbuja en el tanque de agua en el tiempo it , por lo tanto si sabemos la posición de la burbuja en cada cuadro podremos saber la trayectoria de la burbuja en todo el video. Durante el ascenso de la burbuja esta llega a deformarse, lo cual no ayuda si se quiere saber su posición, sin embargo, si en lugar de buscar la posición de la burbuja completa solo se busca la posición de un solo punto dentro de la burbuja los resultados serán más precisos. Este punto será interpretado como la posición de la burbuja. Para encontrar este punto dentro de la burbuja fue necesario construir un filtro, el cual al ser aplicado a cada video el resultado obtenido son las posiciones de la burbuja o coordenadas del punto sobre un plano y se obtiene un vector por cada cuadro. La función con la que se obtienen estas coordenadas es “punto.m”, las posiciones de la burbuja son guardadas en un archivo el cual podrá ser utilizado posteriormente para la construcción de un nuevo video. La función punto.m invoca a una nueva función: “COORD=analiza_video(M,g,freq,infx,supx,borde)”, esta función analiza a los videos aplicando un filtro paso alto, con esta función obtenemos las coordenadas de la burbuja para el plano.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

26

El filtro paso alto se encuentra en la función “IMFIN=filtro_pasoalto(img,g,freq,ajuste)”, en esta función se crea un filtro paso-alto, el cual es aplicado a cada cuadro del video para obtener finalmente la posición de la burbuja.

Al ejecutar la función “punto.m” se obtienen 2 archivos cm.mat y ce.mat, en cada archivo se encuentra guardada una matriz de 2 x 51, es decir contiene 51 pares ordenados los cuales indican la posición de la burbuja en cada frame, si se grafican estos vectores obtenemos la siguiente grafica para el análisis del video maestro:

248 248.5 249 249.5 250 250.5 251 251.50

50

100

150

200

250

300

350

400

450Analisis del video maestro

Fig.10 Coordenadas del video maestro

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

27

Por otro lado graficando los vectores obtenidos en el análisis del video maestro obtenemos la siguiente grafica:

204 206 208 210 212 214 216 218 220 222 2240

50

100

150

200

250

300

350

400

450Analisis del video esclavo

Fig.11 Coordenadas del video esclavo

Debido a que las cámaras fueron colocadas en posición ortogonal, es posible obtener la trayectoria de la burbuja en el espacio, para obtener las coordenadas en X y Z se toman los valores del análisis del video maestro y para las coordenadas en Y se toma solo un valor de los vectores obtenidos en el análisis del video esclavo, el valor que no es utilizado es igual a las coordenadas en Z del video maestro:

Fig.12 Composición de coordenadas.

Video maestro

(xi, zi)

Z

X

(yi, zi)

Video esclavo

Z

Y

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

28

Si se grafican estos valores podemos observar la trayectoria que sigue la burbuja al ascender por el tanque de agua como se muestra en la siguiente figura:

248249

250251

252

205210

215220

2250

50

100

150

200

250

300

350

400

450

x del video esclavo

Trayectoria de la burbuja compuesta por las coordenadas del video maestr y del video esclavo

y del video maestro

Fig. 12 Trayectoria de la burbuja en el espacio

Posteriormente se pretendió aplicar otro filtro a los videos para poder encontrar el contorno del la burbuja y de esa manera se construiría una burbuja virtual a partir de una elipse generada por cuatro puntos encontrados en el contorno del la burbuja, pero esto no pudo lograrse debido a la calidad de las filmaciones, en la función “filtro_inverso.m” se aplica este filtro al video maestro, este filtro trataba de eliminar todo el color externo a la burbuja tomando en cuenta que la única variación de color en cada cuadro del video esta precisamente en donde se encuentra la burbuja, ya que esta es lo único que está en movimiento, el resultado obtenido es el siguiente:

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

29

Fig. 13 Videos filtrados En las figuras anteriores puede notarse como se pierde en algunas partes el contorno de la burbuja, por lo que finalmente no fue usado este filtro y la burbuja virtual fue creada a partir de una elipse utilizando una función de Matlab.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

30

3.5 Creación de burbuja virtual

3.5.1 Generando burbuja virtual sin interpolación Finalmente se crearon 2 videos con burbujas virtuales y como no se logró obtener el contorno de la burbuja, se creo una burbuja virtual a partir de una elipse con una de las funciones que tiene Matlab en sus toolboxes: [x,y,z] = ellipsoid(xc,yc,zc,xr,yr,zr,n), en esta función se indica la posición del centro de la elipse (xc,yc,zc) y su tamaño (xr,yr,zr). El centro de la elipse son las posiciones que se obtuvieron con la función “punto.m”, los cuales están guardados en archivos .mat. La función que crea los videos de la burbuja virtual es “burbuja_virtual.m”, en esta función además de crear una burbuja virtual, se crea un video .avi en el cual se reproduce el movimiento de la burbuja. La creación del video primero se abre el archivo .avi con el siguiente comando: “aviobj = avifile('arch.avi','fps',numframes,'compression','Indeo5')” Posteriormente se van agregando las graficas generadas (que contienen a la burbuja virtual) con los siguientes comandos: frame= getframe(gca); aviobj = addframe(aviobj,frame);

Y al final es necesario cerrar el archivo con el siguiente comando: aviobj = close(aviobj);

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

31

Los videos se crean dentro del directorio en el cual se está trabajando en Matlab. Las siguientes imágenes muestran un cuadro de los videos creados de la burbuja virtual:

Fig. 14 Video burbuja virtual (maestro)

Fig. 15 Video burbuja virtual (esclavo)

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

32

4 Conclusión Por el tipo de lenguaje de programación, Matlab resulta ser una opción rápida y sencilla para trabajar con este tipo de algoritmos ya que el código generado es mas comprensible, además de que la generación de graficas y video resulta mas elegante y llamativo para el usuario. Por otro lado, la utilización de números cuaternios para la generación de movimientos de objetos resulta ser menos compleja para la implementación de algoritmos, además de que se ocupa mucho menos memoria y tiempo de procesador en comparación con otros métodos para generar movimiento. Desgraciadamente la calidad del video no permitió avanzar mas en la construcción de los videos de la burbuja virtual ya que era necesario encontrar el contorno de la burbuja para saber la inclinación de la burbuja en cada frame para lograr interpolar el movimiento.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

33

5 Bibliografía

1. Curves and Surfaces for Computer Aided Geometric

Design, Gerald Farin, Second Edition, Academic Press INC,

1990

2. http://www.diku.dk/forskning/image/teaching/Studentproj

ects/Quaternion/

Quaternions, Interpolation and Animation, Erick B. Dam,

Martin Koch, Martin Lillholm, Department of Computer

Science, University of Copenhagen, July 17, 1998

3. http://bilbo.edu.uy/~cnyc/cn/interpol/splines/

4. Geometric Algebra With Applications In Science And

Engineering, Eduardo Bayro Corrochano, Garret Sobczyk,

Birkhauser Boston, 2001

5. http://home.cs.tum.edu/~zikic/downloads/quaternions/3d

%20rotations%20and%20quaternions_cv.pdf

The Clifford Algebra of Double Quaternions and the

Optimization of TS Robot Desing, Shawn G. Ahlers, J.

Michael McCarthy

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

34

6. http://home.cs.tum.edu/~zikic/downloads/quaternions/3d

%20rotations%20and%20quaternions_cv.pdf

3D Rotations and Quaternions, Darko Zikic, Seminar

Methods and Tools in Medical Imaging, 5 May 2004

7. http://imaging.utk.edu/publications/papers/dissertation/go

ddard.pdf

Pose and Motion Estimation from Vision Using Dual

Quaternion-Based Extended Kalman Filtering, James

Samuel Goddard Jr., The University of Tennessee,

December 1997

8. http://www.win.tue.nl/~wstahw/2IV40/eberly99.pdf

Quaternion Algebra and Calculus, David Eberly, September

27 2002

9. http://www.diku.dk/forskning/image/teaching/Studentproj

ects/Quaternion/

10. http://www.ep.liu.se/ecp/013/004/ecp01304.pdf

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

35

6 Anexos

6.1 Funciones A continuación se muestran las funciones creadas durante el desarrollo de este proyecto: %qua_mat(q) representa al cuaternio q por medio de la matriz m %q = un numero cuaternio de la forma: (a, b, c, d) function m = qua_mat(q); m = [ q(1) -q(2) q(4) -q(3); q(2) q(1) -q(3) -q(4); -q(4) q(3) q(1) -q(2); q(3) q(4) q(2) q(1)]; %mat_qua(m): representa al cuaternio m por medio de un vector q %m = numero cuaternio de la forma: m= ( a, -b, d, -c % b, a, -c, -d % d, c, a, -b % c, d, b, a) function q = mat_qua(m); q = [m(1,1),m(2,1),m(3,2),m(4,2)];

%q=conjq(q): calcula el conjugado de un cuaternio q %q=cuaterno de la forma (a,b,c,d) function q = conjq(q); q = [q(1),-q(2),-q(3),-q(4)]; %q=qrder(v,r): calcula un cuaternio unitario para rotacion con giro a la %derecha %v=eje de giro (x,y,z) %r=angulo de rotación %q=cuaternio (a,b,c,d) function q = qrder(v,r); q = [cos(r),(sin(r).*v)./modulo(v)]; %q=qrder(v,r): calcula un cuaternio unitario para rotacion con giro a la %izquierda %v=eje de giro (x,y,z) %r=angulo de rotación %q=cuaternio (a,b,c,d) function q = qrizq(v,r); q = [cos(r),(-sin(r).*v)./modulo(v)];

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

36

%m=modulo(v): calcula el modulo de un vector %v=vector (x,y,z) %m=modulo function m = modulo(v); m = sqrt(sum(v.^2)); %p=rotacionqua(p,v,r): realiza la rotacion de un punto utilizando %multiplicacion de cuaternios %p=punto a rotar (p1,p2,p3) %v=eje de rotacion (x,y,z) %r=angulo de rotacion %regresa la posicion del punto despues de la rotacion function p = rotacionqua(p,v,r); p = pq(p); q = qrizq(v,r); q1 = conjq(q); aux = mat_qua(qua_mat(q)*qua_mat(p)*qua_mat(q1)); p = qp(aux); %p=qp(q): de punto a cuaternio %q=cuaternio (a,b,c,d) %p=punto en el espacio (p1,p2,p3) function q = pq(p); q=[0,p(1),p(2),p(3)]; %p=qp(q): de cuaternio a punto %q=cuaternio (a,b,c,d) %p=punto en el espacio (p1,p2,p3) function p = qp(q); p = [q(2),q(3),q(4)]; %programa que realiza una pequeña demostración derotacion con cuaternios %r=angulo de rotacion %p=punto a rotar %v=eje de rotacion r=pi; p=[5,10,0]; v=[8,8,8]; grqua(p,v,r); title('rotacion con cuaternios');

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

37

%g=grqua(p,v,r): funcion que grafica la rotacion de un cuaternio %p=punto a girar (p1,p2,p3) %v=eje de rotacion (x,y,z) %r=angulo de giro function g = grqua(p,v,r); cont=1; for i=0:pi/32:r g = rotacionqua(p,v,i); X(cont)=g(1); Y(cont)=g(2); Z(cont)=g(3); cont = cont+1; end M=video(X,Y,Z); %M=video(X,Y,Z): crea una animacion a partir de una serie de graficas %M=arreglo que contiene los datos de cada frame capturado durante la %creacion de cada grafica %X, Y y Z= son las coordenadas en el espacio function M=video(X,Y,Z); n=length(X); M = moviein(n); axes=[min(X) max(X) min(Y) max(Y) min(Z) max(Z)]; for j=1:n plot3(X(1:j),Y(1:j),Z(1:j)); AXIS(axes); xlabel('x'); ylabel('y'); zlabel('z'); grid on; M(:,j) = getframe; end movie(M); %q=lerp(q1,q2,t): raliza el metodo de interpolacion lineal entre %cuaternios %q1 y q2=cuaternios (a,b,c,d) %t=valor entre 0 y 1 %q=cuaternio encontrado function q = lerp(q1,q2,t); q = (q1*(1-t)) + (q2*t); %q=slerp(q1,q2,t):_ implementa el metodo de interpolacion lineal esferica %q1 y q2=cuaternios (a,b,c,d) %t = valor entre 0 y 1 %q=cuaternio encontrado function q = slerp(q1,q2,t); s=sum(q1.*q2); theta = acos(s); q=( sin((1-t)*theta) / sin(theta) )*q1+( sin(t*theta) / sin(theta) )*q2;

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

38

%demointerpolacion.m: funcion que realiza una demostracion de %interpolacion con lerp y slerp %p=punto inicial %q=punto final %se interpolara de p a q, para verificar que el resultado es correcto %primero se realiza una rotación de p y el punto obtenido por esta %rotación es q, por esta razón se interpola de p a q p = [0,-3,0,2]; r = pi/3; v = [1e-05,1e-05,1]; np = 70; subplot(1,3,1) [q,xq,yq,zq] = grqua(p,v,r); grid on title('rotacion de q0') cont=1; for t=0:1/np:1 l = lerp(p,q,t); X(cont,1) = l(2); Y(cont,1) = l(3); Z(cont,1) = l(4); le = slerp(p,q,t); X(cont,2) = le(2); Y(cont,2) = le(3); Z(cont,2) = le(4); cont = cont+1; end subplot(1,3,2) Ml = video(X(:,1),Y(:,1),Z(:,1)); title('Interpolacion lineal') subplot(1,3,3) Mle = video(X(:,2),Y(:,2),Z(:,2)); title('Interpolacion lineal esferica')

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

39

%funcion demoesfera.m %esta funcion realiza interpolacion lineal, esferica sobre la esfera %unitaria(demostracion) p=[0.3,-0.6,0.8,1]; q=[0.2,-0.9,0.4,1]; subplot(1,3,1) plot3(p(1,2),p(1,3),p(1,4),'*b'); hold on plot3(q(1,2),q(1,3),q(1,4),'*b'); [x,y,z]=sphere(50); surf(x,y,z); shading interp colormap winter; alpha(0.65); grid on xlabel('X'); ylabel('Y'); zlabel('Z'); pmap=mapa(p); qmap=mapa(q); cont=1; np=5; for t=0:1/np:1 l = lerp(pmap,qmap,t); X(cont,1) = l(2); Y(cont,1) = l(3); Z(cont,1) = l(4); le = slerp(pmap,qmap,t); X(cont,2) = le(2); Y(cont,2) = le(3); Z(cont,2) = le(4); cont = cont+1; end subplot(1,3,2) [x,y,z]=sphere(50); surf(x,y,z); grid on hold on xlabel('X'); ylabel('Y'); zlabel('Z'); lim=length(X); plot3(X(1,1),Y(1,1),Z(1,1),'pk'); hold on plot3(X(lim,1),Y(lim,1),Z(lim,1),'pk'); hold on plot3(X(:,1),Y(:,1),Z(:,1),'-k'); shading interp colormap winter; alpha(0.65); title('L e r p') subplot(1,3,3) [x,y,z]=sphere(50); surf(x,y,z); grid on hold on

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

40

xlabel('X'); ylabel('Y'); zlabel('Z'); lim=length(X); plot3(X(1,2),Y(1,2),Z(1,2),'pk'); hold on plot3(X(lim,2),Y(lim,2),Z(lim,2),'pk'); hold on plot3(X(:,2),Y(:,2),Z(:,2),'-k'); shading interp colormap winter; alpha(0.65); title('S l e r p') %funcion pm=mapa(q) %realiza una proyeccion de un cuaternio sobre la esfera unitaria function pm = mapa(q) [n,m]=size(q); for i=1:n c = (1 / ((q(i,1).^2)+(q(i,2).^2)+(q(i,3).^2)+(q(i,4).^2)) ); q1 = (q(i,1).^2)+(q(i,2).^2)+(q(i,3).^2)-(q(i,4).^2); q2 = (2.*q(i,1).*q(i,4)); q3 = (2.*q(i,2).*q(i,4)); q4 = (2.*q(i,3).*q(i,4)); pm = c*[q1 ,q2 ,q3 ,q4 ]; mq(i,:)=qp(pm); end %punto.m %esta función localiza un punto fijo en la burbuja %M=arreglo que contiene las coordenadas en el plano de la trayectoria de %la burbuja en el video maestro %E=arreglo que contiene las coordenadas en el plano de la trayectoria de %la burbuja en el video esclavo load maestro; load esclavo; M=analiza_video(maestro,10,0.2,10,200,300,4); E=analiza_video(esclavo,10,0.2,10,200,300,4); save('cm.mat','M'); save('ce.mat','E'); figure(1) plot(M(:,1),M(:,2),'*k'); title('Analisis del video maestro'); figure(2); plot(E(:,1),E(:,2),'*k'); title('Analisis del video esclavo');

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

41

%COORD=analiza_video(M,g,freq,infx,supx,borde) %Se encuentran las coordenadas de la burbuja a partir de un objeto de %tipo video. %COORD : coordenadas del objeto observado %M=video a analizar %g , freq, ajuste=parametros del filtro,grado de polinomio y frecuencia %de corte del filtro paso-alto. ajuste,parametro para el contraste %infx, supx : definicion de la cinta(banda) en abscisas de busqueda de la %burbuja function COORD=analiza_video(M,g,freq,ajuste,infx,supx,borde); taille=size(M,2); COORD=zeros(taille,2); for i=1:taille %recuperacion de la imagen IM1=frame2im(M(i)); hauteur=size(IM1,1); %filtro paso alto IM2=filtro_pasoalto(IM1,g,freq,ajuste); %encuentra los indices de localizacion de la burbuja [indy,indx]=find(IM2(borde:hauteur-borde,infx:supx)<10); %Localizacion de la burbuja calculando la mediana sobre los renglones %y sobre las columnas COORD(i,1)=(median(indx)+infx); COORD(i,2)=(median(indy)+borde); end %IMFIN=filtro_pasoalto(img,g,freq,ajuste) %IMFIN=imagen filtrada %img=imagen a filtrar %g=grado del polinomio de corte %freq=frecuencia de corte %ajuste=un parametro no muy importante que apunta sobre el contraste de %la imagen (entre mas grande es la imagen-> la imagen es mas clara) function IMFIN=filtro_pasoalto(img,g,freq,ajuste) % transformacion de la matriz en un vector lineal [m,n]=size(img); x=reshape(img,1,m*n); % rellenando un vector con ceros (para resolver el problema del desfase de la imagen) t=zeros(1,round((g+1)/2)); x1=[x,t]; x1=double(x1); d=size(x1); %Creacion de un filtro paso alto utilizando la funcion fir1 %que construye el filtro paso alto con las caracteristicas dadas A3=fir1(g,freq,'high'); %Filtrado : filtro es una funcion de matlab que %hace el producto de convolucion entre el filtro y la imagen y3=filter(A3,1,x1); %filtro pasoalto con contraste y4=(y3>(max(max(y3))+ min(min(y3))+ajuste)/2)*255; %transformacion del vector en matriz y=y4(round((g+1)/2)+1:d(2)); IMFIN=reshape(y,m,n);

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

42

%filtro_inverso.m %Este filtro funciona de la siguiente manera: %Primero se toma alguno de los cuadros de la pelicula, en este caso se tomo el ultimo cuadro (c=mov(51).cdata), este cuadro se compara contra %los demás cuadros con el fin de eliminar todo lo externo a la burbuja, %para esto se toma un valor(umbral) sobre el cual se comparan los valores %en cualquiera de las tres matrices (como el video esta en escala de %grises las tres matrices tienen los mismos valores), este valor puede %ser variado para mejorar la calidad del filtro, de esta manera se %compara cada uno de los cuadros contra el ultimo cuadro, %si el valor absoluto de la resta entre el valor (i,j,1) de la matriz en %el cuadro i y el valor (i,j,1) de la matriz del ultimo cuadro es menor %al umbral entonces a las entradas (i,j,1),(i,j,2),(i,j,3) de las %matrices en el cuadro i se les asignaran los valores de 255 a cada uno %para obtener el fondo blanco,esto funciona debido a que lo unico que %esta en movimiento en el video es la burbuja, por lo tanto los valores %del ultimo cuadro seran mucho mayores al umbral. mov = aviread('esclavo.avi'); % mov = aviread('maestro.avi'); numframes = length(mov); hp = 2 * pi / numframes; numfseg = 2; dur = numframes / numfseg; aviobj = avifile ( 'filtro_inverso_e.avi', 'fps', numfseg ); umbral = 20; for k = 1:50 cuadro=mov(k).cdata; t = size(cuadro); c=mov(51).cdata; for i = 1:t(1) for j = 1:t(2) if abs(c(i,j,1)-cuadro(i,j,1)) < umbral cuadro(i,j,1) = 255; cuadro(i,j,2) = 255; cuadro(i,j,3) = 255; end end end mov(k).cdata=cuadro; aviobj = addframe ( aviobj, mov(k) ); end aviobj = close ( aviobj);

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

43

%funcion burbuja_virtual.m %Esta función genera una burbuja virtual y reproduce la trayectoria de %ascenso por el tanque de agua %Genera un video .avi con el movimiento de la burbuja %Esta funcion es utilizada tanto para el video maestro como para el video %esclavo. load puntose;%E load puntos;%M My=M(51:-1:1,2); numframes = 50; hp = 2 * pi / numframes; num_frames_per_second = 2; aviobj = avifile('esclavo_virtual.avi', 'fps',num_frames_per_second,'compression','Indeo5') for i=1:50 hold on plot3(0,0,0,'.k'); plot3(480,0,0,'.k'); plot3(0,420,0,'.k'); plot3(0,0,480,'.k'); plot3(480,420,0,'.k'); plot3(480,0,480,'.k'); plot3(0,420,480,'.k'); plot3(480,420,480,'.k'); x = M(i,1); y = My(i); z = E(i,1); [x,y,z] = ellipsoid(z,y,x,6,6,6,40); %Para video esclavo: ellipsoid(z,y,x,6,6,6,40) h = surface(x,y,z,'EdgeColor','none','FaceColor','blue'); colormap hsv alpha(0.1) camlight('right','infinite') material shiny lighting flat grid off axis tight box on hold off set(gca,'nextplot','replace'); frame= getframe(gca); aviobj = addframe(aviobj,frame); delete(h); end aviobj = close(aviobj);

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

44

Matlab ¿QUÉ ES MATLAB? • MATLAB = 'MATrix LABoratory' (LABORATORIO DE MATRICES). • MATLAB es un medio computacional técnico, con un gran desempeño para el cálculo numérico computacional y de visualización. • MATLAB integra análisis numérico, matrices, procesamiento de señales y gráficas, todo esto en un ambiente donde los problemas y soluciones son expresados tal como se escriben matemáticamente. • Escrito inicialmente como auxiliar en la programación de cálculo con matrices. • MATLAB fue escrito originalmente en fortran, actualmente está escrito en lenguaje C. • MATLAB es un lenguaje de programación amigable al usuario con características más avanzadas y mucho más fáciles de usar que los lenguajes de programación como basic, pascal o C. • Actualmente van en la versión 5.2. MATLAB cuenta con paquetes de funciones especializadas llamadas toolboxes. TOOLBOXES DE MATLAB • Control system Toolbox, Robust Control Toolbox • Frequency Domain System Identification Toolbox • Fuzzy Logic Toolbox • Higher Order Spectral Analisys Toolbox • Image Processing Toolbox • Model Predective Control Toolbox • Mu Analisis and Synthesis Toolbox • NAG Foundation Toolbox • Neural Network Toolbox • Nonlinear Control Design Toolbox • Optimization Toolbox • Quantitative Feedback Theory Toolbox • Signal Processing Toolbox • SIMULINK, SIMULINK Real Time Workshop • Spline Toolbox • Statistics Toolbox • Symbolic Math Toolbox • System Identification Toolbox.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

45

INICIO DE MATLAB MATLAB se inicia directamente desde Windows. Al invocarse MATLAB aparecerá la pantalla de comandos, algunas sugerencias y el símbolo >> , el cual indica la entrada de instrucciones para ser evaluadas. >> >> Comando o instrucción a evaluar < enter > Para hacer la suma de dos números, escribimos : >> 5 + 5 < enter > Presionamos la tecla entrar. ans = 10 El resultado es desplegado y se guarda en la variable ans (answer). NOTA : El símbolo >> desaparecerá, y será reemplazado por un par de corchetes con la instrucción dentro de ellos. [ 5 + 5 ]. La instrucción aparecerá en color verde. Para poder ver ejecutarse la instrucción, debemos ponernos en el renglón donde está la instrucción o marcarla con el ratón y presionar al mismo tiempo las teclas. <Ctrl> <Enter> Otra forma de evaluar una instrucción, es poner el apuntador del ratón entre los corchetes de la instrucción y presionar el botón derecho del ratón; aparecerá un menú del cual se tiene que escoger evaluar celda. Hagamos la prueba con el renglón inmediato. 5 + 5 Presionar <Ctrl> <Enter> La respuesta es desplegada en color azul y entre corchetes. HELP El comando help proporciona una lista de todos los tópicos que MATLAB puede proporcionar ayuda. help help 'comando' proporciona ayuda sobre el comando especificado.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

46

help sqrt

proporciona ayuda sobre la instrucción sqrt. Ejemplo: » help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also SQRTM ¿CÓMO FUNCIONA MATLAB? MATLAB puede almacenar información en variables tales como :

a = 100 " <Ctrl> <ENTER> para evaluar la celda " Cada vez que capturamos información en MATLAB y presionamos <ENTER> ésta es desplegada inmediatamente ( letras en color azul ), pero si ponemos un punto y coma al final de la instrucción MATLAB omite el desplegado de información. Por ejemplo : b = 50 ; Si se quiere saber el valor de alguna variable capturada sólo se tiene que poner el nombre de la variable y <ENTER> y MATLAB lo despliega. Estas variables residen en el espacio de trabajo de MATLAB. b Las variables son sensibles a las mayúsculas, por lo que las siguientes variables son diferentes : Variable = 1 variable = 1 Las variables pueden contener hasta 19 caracteres. Éstas deben empezar con una letra, seguida por cualquier número de letras, dígitos o guiones de subrayado. Los caracteres de puntuación no son permitidos en las variables.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

47

Cuando se trabaja con muchas variables estas son difícil de recodar. El comando who muestra un desplegado de todas aquellas variables que se han estado utilizando. who whos Muestra las variables con información adicional. CARACTERES ESPECIALES [ ] Son usados para formar vectores y matrices [ 1 2 3 ; 4 5 6 ] ( ) Usados para expresiones matemáticas. sqrt(2) = Usado para hacer asignaciones. x = 5 ' Transpuesta de una matriz A' Usado para separar texto 'texto' . Punto decimal 3.1415 ... Al final de una línea indican que continua 2,3,4,5,6 .... en el siguiente renglón. 7,8,9,10 ] , Para separar elementos [1,2,3,4] ; Para separar filas en las matrices. [ 1 2; 3 4] Para evitar que se despliegue la información capturada. [3] ; % Para hacer comentarios % este programa,etc. ! Para ejecutar un comando del Ms-dos !dir OPERACIONES BÁSICAS • SUMA C = a + b • RESTA d = a - b • MULTIPLICACION e = a * b

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

48

• DIVISION F = a / b F = a \ b • POTENCIA a ^ 2 Como este último cálculo no tenía variable asignada, la respuesta se guarda en la variable ans (answer ). BORRADO DE VARIABLES. Para borrar el valor de una variable simplemente ponemos clear a Borra la variable " a "

a Checar que este borrada. clear a b c Borra las variables " a ", " b " y " c "

" CLEAR " Borra todas las variables y no se pueden recuperar. FUNCIONES TRIGONOMÉTRICAS

sin ( 0.5) Seno de (0.5) Así mismo COS ( X ) TAN ( X ) ASIN ( X ) ACOS ( X ) ATAN ( X ) Inversa SINH ( X ) COSH ( X ) TANH ( X ) Hiperbólica ASINH ( X ) ACOSH ( X ) ATANH ( X ) Inversa- Hiperbólica ATAN2 ( X,Y ) Inversa de la tangente en los cuatro cuadrantes. LOGARITMOS log (0.5) Logaritmo natural LOG10 ( X ) Logaritmo decimal. FUNCIONES MATEMÁTICAS ESPECIALES. abs ( -3) Valor absoluto o magnitud de un número complejo ceil ( 123.123123) Redondea hacia más infinito

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

49

FLOOR ( X ) Redondea hacia menos infinito FIX ( X ) Redondea hacia cero ROUND ( X ) Redondea hacia el entero más próximo imag ( 30 - 5j ) Parte imaginaria de un número complejo REAL ( X ) Parte real de un número complejo ANGLE ( X ) Angulo de un número complejo CONJ ( X ) Complejo conjugado sign ( -5) Función signo : Devuelve el signo del argumento (1 si es positivo, -1 si es negativo ) exp ( 1 ) Exponencial : e ( x ) REM ( X,Y ) Resto después de la división ( x / y) sqrt (2) Raíz cuadrada OPERACIONES LÓGICAS En MATLAB se pueden hacer operaciones lógicas, por ejemplo. 1 < 2 Como 1 es menor que 2, la respuesta es cierta por lo que obtenemos un 1. 1 < 1 Obtenemos un 0, porque 1 no es menor que 1. Como se puede observar las únicas respuestas posibles con las operaciones lógicas son: Cierto = 1 y Falso = 0. Operadores relaciónales: Mayor que > Menor que < Mayor o igual a >= Menor o igual a <= Igual a == No igual a ~= Existen tres operadores lógicos : AND & OR | NOT ~

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

50

La variable NaN (Not a Number) Cuando en un lenguaje de programación como basic, pascal o C, se da una situación que el programa no pueda manejar, como una división como 0/0 el programa se detiene, marcando un error. Cuando en MATLAB se presenta una situación similar el programa no se detiene, sólo da una pequeña advertencia de que se presentó una división entre cero. Y el resultado es un NaN, que es una variable interna no es un número). 0 / 0 Ejemplo: defina a=[1 2 0] y b=[1 2 0] ahora pida la división elemento a elemento (comando “./”) a ./ b Arreglos (Arrays) ó Vectores. Si se desea calcular el seno de " 0 a 1 " con incrementos de 0.25, se pueden capturar los valores y después mandar llamar el seno de la función. Seno de 0 a 1 con incrementos de 0.25 x = [ 0, 0.25, 0.5, 0.75, 1 ] Se pueden omitir las comas cuando se capturan los números. Con los números capturados, se obtiene el seno de la variable x escribiendo simplemente : sin (x) MATLAB opera en radianes, donde 2π = 360 grados. Ahora se requiere obtener el coseno de cero a uno con incrementos de 0.01; lo que equivale a capturar 101 elementos. Para evitar capturarlos a mano, MATLAB nos permite crear un vector de la siguiente manera : Variable = ( Valor inicial : Con incrementos de : Valor final )

R = (0 : 0.01 : 1)

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

51

COS ( R ) Ahora se puede obtener el coseno de la variable R. Hagamos el siguiente vector : Y = ( 0 : 1 : 10) Si queremos saber cual es el cuarto elemento del vector ponemos :

Y (4) Si nos interesan los elementos 5 al 10 : Y( 5 : 10 ) Otras opciones son : Y( 1 : 2 : 9) Toma los elementos del 1 al 9 con incrementos de 2 Y([ 1, 3, 7,10]) Toma los elementos 1, 3, 7 y 10 del array MODIFICACIONES DE LOS ARREGLOS Si el noveno elemento del array debió ser el número 20 en vez de 8, corregimos de la siguiente manera : Y(9) = 20 Otra forma de hacer arreglos, es con linspace : Linspace ( Valor inicial , Valor final , Número de elementos ) Regresando al ejemplo del coseno de 0 a 1 con incremento de 0.01 escribimos : Note el uso de comas (#, #, #) Z = linspace(0 , 10, 101) Linspace describe una relación lineal de espaciado entre sus elementos. Logspace describe una relación de espaciado " logarítmica ". Logspace ( Primer exponente , Último exponente , Cantidad de valores )

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

52

Logspace (0 , 2 , 10 ) Hemos creamos un arreglo que comienza en 10 0 y termina en 10 2, conteniendo 10 valores. Otra forma de crear arreglos es : x1 = 1 : 5 Arreglo de 1 a 5, con incremento de 1 x2 = 10 : 5 : 100 Arreglo de 10 a 100, con incrementos de 5. Si se quiere concatenar x1 y x2 C = [ x1 x2 ] MATEMÁTICAS CON ARREGLOS. a = 1 : 6 Define un vector de seis elementos con incrementos de 1 b = 1 : 2 : 12 Vector de seis elementos con incremento de 2 • Arreglos con escalares Se le puede sumar o multiplicar un número a todo el arreglo, por ejemplo a + 10 Suma de un escalar con un arreglo a * 10 Multiplicación de un escalar con un arreglo • Operaciones con arreglos Para hacer la suma de los arreglos a y b, solamente escribimos : a + b La respuesta se guarda en ans :

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

53

Se pueden hacer operaciones como : Z = 100 - 2 * a + b La multiplicación de arreglos se hace con ( . * ), ya que cuando se utiliza el asterisco sin punto indica multiplicación matricial, y además provoca un error. Z = a .* b La división también lleva un punto antes del signo, porque sino se utiliza el punto nos referimos a la división matricial que es muy diferente. Z = a ./ b La siguiente operación obtiene el cuadrado del arreglo " a ". Z = a .^ 2 ORIENTACIÓN DE ARREGLOS Si separamos cada elemento del arreglo con punto y coma tenemos un arreglo de una sola columna : a = [ 1; 2; 3; 4; 5; 6 ] Es necesario usar los corchetes, porque si no los usamos obtenemos el último valor que capturamos : d = 1 ; 2; 30 ; 40 ; 50 ; 600 ; 1000 Para crear una columna con 20 elementos hacemos lo siguiente : d = ( 1 : 1 : 20 ) y trasponemos el renglón a columna, es decir buscamos la transpuesta. ( ' ) e = d'

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

54

MATRICES Se utiliza el punto y coma ( ; ) para hacer una matriz. Para formar la matriz 1 2 3 3 2 1 2 1 3 Escribimos : A = [ 1 2 3; 3 2 1; 2 1 3 ] OPERACIONES CON MATRICES Definamos las siguientes matrices ' g ' y ' h '.

g = [ 1 2 3; 4 5 6; 7 8 9] h = [ 1 0 2 ; 11 2 3 ; 3 5 12 ] La suma de las matrices g y h se muestra enseguida: k = g + h

k = g * h Multiplicación de dos matrices. [L, U ] = lu (k) Calcula la factorización LU de la matriz cuadrada k [d,e]= qr (k) Calcula la factorización QR de la matriz k. Calcula la descomposición en valores singulares de la matriz k. rank(k) Devuelve el rango de la matriz k. cond(k) Devuelve el número de condición de la matriz k. Modificación de las matrices. A = [ 1 2 3; 4 5 7; 7 8 9 ] Si nos equivocamos al capturar la matriz, por ejemplo si el número 7 del segundo renglón, tercer columna debió ser 6 en vez de 7, tendríamos que capturar de nuevo la matriz. Pero con MATLAB es posible modificarla de la siguiente manera : A(2,3)= 6 Variable ( renglón, columna)= nuevo valor

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

55

Si tenemos la matriz identidad de 4 x 4 :

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

A = [ 1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1] Pero por algún error la matriz identidad debió de haber sido de 5 x 5. ¿ Hay que capturar de nuevo la matriz ?. La respuesta es no. A(5,5) = 1 Agregamos un 1 en el renglón 5 columna 5, y como este no existían previamente, las columnas y renglones se completan agregando ceros. ¿ Que pasa ahora si queremos sólo una matriz identidad de 3 x 3 y tenemos capturada una de 5 x 5. Podemos utilizar : Matriz ("Renglón" inicio : Fin , "Columna" inicio : Fin ) B = A ( 1 : 3, 1: 3) Ahora si queremos que la matriz identidad sea : 00 1 0 1 0 1 0 0 C = B ( 3 : -1 : 1 , 1 : 3 ) Poner dos puntos ( : ) indica que se deben tomar todas las columnas (1 : 5). Esto es valido también para los renglones. C = A ( : , [ 1 3 5 ] ) Toma todos los renglones, pero sólo toma las columnas 1, 3 y 5. Si creamos las siguientes matrices A y B :

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

56

A = [ 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5 ]

B = [ 6 7 8; 6 7 8; 6 7 8; 6 7 8 ] Podemos construir una matriz C uniendo las dos anteriores c = [ A B ] A partir de la matriz A queremos tomar las columnas 1, 2 y 5, y de la matriz B queremos tomar las columnas 1 y 3, para formar una matriz D. D = [ A(:,[ 1 2 5]) B(:, [ 1 3])] D( :,1)=[] Elimina la columna número uno. MATRICES ESPECIALES

ones(2) Hace una matriz de unos, de 2 x 2. zeros(5,4) Hace una matriz de ceros, de 5 x 4. rand(3) Hace una matriz de 3 x 3,

eye(4) Hace una matriz identidad de 4 x 4. GRÁFICAS En MATLAB se pueden crear gráficas tan simples como : D = [ 1 2 3 5 4 7 6 8 9 8 6 3 1 3];plot (D) o se pueden crear gráficas tan complejas como : cplxroot(3,10) Superficie de una raíz cubica. Como se vió en el primer ejemplo es posible gráficar una serie de puntos y MATLAB automáticamente ajusta los ejes donde se gráfica. Por ejemplo, para gráficar la función seno se pueden crear un rango de valores

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

57

x = 0 : 0.1 : 20; x = vector de cero a veinte con incrementos de 0.1 y = sin(x); Seno del vector (x) plot (x,y) Gráfica del seno z = cos(x); Coseno del vector anterior plot (x,z) Gráfica del coseno de x. plot ( x,y,x,z) Gráfica del seno y coseno en la misma pantalla plot (x,z,'*') Gráfica del coseno con los signos ' * ' Hace la gráfica en azul, y los signos ' + ', intercambiando los ejes. plot ( z, x,'b+') Como se ve es posible gráficar en Matlab con símbolos y además escoger el color. Es posible agregar un cuadriculado a la gráfica, para tener más precisión, con el comando. grid Se pueden agregar títulos a las gráficas y etiquetas en los ejes con los comandos siguientes. title(' Gráfica del coseno de x') Para ponerle etiquetas a los ejes se puede utilizar los comandos

ylabel ('etiqueta') xlabel('etiqueta')

axis off Desaparece los ejes. SUBPLOT El comando subplot nos permite desplegar en pantalla varias gráficas. subplot(m,n,a) 'm' y 'n' son una matriz que representa las cantidades de gráficas que se van desplegar; 'a' indicaría el lugar que ocuparía la gráfica en el subplot. Hagamos la gráfica de los siguientes puntos. La desplegaremos en cuatro puntos diferentes en pantalla para ver las características de subplot.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

58

a=[ 1 ,2 ,3 9 ,8 ,7 ,4, 5, 6, 8, 7, 5]; plot (a) Vamos hacer una matriz de 2 x 2 para gráficar, cuatro posibles ventanas o gráficas. Y queremos que la primera gráfica ocupe el lugar (1,1) de la matriz. entonces escribimos. subplot(2,2,1),plot(a) subplot(2,2,2), plot(a) subplot(2,2,4), plot(a) CLF borra todos los objetos de la gráfica. CLF RESET Borra todo lo que hay en la gráfica y resetea todas las propiedades de la figura. GRÁFICAS EN TRES DIMENSIONES. El comando plot se puede extender a 3 dimensiones con el comando plot3. El siguiente ejemplo hace una gráfica de una espiral en tres dimensiones.

t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) zlabel ('etiqueta')

Se utiliza para dar etiquetas al eje z, en las gráficas en tres dimensiones. GRÁFICOS DE MALLA Y SUPERFICIE. z = peaks(10) El comando peaks crea un conjunto de valores que al ser gráficados, se ven de la siguiente manera. plot(z) Se tomará como base la gráfica anterior para demostrar algunas funciones de graficación en tres dimensiones.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

59

mesh(z) contour(z,10) surf(z) Es posible cambiar el sentido de orientación de las gráficas con el comando view(x,y) view(0,0) view(90,0) gtext( ‘ texto ’ ) Se utiliza para colocar texto en una gráfica, con la ayuda del mouse. Simplemente se ejecuta el comando y con el mouse se selecciona la coordenada deseada y se presiona el botón derecho del mouse, quedando fijo el texto en la pantalla. OTROS COMANDOS • What : Listado de todos los archivos *.m en el directorio actual • dir : Lista todos los archivos en el directorio actual • type nombre_archivo :Lista el programa, (Programas con terminación *.M). • Which nombre_archivo : Da el path en el cual esta el archivo. Se pueden utilizar comandos de Unix tales como Ls, pwd. COMO HACER UN PROGRAMA EN MATLAB Es posible realizar un programa en Matlab tal como se hace en otros lenguajes como el basic, pascal o el lenguaje C. Es necesario utilizar un editor para escribir el código. • Para cargar un editor, se puede hacer desde la ventana options, escogiendo editor preference, y cargando el editor que se desee utilizar.

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

60

• Para escribir código, requerimos crear un archivo *.M. Para esto necesitamos abrir new M.file en la ventana file. • Ahora escribimos el código y salvamos el archivo utilizando la terminación archivo.M. • Se puede correr el programa desde Matlab simplemente escribiendo el nombre del archivo que fue creado. • Es posible abrir programas con la terminación *.M desde Matlab, en el menú file, open M.file. BUCLES FOR Tal como en otros programas de programación en Matlab es posible crear programas con estructura con ciclos for. For x = Número incial : número final Instrucción End.

for x = 1 : 10 x = x + 1

end También se pueden hacer operaciones como la siguiente : matriz = [ 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4]

for x = matriz x = n(1)*n(2)*n(3)*n(4)

end

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

61

BUCLES WHILE While permite que ciertas instrucciones sean repetidas un número indefinido de veces bajo el control de una condición lógica. Por ejemplo, ¿ Cual es primer entero n para el cual n! (factorial) es un número de 100 dígitos ?. n = 1; while prod(1:n)<1.e100,n=n+1;end n IF ELSE END Se pueden utilizar estructuras como:

If expresión (verdadero) acción

End.

If expresión (verdadero) acción 1

else (Falso) acción 2

End.

If expresión (verdadero) acción 1

elseif expresión (verdadero) acción 2

. . . else (Falso)

acción "n" End

Desarrollo de Software para Emular Trayectorias y Movimientos de Objetos

Hernández Durán Maricela

62

ANÁLISIS DE DATOS. En Matlab podemos hacer análisis de datos estadísticamente o probabilisticamente. Entre estos análisis están cálculos de medias, máximos, mínimos, desviaciones estándar, etc. Inventemos un conjunto de datos, los cuales podremos analizar. x =[ 9 1 ;23 34; 16 28 ;12 33 ;5 7; 9 4 ;12 34 ;5 14 ;43 6 ;3 6 ;12 9; 2 30 ;3 2; 2 4] plot (x) La representación gráfica de los puntos anteriores. A continuación se hace una análisis de los datos presentados, habrá dos respuestas porque tenemos dos columnas. media=mean(x) Obtención de la media max(x) El máximo de los valores. min(x) El mínimo de los todos los valores std(x) La desviación estándar hist(x) Histograma. TIPS DE MEMORIA. Para obtener la máxima velocidad en Matlab debemos tratar de vectorizar los algoritmos, por ejemplo :

a = 0 for a = 0:.0.1:10

a = a + 1; y(a)=sin(t)

end La versión vectorizada sería :

t= 0:0.01:10; y = sin(t)

El primer ejemplo en MATLAB toma aproximadamente 15 segundos, mientras que el segundo toma sólo 0.6 segundos.