Source: https://1library.co/document/q7wrpxdz-head-tracking-espectro-infrarrojo-utilizando-nintendo-wii-remote.html
Timestamp: 2020-07-11 20:39:29+00:00

Document:
Head tracking en el espectro infrarrojo utilizando el nintendo wii remote
(1)PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA. HEAD TRACKING EN EL ESPECTRO INFRARROJO UTILIZANDO EL NINTENDO WII REMOTE. MAURICIO JAVIER UBILLA CARVAJAL. Tesis para optar al grado de Magíster en Ciencias de la Ingeniería. Profesor Supervisor: DOMINGO MERY Q.. Santiago de Chile, Diciembre, 2009  2009, Mauricio Javier Ubilla Carvajal..
(2) PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA. HEAD TRACKING EN EL ESPECTRO INFRARROJO UTILIZANDO EL NINTENDO WII REMOTE. MAURICIO JAVIER UBILLA CARVAJAL. Tesis presentada a la Comisión integrada por los profesores: DOMINGO MERY Q. MARCELO GUARINI H. PATRICIO DE LA CUADRA B. MIGUEL RÍOS O.. Para completar las exigencias del grado de Magíster en Ciencias de la Ingeniería. Santiago de Chile, Diciembre, 2009.
(3) A mis Padres, quienes siempre me han apoyado y me han entregado lo mejor de ellos.. ii.
(4) AGRADECIMIENTOS. Son muchas las personas que me ayudaron a desarrollar este trabajo y a quienes quiero agradecer su apoyo.. En primer lugar y por sobre todo, a mi profesor supervisor, Domingo Mery, por haberme guiado durante todo el proceso, y sin cuyo apoyo, consejos y revisión este trabajo no habría sido posible.. A los profesores: Rodrigo Cádiz, por sus indicaciones y su excelente disposición para revisar el trabajo, y Patricio de la Cuadra, por sus valiosos consejos.. Finalmente a mis padres, por su apoyo incondicional, en especial a mi padre, Jaime Ubilla, por su ayuda en la construcción de varios prototipos del cintillo.. iii.
(5) INDICE GENERAL Pág. DEDICATORIA........................................................................................................... ii AGRADECIMIENTOS ..............................................................................................iii INDICE DE TABLAS ................................................................................................ vi INDICE DE FIGURAS.............................................................................................. vii RESUMEN................................................................................................................viii ABSTRACT ................................................................................................................ ix 1. Introducción ........................................................................................................... 10 2. Sistema Propuesto .................................................................................................. 16 2.1 Reconstrucción 3D con una vista y 3 puntos.............................................. 16 2.1.1 Geometría proyectiva básica ........................................................... 16 2.1.2 Reconstrucción 3D a partir de 3 puntos .......................................... 17 2.1.3 Newton-Raphson aplicado al problema .......................................... 20 2.2 Head Tracking básico ................................................................................. 22 2.3 Head Tracking extendido............................................................................ 25 2.3.1 Implementación del sistema ............................................................ 27 2.3.2 Módulo de Tracking ........................................................................ 29 2.3.3 Módulo de Reconstrucción.............................................................. 36 2.4 Eliminación de la inclinación de la cámara ................................................ 39 2.4.1 Determinación del pitch y roll de la cámara ................................... 41 2.4.2 Corrección de la reconstrucción 3D del cintillo.............................. 42 3. Experimentos y Resultados .................................................................................... 44 3.1 Precisión...................................................................................................... 44 3.2 Rapidez ....................................................................................................... 46 3.3 Robustez...................................................................................................... 47 4. Conclusiones .......................................................................................................... 48.
(6) BIBLIOGRAFIA........................................................................................................ 51 A N E X O S............................................................................................................... 53 Anexo A: El cintillo y los diodos utilizados .............................................................. 54 Anexo B: Calibracion de los acelerómetros............................................................... 56.
(7) INDICE DE TABLAS Pág. Tabla 3.1-1: Error teórico de las reconstrucciones..................................................... 45. vi.
(8) INDICE DE FIGURAS Pág. Figura 1-1: Dispositivos utilizados. ........................................................................... 13 Figura 2.1-1: Proyección de un punto en el modelo de cámara Pinhole.................... 17 Figura 2.1-2: Distancias entre M1, M2 y M3.............................................................. 18 Figura 2.2-1: Esquema del sistema de HT básico (vista superior)............................. 22 Figura 2.2-2: Distancias importantes para el sistema de HT. .................................... 23 Figura 2.3-1: Esquema del sistema de HT extendido (vista superior). ...................... 25 Figura 2.3-2: Fotografías del cintillo para HT extendido con y sin luz. .................... 26 Figura 2.3.1-1: Esquema del proceso de HT.............................................................. 28 Figura 2.3.2-1: Casos posibles en una asignación con referencia............................. 34 Figura 2.3.3-1: Reconstrucción del cintillo................................................................ 37 Figura 2.4-1: Corrección de la inclinación de la cámara. .......................................... 39 Figura 2.4-2: Disposición de los acelerómetros en el Nintendo Wii Remote............ 40 Figura 2.4.1-1: Observando la aceleración de gravedad. ........................................... 41 Figura 3-1: Capturas de pantalla de la aplicación para 4 poses distintas. .................. 44 Figura A-1: Angulo de emisión de los diodos utilizados........................................... 54. vii.
(9) RESUMEN Los sistemas de Head Tracking con estimación de pose tienen muchas aplicaciones en interacción humano-computador. Sin embargo, la mayor parte de los sistemas desarrollados a la fecha están restringidos a un rango de poses en que el usuario debe estar de frente a la cámara, son sensibles a las condiciones de iluminación y no son invariantes a la identidad del usuario. En este trabajo se propone un sistema de Head Tracking que estima la pose de la cabeza con precisión, utilizando el Nintendo Wii Remote para trackear un cintillo con diodos emisores infrarrojos. Este sistema no restringe al usuario a permanecer mirando a la cámara, es menos sensible a las condiciones de iluminación y completamente invariante a la identidad del usuario. Adicionalmente, el sistema elimina la inclinación de la cámara utilizando la información de los acelerómetros del dispositivo.. Palabras Claves: head tracking, head pose estimation, human-computer interaction. viii.
(10) ABSTRACT Head Tracking systems with head pose estimation have several applications in humancomputer interaction. However, most developed systems to date are restricted to a range of poses in which the user has to be facing the camera, are sensible to the lightning conditions and are not identity-invariant. In this work we propose a Head Tracking system with accurate head-pose estimation in the infrared spectrum that uses the Nintendo Wii Remote to track a circlet with infrared diodes. The system doesn’t restrict the user to be facing the camera, is less sensitive to the lighting conditions and is completelly identity-invariant. Additionally, the system eliminates the camera inclination using the accelerometer data of the device.. Keywords: head tracking, head pose estimation, human-computer interaction. ix.
(11) 10. 1. INTRODUCCIÓN Head Tracking (HT) se refiere al proceso de detectar la cabeza de una persona en una secuencia de video, determinando idealmente su posición y orientación en el espacio. De este modo, existen distintos niveles de HT, que van desde la simple detección de la cabeza, conseguida generalmente mediante Face Detection (Hjelmas y Low, 2001) hasta la estimación de su orientación o pose (tópico también conocido como Head Pose Estimation, Murphy-Chutorian y Trivedi, 2009).. HT es un tema bastante estudiado en los últimos 15 años, principalmente debido a: •. El gran interés que generan sus aplicaciones, fundamentalmente en HumanComputer Interaction (HCI). Durante los últimos 20 años las personas han interactuado con los computadores principalmente a través de un teclado y un mouse. HCI es un área de investigación que busca desarrollar nuevas formas de interacción. HT forma parte de un conjunto de estas nuevas formas de interacción, conocido como Vision-Based Interfaces (VBIs, Porta, 2009) .. •. La masificación de las webcams, lo cual hizo que esta tecnología sea más accesible y que los sistemas desarrollados puedan ser aprovechados por cualquier persona.. Se han propuesto muchas aplicaciones de HT (Porta, 2009): 1. Scrolling: una operación típica en interfaces de usuario graficas (GUIs) comunes, es realizar scrolling sobre un contenido que no cabe en una ventana. Se puede utilizar la dirección de la cabeza para realizar scrolling en esa dirección. 2. Zooming - Magnification: otra operación típica, similar a la anterior, es realizar zooms para acercar o amplificar contenidos. Se puede utilizar la distancia de la cabeza con respecto a la pantalla para controlar estas operaciones..
(12) 11. 3. Pointing: de manera similar a la primera aplicación, se puede utilizar la dirección de la cabeza para reemplazar la función de puntero del mouse. Esta aplicación es especialmente útil para usuarios con discapacidades. 4. 3D Navigation: utilizando una funcionalidad parecida a las aplicaciones de scrolling y zooming se puede utilizar movimientos de la cabeza para navegar por ambientes virtuales como los de videojuegos 3D. 5. Head Gestures: reconociendo gestos típicos de la cabeza como nod and shaking se puede aceptar o cancelar en los diálogos de GUIs comunes. Otros gestos similares pueden ser utilizados para navegar por páginas web, cambiar canciones en un reproductor de media, o avanzar páginas en un documento.. Todas estas aplicaciones no sólo representan formas más intuitivas de interactuar con los computadores para personas normales, sino que además constituyen formas posibles de interactuar para personas con discapacidades.. La mayoría de las técnicas de HT desarrolladas intentan estimar la orientación de la cabeza a partir de una única vista. Estas pueden clasificarse en dos categorías (Porta, 2009): •. Appeareance-based methods: obtienen la información directamente de las imágenes adquiridas sin intentar construir una representación 3D de la cabeza (Bérard, 1999, y Toyama, 1998).. •. Model-based methods: utilizan un modelo 3D para representar la cabeza, típicamente cilíndrico (La Cascia et al, 2000, Ryu y Kim, 2007) o elipsoidal (An y Chung, 2008). Las imágenes son utilizadas para estimar los 6 parámetros que definen la posición y orientación del modelo.. También se han desarrollado otras técnicas utilizando stereo-visión para obtener mejores resultados (Morency et al, 2002, Yang y Zhang, 2002). Sin embargo, todos estos sistemas comparten la limitación de requerir que el usuario deba mirar de frente a la cámara, para poder detectar su rostro..
(13) 12. Una aplicación interesante de HT es conseguir audio espacial virtual a través de audífonos, utilizando HRIRs (Head Related Impulse Responses, Mohan et al, 2003). Las HRIRs son señales que indican cómo el oído externo, en conjunto con la cabeza y el torso atenúan un sonido proveniente de una posición determinada antes de llegar a cada oído. Convolucionando un sonido monofónico con la HRIR de cada oído correspondiente a una posición de interés, es posible obtener una versión estéreo del sonido, que reproducido a través de audífonos se escucha como si proviniese de dicha posición. Esta tecnología es conocida Audio espacial o Audio 3D.. Integrando un sistema de Audio espacial con un sistema de HT que determine la orientación de la cabeza del usuario, es posible espacializar sonidos en tiempo real a través de audífonos, consiguiendo audio espacial “virtual”, la versión en sonido de la realidad virtual. En una aplicación como ésta, es de especial interés que el sistema de HT no restrinja la orientación de la cabeza del usuario.. Mohan et al utilizaron un sistema de HT en el espectro infrarrojo (IR) en que aplica un algoritmo de Object Pose (DeMenthon y Davis, 1995), para determinar la posición de 4 emisores IR montados sobre los audífonos. Este sistema otorga mayor libertad a la orientación de la cabeza, pero tiene dificultades en diferenciar algunas poses.. Se observa de la revisión bibliografía que los sistemas de HT desarrollados comparten varias limitaciones, entre otras: •. Están restringidos a poses en las que el usuario esté de frente a la cámara por trabajar con características faciales.. •. Son sensibles a las condiciones de iluminación del ambiente y a las características físicas del usuario.. •. Desconocen el efecto que pudieran tener pequeñas inclinaciones de la cámara en la determinación de la inclinación de la cabeza..
(14) 13. En este trabajo se propone un sistema de HT en el espectro IR que utiliza el Nintendo Wii Remote (Lee, 2008) para detectar un cintillo con diodos emisores IR. El sistema permite determinar la posición y la orientación de la cabeza en forma rápida y robusta para una amplia variedad de poses, gracias a que el cintillo posee diodos en todo su perímetro. Adicionalmente, el sistema detecta y elimina la inclinación de la cámara utilizando la información entregada por los acelerómetros incorporados en el Wii Remote.. (a). (b) Figura 1-1: Dispositivos utilizados.. La figura 1.1.a muestra el Wii Remote, el control principal de la consola Nintendo Wii. Este incorpora entre otras cosas, una cámara IR PixArt de alta resolución en el frente (ver círculo) y un acelerómetro ADLX330 que mide aceleraciones en los 3 ejes. La figura 1.1.b muestra como funciona el sistema de HT. El Wii Remote se conecta al computador vía Bluetooth y se ubica frente al usuario para detectar el cintillo con LEDs IR ubicado en su cabeza.. Se escogió utilizar este enfoque en el espectro IR utilizando el Wii Remote por las siguientes razones:.
(15) 14. 1. Las características de la cámara incorporada en el Wii Remote. Esta cuenta con una resolución de 1024x768 pixeles y una tasa de refresco de 100 Hz, muy superiores a las webcams de precios similares, que ofrecen resoluciones de 640x480 a 30 Hz. La resolución de la cámara incide directamente en la precisión del sistema. 2. IR: Trabajar en el espectro IR simplifica mucho la implementación del sistema al prácticamente no requerir pre-procesamiento de la imagen, hace el sistema menos sensible a las condiciones de iluminación del ambiente, y completamente independiente a las características físicas del usuario. 3. Los acelerómetros incorporados en el Wii Remote. Estos permiten determinar la inclinación del dispositivo cuando se encuentra en reposo, y eliminarla para determinar la inclinación absoluta de la cabeza con respecto al plano terrestre.. El sistema desarrollado corre a 100 Hz y determina la posición de la cabeza con un error promedio de 3 mm cuando el usuario se encuentra a 1 m de la cámara. Este error aumenta a 1 cm a 2 m de distancia. Admite rotaciones de yaw y roll de cualquier tipo, pero está restringido a rotaciones de pitch en el rango de ±30°. El error promedio de la estimación de los ángulos de rotación es inferior a 1° incluso a 2 m de la cámara.. El sistema de HT fue implementado en C# utilizando la Managed Library for Nintendo’s Wiimote de Brian Peek. Adicionalmente, el sistema permite transmitir la posición y la orientación de la cabeza, a través del protocolo OSC (Open Sound Control, Wright y Freed, 1997) para ser utilizados como input por otras aplicaciones.. OSC es un formato creado para encapsular y enviar datos entre computadores, sintetizadores de sonido y otros dispositivos multimedia. Cualquier programa que entienda OSC puede recibir los datos del sistema de HT y utilizarlos a su gusto, por ejemplo, para controlar algún aspecto de la aplicación. Para la conexión OSC se utilizó la librería Bespoke OSC de Bespoke Software..
(16) 15. El resto del documento se estructura como sigue. En la sección 2 se describe en detalle el sistema de HT propuesto. En la sección 3 se comenta los resultados del sistema, en términos de precisión, rapidez y robustez. Finalmente, en la sección 4 se resume el sistema propuesto, mencionando sus fortalezas y debilidades, y proponiendo posibles mejoras..
(17) 16. 2. SISTEMA PROPUESTO En este capítulo se describe el sistema de HT propuesto. La sección 2.1 muestra cómo reconstruir la posición de tres puntos en el espacio a partir de sus proyecciones en una imagen. La sección 2.2 muestra cómo aplicar este método para realizar HT en el espectro IR utilizando un cintillo con sólo 3 diodos IR. La sección 2.3 presenta el sistema propuesto, que extiende el sistema de la sección 2.2 utilizando un cintillo con múltiples diodos. Finalmente, en la sección 2.4 se muestra cómo utilizar los acelerómetros del Wii Remote para detectar la inclinación del dispositivo y eliminar la inclinación de la cámara en el sistema de HT.. 2.1 Reconstrucción 3D con una vista y 3 puntos En esta sección se describe el método utilizado para reconstruir la posición en el espacio de los diodos a partir de sus proyecciones en una imagen. Como se verá mas adelante, basta con contar con 3 puntos cuyas distancias relativas sean conocidas, para poder reconstruir sus posiciones originales.. 2.1.1 Geometría proyectiva básica Se considera un modelo clásico de cámara Pinhole como el de la figura 2.1.1. En este modelo, el sistema de referencia 3D o sistema de la cámara, está ubicado en su centro óptico O. El plano de la imagen está ubicado a una distancia f de O, conocida como distancia focal. El eje Z del sistema de la cámara coincide con el eje óptico, y sus ejes X e Y son paralelos con los ejes x e y del sistema de la imagen..
(18) 17. y. Y. Mi (Xi, Yi, Zi) mi. X. x. (xi,yi) O. Z. f. Figura 2.1-1: Proyección de un punto en el modelo de cámara Pinhole.. Un punto Mi de coordenadas (Xi, Yi, Zi) en el espacio se proyecta como un punto mi de coordenadas (xi,yi) en la imagen. Las coordenadas de mi están determinadas por las coordenadas de Mi y por la distancia focal f: xi = X i f / Z i yi = Yi f / Z i. (2.1.1). El problema inverso, de obtener las coordenadas de Mi a partir de mi, está subdeterminado. Al despejar Xi, Yi y Zi de (2.1.1), queda un parámetro libre: X i = Z i xi / f Yi = Z i y i / f. (2.1.2). Zi = Zi. 2.1.2 Reconstrucción 3D a partir de 3 puntos Sean M1, M2 y M3 tres puntos en el espacio de coordenadas desconocidas (Xi, Yi, Zi), i=1..3, pero cuyas distancias son conocidas: M1M 2 = a , M 2 M 3 = b , y M1M 3 = c ..
(19) 18. M2 a. b c. M1. M3. Figura 2.1-2: Distancias entre M1, M2 y M3. Escribiendo las ecuaciones de distancia entre 2 puntos para M1, M2 y M3, se obtiene:. ( X 2 − X 1 )2 + (Y2 − Y1 )2 + (Z 2 − Z1 )2 = a 2 ( X 3 − X 2 )2 + (Y3 − Y2 )2 + (Z 3 − Z 2 )2 = b 2 ( X 3 − X 1 )2 + (Y3 − Y1 )2 + (Z 3 − Z1 )2 = c 2. (2.1.3). Sean m1, m2 y m3 sus proyecciones en la imagen, de coordenadas conocidas (xi,yi), i =1..3. Las coordenadas de M1, M2 y M3 están relacionadas con las coordenadas de m1, m2 y m3, por las ecuaciones (2.1.2). Reemplazándolas en (2.1.3), se obtiene el siguiente sistema para Z1, Z2 y Z3 : 2. 2.  Z 2 x 2 Z 1 x1   Z 2 y 2 Z 1 y1  2   +   + (Z 2 − Z 1 ) = a 2 − − f  f   f  f  Z 3 x3 Z 2 x 2  − f  f. 2. 2.   Z 3 y3 Z 2 y 2  2  +   + (Z 3 − Z 2 ) = b 2 − f    f 2. (2.1.4). 2.  Z 3 x3 Z 1 x1   Z 3 y3 Z 1 y1  2   +   + (Z 3 − Z 1 ) = c 2 − − f   f f   f. Expandiendo los binomios y factorizando por Z1, Z2 y Z3 el sistema toma la forma: S1 Z 1 + 2W12 Z 1 Z 2 + S 2 Z 2 = a 2 2. 2. S 2 Z 2 + 2W23 Z 2 Z 3 + S 3 Z 3 = b 2 2. 2. S1 Z 1 + 2W13 Z 1 Z 3 + S 3 Z 3 = c 2 2. 2. (2.1.5).
(20) 19. Donde Si son las constantes que acompañan a los términos cuadráticos Zi2 y Wij son las constantes que acompañan a los términos mixtos ZiZj. 2. 2. x  y  S i =  i  +  i  + 1  f   f  xi x j y i y j Wij = 2 + 2 + 1 f f. (2.1.6). Resolviendo el sistema (2.1.5) se puede obtener las coordenadas Z de M1, M2 y M3, con las cuales se puede determinar las otras 2 coordenadas utilizando las ecuaciones (2.1.2), completando así la reconstrucción 3D de los puntos. Sin embargo, este sistema es polinomial y no puede ser resuelto en forma analítica, por lo cual es necesario utilizar un método numérico para resolverlo. Sean g1, g2 y g3 funciones ℜ 3 → ℜ de Z1, Z2 y Z3 tales que:. g 1 (Z 1 , Z 2 , Z 3 ) = S1 Z1 + 2 M 12 Z 1 Z 2 + S 2 Z 2 − a 2 2. 2. g 2 (Z1 , Z 2 , Z 3 ) = S 2 Z 2 + 2 M 23 Z 2 Z 3 + S 3 Z 3 − b 2 2. 2. (2.1.7). g 3 (Z 1 , Z 2 , Z 3 ) = S1 Z1 + 2 M 13 Z1 Z 3 + S 3 Z 3 − c 2 2. 2. Sea G : ℜ 3 → ℜ 3 una función vectorial tal que:. G (Z1 , Z 2 , Z 3 ) = ( g1 (Z 1 , Z 2 , Z 3 ), g 2 (Z1 , Z 2 , Z 3 ), g 3 (Z 1 , Z 2 , Z 3 )). (2.1.8). Es fácil ver que resolver el sistema (2.1.5) para Z1, Z2 y Z3, equivale a encontrar un cero (vectorial) de la función G. Es decir, un trío (Z1, Z2, Z3) es solución del sistema (2.1.5) si y solo si es raíz de la función G. A continuación se describe cómo utilizar el método de Newton-Raphson para encontrar un cero de la función G y resolver el sistema (2.1.5)..
(21) 20. 2.1.3 Newton-Raphson aplicado al problema. El método de Newton-Raphson (Hartley y Ziserman, 2000) es un algoritmo numérico para encontrar ceros o raíces de funciones reales. El algoritmo requiere un punto de partida razonablemente cercano a la raíz de interés, a partir del cual procede iterativamente generando nuevos puntos cada vez más cercanos a la raíz. Sea g : ℜ → ℜ una función derivable en el intervalo de interés. Desde un punto de. partida x0, el algoritmo genera en cada iteración n, un nuevo punto xn+1 a partir del punto anterior xn, tomando la raíz de la aproximación lineal de g en xn : x n +1 = x n −. g ( xn ) g ′( x n ). (2.1.9). Donde g´(xn) denota la derivada de g en xn. El algoritmo termina en la iteración n si se obtiene un punto lo suficientemente cercano a una raíz, es decir si se obtuvo un xn tal que |g(xn)| < ε para un ε dado, o bien si n excede un número máximo de iteraciones definido.. Newton-Raphson puede ser generalizado para encontrar ceros de funciones vectoriales como la de la ecuación (2.1.8). En este caso, tanto x como g(x) son vectores, y la ecuación (2.1.9) debe ser reemplazada por: x n +1 = x n − J G−1 ( x n )G ( x n ). (2.1.10). Donde J G−1 ( x n ) denota la inversa de la matriz Jacobiana de la función G en xn. Las condiciones de término del algoritmo son las mismas que en el caso anterior, salvo que en este caso se pide G ( x n ) < ε , dado que se trata de una función vectorial..
(22) 21. En el caso de la función de interés (ecuación 2.1.8) x es un vector Z = (Z1, Z2, Z3) y la matriz Jacobiana J G (Z) , es de dimensión 3x3:  ∂g1   ∂Z 1 ∂g J G (Z) =  2  ∂Z  ∂g 1  3  ∂Z 1. ∂g1 ∂Z 2 ∂g 2 ∂Z 2 ∂g 3 ∂Z 2. ∂g1   ∂Z 3  ∂g 2  ∂Z 3  ∂g 3  ∂Z 3 . (2.1.11). Los términos ∂g i ∂Z j denotan la derivada parcial de la función gi con respecto a la variable Zj, y se obtienen derivando las funciones (2.1.7). Reemplazando estas derivadas en la matriz anterior, se obtiene la expresión para la matriz jacobiana de G:. 2 S1 Z 1 − 2W12 Z 2 J G (Z) =  0  2S1 Z1 − 2W13 Z 3. 2 S 2 Z 2 − 2W12 Z1 2 S 2 Z 2 − 2W23 Z 3 0. 0  2 S 3 Z 3 − 2W23 Z 2  (2.1.12) 2S 3 Z 3 − 2W13 Z 1 . Las coordenadas del punto de partida Z0 = (Z10, Z20, Z30) deben ser escogidas dentro del rango en el eje Z en que se espera encontrar M1, M2 y M3. Si la reconstrucción 3D se realiza en una secuencia de video, se puede utilizar como punto de partida para cada frame, la solución del frame anterior de modo de contar siempre con un buen punto de partida. Utilizando este algoritmo se puede reconstruir la posición en el espacio de 3 puntos cuyas distancias son conocidas, a partir de sus proyecciones en una imagen. En la siguiente sección se muestra una forma de aplicar este método para realizar Head Tracking en el espectro infrarrojo utilizando el Nintedo Wii Remote..
(23) 22. 2.2 Head Tracking básico En esta sección se describe cómo utilizar el método de la sección anterior para implementar un sistema de HT en el espectro infrarrojo, utilizando el Nintendo Wii Remote para detectar un cintillo con tres diodos emisores infrarrojos ubicado en la cabeza del usuario. Posteriormente, en la sección 2.3 se mostrará como extender este sistema para no requerir que el usuario deba mirar de frente a la camara.. Head LED Wii Remote. M3. d̂ M2. tˆ. M1 Circlet. Figura 2.2-1: Esquema del sistema de HT básico (vista superior).. La figura 2.2.1 muestra un esquema del sistema. El vector d̂ indica la dirección en que apunta la cabeza y el vector tˆ indica la dirección en que apunta el oído izquierdo. Los tres diodos están ubicados sobre la frente del usuario en un cintillo circular de radio r conocido. El diodo central (M2) indica la posición del centro de la frente. Los otros dos (M1 y M3) están ubicados a ambos lados del diodo central, formando un ángulo de 45° con éste, desde el centro del cintillo..
(24) 23. El Nintendo Wii Remote incorpora una cámara infrarroja [13], de 1024 x 768 píxeles de resolución y una tasa de refresco de 100 Hz. El campo de visión (FoV) de la cámara en el plano horizontal es de 45°, lo que determina una distancia focal medida en pixeles de 1236. Utilizando el método de reconstrucción descrito en la sección 2.1 se puede obtener la posición 3D de los 3 diodos del cintillo, y con esto obtener una buena estimación de la posición y la orientación de la cabeza del usuario. Los únicos datos necesarios para realizar la reconstrucción son las distancias entre los diodos, y sus posiciones en la imagen.. M2 a. b c. M1. M3. r r. d̂ tˆ. r. P. Figura 2.2-2: Distancias importantes para el sistema de HT.. Sean M1, M2 y M3 los 3 diodos del cintillo, siendo M2 el diodo central. Sean a, b y c las distancias entre los diodos, como se muestra en la figura 2.2.2. Para un cintillo de radio r, los valores de las distancias a, b y c son: a = b = 2r sin(π / 8) c = 2r sin(π / 4). (2.2.1). Una vez reconstruidas las posiciones de los diodos M1, M2 y M3, se puede calcular la dirección d̂ en que apunta la cabeza, como la diferencia vectorial entre el diodo central. M2, y el punto medio entre los diodos laterales:.
(25) 24. r 1 d = M 2 − (M 1 + M 3 ) 2 r d dˆ = r d. (2.2.2). Con la posición de M2 y la dirección d̂ , se puede obtener la posición P del centro del cintillo, la cual es una buena representación de la posición de la cabeza: P = M 2 − rdˆ. (2.2.3). Una segunda dirección importante que define la inclinación de la cabeza, es la dirección del eje de los oídos t̂ (ver figura 2.2.1). Esta es ortogonal a la dirección d̂ en que apunta la cabeza, y puede ser calculada como la diferencia entre M1 y M3.. r t = M1 − M 3 r t tˆ = r t. (2.2.4). La rotación de la cabeza con respecto al sistema de la cámara puede describirse a partir de una matriz de rotación R, cuya primera y tercera columna son los vectores t̂ y d̂ respectivamente y cuya segunda columna corresponde al producto cruz dˆ × tˆ .. [. R = tˆ M dˆ × tˆ M dˆ. ]. (2.2.5). Puede verificarse que cuando no hay rotación de la cabeza, R corresponde a la matriz identidad. En efecto, en dicho caso la dirección d̂ en que apunta la cabeza coincide con el vector canónico k̂ , que indica la dirección del eje Z. Por otra parte, la dirección t̂ del. eje de los oídos coincide con el vector canónico î , que indica la dirección del eje X. Finalmente, dˆ × tˆ coincide con el vector canónico ĵ , que indica la dirección del eje Y..
(26) 25. 2.3 Head Tracking extendido El sistema de HT presentado en la sección anterior requiere que el usuario esté siempre mirando a la cámara, dado que el programa necesita ver siempre los tres diodos infrarrojos ubicados en su frente para poder realizar la reconstrucción 3D (ver figura 2.2.1). Esta restricción puede resultar indiferente para muchas aplicaciones de HT, pero puede volverse una limitación si va a ser utilizado por ejemplo, en un sistema de audio espacial. En esta sección se presenta una forma de extender el sistema de HT visto en la sección anterior, para conseguir una solución que no requiera que el usuario permanezca mirando a la cámara, y que pueda ocuparse en otras aplicaciones como audio espacial. Se utiliza ahora un cintillo similar al de la sección anterior, pero que incorpora 5 diodos adicionales, completando un octógono regular. Los nuevos diodos permiten al Wii Remote ver al cintillo desde cualquier punto, sin importar hacia donde esté mirando el usuario. La figura 2.3.1 muestra un esquema del sistema.. Head P3. LED Wii Remote. P4. tˆ. P2. P5. P1. d̂ P6. P0 P7 Circlet. Figura 2.3-1: Esquema del sistema de HT extendido (vista superior)..
(27) 26. El vector d̂ indica la dirección en que apunta la cabeza y el vector tˆ indica la dirección en que apunta el oído izquierdo. Los 8 diodos del octágono están enumerados desde el diodo frontal P0 hacia la derecha como muestra la figura 2.3.1. El problema de este enfoque radica en identificar a qué parte del cintillo corresponden los diodos vistos en la imagen y por lo tanto, hacia dónde está mirando el usuario. Para ayudar con esta tarea, el cintillo incorpora un par de diodos adicionales (Rf y Rr), ubicados sobre el diodo frontal (P0) y el opuesto a este (P4) para marcar el frente y el reverso del cintillo (figura 2.3.2.a).. (a). (b). Figura 2.3-2: Fotografías del cintillo para HT extendido con y sin luz.. La figura 2.3.2.b da una mejor idea de lo que ve la cámara del Wii Remote. Los diodos ubicados en círculo (Pi) serán llamados en adelante “diodos principales”, mientras los dos diodos adicionales (Rf y Rr) serán llamados “diodos de referencia”. A continuación se describe la implementación del sistema..
(28) 27. 2.3.1 Implementación del sistema Estructuras de datos Estas son las principales estructuras de datos utilizadas: •. Sensors[4]: El procesador de la cámara del Wii Remote incorpora un multiobject tracking (MOT) engine [13], capaz que trackear hasta 4 fuentes de luz infrarroja. La información de las fuentes IR encontradas es entregada en este arreglo de 4 “sensores”, cuyos atributos más importantes son: o found: indica si se encontró una fuente IR o no (booleano). o pos.x, pos.y: indican la posición en la imagen de la fuente IR. Esta estructura es la entrada del sistema.. •. Light: representa un diodo IR del cintillo. Sus atributos mas importantes son: o isVisible: indica si el diodo es visible o no (booleano). o pos.x, pos.y: indican la posición del diodo en la imagen. o Pos.x, Pos.y, Pos.z: indican la posición del diodo en el espacio.. •. Circlet: representa el cintillo IR. Sus atributos más importantes son: o Prin[8]: arreglo de 8 estructuras Light, correspondientes a los 8 diodos principales del cintillo (Pi). o RefF, RefR: estructuras Light, correspondientes a los diodos de referencia frontal y trasero del cintillo (Rf y Rr). o Pos.x, Pos.y, Pos.z: indican la posición en el espacio del centro del cintillo. o Yaw, Pitch, Roll: indican la orientación en el espacio del cintillo. Esta estructura es la salida del sistema..
(29) 28. Esquema del Sistema El objetivo del sistema es obtener la mayor cantidad posible de información espacial (3D) del cintillo en la estructura Circlet a partir de la información recibida del Wii Remote en el arreglo Sensors[4]. En particular, se desea obtener su posición y orientación en el espacio. Para lograr este objetivo, se separó el sistema en dos módulos o procesos principales: un Módulo de Tracking y un Módulo de Reconstrucción, como se muestra en la figura 2.3.3. •. El Módulo de Tracking toma la información recibida del Wii Remote en el arreglo Sensors[] y determina qué diodos del cintillo aparecen en la imagen, actualizando la información 2D de la estructura Circlet.. •. El Módulo de Reconstrucción toma la información 2D de la estructura Circlet, y si es suficiente, reconstruye la posición y orientación del cintillo en el espacio, actualizando la información 3D de la estructura.. A continuación se describe en detalle ambos módulos.. Wii Remote Sensors[4] Tracking Circlet (2D) Reconstrucción Circlet (3D). Figura 2.3.1-1: Esquema del proceso de HT..
(30) 29. 2.3.2 Módulo de Tracking El objetivo de este módulo es determinar a qué diodo del cintillo (Prin[i], RefF o RefR) corresponde cada luz vista en la imagen (Sensors[i]). Esto consiste en asignar a cada Sensors[i] un diodo del cintillo, utilizando dos funciones: Assign(i,j) y UnAssign(i,j) y un arreglo Assignment[]: •. Assignment[4]: registra a qué diodo del cintillo está asignado cada Sensors[i]. o Si Assignment[i] = -1, Sensor[i] no tiene asignación. o Si Assignment[i] = j, j∈ [0,7] , Sensors[i] fue asignado a Prin[j]. o Si Assignment[i] = 8, Sensor[i] está asignado a RefF. o Si Assignment[i] = 9, Sensor[i] está asignado a RefR.. •. Assign(i,j): asigna el Sensor[i] a un diodo X del cintillo, marcándolo visible. (X.isVisible = true), actualizando su posición (X.pos = Sensors[i].pos) y registrando la asignación (Assignment[i] = j). o Si j∈ [0,7], X corresponde a Prin[j]. o Si j = 8, X corresponde a RefF. o Si j = 9, X corresponde a RefR.. •. UnAssign(i,j): desasigna el Sensor[i] de un diodo X del cintillo, marcándolo. como no visible (X.isVisible = false) y eliminado la asignación (Assignment[i] = -1). o j determina a X igual que en Assign(i,j).. Cuándo asignar. Para aprovechar al máximo el multiobject tracking engine (MOT) [13] del Wii Remote, se intenta conservar las asignaciones previas de cada Sensors[i] mientras no ocurran cambios importantes en la información recibida.. Para detectar estos cambios y. determinar cuando se deben asignar/desasignar, se definió una función Analize() y dos estructuras: SensorsPrev[] y SensorsChange[]:.
(31) 30. •. SensorsPrev[4]: almacena el estado de Sensors[] en el frame anterior.. •. SensorsChange[4]: indica qué se debe hacer con cada Sensors[i].. •. Analize(): determina si hubieron cambios y qué se debe hacer con cada Sensors[i].. Analize() considera 3 cambios importantes posibles para cada Sensors[i]: •. Si Sensors[i] no tenía asignación (Assignment[i] = -1) y encontró una luz (Sensors[i].Found = true), entonces se debe asignar a algún diodo del cintillo, lo cual se indica con SensorsChange[i] = 1.. •. Si Sensors[i] tenía asignación (Assignment[i] != -1) y no encontró una luz (Sensors[i].Found = false), entonces se debe eliminar la asignación, lo cual se indica con SensorsChange[i] = 3,. •. Si Sensors[i] tenía asignación y encontró una luz, pero esta se desplazó mucho en la imagen (Distance(SensorPrev.pos, Sensor.pos) > DistTreshold1), entonces el sensor se cambio a otro diodo mas intenso, en cuyo caso se debe eliminar la asignación anterior y asignar un nuevo diodo.. Esto se indica con. SensorsChange[i] = 2. •. En cualquier otro caso, se considera que Sensors[i] no tuvo cambios y se indica con SensorsChange[i] = 0.. Finalmente, para saber si hay sensores que asignar, se definió una función AnythingChanged(). Esta retorna true si la suma de los elementos de SensorsChange[] es distinta de cero, y false en otro caso.. 1. DistTreshold representa el máximo desplazamiento que puede tener la luz detectada por un sensor antes de considerar que se cambió a otro diodo.
(32) 31. Cómo asignar El módulo de Tracking tiene un código similar al siguiente: Analize(); if (AnythingChanged()) { if(TryReferenceAssignment()); else { UnAssignLost(); ReAssignAll(); TrySpecialAssignment(); } } else { ReAssignAll(); }. Primero, se llama a Analize() para determinar si hubo cambios importantes para cada Sensors[i] y qué hacer en cada caso. Luego se llama a AnythingChanged() para preguntar si hubo cambios importantes: •. Si hubo cambios, se intenta realizar una “Asignación con Referencia” (TryReferenceAssignment()): la que utiliza los diodos de referencia (frontal o trasero) como guía para asignar los demás diodos. Si TryReferenceAssignment() fracasa, entonces o UnAssignLost() desasigna todos los sensores que deben ser desasignados (aquellos que fueron marcados con SensorChange[i] = 2 o 3 por Analize()) o ReAssignAll() reasigna todos los sensores que no cambiaron (aquellos que fueron marcados con SensorChange[i] = 0 por Analize()) con sus asignaciones anteriores. o Se intenta realizar una “Asignación Especial” (TrySpecialAssignment()): la cual utiliza diodos principales previamente asignados como guía para asignar los demás diodos..
(33) 32. •. Si no hubo cambios, ReAssignAll() reasigna todos los sensores que no cambiaron (aquellos que fueron marcados con SensorChange[i] = 0 por Analize()) con sus asignaciones anteriores (en este caso, todos).. Se intenta realizar Asignaciones con Referencia cada vez que sea posible. Las Asignaciones Especiales se realizan sólo cuando no es posible realizar una Asignación con Referencia. A continuación se describe estas dos estrategias de asignación.. Asignación con Referencia (TryReferenceAsignment()) Para realizar una asignación con referencia primero se debe determinar si hay diodos de referencia en la imagen. Para esto se definió una función SearchRefLight() la cual identifica el diodo de referencia buscando el trío de diodos que forme el ángulo más recto.. SearchRefLight() requiere que los 4 sensores sean visibles (Sensor[i].found = true ). Esta función sigue los siguientes pasos: 1. Para cada Sensors[i] busca el sensor A[i] mas cercano a este 2. Para cada A[i] busca el sensor B[i] mas cercano a este, excluyendo a Sensors[i]. 3. Para cada trío {Sensors[i], A[i], B[i]} determina el ángulo Angle[i] formado entre los vectores: (Sensors[i].pos – A[i].pos) y (B[i].pos – A[i].pos) 4. Determinar el ángulo más recto de Angle[i], es decir, que minimize (π/2 - Angle[i]). 5. Si el ángulo más recto es “suficientemente recto”, es decir si |π/2 - Angle[i]| ≤ π/82, se toma el trío {Sensors[i], A[i], B[i]} y se continúa con el paso 6. Si no, SearchRefLight() termina retornando false. A continuación se determina si el diodo de ref. es Sensors[i] o B[i].. 2. Un ángulo es considerado “suficientemente recto” si esta en el rango [π/2 - π/8, π/2 + π/8].
(34) 33. 6. Sean U, V, W los 3 elementos de Sensors[] distintos a Sensors[i], ordenados de izquierda a derecha en la imagen (U.pos.x ≤ V.pos.x ≤ W.pos.x). Se determina angle1, el ángulo conformado entre los vectores: (U.pos – V.pos) y (W.pos – V.pos) 7. Sean P, Q, R los 3 elementos de Sensors[] distintos a B[i], ordenados de izquierda a derecha en la imagen (P.pos.x ≤ Q.pos.x ≤ R.pos.x). Se determina angle2, el ángulo conformado entre los vectores: (P.pos – Q.pos) y (R.pos – Q.pos) 8. Si angle1 ≥ angle2, el diodo de referencia es Sensors[i], si no, es B[i]. En los dos casos, A[i] es el diodo principal más cercano a éste. Se guarda los índices de ambos en variables ref y prin respectivamente, y se retorna true. •. Si SearchRefLight() retorna false, no se puede realizar una Asignación con Referencia y TryReferenceAssignment() retorna false. (Se deberá intentar una Asignación Especial).. •. Si SearchRefLight() retorna true, se puede realizar una Asignación de Referencia, pero falta determinar si el diodo de referencia encontrado corresponde al diodo delantero (RefF) o al trasero (RefR). Para determinar esto se definió otra función DetermineSide().. •. Si en el frame anterior se veía alguno de los dos diodos contiguos al diodo principal frontal, DetermineSide() retorna 1, indicando que el diodo de referencia corresponde al frontal.. •. Si en el frame anterior se veía alguno de los dos diodos contiguos al diodo principal trasero, DetermineSide() retorna 2, indicando que el diodo de referencia corresponde al trasero.. •. En cualquier otro caso, DetermineSide() retorna 1, de modo que si falta información, se asume que se esta viendo el frente del cintillo..
(35) 34. Con el valor retornado por DetermineSide() se puede terminar la Asignación de Referencia. Sea side el valor retornado por DetermineSide() y sean i, j los índices de los 2 elementos de Sensors[] distintos a ref y prin, ordenados de izquierda a derecha en la imagen. (Sensors[i].pos.x <= Sensors[j].pos.x). Para ref y prin hay solo 2 opciones: 1) Si side = 1, se ejecuta Assign(ref, 8) y Assign(prin, 0). 2) Si side = 2, se ejecuta Assign(ref, 9) y Assign(prin, 4).. Para i y j hay 3 casos posibles (6 dependiendo de side): a) Si Sensors[i].pos.x <= Sensors[j].pos.x <= Sensors[prin].pos.x a.1) Si side = 1, se ejecuta Assign(i,6) y Assign(j,7). a.2) Si side = 2, se ejecuta Assign(i,2) y Assign(j,3). b) Si Sensors[i].pos.x <= Sensors[prin].pos.x <= Sensors[j].pos.x b.1) Si side = 1, se ejecuta Assign(i,7) y Assign(j,1). b.2) Si side = 2, se ejecuta Assign(i,3) y Assign(j,5). c) Si Sensors[prin].pos.x <= Sensors[i].pos.x <= Sensors[j].pos.x c.1) Si side = 1, se ejecuta Assign(i,1) y Assign(j,2). c.2) Si side = 2, se ejecuta Assign(i,5) y Assign(j,6). ref i. j. Caso a). prin. ref. ref i. prin. Caso b). j. prin. i. Caso c). Figura 2.3.2-1: Casos posibles en una asignación con referencia.. j.
(36) 35. Asignación Especial (TrySpecialAssignment()) Para realizar una asignación especial primero se debe verificar si hay al menos un sensor asignado a un diodo principal. Para hacer esto se implemento una función SearchPrinLight(). Esta función itera sobre el arreglo Assignment[] buscando un sensor asignado a un diodo principal, es decir buscando un índice i tal que 0 ≤ Assignment[i] ≤ 7. Si existe tal índice, SearchPrinLight() retorna true, en otro caso retorna false. •. Si SearchPrinLight() retorna false, no existe un diodo principal asignado, por lo que no se puede realizar una Asignación Especial, y TrySpecialAssignment() termina.. •. Si SearchPrinLight() retorna true, entonces existe al menos un diodo principal asignado que puede ser utilizado como guía para asignar los demás sensores.. Para asignar los sensores pendientes por asignar (aquellos que fueron marcados con SensorChange[] = 1 o 2 en el proceso Analize()) se debe ordenarlos de izquierda a derecha (según su coordenada X en la imagen). Sea l el índice del sensor asignado al diodo principal ubicado más a la izquierda en la imagen, y r el índice del sensor asignado al diodo principal ubicado más a la derecha. (left y right pueden eventualmente coincidir). Sea Left(i) una función que entrega el indice del sensor pendiente ubicado inmediatamente a la izquierda de Sensors[i] y sea Right(i) una función que entrega el índice del sensor pendiente ubicado inmediatamente a su derecha. En caso de no haber ningún sensor, ambas funciones retornan -1. Para asignar los sensores pendientes ubicados a la izquierda de l, basta con ejecutar el siguiente ciclo:.
(37) 36. while(Left(l)!=-1) { Assign(Left(l),Assignment[l]-1); l = Left(l); }. Finalmente, para asignar los sensores pendientes ubicados a la derecha de r, basta con ejecutar el siguiente ciclo análogo al anterior: while(Right(r)!=-1) { Assign(Right(l),Assignment[r]+1); r = Right(r); }. 2.3.3 Módulo de Reconstrucción El objetivo de este módulo es reconstruir la posición 3D de los diodos del cintillo. Para esto, se requiere que haya 3 diodos principales contiguos visibles. Se definió una función CanReconstruct() para verificar si esto se cumple. CanReconstruct() itera sobre cada uno de los diodos principales (Circlet.Prin[]) verificando si este y los dos diodos contiguos son visibles. Si se cumple esta condición para algún trío de diodos, guarda el índice del diodo central en una variable global midIndex, y retorna true. Si no, retorna false. Seudo-Codigo para CanReconstruct (): for(i = 1; i <= 8; i++) { if(Circlet.Prin[(i-1)%8].isVisible and Circlet.Prin[i%8].isVisible and Circlet.Prin[(i+1)%8].isVisible) { midIndex = i % 8; return true; } } return false;.
(38) 37. •. Si CanReconstruct() retorna false, entonces no hay un trío de diodos principales visible para reconstruir el cintillo en esta iteración y el Modulo de Reconstrucción termina.. •. Si CanReconstruct() retorna true, entonces existe un trío de diodos principales visible, indicado por midIndex, y se puede reconstruir su posición 3D a partir de sus posiciones en la imagen, utilizando el algoritmo de la sección 2.1.. Reconstrucción 3D del cintillo Una vez reconstruidas las posiciones de 3 diodos principales del cintillo, se puede reconstruir fácilmente la posición del centro y de los demás diodos principales. Sean M1, M2 y M3 las posiciones reconstruidas de los 3 diodos principales visibles. Sea P la posición del centro, y sean Mi, i = 4..8, las posiciones de los demás diodos principales. M2 M1. M3 d2 d1 P. M8. M7. d3 d4. M4. M5 M6. Figura 2.3.3-1: Reconstrucción del cintillo.. P puede ser reconstruido a partir de M1, M2 y M3, utilizando la ecuación 2.2.3. Para reconstruir las posiciones Mi de los demás diodos, se requiere determinar las 4 direcciones que van de P a M1, M2, M3 y M4. Sean di, i = 1..4, tales direcciones. Estas están dadas por:.
(39) 38. d1 = (M 1 − P ) M 1 − P. d 2 = (M 2 − P ) M 2 − P d 3 = (M 3 − P ) M 3 − P. (2.3.1). d 4 = (M 3 − M 1 ) M 3 − M 1. Las posiciones de los demás diodos principales son: M 4 = P + rd 4 M 5 = P − rd 1 M 6 = P − rd 2. (2.3.2). M 7 = P − rd 3 M 8 = P − rd 4 Para determinar la Matriz de rotación R del cintillo se puede utilizar la ecuación 2.2.5, pero para esto, primero se debe definir los vectores d y t, para el cintillo utilizado en esta sección. Sea P0 la posición del diodo del frente del cintillo y P2 la posición del diodo de la izquierda (ver figura 2.3.1). La dirección d en que apunta la cabeza puede definirse como: d = (P0 − P ) / P0 − P. (2.3.3). Finalmente, la dirección t del eje de los oídos puede definirse como:. t = (P2 − P ) / P2 − P. (2.3.4).
(40) 39. 2.4 Eliminación de la inclinación de la cámara En esta sección se describe cómo utilizar los acelerómetros del Nintendo Wii Remote para detectar la inclinación del dispositivo y corregir la reconstrucción del cintillo, recalculando la posición de los diodos relativa a un nuevo sistema de referencia sin inclinación con respecto al plano de la Tierra. Sea S el sistema de referencia de la cámara, de ejes X, Y y Z, representado en gris en la figura (2.4.1), los cuales apuntan en las direcciones definidas en la sección 2.1. Este sistema se encuentra inclinado con respecto al plano de la Tierra, representado como π en la figura. S’ Y’. S. Y π. Mi. X’ O. Z Z’. X. Figura 2.4-1: Corrección de la inclinación de la cámara.. Sea Mi la posición de un diodo del cintillo respecto al sistema S de la cámara. El objetivo es encontrar la posición de este diodo con respecto un nuevo sistema de referencia S’, de ejes X’, Y’ y Z’ (representado en negro), centrado en el mismo origen que S, pero: •. cuyo eje Y’ es normal al plano de la Tierra y,. •. cuyo eje Z’ es la proyección ortogonal del eje Z sobre dicho plano.. Los ejes X’ y Z’ del sistema S’, quedan por lo tanto contenidos en el plano de la Tierra..
(41) 40. Para obtener posición Mi’ del diodo relativa al sistema S’, se debe detectar la inclinación de la cámara con respecto al plano de la Tierra, la cual esta determinada por dos ángulos: •. Un ángulo de pitch, correspondiente al ángulo comprendido entre los ejes Z y Z’. •. Un ángulo de roll, correspondiente al ángulo comprendido entre los ejes X y X’. El ángulo de yaw no es de interés en este caso. Para determinar la inclinación de la cámara se puede utilizar los acelerómetros incorporados en el Wii Remote [13]. El dispositivo cuenta con 3 acelerómetros que miden aceleraciones en cada uno de los ejes. Cuando éste se encuentra en reposo, la única aceleración registrada es la aceleración de gravedad, de modo que se puede determinar su inclinación con respecto al plano de la Tierra observando como se descompone el vector aceleración en cada uno de los ejes. La figura (2.4.2) muestra la disposición de los acelerómetros en el Nintendo Wii Remote. Notar que estos ejes no coinciden con los ejes del sistema de la cámara.. Figura 2.4-2: Disposición de los acelerómetros en el Nintendo Wii Remote..
(42) 41. El Nintendo Wii Remote entrega valores de aceleración normalizados por la aceleración de gravedad en el rango [-3g,+3g] [13]. Esto significa que si el dispositivo descansa en reposo sobre uno de sus costados en una superficie perfectamente horizontal, la aceleración registrada debería ser 1g en el eje normal a ésta, y 0 en los otros dos. Si este no fuese el caso, se debe realizar un proceso de calibración para determinar el error de cada acelerómetro y substraerlo de las mediciones.. 2.4.1 Determinación del pitch y roll de la cámara Sean ax, ay, az, las magnitudes de las aceleraciones registradas por el Wii Remote en r cada uno de los ejes. El vector a = (ax, ay, az), indica la aceleración neta del dispositivo. Cuando éste se encuentra en reposo, los acelerómetros sólo registran la aceleración de r r gravedad, de modo que a = 1g , y lo que es más importante, a es normal al plano de la r Tierra. La figura (2.4.3) muestra una instancia particular del vector a en color negro:. Z. az. ay. ax. Y. X Figura 2.4.1-1: Observando la aceleración de gravedad.. El ángulo de pitch (en adelante ϕ ) de la cámara corresponde al conformado entre el r vector a y su proyección sobre el plano XZ (vector gris), el cual está dado por:.
(43) 42. ay. ϕ = atan(. ax + az 2. 2. ). (2.4.1). Por otra parte, el ángulo de roll (en adelante ρ ) corresponde al conformado entre la r proyección del vector a sobre el plano XZ (vector gris) y el eje Z, el cual está dado por:. ρ = atan(. ax ) az. (2.4.2). Ambos ángulos de rotación son independientes. Se puede verificar mirando la figura (2.4.2) que si ay = 0, no hay rotación de pitch. Del mismo modo, si ax = 0, no hay rotación de roll.. 2.4.2 Corrección de la reconstrucción 3D del cintillo. Una vez conocidos los ángulos de inclinación de la cámara, se puede determinar la posición 3D de los diodos del cintillo con respecto al nuevo sistema de referencia S’, cuyo eje Y es normal a la superficie de la Tierra. Sea Mi la posición de un diodo del cintillo en el sistema S de la cámara. Para obtener la posición Mi’ del diodo con respecto al sistema S’ se debe realizar una transformación lineal de rotación R sobre Mi que elimine las rotaciones de roll y pitch de la cámara. M i ' = RM i. (2.4.3). La matriz de rotación R es el producto de las matrices de rotación de pitch y roll: R = R pitch R roll. Estas matrices de rotación son las siguientes:. (2.4.5).
(44) 43. R roll. R pitch. cos( ρ ) − sin( ρ ) 0 =  sin( ρ ) cos( ρ ) 0  0 0 1. (2.4.3). 0 0  1  = 0 cos(ϕ ) − sin(ϕ ) 0 sin(ϕ ) cos(ϕ ) . (2.4.4). La matriz R roll rota el sistema S de la cámara en torno a su eje Z, haciendo coincidir su eje X con el eje X’ del sistema S’ (ver figura 2.4.1). Finalmente, la matriz R pitch rota el sistema S en torno a su eje X, haciendo coincidir los dos ejes restantes con sus respectivos del sistema S’. Ambas rotaciones no son conmutables por cómo se definieron los ángulos de rotación, por lo que la rotación de roll debe realizarse en primer lugar. Multiplicando la matriz de rotación R por la posición Mi de cada diodo del cintillo, se corrige su reconstrucción, obteniéndose la inclinación de la cabeza con respecto al plano de la Tierra, sin importar la inclinación de la cámara..
(45) 44. 3. EXPERIMENTOS Y RESULTADOS. Yaw: 1 Pitch: 3 Roll: 0. Yaw: 35 Pitch: 6 Roll: 3. Yaw: 5 Pitch: 4 Roll: 26. Yaw: -7 Pitch: -11 Roll: 15. Figura 3-1: Capturas de pantalla de la aplicación para 4 poses distintas. La primera fila muestra la pose real de la cabeza. La segunda muestra la reconstrucción 3D del cintillo realizada por la aplicación. La tercera muestra los ángulos (en grados) determinados por la aplicación. Los valores de los ángulos están redondeados al entero más cercano. A continuación se analiza los resultados del sistema de HT en tres aspectos: Precisión, Rapidez y Robustez.. 3.1 Precisión Para medir en forma empírica el error de las reconstrucciones del cintillo conseguidas por el sistema, sería necesario conocer las posiciones originales exactas de los diodos con respecto al sistema de la cámara, para poder compararlas con las posiciones.
(46) 45. reconstruidas. Dado que esto resulta casi imposible en la práctica, se realizó una simulación en Matlab para medir este error en forma teórica. La simulación considera distintas posiciones y rotaciones para el cintillo en el espacio, calculando la posición 3D de los diodos y proyectándolos en una imagen según el modelo de cámara Pinhole (ecuación 2.1.1). La posición (x,y) de los diodos en la imagen es discretizada, lo cual significa una pérdida de información. A partir de estas proyecciones reconstruye la posición 3D de los diodos para determinar la posición del centro del cintillo y sus ángulos de rotación. Finalmente, se compara los valores reconstruidos con los originales, tomando el valor absoluto de las diferencias. Se considera un cintillo como el de la sección 2.4.2, de 10.5 cm de radio. El cintillo se ubicó en 11 rectángulos a lo largo del eje Z, desde Z = 100 cm a Z = 200 cm cada 10 cm. Cada rectángulo va de X = -30 cm a X = 30 cm y de Y = -20 cm a Y = 20 cm y contiene 35 posiciones posibles, cada 10 cm (7x5). Finalmente, cada posición considera 5 rotaciones posibles de cada ángulo de -20° a +20° cada 10°, dando un total de 125 rotaciones compuestas posibles. El número total de instancias simuladas es 48,125. La tabla 3.1.1 muestra los resultados de la simulación. Se presenta el error promedio y la desviación estándar del error de la posición (en centímetros) y los ángulos (en grados) de todas las instancias de cada rectángulo ubicado a una distancia Z de la cámara. Tabla 3.1-1: Error teórico de las reconstrucciones. Z (cm) 100 110 120 130 140 150 160 170 180 190 200. Pos (cm) 0.28 ± 0.19 0.30 ± 0.22 0.37 ± 0.26 0.44 ± 0.30 0.51 ± 0.35 0.54 ± 0.37 0.68 ± 0.47 0.78 ± 0.54 0.75 ± 0.55 0.93 ± 0.65 0.96 ± 0.72. Pitch (°) 0.36 ± 0.28 0.47 ± 0.33 0.52 ± 0.36 0.56 ± 0.42 0.51 ± 0.39 0.61 ± 0.40 0.79 ± 0.57 0.74 ± 0.48 0.78 ± 0.49 0.83 ± 0.59 0.81 ± 0.62. Roll (°) 0.11 ± 0.09 0.12 ± 0.09 0.15 ± 0.11 0.14 ± 0.11 0.16 ± 0.12 0.17 ± 0.13 0.18 ± 0.14 0.20 ± 0.14 0.20 ± 0.15 0.21 ± 0.15 0.20 ± 0.15. Yaw (°) 0.34 ± 0.22 0.37 ± 0.24 0.43 ± 0.30 0.42 ± 0.30 0.49 ± 0.36 0.54 ± 0.37 0.64 ± 0.41 0.61 ± 0.43 0.66 ± 0.48 0.70 ± 0.49 0.69 ± 0.49.
(47) 46. El error de las reconstrucciones aumenta con la distancia como es de esperar. Sin embargo, el error promedio de la posición se mantiene bajo 1 cm, y el de los ángulos bajo 1° cuando el usuario se encuentra a menos de 2m de la cámara. En la simulación, el error de las reconstrucciones se debe mayormente a la pérdida de información producida al proyectar un punto 3D de coordenadas continuas en una imagen discreta. Aquí radica la importancia de la resolución de la cámara. Al eliminar la discretización de las proyecciones en la simulación, el error de las reconstrucciones converge a cero. En la práctica, hay que sumar al error anterior el producido por imperfecciones en la construcción del cintillo. El cintillo considerado en la simulación es un cintillo “ideal” sin imperfecciones, de modo que esta nos entrega solo una cota inferior del error real.. 3.2 Rapidez La implementación en C# del sistema de HT extendido con eliminación de la inclinación de la cámara activada, corre fluidamente a 100 hz, aprovechando al máximo la tasa de refresco de la cámara IR del Nintendo Wii Remote. Las reconstrucciones 3D del sistema convergen en 5 a 6 iteraciones del método NewtonRaphson cuando el cintillo esta ubicado de 100 a 200 cm de la cámara, utilizando un punto de partida fijo Z0 = (100,102,100) y un ε = 0.1 (en centímetros). Reutilizando las soluciones anteriores como puntos de partida dinámicos, Newton-Raphson converge en 4 a 5 iteraciones para el mismo ε..
(48) 47. 3.3 Robustez El sistema de HT funciona en forma robusta en ausencia de ruido IR. Se considera ruido IR a cualquier luz infrarroja detectada por el Wii Remote que no corresponda a un diodo del cintillo. Las principales fuentes de ruido IR identificadas son: •. La luz del sol: contiene radiación IR que puede alcanzar al Wii Remote directamente a través de ventanas, o reflejándose sobre espejos u otras superficies.. •. Reflexiones de los diodos del cintillo: espejos u otras superficies lisas ubicadas muy cerca del cintillo, pueden reflejar la luz IR de los diodos hacia Wii Remote.. •. Suciedad del lente: puede distorsionar la luz IR recibida por el Wii Remote, dividiendo la luz de un diodo en varias luces, o uniendo varias luces en una sola.. Este ruido IR hace que el sistema de HT se confunda, identificando ruido como diodos del cintillo, lo cual produce reconstrucciones erróneas e inestables en el tiempo. Finalmente, la robustez del sistema de HT extendido está limitada por la certeza del método utilizado por el Módulo de Tracking para encontrar los diodos de referencia. Éste método falla cuando el cintillo presenta rotaciones de pitch muy pronunciadas con respecto al sistema de referencia de la cámara, llevando a detecciones incorrectas del diodo de referencia, y en consecuencia, a reconstrucciones incorrectas del cintillo. Debido a esto, el sistema funciona en forma robusta sólo si el cintillo presenta rotaciones moderadas de pitch (± 30°)..
(49) 48. 4. CONCLUSIONES Se propuso un sistema de Head Tracking en el espectro infrarrojo que utiliza el Nintendo Wii Remote para detectar un cintillo con diodos emisores infrarrojos. El sistema detecta con precisión la posición y la orientación de la cabeza del usuario, presentando además dos características nuevas con respecto a trabajos anteriores: 1. Funciona sin requerir que el usuario mire de frente a la cámara, gracias a que el cintillo utilizado incorpora diodos en todo su perímetro. 2. Detecta y elimina la inclinación de la cámara, gracias a los acelerómetros del Wii Remote, obteniendo la inclinación absoluta de la cabeza con respecto a la Tierra. Otras características destacables del sistema son: •. Bajo costo: El Wii Remote se puede obtener por un precio comparable al de una Webcam normal3, y el cintillo utilizado se puede fabricar por menos de 10 USD.. •. Desempeño: Con sus 1024x768 pixeles de resolución y 100 Hz de refresco, el Wii Remote supera ampliamente a las webcams normales, que típicamente ofrecen 640x480 pixeles a 30 Hz. La resolución de la cámara incide directamente en la precisión de las reconstrucciones. Por otra parte, el sistema de HT funciona a 100 Hz aprovechando al máximo las capacidades del Wii Remote.. •. Simpleza: El enfoque en el espectro IR utilizando el MOT engine del Wii Remote, simplifica altamente la implementación al no requerir mayor preprocesamiento. Además, lo simple de la geometría del cintillo utilizado hace más fácil el análisis geométrico.. •. Modularidad: El sistema propuesto ataca el problema descomponiéndolo en dos módulos: un módulo de tracking encargado de identificar los diodos del cintillo, y un módulo de reconstrucción, encargado de reconstruir su geometría en el. 3. Amazon.com lo vende en 34.96 USD en Agosto de 2009..
(50) 49. espacio. Este esquema es válido para cualquier sistema con un enfoque similar, y permite proponer mejoras fácilmente. •. Usabilidad: La salida del sistema de HT puede ser transmitida a otros programas mediante OSC, permitiendo usarla en otras aplicaciones.. En cuanto a los aspectos negativos del sistema, se considera que este cuenta con dos debilidades principales: 1. La simetría del cintillo: La parte frontal y trasera del cintillo lucen exactamente iguales para el sistema, dado que éste no tiene como diferenciar los diodos de referencia frontal y trasero. Para resolver este problema, se determinó que el usuario deba mirar a la cámara al comenzar el tracking, para contar con una situación inicial conocida. Este requerimiento es desventajoso por dos razones: o Hace que el sistema no sea suficientemente autónomo, ya que depende de un set-up inicial del usuario. o Introduce el riesgo de que se produzca un error permanente en el largo plazo. Por ejemplo, si el cintillo se sale momentáneamente del FoV de la cámara, se puede confundir en adelante el frente con el revés del cintillo. La forma más simple de resolver este problema, es ubicar el diodo de referencia trasero, en la posición totalmente opuesta al delantero, es decir, bajo el plano de los diodos principales. El método para detectar los diodos de referencia sería el mismo, pero se diferenciarían por estar sobre o bajo los diodos principales.. 2. La detección de los diodos de referencia: El Módulo de Tracking encuentra los diodos de referencia buscando un trío de diodos que forme un ángulo lo suficientemente recto. Este criterio funciona bien siempre y cuando el cintillo no presente rotaciones de pitch muy pronunciadas con respecto al sistema de la cámara. En caso contrario, el ángulo más recto puede formarse en otro trío de diodos, llevando a una detección incorrecta del diodo de referencia..
(51) 50. El criterio de los ángulos rectos para detectar los diodos de referencia restringe las rotaciones posibles de pitch que el cintillo puede adoptar para ser detectado correctamente, por lo cual se debe buscar una mejor alternativa..
(52) 51. BIBLIOGRAFIA Hjelmas, E. y Low, B.K. (2001). Face detection: A survey. Computer Vision and Image Understanding, 83(3), 236-274. Murphy-Chutorian, E. y Trivedi, M.M. (2009). Head Pose Estimation in Computer Vision: A Survey. IEEE Transactions on Pattern Analysis and Machine Intelligence, 31(4), 607-626. Porta, M. (2002). Vision-based user interfaces: methods and applications. International Journal of Human-Computer Studies, 57(1), 27-73. Bérard, F. (1999). The perceptual window: head motion as a new input stream. Proceedings of the 7th IFIP conference on Human–Computer Interaction (INTERACT), Edinburgh, Scotland, 238–244. Toyama, K. (1998). "look, ma—no hands!" Hands-Free Cursor Control with Real-Time 3D Face Tracking. Proc. Workshop Perceptual User Interfaces, 49-54. La Cascia, M., Sclaroff, S. y Athitso, V. (2000). Fast, Reliable Head Tracking under Varying Illumination: An Approach Based on Registration of Texture-Mapped 3D Models. IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(4), 322336. Ryu, W. y Kim, D. (2007). Real-time 3D Head Tracking and Head Gesture Recognition. 16th IEEE International Conference on Robot & Human Interactive Communication. August 26-29, Jeju, Korea. 169-172. An, K.H. y Chung, M.J. (2008). 3D Head Tracking and Pose-Robust 2D Texture MapBased Face Recognition using a Simple Ellipsoid Model. 2008 IEEE/RSJ International Conference on Intelligent Robots and Systems. Acropolis Convention Center. Nice, France, Sept. 22-26, 307-312. Morency, L.P., Rahimi, A., Checka, N. y Darrell, T. (2002). Fast Stereo-Based Head Tracking for Interactive Environments. Proc. IEEE Int’l Conf. Automatic Face and Gesture Recognition, 375-380. Yang R. y Zhang, Z. (2002). Model-Based Head Pose Tracking with Stereovision. Proc. IEEE Int’l Conf. Automatic Face and Gesture Recognition, 242-247..
(53) 52. Mohan, A., Duraiswami, R., Zotkin, D.N., DeMenthon, D. y Davis, L.S. (2003). Using Computer Vision to generate Customized Spatial Audio. Proceedings of the 2003 International Conference on Multimedia and Expo (ICME), 3, 57-60. DeMenthon, D. y Davis, L.S. (1995). Model-Based Object Pose in 25 Lines of Code. International Journal of Computer Vision. 15(1-2), 123-141. Lee, J.C. (2008). Hacking the Nintendo Wii Remote. IEEE Pervasive Computing, 7(3), 39-45. Wright, M. y Freed, A. (1997). Open Sound Control: A New Protocol for Communicating with Sound Synthesizers. International Computer Music Conference, Thessaloniki, Greece, 101-104. Hartley, R. y Ziserman, A. (2000). Multiple View Geometry in Computer Vision. Cambridge University Press. WiimoteLib - .NET Managed Library for the Nintendo Wii Remote. Disponible en: http://www.brianpeek.com/blog/pages/wiimotelib.aspx Bespoke - .NET OSC Library. Disponible en: http://www.bespokesoftware.org.
(54) 53. ANEXOS.
(55) 54. ANEXO A: EL CINTILLO Y LOS DIODOS UTILIZADOS Para construir el cintillo se utilizó diodos infrarrojos de 5mm Lumex modelo OED-EL1L2, los cuales operan a una intensidad de 100 mA y emiten en un cono de 60°. La intensidad y el ángulo de emisión de los diodos son de especial importancia, ya que los diodos escogidos deben asegurar que la cámara pueda ver permanentemente 3 de ellos para poder realizar la reconstrucción 3D.. Figura A-1: Angulo de emisión de los diodos utilizados.. Como los diodos del cintillo están dispuestos en círculo, sus haces de emisión apuntan en direcciones divergentes, por lo que para que la cámara pueda ver 3 al mismo tiempo, se requiere que sus conos de emisión coincidan en la posición que se encuentra. Un prototipo inicial del cintillo que utilizaba diodos de menor intensidad y menor ángulo de emisión (30°), falló por que la cámara no conseguía ver permanente los 3 diodos necesarios para la reconstrucción, a ninguna distancia de la cámara..
(56) 55. Para el marco del cintillo se utilizo una tira circular de PVC de 10.8 cm de radio, con 8 perforaciones equidistantes para los 8 diodos principales. Los diodos de referencia se ubicaron en dos extensiones de rectangulares de PVC adheridas al cintillo, como muestra la figura 2.3.2. Para alimentar el cintillo se creo un circuito en serie con los 10 diodos, utilizando un transformador de 12V (cada diodo requiere 1.2 V)..
(57) 56. ANEXO B: CALIBRACION DE LOS ACELERÓMETROS El objetivo de este proceso es estimar el error de fábrica de los acelerómetros del Nintendo Wii Remote. Para esto se realizan 3 ensayos, en que se ubica el dispositivo descansando sobre cada uno de sus costados, sobre una superficie horizontal. El valor esperado de las aceleraciones registradas en cada uno los ensayos es, 1 en el eje normal a la superficie, y 0 en los otros dos. Midiendo los errores de cada ensayo, se puede estimar el error de fábrica de cada acelerómetro como el promedio de los errores de los 3 ensayos: • • •. r Ensayo 1: Dispositivo descansando horizontalmente (eje Z paralelo a g ) r Ensayo 2: Dispositivo descansando verticalmente (eje Y paralelo a g ) r Ensayo 3: Dispositivo descansando lateralmente (eje X paralelo a g ). Denotando aij la aceleración registrada por el acelerómetro i en el ensayo j y E(aij) el valor esperado de dicha aceleración, se tiene que los valores de los valores esperados son: E (a x1 ) = 0. E (a y1 ) = 0. E (a z1 ) = 1. E (a x 2 ) = 0. E (a y 2 ) = 1 E (a z 2 ) = 0. E (a x 3 ) = 1. E (a y 3 ) = 0 E (a z 3 ) = 0. (B.1). De esta manera los errores de fábrica de los acelerómetros pueden ser estimados como el promedio de las desviaciones del valor esperado en cada ensayo:. εx =. 1 3 ∑ (E (a xi ) − a xi ) 3 i =1. εy =. 1 3 ∑ (E (a yi ) − a yi ) 3 i =1. εz =. 1 3 ∑ (E (a zi ) − a zi ) 3 i =1. (B.2).
Resolución de un problema inverso para la actividad eléctrica del corazón usando el modelo de Beeler Reuter
Se ha implementado el modelo de Beeler-Reuter para, mediante la resolución de un problema inverso, obtener las condiciones iniciales óptimas de los parámetros que influyen en un
Circuitos Electrónicos: Ejercicios y Aplicaciones
Estudio de la consistencia y la estabilidad en refrigeración del almidón gelatinizado de camote (Ipomoea batatas L ), utilizado como espesante en mezcla con otros ingredientes
Se evaluaron los parámetros de consistencia TA-XT2i, consistencia Bostwick y el porcentaje de sinéresis del almidón gelatinizado de camote solo y en mezcla con otros ingredientes panela
Modelación, simulación y control de aerogeneradores con generador de inducción doblemente alimentado utilizando Matlab
Figura 4.5 Respuesta del aerogenerador con DFIG: Velocidad del viento, ángulo de inclinación, velocidad del rotor, potencia activa, potencia reactiva, voltaje del estator, voltaje del
Elaboración de un programa de mantenimiento preventivo para el equipo caminero del Ilustre Municipio del Cantón Pedro Moncayo
Limpieza de filtros y depurador de aire Aplicar grasa en cojinetes del volquete Lavado, engrasado y pulverizado del vehículo Cambio de aceite y filtro del motor Cambiar filtros de
Estudio de la soldabilidad del acero inoxidable martensítico AISI 420
En el diagrama de 13% Cr, esa es la base para aceros inoxidables ferríticos de bajo cromo como el tipo AISI 409.A contenidos de carbono sobre el 0,1%, la austenita se formará a
Elaboración del plan de Gestión de Problemas y Cambios para la Empresa Eléctrica Quito basado en ITIL
Fuente: Documento de Registro de Incidentes de TI de la EEQ, Diciembre 2012 Elaborado por: Jimmy Javier Palma Tigasi y Mayra Alejandra Pullupaxi Ataballo Figura 27: Tiempo empleado en
Propuesta de un sistema de gestión de la calidad basado en la norma ISO 9001:2000 para la Fundación Planeta Azul
Procedimiento Soporte a Proyectos Procedimiento Acción Correctiva y Preventiva Procedimiento Auditorías Internas Procedimiento Compras Procedimiento Control de los Documentos y
Propuesta de mejoramiento de los procesos operativos en la entrega de servicio de la compañía ASTAP limitada de la ciudad de Quito
En conclusión al ingresar en un mejoramiento de proceso en una empresa en el caso de este proyecto, una empresa de servicios, debe gestionarse programas de mejora a los procesos y sus
Elaboración de un mapa de niveles de ruido del campus politécnico JOSÉ RUBÉN ORELLANA RICAURTE
Esto es debido al ruido emanado por las siguientes fuentes: estudiantes en clase, pasillo cercano, ruido externo del estadio y el parqueadero de Petróleos que se encuentra cerca a esta
Programa para el desarrollo de la competencia en comunicación lingüística
En este momento de su desarrollo, resulta crucial para el éxito del PLC la elección de líneas y temas de trabajo, así como la elaboración y recopilación de propuestas específicas de
La importancia del juego dramático en Educación Infantil Dramatización como recurso didáctico
Temporalización: Miércoles 2 Agrupamiento: Todo el grupo Espacio: sala de psicomotricidad Materiales: Ninguno Descripción de la actividad: Esta actividad consiste en la imaginación de
Las lógicas personales en las estrategias del juego motor reglado
los roles, pero sabe que eso en el aula de Educación Física no está del todo bien entonces.. intenta justificarse diciendo que lo ha hecho sin
Automated gesture tracking in head fixed mice
In order to benchmark the Flow-Loc algorithm we extracted ground truth data from frames either manually whiskers and hindlimb position, Section 2.5.1 or by relying on clear and easily

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 

Resolución 
 resolución