PFC Leandro Pavon

Embed Size (px)

Citation preview

Proyecto n de carrera Virtual Blackboard: colour and human gestures motion tracking.

Leandro Pavn Serrano o 76043575D

Director: Pedro M. N nez Trujillo u Cceres, Septiembre de 2011 a

AbstractThis work belongs to the eld of Computed Vision. It describes how two software components are developed by using dierent tracking systems and adapting it to interactive applications. One of that is a virtual blackboard using Hough transform for the circle detection and Kalman Filter for the prediction task. The capabilities of using a distance lter implemented with Kinect also is explained in a resumed way. The second application uses ARToolKit to tracking and OSG to set up a virtual world becoming an Augmented Reality game as a proposal for rehabilitation exercises.

ResumenEl presente Proyecto Fin de Carrera consiste en el desarrollo de dos aplicaciones informticas que hacen uso de los mtodos habituales de tracking de objetos en a e imgenes de v a deo y pertenece al campo de la visin por computador. o El primero de los programas que se han llevado a cabo ha sido un pizarra virtual, donde el usuario puede pintar simplemente moviendo un c rculo rojo delante de una cmara web. Para realizar el seguimiento del objeto de color se ha utilizado la a transformada de Hough en la deteccin y la tcnica del Filtro de Kalman para la o e prediccin; adems se han realizado algunas pruebas de procesamiento de imagen o a adicionales como el cambio de espacios de color, binarizacin, etc. Tambin se hace o e un sencillo resumen sobre el funcionamiento del dispositivo Kinect, y se ha elaborado un ltro por distancia que hace uso de este dispositivo con la intencin de que sirva o de ayuda en el seguimiento del puntero de la pizarra virtual. La segunda aplicacin que se ha escrito usa ARToolKit para el seguimiento de o marcas y OSG para dar forma a un mundo tridimensional que se superpone sobre la imagen capturada por una cmara, creando de este modo un juego de realidad a aumentada. Dicho juego tiene el propsito de facilitar la ejecucin de ejercicios de o o rehabilitacin por pacientes, con el n de evitar los abandonos de dichos ejercicios, o especialmente en nios. n La estructura del cdigo de la aplicacin sigue el modelo del software desarrolo o lado en el Laboratorio de Robtica de la Universidad de Extremadura (UNEX) o (RoboLab) de la Escuela Politcnica de Cceres (EPCC), de forma que es compatie a ble con el resto de componentes de RoboComp1 . De este modo el cdigo es reutilizo able, principalmente para funcionar en robots orientados a la educacin o la sanidad. o

DescriptoresRealidad aumentada, Kinect, tratamiento de imagen, interaccin hombre-mquina, o a tracking de color, imagen 3D

1

Software para robots orientado a componentes desarrollado en el RoboLab.

iii

Indice general1. Introduccin o 1.1. Motivaciones . 1.2. Objetivos . . . 1.3. Organizacin de o 1.4. Estado del arte . . . . . . . . . . . . . . la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 3 7 7 9 17 27 31 31 33 37 40 46

2. Diseo n 2.1. Planicacin del proyecto . . o 2.2. Enfoque de cada aplicacin . . o 2.3. Entorno de desarrollo . . . . . 2.4. Mtodos comunes usados para e

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tracking de objetos

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

3. Desarrollo 3.1. Primeros pasos desarrollando un componente 3.2. Gestin y Calibracin del sensor Kinect . . . o o 3.3. Desarrollo de Camimic . . . . . . . . . . . . 3.4. Desarrollo de ARMole . . . . . . . . . . . . 3.5. Enfoque probabil stico para ltro de color .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

4. Conclusiones 49 4.1. Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Soluciones Aportadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.3. Propuesta de trabajos futuros . . . . . . . . . . . . . . . . . . . . . . 52 5. Valoracin personal o 5.1. Evaluacin de objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . o 5.2. Evaluacin de complejidad . . . . . . . . . . . . . . . . . . . . . . . . o 5.3. Evaluacin del tutor . . . . . . . . . . . . . . . . . . . . . . . . . . . o Bibliograf (Libros y art a culos) Bibliograf (Otras fuentes) a A. Glosario de Trminos y Acrnimos e o B. Licencia C. Agradecimientos 53 53 53 53 55 57 59 63 69

v

Indice de guras1.1. Una aplicacin de AR-REHAB, donde el paciente debe llevar el objeto o a la posicin que le indica la echa. . . . . . . . . . . . . . . . . . . . o 1.2. Virtual Harp usado por pacientes. Se aprecia el uso de HDM, Phantom Omni y la marca de Augmented Reality Tool Kit (ARToolKit). . 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. Diagrama de Gantt con la planicacin inicial del PFC. . . . . . . . o Diagrama de Gantt que muestra el desarrollo real del PFC. . . . . . Diagrama de ujo pensado para Camimic. . . . . . . . . . . . . . . Borrador de la interfaz de Camimic. . . . . . . . . . . . . . . . . . . Ejercicio de rehabilitacin de hombro. . . . . . . . . . . . . . . . . . o Ejercicio de rehabilitacin de codo. . . . . . . . . . . . . . . . . . . o Juego Whack-a-mole que consiste en golpear a los topos. . . . . . . Borrador de la interfaz de ARMole. . . . . . . . . . . . . . . . . . . Estructura de directorios y grco representativo de un componente a de RoboComp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.10. Fotograf del dispositivo Kinect. . . . . . . . . . . . . . . . . . . . a 2.11. Marca Hiro, t picamente usada por ARToolKit. . . . . . . . . . . . 2.12. Imagen que obtenemos si OSGArt est correctamente instalado. . . a 2.13. Tracking de cara con OpenTLD. . . . . . . . . . . . . . . . . . . . . 3.1. Esquema que muestra las dos clases de distancias. . . . . . . . 3.2. Los mtodos de obtener datos desde KinectComp. . . . . . . . e 3.3. Sombra lateral en Kinect. . . . . . . . . . . . . . . . . . . . . 3.4. Sombra de objetos en Kinect. . . . . . . . . . . . . . . . . . . 3.5. Capturas de imagen mediante la calibracin de kinect. . . . . o 3.6. Efecto de la calibracin de kinect. . . . . . . . . . . . . . . . . o 3.7. Camimic ltrando por distancia y usando OpenCV. . . . . . . 3.8. Pizarra virtual usando el Filtro de Kalman. . . . . . . . . . . 3.9. Puebra de la clase Osgart modicada. . . . . . . . . . . . . . . 3.10. Jerarqu de la escena 3D de ARMole . . . . . . . . . . . . . . a 3.11. Comprobando la distancia real entre marcas. . . . . . . . . . . 3.12. Mapa de probabilidad para objetos rojos. . . . . . . . . . . . . 3.13. Distribucin de probabilidad dibujada con GNUPlot. . . . . . o 3.14. Mapa de probabilidad con diezmado para aumentar velocidad. 4.1. La misma imagen en orden comn (RGB) y en el orden u (BGR). . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Escribiendo UNEX en la pizarra virtual. . . . . . . . . 4.3. Jugando con ARMole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 8 10 11 13 14 15 15 16 20 23 24 26 29 33 34 34 35 36 36 38 40 42 43 45 46 47 48

de OpenCV . . . . . . . . 49 . . . . . . . . 50 . . . . . . . . 51

vii

PROYECTO FIN DE CARRERA

1. INTRODUCCION1.1 MotivacionesEl principal inters en realizar este proyecto, es la oportunidad de participar en e la evolucin de nuevas tecnolog desde un punto de vista tcnico, el cual pone o as e a prueba mis capacidades como Ingeniero Tcnico de Telecomunicacin. Adems e o a el campo de la visin por computador y espec o camente la Realidad Aumentada (RA) est en continua expansin, de forma que este Proyecto Fin de Carrera (PFC) a o supone una iniciacin en un rea con futuro, tanto en su vertiente investigadora o a como laboral. Por otro lado, las asignaturas relacionadas con el tratamiento de la imagen o la prediccin de seales de audio que he cursado durante la carrera, me o n han resultado ms atractivas, y han sido inuyentes para elegir desarrollar esta a herramienta. Considero que la consecucin de un buen proyecto es la meta de los o anteriores aos de estudio, y en ese proceso, se necesita desarrollar una actitud n y responsabilidad de trabajo adecuadas, buenas costumbres de programacin, y o capacidad de trabajar en equipo; ya que esta herramienta es un componente que puede ser utilizado en el futuro para proyectos de otros estudiantes. Otro aspecto a destacar de la eleccin de este proyecto frente a otros, es el carcter prctico y util o a a del mismo, de forma que el tiempo y esfuerzo invertido en su desarrollo se aproveche por los dems; es por esto que todo el cdigo se publica bajo una licencia de libre a o distribucin. o

1.2 ObjetivosMs all de formar parte del plan de estudios de la Ingenier Tcnica de Telea a a e comunicacin (ITT), este proyecto tiene como meta participar en la generacin de o o tecnolog de la imagen, que posteriormente puedan ser utilizadas en benecio de as la sociedad. De forma global se persigue la creacin de un componente que se integre en o el framework Software para robots orientado a componentes desarrollado en el RoboLab (RoboComp), de forma que futuros componentes se puedan conectar a ste del mismo modo que dicho componente se conecta al componente que gese tiona el dispositivo Kinect R (Kinect) o a una cmara USB. La nalidad de dicho a componente es la deteccin y el tracking de objetos mediante sus caracter o sticas de color, forma, y posicin en el espacio. Tras esto, el componente debe ser capaz o de reconocer gestos o determinados movimientos de forma que se cree la interaccin hombre-mquina. Para comprobar su correcto funcionamiento y su potencial, o a se pretende crear una aplicacin sencilla de dibujo como lo es una pizarra virtual, o adems se ha desarrollado otra aplicacin ms compleja usada para ejercicios de a o a

1

1. INTRODUCCION

rehabilitacin de codo u hombro. o Los tres objetivos principales del proyecto son: Investigar los diferentes mtodos de tracking analizando las posibilidades para e su uso en una aplicacin sencilla. o Implementar un algoritmo que use uno de los sistemas estudiados en el punto anterior. Desarrollar la interaccin entre el usuario y el programa. o A continuacin se enumera una serie de objetivos secundarios, los cuales se neceo sitan cumplir para alcanzar los primeros o son paralelos a stos: e Programacin de un componente integrado en RoboComp. o Uso de herramientas de programacin en entornos GNU/Linux; como KDeo velop, cmake, subversion, etc. Desarrollo de clases dentro de la aplicacin, de forma que el cdigo se pueda o o reutilizar con ms facilidad. a Instalacin de varias librer de forma manual y su uso mediante la Applicao as tion Programming Interface (API) de cada una de ellas: ARToolKit, OpenCV, Freenect, OSG, OSGArt, OSGAudio, etc. Uso, calibracin y comprensin del funcionamiento general de Kinect. o o Desarrollo de interfaces grcas de usuario con las librer QT. a asA Aprender L TEXpara escribir la memoria del proyecto.

1.3 Organizacin de la memoria oEsta memoria est dividida en cinco cap a tulos principales y tres anexos, adems a de la bibliograf a. El primer cap tulo sita al lector sobre qu trata este proyecto, comenzando desde u e el campo general de la visin por computador, hasta las aplicaciones concretas como o la pizarra virtual o la aplicacin para ejercicios de rehabilitacin. Adems se nombran o o a aplicaciones similares y se hace especial mencin a las diferencias con este trabajo. o Tambin se plantean los objetivos principales y secundarios as como la motivacin e o que ha llevado al autor a dedicarse a este rea. a En el segundo cap tulo se plantea el diseo y el enfoque de la aplicacin, y la n o programacin estimada en un primer momento para cumplir con los objetivos exo puestos en el cap tulo anterior. Aqu tambin se explica con ms detalle la magnitud e a del problema que plantea este proyecto y el esquema temporal de todo el trabajo

2

PROYECTO FIN DE CARRERA

realizado. Adems se hace un repaso de la instalacin de las librer utilizadas y a o as del entorno de trabajo. El cap tulo 3 muestra la solucin aportada al problema descrito en el cap o tulo 2, cmo se ha desarrollado y cmo funciona cada aplicacin. Se explican con detalle o o o las clases creadas y algunas de las funciones ms importantes que se han utilizado, a bien propias o de la API de alguna librer En el caso correspondiente para cada a. librer se trata su integracin en el programa desarrollado. a o En el cuarto cap tulo, se explican los problemas que han ido surgiendo, as como los l mites de la aplicacin desarrollada y las posibilidades de mejora en un trabajo o futuro. El ultimo y quinto cap tulo es una valoracin personal donde se comenta todo lo o aprendido, y se evalan los objetivos que nos marcamos al inicio. u La bibliograf se ha dividido en dos partes: Libros y Art a culos, y Otras fuentes. El motivo es que los libros y art culos son fciles de encontrar y se pueden tomar a como referencias ms contrastables, mientras que en otras fuentes consultadas como a documentacin en internet est sujeta a cambios, por lo que dicha documentacin o a o puede haber cambiado de direccin o actualizado el propio contenido. Adems, en o a Otras fuentes se encuentran las direcciones desde las cuales se puede acceder a todo el cdigo al que se hace mencin en esta memoria. o o Finalmente se aaden tres anexos: un glosario de trminos y acrnimos, la licencia n e o bajo la cual se publica todo el cdigo desarrollado y una lista de agradecimiento. o El glosario de trminos y acrnimos es necesario debido a que en este documento se e o usan con frecuencia varias siglas, y pretende ayudar al lector a seguir el texto sin problemas. Gracias a que la mayor parte del software usado se distribuye bajo licencias libres, el cdigo de este proyecto se publica sin problemas bajo una licencia del o tipo GNU Public License (GPL). El motivo de aadir un anexo de agradecimientos n se debe a la ayuda recibida de muchas personas que merecen ser mencionadas. A La memoria se ha realizado en L TEX.

1.4 Estado del arteCon el n de aclarar qu aporta este proyecto al campo de la visin por computae o dor, se repasan los ultimos avances tecnolgicos relacionados y se exponen diferentes o proyectos similares a ste. e

1.4.1 Visin por computador oLa visin por computador es un campo de investigacin relativamente nuevo y en o o constante expansin [16]. La dicultad de procesar los grandes lotes de informacin o o de las imgenes retras su despegue hasta hace tan solo unos cuarenta aos. Esta a o n tecnolog cubre una amplia gama de problemas cuyas soluciones suelen relacionarse a con otras disciplinas como el procesamiento de imgenes, la inteligencia articial, a visin robtica, etc. Es por este motivo que no hay un estndar denido de los l o o a mites entre visin por computador y dichas disciplinas. Adems no existe una formulacin o a o estndar de cmo la visin por computador deber resolver los distintos problemas a o o a que plantea. Muchas de las soluciones a problemas concretos y bien denidos se

3

1. INTRODUCCION

encuentran en fase de investigacin, pero cada vez existen ms mtodos que tienen o a e posibles usos comerciales, y esto a contribuido a popularizar la visin por computao dor y sus aplicaciones. De los mltiples campos en los que existen aplicaciones, se comentan algunos en u la siguiente lista: Medicina: Actualmente las aplicaciones mdicas basadas en visin por come o putador se han convertido en herramientas imprescindibles para la diagnosis de enfermedades, ya que permiten destacar las zonas importantes en las imgenes a proporcionadas por sensores y escneres de distintos tipos (ecograf encefaloa a, grama, etc.). Educacin: Existen diversas aplicaciones en este area con el n de convertir la o enseanza en ms atractiva y dinmica. Un ejemplo ser el uso de libros de n a a a realidad aumentada donde podemos interactuar con modelos 3-D. Entretenimiento: Si dentro del entretenimiento contramos slo los juegos ya a o tendr amos multitud de aplicaciones desarrolladas en base a visin por como putador, pero adems existen aplicaciones que van ms all de los videojuegos, a a a como podr ser el uso de reconocimiento de edicios emblemticos para obtena a er informacin desde un punto de vista tur o stico. Robtica: La visin por computador est estrechamente relacionada con los o o a robots autnomos y un ejemplo de uso ser la reconstruccin de escena o el o a o rastreo de caminos. Accesibilidad: De forma ms pionera, se estn desarrollado aplicaciones que a a suponen una ayuda para personas con discapacidad. Por ejemplo una persona ciega puede aprovechar la visin por computador de forma que una aplicacin o o puede traducir obstculos en seales acsticas. a n u

1.4.2 Tracking y Pizarra VirtualLa mayor de los sistemas de tracking suelen incluir un ejemplo sencillo donde a se pinta en la pantalla siguiendo la trayectoria del objeto a seguir, sin embargo la importancia en estos casos es el desarrollo del tracking y el reconocimiento de gestos o trayectoria. El enfoque de este proyecto es similar, ya que le da ms importancia al a estudio de los mtodos usados para seguimiento de objetos que a la propia aplicacin e o nal como pizarra virtual.

1.4.3 Realidad AumentadaLa RA se encarga del estudio de tcnicas que permiten la integracin en tieme o po real entre el mundo real (normalmente a partir de imgenes capturadas u otra a informacin como geolocalizacin) y el mundo virtual (que normalmente aade ino o n formacin digital, clculos o modelos 3-D). La RA se menciona por primera vez en o a 1990, pero no es hasta 1999 cuando el concepto est ms desarrollado y se puede a a

4

PROYECTO FIN DE CARRERA

Figura 1.1.: Una aplicacin de AR-REHAB, donde el paciente debe llevar el objeto a la posio cin que le indica la echa. o

llevar a la prctica fcilmente gracias a la librer ARToolKit [3]. Desde entonces a a a cada vez surgen nuevas aplicaciones que hacen uso de esta librer u otras similares, a donde la importancia es claramente la interaccin. o Aplicacin para ejercicios de rehabilitacin o o Adems de intentar desarrollar la pizarra virtual, en este proyecto se ha creado a una aplicacin ms avanzada y prctica enfocada al uso de la RA para ejercicios de o a a rehabilitacin. A continuacin se exponen otros trabajos que tambin hacen el uso o o e de la RA aplicada a rehabilitacin de personas. o AR-REHAB es un framework para desarrollar aplicaciones que usen RA para ejercicios de rehabilitacin [2], como se muestra en la Figura 1.1. La idea es o que los pacientes practiquen los ejercicios con un objeto al cual se le aplica un tracking que determina si el ejercicio se est haciendo de forma correcta a o no. Incluye dos aplicaciones orientadas a pacientes con s ndrome poststroke que hagan ejercicios de rehabilitacin de brazo o mano, adems de un sistema o a de perles para los pacientes. Para el tracking utiliza la librer ARToolKit, a para crear el mundo 3-D y controlar las colisiones entre objetos usa CHAI 3D y ODE respectivamente. Virtual Harp es un programa especializado en pacientes con discapacidades f sicas en manos y dedos [15], y usa la RA para permitirles tocar un arpa virtual, de forma que los ejercicios de rehabilitacin consisten en tocar canciones o conocidas por el paciente. Usa un Head Mounted Device (HDM) para mostrar al paciente la imagen nal, mientras que usa un dispositivo del tacto (Phantom Omni) que permite el tracking en el espacio 3-D, pero usa ARToolKit para establecer una referencia. En la Figura 1.2 se ve en la pantalla del ordenador la imagen que el paciente ve a travs del HDM. e

5

1. INTRODUCCION

Figura 1.2.: Virtual Harp usado por pacientes. Se aprecia el uso de HDM, Phantom Omni y la marca de ARToolKit.

6

PROYECTO FIN DE CARRERA

2. DISENOEste cap tulo pretende explicar todo el trabajo realizado en este PFC desde un punto de vista general, explicando las herramientas que se han usado, las decisiones tomadas, y las distintas etapas a lo largo del tiempo de ejecucin. o

2.1 Planicacin del proyecto oSe empieza a trabajar en este PFC en Febrero de 2011 estableciendo los objetivos iniciales mencionados en la Seccin 1.2 de esta memoria, as como las etapas neceo sarias para cumplir dichos objetivos, las cuales se pueden apreciar en la Figura 2.1 de la pgina 8 . a Sin embargo esa planicacin no ha podido cumplirse completamente, princio palmente los tiempos, pero tambin las etapas desde la A2.10 a la A4.5 han sido e suprimidas o sustituidas por otras. Son varios los motivos que han llevado a que se hagan estos cambios, por un lado est el hecho de que los conocimientos previos a en cuanto a programacin orientada a objetos era nula, pero adems el uso de hero a ramientas nunca antes utilizadas, y el desconocimiento de problemas para conseguir un tracking, han contribuido a que la estimacin preliminar del proyecto fuera muy o complicada de cumplir en tiempo. Por su parte los cambios en las etapas, se deben a una propuesta en mitad del desarrollo del PFC en la que se plantea crear un programa para ejercicios de rehabilitacin en lugar de la pizarra virtual, debido a que o este nuevo programa tendr una aplicacin inmediata gracias a la participacin de a o o RoboLab en el proyecto ACROSS. Adems se podr aadir una etapa ms, que cona a n a siste en una estancia durante los meses de Julio, Agosto y Septiembre en el Instituto de Sistemas e Robtica (ISR) de la Universidad de Coimbra durante la cual se ha o trabajado en un programa que plantea el tracking como un problema probabil stico y hace el uso de la librer Professional Bayes Toolkit (ProBT). a De esta forma el PFC planicado para realizarse en cinco meses, se ha convertido en un proyecto de una duracin de ocho meses, cuyo resultado es la aproximacin o o al desarrollo de una pizarra virtual usando un dispositivo Kinect, el desarrollo de un programa de RA orientado a ejercicios de rehabilitacin, y la mejora de un o programa de tracking basado en enfoque probabil stico. Las etapas que realmente se han llevado a cabo se pueden observar en el diagrama de Gantt mostrado en la pgina 10, algunas de ellas como la documentacin se han compactado para dar a o cabida a otras tareas que podr ser ms interesante describir como es el caso de a a la etapa nombrada como A2.1.10., el tracking por color. Cabe mencionar que una mayor longitud no implica exactamente una mayor dedicacin o profundizacin en o o un determinado area, ya que lo que representa el diagrama es el inicio y n de cada una de las tareas realizadas, en ocasiones algn trabajo se ha prolongado en u el tiempo debido a la simultaneidad con otras etapas, otras veces se debe a que

7

2. DISENO

Figura 2.1.: Diagrama de Gantt con la planicacin inicial del PFC. o

8

PROYECTO FIN DE CARRERA

debido a problemas no se avanza hasta que los mismos se solucionan y otras porque efectivamente tienen ms complejidad y necesitan tiempo. a El nombre que se le ha dado a la pizarra virtual es Camimic, que surge de unir las palabras cam (el apcope en ingls de cmara) y mimic (m o e a mica en ingls), en e referencia a que el usuario interacta con el programa haciendo gestos delante de u una cmara. La aplicacin para ejercicios de rehabilitacin se ha nombrado como a o o ARMole, que hace referencia a la RA por sus siglas en ingls y a mole (topo en ingls) e e por el juego whack-a-mole que llevamos a la realidad aumentada y enmascara los ejercicios de rehabilitacin. Por tanto, esta memoria se referir con frecuencia a estas o a aplicaciones por sus nombres Camimic y ARMole a partir de las siguientes l neas.

2.2 Enfoque de cada aplicacin o2.2.1 CamimicEl sentido inicial de este programa no es otro que ser ejemplo de aplicacin nal de o tcnicas de la imagen como el tracking de objetos; y que la misma pueda ser usada e por cualquier usuario, sin conocimientos especiales en programacin. Comparando o los grcos 2.1 y 2.2, podemos observar como se subestim la dicultad de crear la a o parte del tracking de objetos, en comparacin con otras tareas como crear un como ponente en RoboComp o la interaccin con la Graphic User Interface (GUI). Esto o se debe al desconocimiento previo del autor de esta memoria sobre los problemas habituales en estos sistemas, los cuales se abordan entre los cap tulos 3.3 y 4 con ms detalle. En cambio, este apartado se centra en el punto de partida, y la idea a general de lo que se pretend hacer. a Las ideas propuestas para Camimic ser las siguientes: an Debe ser intuitivo, sin necesidad de conocimientos en el area por parte del usuario, y con ejecucin en tiempo real (con frecuencia mayor a 12 imgenes o a por segundo para percibir movimiento por el ojo humano). Uso de dedales de colores que faciliten el tracking de los dedos a modo de puntero, para permitir la interaccin, de forma que se pueda prescindir del uso o del teclado o el ratn. o Los requisitos de hardware para ejecutar el programa ser de bajo coste, an descartando dispositivos como lser o cmaras estreo. Una simple cmara a a e a USB cumple perfectamente estas condiciones, pero el uso del dispositivo Kinect, siendo un producto con un precio a la baja, abre las posibilidades al tracking en tres dimensiones y a usar un ltro por distancia que facilita la deteccin o del objeto coloreado. En la Figura 2.3 podemos observar el diagrama de ujo de Camimic. La aplicacin o entra en un bucle en el que se realiza todo el proceso de captura, tracking, interaccin o y dibujo hasta que el usuario pulse una determinada tecla para cerrar el programa. La forma en la que se pretende llevar a cabo las distintas actividades del diagrama se explican a continuacin: o

9

2. DISENO

Figura 2.2.: Diagrama de Gantt que muestra el desarrollo real del PFC.

10

PROYECTO FIN DE CARRERA

Figura 2.3.: Diagrama de ujo pensado para Camimic.

11

2. DISENO

Captura de v deo: Con la idea de aprovechar las ventajas que aporta RoboComp, la aplicacin se conectar a KinectComp, de forma que este componente se eno a carga de tomar las imgenes del sensor Kinect. a Deteccin del cursor 3-D: La intencin es aplicar un ltro para aislar el color a o o seguir, y otro ltro por distancia que tendr un umbral jo para mientras no a se detectara el cursor. El cursor es detectado cuando el objeto pasa de manera positiva ambos ltros. Deteccin de posicin: Las coordenadas del centro de masas del objeto que o o pase los ltros del detector ser la posicin del cursor 3-D. a o Deteccin de pulsar (click ) y soltar (drop): Se plantea esta deteccin ms o o a compleja con el uso de dos dedales de colores inversos, de esta forma se puede crear otra imagen con los colores inversos de cada frame y hacer pasar dicha imagen por los mismos ltros que a la original. Posteriormente se detecta la situacin click o drop del cursor en base a un umbral en la distancia entre la o posicin de cada objeto detectado. o Tracking: En principio no hay una opcin favorita, y la idea es probar con o alguna de las opciones que se describen a partir de la pgina 27 en esta memoa ria. Seleccin de opciones: La propuesta para realizar la seleccin de opciones es o o usar las esquinas de la imagen como botones que van cambiando su funcin o en base a niveles de navegacin. o Dibujo de guras: La solucin para llevar a cabo esta actividad como se espera, o es haciendo uso de la deteccin de click o drop del cursor, coloreando los p o xeles de la imagen con las mismas coordenadas que la posicin del cursor en estado o click, o no dibujar mientras ste se encuentre en drop. e Para tareas como crear de los ltros de color, pintar p xeles concretos, o invertir los colores de la imagen se puede hacer uso de las librer OpenCV, de las que se da as una visin general en la pgina 21, y adems se explica como instalar este software. o a a Para la GUI se usarn las librer Biblioteca de software QT (QT) y el programa a as QTDesigner (QTDesigner), aunque antes de aprender el uso de estas herramientas se realiza un primer boceto que se puede apreciar en la Figura 2.4.

2.2.2 ARMoleLa idea general que se pretende llevar a cabo con este programa es crear un juego de realidad aumentada para pacientes que tengan la necesidad de realizar ejercicios de rehabilitacin. o Denicin del problema o El problema al que se intenta dar solucin es el de reducir el nmero de abandonos o u de los ejercicios de rehabilitacin por parte de los pacientes, ya que normalmente los o siguientes motivos conducen a ello:

12

PROYECTO FIN DE CARRERA

Figura 2.4.: Borrador de la interfaz de Camimic.

Los progresos en los resultados de los ejercicios en ocasiones suelen ser lentos y la necesidad de seguir con los ejercicios se prolonga en el tiempo en esos casos. Cada sesin tambin puede llegar a necesitar mucho tiempo y adems ser o e a repetitiva, lo que consigue que al paciente le resulte aburrido. A veces ciertos ejercicios causan molestias e incluso dolor a los pacientes. El unico de los puntos anteriores que podr mejorar un programa informtico ser a a a el hacer los ejercicios ms divertidos, por ejemplo convirtiendo la obligacin de a o realizar dichos ejercicios en un videojuego, especialmente en nios. Otros trabajos n que tratan un problema similar se mencionan en las pginas 5 y 5. Otro de los a problemas, abordado de manera general en RoboLab, es que cuando el paciente lleva un cierto periodo realizando los ejercicios, el terapeuta podr dedicar su tiempo a a otros pacientes que precisen mayor atencin, sin embargo los primeros necesitan o un control para asegurarse de que se hacen los ejercicios correctos aunque stos e sean repetitivos. La solucin ideal que se trabaja en la EPCC es que gracias a la o robtica, los pacientes puedan hacer dichos ejercicios bajo el control de un robot o en casa del paciente con el cual el mdico pueda comunicarse de forma remota, y e corregir los fallos en los ejercicios de rehabilitacin. A largo plazo ARMole ser uno o a de los programas ejecutados por dicho robot, por lo tanto es necesario que nuestro programa no sea r gido y se pueda adaptar para corregir los ejercicios que fueran necesarios; adems de estar preparado para usarse por alguien sin conocimientos a especiales en informtica o programacin, de forma que deber tener una interfaz a o a grca y ser lo ms intuitivo posible. Estas ideas se plantean inicialmente para dos a a ejercicios de rehabilitacin, hombro y codo, de los que podemos ver la respectiva o fotograf en las guras 2.5 y 2.6, tomadas de un v a deo en el que se practican

13

2. DISENO

Figura 2.5.: Ejercicio de rehabilitacin de hombro. o

ambos ejercicios. Se ha coloreado una aproximacin de la trayectoria descrita para o cada ejercicio de forma que el lector pueda intuir los movimientos. Sintetizando lo anteriormente expuesto, debemos encontrar un videojuego de manera que los jugadores practiquen los ejercicios de rehabilitacin de codo u hombro de las forma o ms natural y divertida posible, y desarrollar dicho juego con una GUI que permita a una posible conguracin por parte del mdico, y todo ello integrado en RoboComp o e para que en un futuro se pueda ejecutar en el robot URSUS (URSUS). Solucin propuesta o La idea propuesta es desarrollar un juego al estilo del popular Whack-a-mole con caracter sticas de realidad aumentada y una GUI que permita una conguracin o dinmica de la aplicacin. En la Figura 2.7 podemos ver una versin comercial del a o o juego Whack-a-mole en la realidad. El juego consiste en golpear con el martillo en la cabeza de los topos (moles en ingls) cuando sta se ilumine y de esta forma obtener e e puntos. Las cabezas de los topos se van iluminando aleatoriamente y diferentes combinaciones van complicndose segn se avanzan los niveles. Se elige este juego a u como referencia para llevarlo a la RA debido a que la manera natural de jugar es moviendo el brazo, sin embargo habr que tener ciertas consideraciones a la a hora de aplicarlo directamente para su uso en pacientes que practiquen ejercicios de rehabilitacin. Dichas consideraciones ser las siguientes: o an La forma natural del juego de golpear a los topos incita a hacer movimientos

14

PROYECTO FIN DE CARRERA

Figura 2.6.: Ejercicio de rehabilitacin de codo. o

Figura 2.7.: Juego Whack-a-mole que consiste en golpear a los topos.

15

2. DISENO

Figura 2.8.: Borrador de la interfaz de ARMole.

bruscos y rpidos, lo cual puede ser muy peligroso dependiendo del problema a f sico de cada paciente, ser necesario aprender a jugar. a

Normalmente en los juegos se consiguen progresos rpidamente y se pasa a a niveles ms complicados, es necesario escoger el valor cr a tico por el cual estos progresos no sean elevados para evitar que el ejercicio se haga mal, pero tampoco demasiado bajos para no desmotivar al jugador.

En el juego real, se ejercita hombro, codo y mueca en el mismo movimiento, n pero en el juego para rehabilitacin se debe evitar esto para que podamos o controlar que se hace el ejercicio adecuadamente, por lo tanto se tiene que modicar levemente la forma de jugar, ya que aunque sea un juego el paciente no debe olvidar que tiene que cumplir los ejercicios para mejorar. Algunas ideas sobre cmo hacer esto se expone en la correspondiente seccin del cap o o tulo donde se explica el desarrollo.

En la Figura 2.8 tenemos un diseo de la interfaz grca ideada para ARMole, donde n a el mdico podr congurar la escena con la posicin de los topos, la velocidad, e a o seleccionar el nivel del juego, etc.

16

PROYECTO FIN DE CARRERA

2.3 Entorno de desarrolloEn esta seccin se dan detalles del software y hardware utilizado en la realizacin o o del proyecto. Esto tiene importancia principalmente si se quiere realizar algn trau bajo o proyecto similar al que se trata en esta memoria, pero tambin nos ayudar a e a entender el texto del Cap tulo 3 cuando se hable de cmo se han usado estas hero ramientas. Este PFC hace uso de una cantidad considerable de librer de software as de libre distribucin, en cada caso la versin de la misma deber ser igual o suo o a perior a las que se indican para que el programa creado se ejecute correctamente. En las prximas subsecciones se explica la instalacin de las mismas, ya que en alo o gunos casos, se necesita alguna conguracin inicial. Tambin es importante tener o e en cuenta el sistema operativo usado, que en este caso ha sido la distribucin basada o en GNU/Linux, Ubuntu.

2.3.1 UbuntuEl sistema operativo utilizado para el desarrollo del proyecto ha sido principalmente Ubuntu (Ubuntu) en su versin 10.10 Maverick Meerkat de 64 bits, que es la o que en el momento de comenzar este PFC se encontraba en los equipos de RoboLab, siendo sta la versin utilizada para el desarrollo de RoboComp. Sin embargo, dee o bido a que el proyecto se ha llevado a cabo desde distintos equipos, en ocasiones se ha utilizado Ubuntu 10.04 en sus versiones de 32 y 64 bits. En principio no deber a ser muy complicado una portabilidad a otros sistemas como Windows o MacOS X debido a que las dependencias del proyecto tienen sus respectivas versiones para estos sistemas operativos.

2.3.2 SVN, Doxygen, CMake y BASHEstas herramientas se consideran bsicas en el desarrollo de aplicaciones en ena tornos GNU/Linux, sin embargo merecen una mencin para que en el caso de que el o lector de esta memoria no se encuentre familiarizado con dicho entorno, no se pierda cuando se habla de ellas. Subversion, tambin conocido por svn, es un sistema de control de versiones e popular que adems sirve como mtodo para compartir cdigo fuente y hacer a e o copias de seguridad automticas, siempre y cuando se disponga de un servidor a congurado adecuadamente. En el caso de este proyecto se ha usado el servidor gestionado por RoboLab, que adems est preparado para ejecutar scripts a a semanalmente que generan automticamente toda la documentacin de cada a o componente a travs de Doxygen (Doxygen). e Doxygen es un sistema de generacin automtica de documentacin que genera o a o archivos HTML a travs del cdigo doxygen existente en los comentarios del e o programa a documentar. CMake es un sistema de generacin automtica de archivos Makele, los cuales o a almacenan la informacin necesaria que se tiene que pasar al compilador. Noro

17

2. DISENO

malmente esa informacin incluye las rutas de las librer cabeceras, ejecutao as, bles, etc. que necesitamos para compilar nuestro programa. La tarea de escribir desde cero los archivos Makele suele ser una tarea tediosa y confusa, ya que suele ser comn la necesidad de modicar estos archivos si alguna de las libru er que usamos cambia de versin. CMake nos facilita esta tarea con scripts as o de bsqueda automtica de librer sin embargo, cuando un programa crece, u a as, an con la ayuda de CMake esta tarea puede resultar tediosa. u BASH es la l nea de comandos por defecto en Ubuntu. Es en este terminal donde usamos aplicaciones como CMake o SVN a travs de comandos. e

2.3.3 QT4QT es un conjunto de librer multiplataforma para crear aplicaciones multias propsito y que cubre una amplia gama de funciones como interfaces grcas, gestin o a o de redes, soporte de Extensible Markup Language (XML), implementacin de gro a cos 3-D a travs de Open Graphics Library (OpenGL), etc. Tambin nos permite e e la edicin de imagen, aunque desde luego no con tanta potencia como lo hace Open o Source Computer Vision Library (OpenCV). La ventaja de QT es que te proporciona una capa de alto nivel para programar en C++, abarcando diversos ambitos donde todas las clases y la forma de usarlas siguen una organizacin bien estructurada y o documentada. Este PFC aprovecha la facilidad de crear interfaces de usuario de una forma grca a con QTDesigner, y del mtodo de conectar la GUI de nuestro programa mediante e signals y slots.

2.3.4 KDevelopKDevelop es un Integrated Development Environment (IDE) popular entre los desarrolladores de software que trabajan en sistemas GNU/Linux. En este caso se ha utilizado la versin 4.0.2, que es la ultima versin estable publicada al comieno o zo del desarrollo de este proyecto. KDevelop ofrece diversas herramientas para el desarrollo de software, como un editor de texto con autocompletado, acceso a la referencia de bibliotecas como QT, entorno de compilacin integrado con CMake y o GCC, herramientas para hacer debug, etc. KDevelop 4.0.2 no se encontraba disponible en el gestor de software de Ubuntu, por lo que ha sido necesario descargarlo e instalarlo por el mtodo tradicional. El e motivo de usar esta versin ms reciente se debe al soporte para plugins (exteno a siones) y comodidades como los workspaces, una funcin muy util cuando se trabaja o con varios componentes de RoboComp simultneamente. Se ha compilado con xito a e un plugin de prueba para KDevelop con la intencin de modicarlo con las necesio dades espec cas de los desarrollos para RoboComp, los pasos a seguir se explican a continuacin. o

18

PROYECTO FIN DE CARRERA

Instalacin de plugins en KDevelop o Existen 2 repositorios principales donde buscar plugins, Extragear y Playground, siendo el primero ms estable y probado, mientras que el segundo ms novedoso e a a inestable. Dichos repositorios se encuentran en las siguientes direcciones: https://projects.kde.org/projects/extragear/ https://projects.kde.org/projects/playground/ El primer paso es descargar el plugin deseado (usaremos textitfooplugin a modo de ejemplo) con el comando: git clone git://anongit.kde.org/fooplugin Antes de continuar tenemos que tener satisfechas las dependencias espec cas del plugin, normalmente descritas en un archivo del tipo README dentro del directorio del plugin. Una vez satisfechas, debemos seguir los pasos congurar, compilar e instalar, que se logran con los siguientes comandos respectivamente: cmake . make sudo make install

2.3.5 RoboComp svn-versionRoboComp es un framework libre desarrollado en el RoboLab de la UNEX orientado a componentes con la nalidad de ejecutarlos en robots. Herramientas similares utilizadas en robtica ser Orca2, Carmen o ROS. Algunas caracter o an sticas que podemos destacar de esta RoboComp son las siguientes: La abstraccin de hardware, que es posible gracias a componentes que se coo munican directamente con los controladores de dispositivos como pueden ser el lser, la cmara, bases robticas, etc. a a o Soporta el desarrollo de aplicaciones con GUI. Permite la generacin automtica de cdigo para nuevos componentes. o a o Es posible que distintos componentes se comuniquen entre s a travs de prox e ies, incluso si estos se ejecutan en distintos equipos o estn escritos con distina tos lenguajes de programacin. Adems varios componentes se pueden coneco a tar de forma simultnea a un mismo componente por lo que es posible que un a dispositivo como una cmara sea utilizada a la vez por varias aplicaciones. a Incluye herramientas para la gestin de los componentes en ejecucin que nos o o permite pausar o arrancarlos de forma grca. a Un sistema para reproducir el comportamiento de componentes ejecutados con anterioridad, nos permite hacer pruebas incluso cuando ya no disponemos del dispositivo usado. En la Figura 2.9 podemos observar la jerarqu de directorios de RoboComp, as coa mo un grco representativo de un componente en el que podemos ver los puntos a explicados anteriormente.

19

2. DISENO

Figura 2.9.: Estructura de directorios y grco representativo de un componente de a RoboComp.

Instalacin de RoboComp o Dependiendo del componente que se vaya a usar de los que forman parte de RoboComp o de la funcin de un nuevo componente que queramos crear, necesitaremos o software adicional, como es nuestro caso con las librer que se explican en las siguas ientes subsecciones. En en desarrollo del proyecto tambin ha sido necesario usar e R la potencia que brinda Intel Integrated Performance Primitives Library (IPP), pero que son usados por componentes ya creados en RoboComp y en realidad no se ha programado nada con estas librer de Intel, por lo que no se le dedica una as subseccin. Por tanto, partiendo que de el sistema operativo tiene instaladas todas o las dependencias particulares que vamos a usar (como IPP, GAZEBO, PROSILICA, etc.), simplemente tendr amos que descargar un script de la siguiente direccin: o http://robocomp.svn.sourceforge.net/viewvc/robocomp/Tools/robocompInstaller.py El script se puede ejecutar ejecutando el siguiente comando bash desde la carpeta donde lo hayamos guardado: python ./robocompInstaller.py Al ejecutarlo, arranca una interfaz grca que instala las dependencias comunes, a descarga el software de RoboComp en la carpeta indicada por el usuario, y establece las variables de entorno del sistema, tras lo que tendremos que reiniciar el sistema. A pesar de que pueda parecer que ya est todo instalado, no tenemos que olvidar a que es necesario compilar las clases, herramientas, o componentes que vayamos a utilizar. Para compilar las clases ejecutamos los siguientes comandos desde el terminal: cd $ROBOCOMP/Classes/

20

PROYECTO FIN DE CARRERA

cmake . make Para compilar las herramientas, ser los siguientes: an cd $ROBOCOMP/Tools/ cmake . make Y el procedimiento para compilar los componentes ser similar, sustituyendo fooComp a por el nombre del componente que necesitemos: cd $ROBOCOMP/Components/Robolab/Experimental/fooComp cmake . make Si todos los pasos se han seguido sin problema, RoboComp estar listo para usarse. a

2.3.6 OpenCVOpenCV es una biblioteca de software desarrollada en 1999 por la compa na R Intel Corporation para el procesado de imgenes y el desarrollo de la visin por a o computador. Fue publicada bajo licencia Berkeley Software Distribution (BSD) y es multiplataforma, de forma que se puede utilizan en aplicaciones para GNU/Linux, MacOS X o Windows. En la actualidad OpenCV es desarrollado siguiendo el modelo del software libre, pero est coordinado por el Willow Garage, un grupo de desarrolladores y expertos a en robtica. La versin utilizada en este PFC es la 2.2 publicada en Diciembre de o o 2010, la cual es completamente compatible con la serie 2.x y parcialmente con la 1.x, pudiendo utilizar distintas estructuras para el tratamiento de imgenes. a OpenCV es ampliamente utilizado en campos como la Realidad Aumentada y la Visin por Computador con aplicaciones en la medicina, la seguridad, la robtica y o o la industria. Su API permite desarrollar programas en varios lenguajes de programacin como C, C++, Python o N V idia R CUDA (rutinas para computacin en o o la Graphic Processing Unit (GPU). Dispone de ms de 500 funciones que se pueden clasicar en los siguientes grupos: a Procesamiento General de Imgenes a Segmentacin o Transformacin o Mquina de aprendizaje: Deteccin y Reconocimiento a o Descriptores geomtricos e Calibracin de Cmaras Estreo o Cmaras 3D o a e a Arboles de imagen y estructuras de datos Tracking

21

2. DISENO

Instalacin de OpenCV 2.2 o Para instalar correctamente OpenCV-2.2.0 en Ubuntu se deben seguir las siguientes instrucciones: Descargar el paquete OpenCV-2.2.0.tar.bz2 de la siguiente direccin: o Descomprimir el archivo descargado en la carpeta deseada. Abrir una l nea de comando BASH en dicha carpeta. Ejecutar los siguientes comandos:

mkdir release cd release sudo apt-get install build-essential libavformat-dev libswscale-dev && libpng12-dev libgtk2.0-dev python-numpy libavcodec52 && libgstreamer0.10-dev libgtk2.0-dev libgstreamer0.10-dev && libgstreamermm-0.10-dev libgstreamer-plugins-base0.10-dev && libunicap2-dev libunicapgtk2-dev pkg-config libjpeg8-dev && libavcodec-dev libavc1394-dev libdc1394-22-dev && zlib1g-dev libjasper-dev python gtk2-engines libv4l-dev cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. make sudo make install sudo ldconfig -v Se debe tener en cuenta que este mtodo instala OpenCV con las opciones t e picas, para activar las opciones como el uso de Threading Building Blocks (TBB), IPP o interfaces avanzadas con QT, primero se debe instalar el software correspondiente y despus modicar el archivo CMake (CMake) antes de compilar. e

2.3.7 Kinect, OpenKinect y OpenNIKinect es un sensor desarrollado por la empresa P rimeSense R (Prime Sense) con el objetivo inicial de convertirse en un complemento para la videoconsola XBOX R 360 de Microsoft R , de forma que dicho complemento acte de interfaz sin manos y u pueda competir contra el WiiMote de la consola Wii de Nintendo. Kinect se concibe desde un principio como un dispositivo de comunicacin hombre-mquina, simio a lar al ratn, teclado, o mandos de control remoto, pero buscando una interaccin o o ms natural. De forma resumida se podr decir que Kinect es un sensor todo en a a uno que incluye una cmara de v a deo, una cmara de profundidad, micrfonos y a o altavoces, un acelermetro y un pequeo motor que le permite hacer movimientos o n de tipo inclinacin (tilt). Una fotograf de este aparato se muestra en la Figura 2.10 o a En Noviembre de 2010 se publica un controlador (driver ) libre para GNU/Linux con el nombre FreeNect que permite obtener los datos de imagen y profundidad del

22

PROYECTO FIN DE CARRERA

Figura 2.10.: Fotograf del dispositivo Kinect. a

dispositivo Kinect. En ese momento distintos grupos de investigacin comienzan a o trabajar con esta nueva cmara 3D, y se forma un grupo para coordinar el desarrollo a del driver llamado OpenKinect. Debido al xito de este dispositivo entre los desare rolladores de software, Prime Sense publica un framework llamado Open Natural Interaction (OpenNI) con modelos y funciones comunes en la interaccin con este o tipo de dispositivos. Sin embargo este framework unicamente soporta plataformas Windows, adems de usar una biblioteca de software conocida como NITE (NITE) a la cual no tiene licencia libre. En Marzo de 2011 ASUS R comienza a comercializar un nuevo sensor con el nombre de Xtion R , pero el fabricante sigue siendo Prime Sense con un sistema similar al que usa la Kinect. ASUS se suma al grupo que mantiene OpenNI y Microsoft publica un Software Ddevelopment Kit (SDK) para Windows. Actualmente se est trabajando para integrar el uso de Kinect en OpenCV, y a adems de usos para todo tipo de videojuegos, se est desarrollando ampliamente a a para el uso de visin articial en robots y en Realidad Aumentada. o Instalacin del driver OpenKinect o La forma de instalar este driver para cada sistema operativo, est disponible en a la siguiente direccin: o http://openkinect.org/wiki/ Sin embargo tenemos que tener cuidado, porque en la fecha en la que se escribe esta memoria la instalacin mediante repositorio (la forma ms sencilla) para Ubuntu, o a puede darnos problemas de estabilidad porque instala una versin anticuada. Por o tanto, los pasos a seguir ser los que siguen al t an tulo Ubuntu Manual Install en la direccin web anteriormente indicada. o

2.3.8 ARToolKitARToolKit es una librer que permite el tracking de marcas usando tcnicas de a e reconocimiento de patrones y transformaciones anes, orientada a la produccin de o aplicaciones de realidad aumentada. Esta librer se public en 1999 y actualmente a o

23

2. DISENO

Figura 2.11.: Marca Hiro, t picamente usada por ARToolKit.

conviven versiones con licencia libre y comercial. El buen funcionamiento y su licencia comercial ha popularizado su uso en los ultimos aos y es posible ver juegos para n videoconsolas y cada vez ms aplicaciones para smartphones que hacen uso de esta a tecnolog Un ejemplo de marca usada por ARToolKit se puede ver en la Figura a. 2.11 El cdigo, ejemplos de aplicaciones, tutoriales, indicaciones de instalacin y o o ms informacin est disponible en la siguiente direccin: a o a o http://www.hitl.washington.edu/artoolkit/ Instalacin de ARToolKit o A pesar que la instalacin de ARToolKit est bien documentada en el enlace o a anterior, hay que destacar la eleccin de algunas opciones en el proceso, ya que o ARToolKit permite el uso de mltiples dispositivos para capturar la imagen, inu cluyendo algunos poco comunes como la cmara Eye Toy para la videoconsola a PlayStation de Sony. Las opciones ser las siguientes: an Select a video capture driver: Elegimos la opcin 5: GStreamer Media Framework. o Do you want to create debug symbols? (y or n) Elegimos y para poder depurar nuestro cdigo en caso de errores. o Build gsub libraries with texture rectangle support? (y or n) Elegimos y porque aprovecha las ventajas de las tarjetas grcas modernas. a

2.3.9 OpenSceneGraphOpenSceneGraph (OSG) es una capa de alto nivel para construir mundos virtuales en tres dimensiones sobre OpenGL. OSG nos permite crear arboles de nodos para crear objetos complejos como puede ser el esqueleto de una persona donde la posicin o

24

PROYECTO FIN DE CARRERA

de un nodo como podr ser la mueca depende de la posicin de un nodo padre a n o como ser el codo, de forma que reproducir los movimientos de un modelo de brazo a ser ms sencillo en OSG que implementarlo sobre OpenGL directamente. a a Instalacin de OpenSceneGraph o La instalacin de OSG es tan sencilla como ejecutar el script escrito en python o que podemos encontrar en la carpeta ThirdParty dentro de RoboComp. En caso de problemas por la versin del sistema operativo slo tendr o o amos que modicar dicho script.

2.3.10 OSGArtOpenSceneGraph-ARToolKit integration (OSGArt) es un conjunto de software que sirve de enlace entre OSG y ARToolKit, espec camente nos permite controlar los nodos de OSG con las traslaciones y rotaciones que ARToolKit extrae de las marcas durante el tracking. Adems es posible usar la imagen capturada por la a cmara como fondo de la escena 3D, de forma que el resultado es dibujar objetos en a tras dimensiones respecto a la marca detectada por ARToolKit. Instalacin de OSGArt o La instalacin de OSGArt puede ser un poco ms complicada de los esperado, o a los pasos que se ponen aqu han sido extra dos de un tutorial elaborado por Luis Calderita para RoboLab, que ha recopilado informacin de varias fuentes en internet: o Descargar osgART 2.0.RC3 del siguiente enlace: http://osgart.org/les/ Descomprimir el paquete y abrir terminal en la carpeta descomprimida. Introducir los siguientes comandos en dicha terminal: export CFLAGS="$CFLAGS -fPIC -fpermissive" export CXXFLAGS="$CXXFLAGS -fPIC -fpermissive" export ARTOOLKIT_2_ROOT="$HOME/ARToolKit" cmake . make sudo make install El paso anterior crea e instala las librer dinmicas tracker y video, para as a comprobarlo ejecutamos: cd /usr/local/lib/osgPlugins-2.8.3 ls osgart_tracker_artoolkit2.so ls osgart_video_artoolkit2.so Para comprobar que OSGArt est correctamente instalado podemos probar los sigua ientes pasos, tras los cuales deber amos ver un cubo 3D encima de la marca HIRO como se muestra en la Figura 2.12:

25

2. DISENO

Figura 2.12.: Imagen que obtenemos si OSGArt est correctamente instalado. a

cp -r $HOME/ARToolKit/bin/Data/ $HOME/osgART_2.0_RC3/bin mv $HOME/osgART_2.0_RC3/bin/Data $HOME/osgART_2.0_RC3/bin/data cd $HOME/osgART_2.0_RC3/bin && ./osgartsimple Es posible que a pesar de todo es posible que obtengamos un error con el que la imagen aparece completamente negra a pesar de que arranque la cmara. La solucin a o a este problema aparece en el foro artoolworks.com por el usuario jduran, y ser la a siguiente: gedit $HOME/osgART/src/osgART/Video/ARToolKit/ARToolKitVideo.cpp En ese archivo debemos cambiar la condicin del if (0 por 1) y volver a compilar e o instalar las librer el fragmento a editar ser el que sigue: as, a --- ARToolKitVideo.cpp.orig 2010-02-09 13:15:27.000000000 +0100 +++ ARToolKitVideo.cpp 2010-02-09 15:32:48.000000000 +0100 @@ -307,7 +307,7 @@ osg::Timer t; if (0 == ar2VideoCapNext(video)) + if (ar2VideoCapNext(video)) { if (newImage = (unsigned char*)ar2VideoGetImage(video)) { Para conseguir un tracker no, que no tiemble tanto, recurrimos a un ltro temporal. Esto se logra de la siguiente editando el siguiente chero: /home/... RutaCarpetaOsgART .. /src/osgART/Tracker/ARToolKit/SingleMarker.cpp Modicando la l nea 76 por la esta otra: arGetTransMatCont(markerInfo, patt_trans, patt_center, patt_width, patt_trans); Recompilamos OSGArt y reinstalamos la librer a.

26

PROYECTO FIN DE CARRERA

2.3.11 OSGALOSG-OpenAL integration (OSGAL) es una capa de software que aade audio n tridimensional a los mundos virtuales creados con OSG, mediante el uso de la librer a de audio Open Audio Library (OpenAL) y las herramientas OpenAL Utility Toolkit (ALUT), aunque tambin puede hacer uso de otros subsistemas de sonido como e FMOD (FMOD). El sonido tridimensional se consigue aadiendo nodos de sonido a n la escena, de forma que si el nodo se aleja o acerca a la pantalla, el sonido nal que o mos por los altavoces variar su intensidad. Adems tambin se puede conseguir a a e efecto Doppler, sonido ambiente, etc.

Instalacin de OSGAL o La instalacin es sencilla: o Instalar la versin de desarrollo de los paquetes OpenAL y ALUT. Estos pao quetes se encuentran en el repositorio ocial de Ubuntu. Descargar OSGAL de la siguiente direccin: http://www.vrlab.umu.se/research/osgAL/ o Descomprimir el archivo, y editar el archivo CMakeList.txt para asegurarse que est marcada la opcin OSGAL/ALUT y desmarcada la correspondiente a o para usar FMOD, ya que no se pueden usar ambas, y en nuestro caso usaremos OpenAL/ALUT. Iniciar una consola en la carpeta descomprimida y ejecutar los siguientes comandos: cmake . make sudo make install

2.4 Mtodos comunes usados para tracking de objetos eCuando este documento menciona el tracking, se reere de forma general al seguimiento automtico de objetos, ya sea en imgenes bidimensionales o tridimensionales. a a El seguimiento a su vez se suele dividir en dos tareas importantes, la deteccin y o la prediccin. Ambas tareas estn estrechamente relacionadas ya que la deteccin o a o inicia y corrige a la prediccin en la mayor de los casos, mientras que la prediccin o a o permite anar y acelerar la deteccin. Debido a que algunos mtodos de predico e cin son altamente utilizados para aplicaciones de tracking, puede resultar confuso o cuando son mencionados si se hace referencia a la prediccin o a su t o pico uso en seguimiento de objetos en imagen. En esta seccin hablamos de mtodos completos o e de tracking pero nombrmdolos por el tipo de prediccin que utilizan. a o

27

2. DISENO

2.4.1 CAMShiftContinuously Adaptive Mean-Shift, tambin conocido como CAMShift, es un e mtodo para el seguimiento de objetos en secuencia de imgenes, que desarrolla e a a su vez el algoritmo Mean-Shift el cual usa informacin del color en forma de deno sidad de probabilidad para cada p en la imagen. Una implementacin t xel o pica de CAMShift para tracking consiste en los siguientes pasos: Seleccionar una imagen inicial, ya sea capturndola del v a deo o de un chero, y calcular su histograma. Seleccionar una ventana en la imagen, sobre la cual desplazaremos otra del mismo tamao de la imagen seleccionada anteriormente. n Se comparan los histogramas de la imagen preseleccionada y el de la ventana pequea para cada desplazamiento dentro de la ventana grande, cuando se n encuentra el desplazamiento en el que los histogramas son ms parecidos, se a aplica dicho desplazamiento a la ventana de mayor tamao. El resultado es que n esta ventana consigue seguir al objeto y es bastante robusto frente a cambios en la imagen ya que incluso el tamao de esta ventana puede variar en funcin n o de la diferencia entre histogramas.

2.4.2 Filtro de Part culasEl ltro de part culas es uno de los mtodos ms utilizados en la actualidad para e a el seguimiento de objetos en visin por computador, el cual consiste en aplicar un o mtodo Secuential Monte Carlo (SMC), un sosticado modelo de tcnicas de estie e macin basado en simulacin. o o Existen variantes del ltro y otras aplicaciones como la estad stica o cualquier otro proceso secuencial, sin embargo tienen en comn sus cuatro etapas (inicializacin, u o actualizacin, estimacin y prediccin) y la aplicacin del Teorema de Bayes de la o o o o probabilidad condicional. En el PFC Tracking automtico de objetos en secuena ciales de imgenes usando Filtro de Part a culas [10] de Eva Chaparro Laso tenemos un ejemplo del ltro de part culas implementado con OpenCV. El punto fuerte del ltro de part culas es la gestin de una ROI (Region of Ino terest) donde tenemos una mayor probabilidad de localizar el objeto que estemos rastreando.

2.4.3 Filtro de KalmanOtro de los mtodos ms utilizados para el tracking de objetos en imgenes en e a a movimiento es el ltro de Kalman, que surge de la adaptacin del algoritmo de o Rudolf E. Kalman. Este mtodo acta de forma similar a un predictor lineal dnde e u o a partir de una muestra, estimamos la siguiente y posteriormente calculamos el error cometido en dicha prediccin, de manera que para el clculo de la siguiente muestra y o a teniendo en cuenta dicho error, podamos mejorar la prediccin minimizando el error. o Este mtodo es particularmente efectivo cuando se dan unas condiciones ideales e como la ausencia de cambios bruscos en la muestra o cierta pasividad del entorno.

28

PROYECTO FIN DE CARRERA

Figura 2.13.: Tracking de cara con OpenTLD.

Un ejemplo de la aplicacin del ltro de Kalman para el seguimiento de objetos en o imgenes de v a deo podemos encontrarlo en el PFC Tracking automtico de objetos a en secuencias de imgenes usando Filtro de Kalman [7] de Mar Isabel Menor a a Flores.

2.4.4 OpenTLD: Algoritmo PredatorAunque este proyecto no hace uso del algoritmo Predator, es conveniente citarlo como tecnolog de tracking de objetos debido al adelanto que representa en este a campo debido a su ecacia en comparacin con otras tecnolog expuestas anterio as ormente. El algoritmo Predator fue publicado bajo licencia libre en Marzo de 2011, y posteriormente se cre el grupo OpenTLD para coordinar los desarrollos con este nuevo o algoritmo. La ventaja de este mtodo para el tracking de objetos es que es capaz e de reescribir el patrn a localizar en el v o deo, las siglas TLD hacen referencia a las palabras seguimiento, aprendizaje y deteccin (en ingls tracking, learning y detecto e ing). El algoritmo intenta de localizar un objeto patrn en la secuencia de imgenes, o a si consigue localizarlo, crea un nuevo objeto patrn y en la siguientes imgenes buso a ca alguno de los dos objetos, de forma que va creando una base de datos con las mutaciones del objeto original, algunas de las mutaciones las descarta segn alguu nas restricciones, y cuando tiene una base de datos completa, es cuando alcanza la mxima efectividad. a El motivo por el que no se usa el algoritmo Predator en Camimic es por las limitaciones de plataforma del cdigo publicado, pues usa Matlab y de momeno to unicamente soporta el sistema operativo de tipo Windows. Sin embargo desde OpenTLD trabajan en una portabilidad a GNU/Linux sustituyendo Matlab por la implementacin libre Octave, por este motivo es posible que en el futuro, se pudiera o adaptar Camimic para usar dicho mtodo para el tracking. La Figura 2.13 muestra e una captura del proceso de aprendizaje de OpenTLD.

29

PROYECTO FIN DE CARRERA

3. DESARROLLO3.1 Primeros pasos desarrollando un componenteLa mayor de los pasos que se describen en esta seccin se han desarrollado a o de forma similar tanto para la aplicacin Camimic como para ARMole, y ser o an comunes para futuros componentes de RoboComp con interfaz grca que hagan a uso de imgenes de v a deo. Es por este motivo que se pretende salir de la dinmica a bastante comn en las memorias de PFC en las que se nombran una por una todas las u funciones implementadas o usadas, adems de que por otro lado se ha puesto especial a atencin en introducir comentarios explicativos en el cdigo para la mayor de las o o a funciones, y estos comentarios estn disponibles en formato web desde el servidor a de RoboComp alojado en sourceforge.com.

3.1.1 Generacin, compilacin y ejecucin de un componente o o oTras seguir las instrucciones explicadas en la seccin Entorno de desarrollo del o cap tulo anterior, deber amos tener RoboComp listo para poder ejecutar herramientas y los componentes que necesitemos. La generacin de nuestro componente ser tan sencillo como ejecutar el script en o a Python componentGenerator.py que podemos encontrar en la carpeta Tools. Dicho script iniciar una GUI en la que se debe elegir un nombre para el componente, a otro para su interfaz y establecer los proxies que se van a utilizar. Los proxies son el sistema con el que nuestro componente se podr conectar a otros componentes a como el que gestiona la cmara de v a deo o el dispositivo Kinect. Tras elegir los nombres y los proxies, RoboComp generar todos los archivos a bsicos automticamente en una carpeta con el nombre del nuevo componente. Esta a a carpeta se encontrar en la siguientes ruta: a $ROBOCOMP/Components/Robolab/Experimental Para la compilacin de nuestro componente, abriremos un terminal Bourne-again o Shell (Bash) para insertar los comandos que siguen a continuacin: o cmake . make Con el paso anterior se habr creado el binario en la carpeta bin dentro de la ruta a desde donde compilamos en el paso anterior, por lo tanto para ejecutar nuestro componente, tan slo tendr o amos que ejecutar el correspondiente Bash script que se encuentra junto al binario, tras comprobar que el mismo tiene permiso de ejecucin o bastar con un simple doble clic. a Todos los componentes que se generen por este mtodo usan una instancia de la e clase Worker de RoboComp y que usa un timer que hace constantemente llamadas a

31

3. DESARROLLO

la funcin compute() con una frecuencia que podemos controlar de forma dinmica o a desde el mismo componente.

3.1.2 Desarrollo de la interfaz grca de usuario aLa forma ms sencilla y cmoda de crear una GUI para nuestro componente es a o disendola de forma grca con QTDesigner, de forma que podemos aproximarla na a a nuestro bocetos rpidamente. Una vez creada, debemos conectar las seales de a n cada widget con las funciones internas que desarrollemos en nuestro componente. Las posibles seales dependen del tipo de widget, por ejemplo un botn emite seal n o n cuando es pulsado mientras que una barra la emite cuando el usuario la desplaza. Por tanto, la mencionada conexin necesita principalmente tres datos: el nombre o del widget, la seal que se quiera controlar y el nombre de la funcin a la que se n o llama cuando la seal es activada. Con esos datos ya podemos escribir una l n nea como la que sigue, y que normalmente se encuentra en el constructor worker(): connect( &widget, SIGNAL(event()), this, SLOT(function()) );

3.1.3 Comunicacin con otros componentes oLa comunicacin entre componentes de RoboComp es gestionada a travs de Ino e ternet Communications Engine (Ice), esto permite conexiones entre componentes que estn escritos en distintos lenguajes, distintas mquinas, etc. La forma de coe a municarnos es mediante la interfaz que implemente cada componente que podremos usar como una funcin ms en nuestro cdigo, siempre y cuando tengamos correctao a o mente escrito el archivo de conguracin para Ice, y por supuesto deber o amos haber establecido los proxies en nuestro componente. Como se explica una l neas ms arriba, podemos establecer los proxies con el gena erador de componente, sin embargo RoboComp tambin dispone de una herramienta e para aadir proxies de forma automtica. Tanto para Camimic como para ARMole n a esto ultimo no ha sido necesario porque se aadieron para cameraComp y kinect n Comp desde un principio; tambin se crearon sus respectivas interfaces pero no se e hicieron cambios a los archivos autogenerados. El archivo de conguracin de cada componente se encuentra en la carpeta etc o con el nombre de cong, las l neas que se suelen modicar se muestran a continuacin, aunque puede que otros componentes tengan muchas ms opciones como es o a el caso de cameraComp donde podemos elegir la resolucin de la cmara entre otras o a conguraciones. #RemoteProxy = remote:tcp -h remote_host_ip -p port_number CameraProxy = camera:tcp -h localhost -p 10001 KinectProxy = kinect:tcp -h localhost -p 10096 De las l neas que se ven encima de este texto, la primera de ellas es un modelo del formato seguido para congurar los proxies, mientras que las dos restantes son las que usa tanto Camimic como ARMole para conectarse a kinectComp y cameraComp cuando se ejecutan en el mismo computador.

32

PROYECTO FIN DE CARRERA

Figura 3.1.: Esquema que muestra las dos clases de distancias.

3.2 Gestin y Calibracin del sensor Kinect o oAntes de comenzar a usar este novedoso y popular dispositivo, se ha intentado comprender su funcionamiento con la suciente profundidad para conocer el porqu de los t e picos errores en las medidas del dispositivo y sus posibilidades, si bien no se han llegado a hacer experimentos formales que hubieran permitido una caracterizacin del mismo. o

3.2.1 Consideraciones sobre KinectAntes de poder comenzar a usar la informacin de profundidad proporcionada por o Kinect, es necesario tener en cuenta ciertos aspectos de su funcionamiento. Merece especial atencin el sistema de coordenadas que queramos usar con esta informao cin, ya que cuando hablamos de medidas de distancia o profundidad tenemos que o diferenciar entre profundidad en coordenadas cartesianas o esfricas, dependiendo de e nuestro caso podemos necesitar la distancia de un punto de la escena hasta Kinect o la distancia entre planos verticales. Esta idea se puede apreciar de forma sencilla en la Figura 3.1. Adems kinectComp tiene dos funciones distintas con las que nos env las imgenes, a a a stas pueden considerar el centro la cmara IR o la RGB en dependiendo de la llae a mada a una u otra funcin, como podemos observar en la Figura 3.2. o Tambin ser importante tener en cuenta la aparicin de sombras en la imagen e a o de profundidad, estas sombras pueden ser de dos tipos: sombra lateral y sombra de objetos. La sombra lateral es la que menos molesta porque suele caer en el l mite de la imagen de color y adems es m a nima ya que se reduce rpidamente con la distancia, a esta sombra se debe al desplazamiento que hay entre la cmara de IR y la cmara a a RGB, adems de que ambas tienen distintos angulos de su campo de visin. En la a o Figura 3.3 vemos un dibujo de esta explicacin. o

33

3. DESARROLLO

Figura 3.2.: Los mtodos de obtener datos desde KinectComp. e

Figura 3.3.: Sombra lateral en Kinect.

34

PROYECTO FIN DE CARRERA

Figura 3.4.: Sombra de objetos en Kinect.

La sombra de objetos puede ser ms importante y a menudo resulta molesta a para algunas tareas, por ejemplo el ltro de distancia descarta la zona de sombra infrarroja. Como se muestra en la Figura 3.4 se debe por la distancia entre la cmara a y la lmpara de infrarrojos. Si bien este efecto tambin se reduce segn nos alejamos, a e u sigue siendo perceptible en la distancia t pica a la que solemos interactuar incluso con una buena calibracin. o

3.2.2 Calibracin del sensor Kinect oDurante este proyecto se han realizado calibraciones para los distintos dispositivos Kinect del RoboLab usando el programa RGBDemo de Nicolas Burrus, que no es ms a que una adaptacin del sistema de auto-calibracin disponible como herramienta en o o el paquete OpenCV. En la Imagen 3.5 podemos ver parte del proceso de calibracin o de Kinect, y en la 3.6 se aprecia como la informacin de profundidad encaja mejor o con la imagen de color.

3.2.3 Modicacin de KinectComp para obtencin de imagen ino o frarrojosA pesar de los errores de medida que se mencionan al inicio de de esta seccin, con o frecuencia seguirn apareciendo areas en la imagen sin informacin de profundidad. a o Ver la imagen de infrarrojos ayuda de cara a entender el motivo de esos agujeros de informacin, como se puede ver en la Figura 3.6 estas lagunas coinciden cuando o un material absorbe la luz Infrarrojo (IR) o cuando se produce saturacin, ya sea o brillos la imagen o a que se capta otra fuente de luz infrarroja como es el caso de la luz solar.

35

3. DESARROLLO

Figura 3.5.: Capturas de imagen mediante la calibracin de kinect. o

Figura 3.6.: Efecto de la calibracin de kinect. o

36

PROYECTO FIN DE CARRERA

3.2.4 Acotacin del espacio en la imagen oEl motivo por el que se hace uso de un dispositivo Kinect es precisamente poder ltrar la imagen en base a la distancia a la que se encuentran esos objetos de la cmara. Este proyecto ha desarrollado un ltro de imagen en base a la distancia, de a forma que para una distancia y con un margen determinados, se descarten los p xeles de la imagen que no cumplan los parmetros seleccionados. Este ltro est integrado a a en Camimic y es posible probar su funcionamiento desde la pestaa de conguracin, n o donde cada p es coloreado en una escala de color que va de negro a rojo en base xel a la informacin de distancia; con las barras de desplazamiento podemos seleccionar o la distancia y el margen que deseemos y que pintar de color azul todos los p a xeles que pasen el ltro. En los huecos de informacin se ha dejado la imagen de color o original. Para que el ltro funcione adecuadamente es importante una sincronizacin espao cial entre la imagen de color y la imagen con informacin de profundidad, en el caso o contrario se obtienen desplazamientos y rotaciones no deseadas en el ltro. Para dicha sincronizacin es importante tener los parmetros de calibracin del conjuno a o to de las cmaras de luz IR y visible. En la Figura ?? se muestran las imgenes a a obtenidas por ambas cmaras y las imgenes del ltro por distancias para los casos a a con y sin calibracin. o

3.3 Desarrollo de CamimicEn la pgina 2.2.1 se hizo una descripcin de lo que pretend ser esta pizarra a o a virtual y del diagrama de ujo propuesto en la fase de diseo. Si bien se ha intentado n desarrollar la aplicacin conforme a lo planeado, un mayor requisito de tiempo y o esfuerzo para desarrollar el tracking ha impedido pulir la interfaz de la aplicacin o as como la integracin completa del mtodo nalmente propuesto dentro de la GUI o e de Camimic. En la Figura 3.7 se observa el ltro por distancia implementado en Camimic y dos ventanas de OpenCV pre-procesando la imagen para la segmentacin de objetos o a color. En la imagen del ltro podemos apreciar las barras de desplazamiento que controlan la distancia y el grosor de la l nea azul, dicha l nea azul indica el area de la imagen que pasar por el ltro, el area roja tiene distinta saturacin en funcin a o o de la distancia a la que se encuentra cada uno de los p xeles de la imagen. En realidad parte de las tareas que han quedado sin completar, son menos interesante desde el punto de vista de ingenier ya que se tratan de desarrollar tareas a, simples pero que llevan tiempo. Este ser el caso de activar funciones como cambio a de color de la pintura cuando el puntero se acerca a las esquinas de la imagen.

3.3.1 Integracin de OpenCV oLa integracin de OpenCV en Camimic en general ha sido ms costosa de lo que se o a estim en un principio, principalmente a la hora reutilizar cdigo de otros trabajos o o externos debido a que por costumbre o por compatibilidad, la mayor de los trabajos a que se han revisado hacen uso de versiones antiguas de OpenCV o incluso usan la

37

3. DESARROLLO

Figura 3.7.: Camimic ltrando por distancia y usando OpenCV.

API de C pese a que sus aplicaciones estn escritas en C++ y teniendo en cuenta e que OpenCV tiene su propia API para este lenguaje orientado a objetos. Los tipos de imagen, algo realmente importante cuando trabajamos con este tipo de librer as, tambin ha cambiado respecto a versiones anteriores, por tanto todo el procesado e en el que Camimic hace uso de OpenCV se ha trabado con imgenes Mat en lugar a de las populares pero obsoletas IplImage.

3.3.2 Prueba de deteccin de color oSe han realizado una serie de pruebas para la deteccin de objetos en base a su o color, todas ellas usando distintas funciones de OpenCV a modo de ltro y la interfaz grca para poder variar los parmetros de forma cmoda y rpida. Las primeras a a o a consideraciones tomadas fueron usar unas tolerancias determinadas para cada canal (rojo, verde y azul) de la imagen, con muy pobres resultados. El motivo de los malos resultados se deben a que tanto en zonas saturadas en la imagen (demasiada luz) o en las zonas con valores bajos de luz (sombras y objetos negros), el ruido de los sensores CMOS (CMOS) permit que hubiera p a xeles aleatoriamente cumpliendo las condiciones del ltro. El uso del ltro por distancia como paso previo a la deteccin de color supone una o notable mejora en nuestro ltro de color, ya que al eliminar el fondo se descarta un area considerable de la imagen. Adems los objetos del fondo quedan representados a en la imagen capturada por la cmara con un menor tamao que los objetos que a n se encuentran al frente, es por esto que el fondo suele presentar un aspecto ms a heterogneo y que diculta el correcto funcionamiento del ltro. e A pesar de usar el ltro por distancia previamente, la primera versin de nuestro o ltro de color no es prctica para su uso en Camimic, principalmente porque las a condiciones de iluminacin de la escena siguen afectando demasiado, por lo que se o

38

PROYECTO FIN DE CARRERA

intenta eliminar esta dependencia con la siguiente versin del ltro, ltro de color o en el espacio HSV (HSV). El motivo por que usamos el espacio HSV para eliminar la dependencia de la iluminacin de la escena, es que en dicho espacio de color los tres canales son la o tonalidad, la saturacin y el valor (directamente proporcional a la iluminacin), de o o forma que con podemos ajustar un tono determinado y denir un margen en la saturacin, de forma que prescindimos del valor y de esta forma los objetos que o queremos detectar pasan el ltro de una forma ms independiente de la escena. El a problema que no se consider en un primer momento es que aunque los valores de o H, S y V son independientes entre s no lo es el ruido que les afecta. Por ejemplo, , con valores de V demasiado bajos, el error de saturacin es mayor. o El umbralizado y la binarizacin se han aplicado para segmentar el objeto y poder o calcular su centro de masas. De forma externa a Camimic se ha creado un pequeo n programa con OpenCV que hace recuento del area en una imagen binarizada. Esta aplicacin, que se incluye en la carpeta de programas de este PFC con el nombre o PFC tiene la nalidad de caracterizar el comportamiento de la llama en distintos experimentos que se llevan a cabo en laboratorios de ingenier forestal. Este proa grama se llama FlameMeter y en el prximo cap o tulo se explicar con ms detalle a a como lo aplicado para esta tarea puede servir para mejoras y trabajos futuros en el desarrollo de Camimic.

3.3.3 Uso de CAMShift en CamimicTras probar el programa de ejemplo de tracking por el mtodo Continuously e Adaptive Mean-Shift (CAMShift) que se incluye con OpenCV, se intent integrar o en Camimic. Este tipo de integraciones (de ejemplos con un unico archivo cpp a una clase dentro de nuestro componente de RoboComp) resultaron ser dif ciles las primeras veces, pero la experiencia facilit la integracin posterior para el caso de o o otros ejemplos en ARMole. Sin embargo se descart su uso debido a una serie de o problemas que se explican con ms detalle en el siguiente cap a tulo. En este punto el desarrollo de Camimic sufri una parada y no se volver a reo a anudar hasta un tiempo ms tarde, tras una mayor profundizacin en conocimientos a o del problema que enfrenta Camimic en la parte del tracking de objetos por color.

3.3.4 Pizarra virtual externaTras comprender con ms detalle el funcionamiento del Filtro de Kalman como a sistema de prediccin de variables ms que como sistema integrado de tracking, nalo a mente se desarroll la aplicacin de pizarra virtual si bien esta se cre de forma extero o o na a Camimic para ganar tiempo y tener el sistema de tracking en funcionamiento. Ya que se prioriz en esta tarea frente a la integracin dentro de Camimic, que por o o otra parte no encierra demasiada dicultad. En la Imagen 3.8 podemos ver cmo o funciona esta pizarra virtual: Primeramente separamos el canal rojo de la imagen a color.

39

3. DESARROLLO

Figura 3.8.: Pizarra virtual usando el Filtro de Kalman.

Aplicamos la transformada de Hough para la deteccin de c o rculos, en la que conseguimos su centro y su radio. Lanzamos el predictor del Filtro de Kalman que es actualizado con cada valor del centro detectado y con error de prediccin del instante anterior. o Finalmente en la pizarra negra se pinta de blanco los centros estimados por el predictor. En la ventana nombrada como Kalman podemos ver un segmento rojo y otro amarillo. Estos segmentos son la distancia entre la posicin actual del centro del c o rculo y la prediccin anterior para el caso rojo, y la distancia entre la prediccin anterior y o o la posterior para la l nea amarilla. En el caso ideal de funcionamiento de predictor, el segmento rojo deber medir menos que el amarillo de forma que la posicin actual a o del c rculo se encuentre en la prediccin anterior y la posterior. o El algoritmo desarrollado para la parte de la prediccin consiste en una adaptacin o o del ejemplo de OpenCV que aplica el Filtro de Kalman para la prediccin de una o variable unidimensional que toma valores aleatorios y supone velocidad constante, aunque calculada durante la fase de iniciacin del ltro. Si bien el ltro no funciona o de forma optima en la mayor parte de su uso como pizarra virtual, en principio el resultado nal para poder dibujar es aceptable. En el cap tulo siguiente se expone con detalle la capacidad de mejora del mtodo desarrollado, sobretodo porque es e posible usar el trabajo previo y elaborar un tracking ms robusto, aunque tambin a e ms complejo. a

3.4 Desarrollo de ARMoleGracias a la experiencia adquirida creando Camimic, el programa ARMole ha tenido una evolucin ms constante, un resultado ms ajustado al diseo inicial, y o a a n

40

PROYECTO FIN DE CARRERA

un mejor acabado nal. En esta ocasin la creacin del componente, la obtencin o o o de imgenes a travs de la cmara o el dispositivo Kinect, y el desarrollo de la a e a interfaz grca con las conexiones a funciones del componente, fueron tareas que no a requirieron tanto tiempo como en el caso de Camimic. Adems esta aplicacin surge a partir de una propuesta por parte de Pablo Bustos a o (coordinador de RoboLab) en el momento en que se est considerando las posibila idades de usar ARToolKit para Camimic, tras descartar CAMShift. El porqu de e este programa se ha explicado anteriormente en el cap tulo Diseo. n

3.4.1 La clase OsgartNo ha sido necesario la integracin total de OSGArt gracias a que sta ya se hab o e a realizado anteriormente en RoboLab por Luis Vicente Calderita para el componente sevillaComp, sin embargo s que se ha tenido que mejorar y adaptar esta clase para ARMole. La mejora result un trabajo considerable en la que se aadieron una gran cano n tidad de mtodos para generar primitivas ms all de simples esferas, que eran las e a a unicas guras soportadas por esta clase. Tambin se aadieron mtodos para mod e n e icar de manera dinmica las propiedades de estas primitivas como pueden ser el a color, la posicin, rotaciones, etc. Estas mejoras se hicieron de forma conjunta con o los estudiantes Pablo Manzano y Alejandro Hidalgo que tambin necesitaron usar e esta clases para su PFC. Finalmente fue necesario una adaptacin ms espec o a ca para el uso en ARMole como es el uso de tracking simultneo de dos marcas, una a para establecer la posicin de los topos, y otra para el martillo. Otra modicacin o o necesaria ha sido el clculo de distancias entre marcas, ya que la interaccin entre a o el martillo y los topos no hubiera sido posible de otro modo, pues OSG no soporta colisiones entre primitivas o modelos. En la Figura 3.9 el lector puede observar el uso de la clase Osgart con dichas modicaciones, donde los conos de mayor tamao n tienen su posicin referenciada a una marca mientras que las esferas y los conos ms o a pequeos a otra. n

3.4.2 Integracin de Modelos 3-D en OSG oGracias a la facilidad que tiene OSG de trabajar con modelos tridimensionales en formato (COLLADA), hemos convertido el modelo para los topos a dicho formato. Dicho modelo se ha seleccionado de la biblioteca pblica de modelos 3D de Google u SkechtUp. Con intencin de suplir la falta de animacin del modelo, se ha modicado o o el original para establecer el estado de los topos cuando deben estar ocultos o cuando son golpeados con el martillo, de esta forma aunque no sea animacin real, sta es o e simulada con un acabado aceptable. Un diagrama con la escena completa se puede observar en la Figura 3.10, y se describe con ms detalle a continuacin: a o Cada caja representa un nodo en la escena, y las echas indican la relacin o padre-hijo en la jerarqu Las echas punteadas signican que esas relaciones a. son dinmicas, o dicho de otro modo esas relaciones se crean y destruyen a lo a largo de la ejecucin bajo ciertas condiciones. o

41

3. DESARROLLO

Figura 3.9.: Puebra de la clase Osgart modicada.

42

PROYECTO FIN DE CARRERA

Figura 3.10.: Jerarqu de la escena 3D de ARMole a

43

3. DESARROLLO

La parte estructural interna de la clase Osgart es la misma usada por sevillaComp pero se ha duplicado el cdigo oportuno para soportar la tracking o de dos marcas al mismo tiempo. El nodo root es comn en todas las escenas u de OSG y lo mismo ocurre con el nodo cam, que representa la cmara desde a la que vemos la escena tridimensional, no es realmente una cmara de v a deo f sica. Sin embargo a este nodo se le pasa la imagen de v deo capturada por la cmara real de forma que se usa dicha imagen como fondo de la escena. a Los nodos arTransform y arTransform2 son matrices de transformacin con o sus parmetros usando el nodo cam como referencia, pero variando sus valores a de forma dinmica segn la deteccin de las marcas de ARToolKit. a u o Los nodos mtMole y mtHammer son matrices de transformacin para los topos o y el martillo respectivamente. Los valores de estas matrices var segn los an u valores de los nodos padre, Sin embargo internamente ARMole puede aadir n valores estticos internamente. a scoreBox y scoreText son primitivas para crear el marcador de puntuacin del o juego. mtModelLibrary es la matriz de transformacin que controla la posicin y o o rotacin de la librer de modelos 3D, sus valores estn establecidos para que o a a todos los nodos hijos caigan fuera del campo de visin de la cmara. o a Los nodos modelNode1, modelNode2, y modelNode3 tienen los modelos cargados para poder simular la animacin. Aunque en un principio pudiera parecer o absurdo tener en la escena nodos que caen fuera del campo de visin, la soluo cin planteada de un resultado mucho ms eciente que tener que cagar de o a nuevo cada modelo segn se vaya necesitando. El motivo es que si un nodo no u tiene enlace de algn tipo con el nodo root este nodo ser destruido, por lo que u a para cambio de estado (oculto, descubierto y golpeado) se destruir en nodo a con el modelo y se tendr que recargar constantemente. La carga suele llevar a un par de segundos, por lo que no se podr interactuar con la aplicacin. a o hammer1head y hammer1base son los cilindros que conforman el martillo, el mazo y el mango respectivamente. Los nodos mole1base, mole2base y mole3base estn pensados para controlar la a matriz de transformacin relativa a cada topo, estos nodos actualmente tienen o sus respectivos hijos que apuntan a los modelos de la biblioteca mtModelLibrary, pero se podr aadir otros elementos para individualizar cada uno de an n esos tres topos.

3.4.3 Interaccin entre marcas ARToolKit y OSG oPara poder implementar la interaccin entre marcas el primer paso es obtener la o distancia entre las mismas, para ello se ha creado una funcin que calcula la difero encia entre dos vectores tridimensionales, y esa funcin la usamos de forma iterativa o recorriendo la escena de la Figura 3.10 desde la cmara hacia abajo. En la Figura a

44

PROYECTO FIN DE CARRERA

Figura 3.11.: Comprobando la distancia real entre marcas.

3.11 se est comprobando que la distancia calculada con el mtodo expuesto se cora e responde con la realidad. Una vez que tenemos la distancia entre el martillo y cada topo, se establece un umbral en torno a stos de forma que cuando el martillo traspasa dicho umbral e el topo correspondiente apunta al modelo de la librer relacionado con el estado a golpeado del topo. Adems se ha creado una variable que toma valores aleatorios, y el estado oculto a y descubierto de los topos depende de los valores de dicha variable. Para que cada topo tenga un comportamiento individual, a cada uno de ellos se le ha asignado una reaccin a rangos de valores distintos. La cantidad de valores asignados permite o controlar la velocidad con la que los topos cambian de estado, pero adems de pueden a asignar los mismos valores a dos o ms topos, lo que generar el caso en que dos a a o tres topos tuvieran un comportamiento exacto en determinados momentos. Sin duda se puede jugar con estos valores para crear niveles de dicultad y diversin. o

3.4.4 Integracin de audio con OSGAL oFinalmente se ha creado una clase para integrar Osgal en ARMole, de forma que la aplicacin puede usar sonido de forma bastante sencilla. Aunque hasta el momento o ARMole slo reproduce sonido cuando el martillo golpea a los topos, las posibilidades o para aadir msica de fondo por niveles, o ms sonidos cuando incrementan los n u a

45

3. DESARROLLO

Figura 3.12.: Mapa de probabilidad para objetos rojos.

puntos en el marcador estn abiertas. Pero quizs lo ms interesante sea, que a a a a partir de esta clase futuros componentes de RoboComp pueden usar OSGAL para distintas aplicaciones, ahorrando el tiempo y el esfuerzo que este PFC a dedicado a esta integracin. Esta tarea se ha realizado modicando el archivo CMakeLists.txt o de ARMole y adaptando alguno de los ejemplos de la librer a una clase, creando a nuevos mtodos privados y pblicos. e u

3.5 Enfoque probabil stico para ltro de colorLa tarea principal durante la estancia de tres meses en el ISR de Coimbra era la depuracin de un programa de relativa complejidad: o Dos hilos de ejecucin adems del principal. Estos hilos compart la imagen o a an capturada por la cmara, por lo que era necesario controlar las condiciones de a carrera. Tres mtodos distintos de modelar el sensor de la cmara (ProBT, Anal e a tico CPU y Anal tico GPU). Benchmark para controlar el tiempo de ejecucin de cada parte del programa. o Deteccin de c o rculos con la transformada de Hough. Mapa de probabilidad de ocupacin de p o xeles, para el caso de objetos rojos se puede observar en la Figura 3.12 Distribuciones gausianas que podemos ver en