Grado en Ingeniería en Tecnologías de Telecomunicación Telekomunikazio Teknologien Ingeniaritzako Gradua Proyecto n de grado Gradu amaierako proiektua Diseño e implementación de laboratorio remoto para la experimentación con el principio de Arquímedes mediante arquitectura asíncrona distribuida. Gustavo Martín Vela Director: Ignacio Angulo Martínez Bilbao, Julio de 2013 Resumen Como parte de la educación, también en la física, existen una serie de principios que es fundamental que los estudiantes entiendan para poder progresar hacia un conocimiento avanzado y, cuya asimilación se facilita mediante la demostración. A menudo, esto puede implicar que los profesores realicen una serie de experimentos. Sin embargo, a veces puede resultar interesante para los estudiantes el hecho de descubrir los conceptos de primera mano, en base a su propia experiencia. Este es el caso del principio de Arquímedes. El objeto de este Proyecto Fin de Grado es el diseño e implementación de un laboratorio remoto basado en el Principio de Arquímedes, que permita a los estudiantes descubrir los efectos que las diferentes densidades y materiales tienen sobre la flotabilidad de los objetos. A tal efecto, se ha desarrollado un acuario equipado con una serie de poleas controladas por una Raspberry PI. Estas poleas controlan el izado y el arriado de una serie de objetos sumergibles esféricos rellenados con diferentes líquidos. Gracias al uso de un sistema de visión artificial gestionado desde una PandaBoard ES, los estudiantes pueden encontrar el nivel del agua y determinar el porcentaje que los objetos sumergibles están por encima o por debajo de ella. Estos datos pueden ser utilizados para calcular varios parámetros y determinar con qué líquido está lleno cada objeto sumergible. Descriptores Laboratorios remotos, WebLab-Deusto, visión artificial, principio de Arquímedes, educación online iii Índice 1 Objetivos y alcance 1 1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Objetivos Socio Económicos. . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Objetivos Tecnológicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Alcance del Proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Subsistema de manipulación y gestión remota del laboratorio . . . . . . . . . . 1.2.2 Implementación de RLMS en plataforma embebida de bajo coste . . . . . . . . 1.2.3 Implementación de una interfaz sencilla para el manejo del laboratorio remoto . 1.2.4 Implementación de visión artificial para el laboratorio remoto . . . . . . . . . 2 Estado del arte 2.1 RLMS . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 MIT iLabs . . . . . . . . . . . . . . . . . . . 2.1.2 LabShare Sahara . . . . . . . . . . . . . . . . 2.1.3 WebLab Deusto . . . . . . . . . . . . . . . . 2.1.4 Otros sistemas . . . . . . . . . . . . . . . . . 2.1.5 Comparación entre los RLMS más relevantes . 2.2 Tipos de Arquitecturas de Red . . . . . . . . . . . . . 2.2.1 Arquitectura Centralizada . . . . . . . . . . . 2.2.2 Arquitectura Distribuida . . . . . . . . . . . . 2.2.3 Arquitectura Mixta. . . . . . . . . . . . . . . 2.2.4 Comparación entre las arquitecturas propuestas 2.3 Visión Artificial . . . . . . . . . . . . . . . . . . . . 2.3.1 Librerías para Visión Artificial. . . . . . . . . 2.3.2 Formatos de archivo de imagen . . . . . . . . 2.4 Hardware . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Mecatrónica . . . . . . . . . . . . . . . . . . 2.4.2 Plataformas embebidas. . . . . . . . . . . . . 2.4.3 Cámaras e iluminación . . . . . . . . . . . . . 1 3 5 5 6 6 7 7 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Justificación de las tecnologías utilizadas 3.1 Subsistema de manipulación y gestión remota del laboratorio . . . 3.1.1 Arquitectura del subsistema . . . . . . . . . . . . . . . . 3.1.2 Dispositivo embebido y sistema operativo asociado . . . . 3.1.3 Mecatrónica . . . . . . . . . . . . . . . . . . . . . . . . 3.1.4 Servicios web . . . . . . . . . . . . . . . . . . . . . . . 3.1.5 Lenguajes de programación . . . . . . . . . . . . . . . . 3.2 Implementación de RLMS en plataforma embebida de bajo coste. 3.2.1 RLMS . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Dispositivo embebido y sistema operativo asociado . . . . 9 10 13 14 17 18 19 19 20 21 22 23 23 27 30 30 38 43 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 52 52 53 55 55 56 56 57 v 3.3 Implementación de una interfaz sencilla para el manejo del laboratorio remoto . 3.3.1 Interfaz web para laboratorios gestionados. . . . . . . . . . . . . . . . 3.3.2 Interfaz web para laboratorios no gestionados . . . . . . . . . . . . . . 3.4 Implementación de visión artificial para el laboratorio remoto . . . . . . . . . 3.4.1 Dispositivos de captura de imágenes. . . . . . . . . . . . . . . . . . . 3.4.2 Dispositivo embebido y sistema operativo asociado . . . . . . . . . . . 3.4.3 Software de procesado de imágenes . . . . . . . . . . . . . . . . . . . 3.4.4 Tipos de formatos de imagen . . . . . . . . . . . . . . . . . . . . . . 3.4.5 Iluminación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Diseño e Implementación 65 4.1 Subsistema de manipulación y gestión remota del laboratorio . . . . . . . . . . 4.1.1 Dispositivo embebido y mecatrónica. . . . . . . . . . . . . . . . . . . 4.1.2 Servicios web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Implementación de RLMS en plataforma embebida de bajo coste. . . . . . . . 4.3 Implementación de una interfaz sencilla para el manejo del laboratorio remoto . 4.3.1 Interfaz web para laboratorio gestionado. . . . . . . . . . . . . . . . . 4.3.2 Interfaz web para laboratorio no gestionado . . . . . . . . . . . . . . . 4.4 Implementación de visión artificial para el laboratorio remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Planificación 5.1 Planificación económica . . . . . . . . . 5.1.1 Planificación de costes y recursos 5.1.2 Ingresos y mercado . . . . . . . 5.2 Planificación de tiempos . . . . . . . . . 58 58 59 59 60 61 61 63 63 65 65 72 79 83 83 85 86 105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Conclusiones y trabajo futuro 6.1 Resultados del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Integración completa del laboratorio en el entorno Graasp. . . . . . . . 6.2.2 Integración completa del laboratorio no gestionado en WebLab-Deusto . 6.2.3 Mejoras en la interfaz gráfica de usuario. . . . . . . . . . . . . . . . . 6.2.4 Mejoras en el sistema de izado y arriado de elementos sumergibles . . . 6.2.5 Diseño de una nueva versión del laboratorio . . . . . . . . . . . . . . . 105 105 109 111 113 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 114 114 114 116 116 117 Agradecimientos 119 Referencias 124 Anexos 125 A B vi Tareas y Diagramas de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Mockups del proyecto GO-Lab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Índice de Figuras 1.1 1.2 1.3 Interfaz del laboratorio remoto para física WebLab-Deusto Visir.. . . Modelo de federación de WebLab-Deusto. . . . . . . . . . . . . . . . . Arquitectura planteada para el laboratorio. . . . . . . . . . . . . . . . 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 2.29 2.30 2.31 Arquitectura de iLabs para experimentos por lotes. . . . . . . Gestión interna de colas en el servidor de laboratorio. . . . . . Arquitectura de iLabs para experimentos interactivos. . . . . . Arquitectura de Labshare Sahara. . . . . . . . . . . . . . . . . . Arquitectura local de WebLab-Deusto. . . . . . . . . . . . . . . Diagrama de componentes de VLCAP. . . . . . . . . . . . . . . . Ejemplo de arquitectura centralizada. . . . . . . . . . . . . . . . Ejemplo de arquitectura distribuida.. . . . . . . . . . . . . . . . Ejemplo de arquitectura mixta. . . . . . . . . . . . . . . . . . . . Proceso de segmentación de una imagen con LTI. . . . . . . . . Imagen obtenida con VXL aplicando un ltro de contornos. . OpenCV diferenciando colores dentro de una Raspberry PI. . . Diferencia de tamaño de los formatos principales en la web. . Imagen de un motor paso a paso de una impresora. . . . . . . Imagen de un servomotor.. . . . . . . . . . . . . . . . . . . . . . Motor DC extraído de un juguete. . . . . . . . . . . . . . . . . . Representación básica de una polea. . . . . . . . . . . . . . . . Diseño de la polea a medida en CAD. . . . . . . . . . . . . . . . Kit de piezas de MakerBeam. . . . . . . . . . . . . . . . . . . . . Propaganda de Erector de los años 70. . . . . . . . . . . . . . . Piezas sueltas de Lego Mindstorm.. . . . . . . . . . . . . . . . . Infografía de una Raspberry PI modelo B. . . . . . . . . . . . . Imagen de la PandaBoard ES. . . . . . . . . . . . . . . . . . . . . Imagen de la Arduino Mega 2560. . . . . . . . . . . . . . . . . . Imagen del Fit-PC2. . . . . . . . . . . . . . . . . . . . . . . . . . . Imagen de la Beagleboard. . . . . . . . . . . . . . . . . . . . . . Camara D-Link DCS-5220. . . . . . . . . . . . . . . . . . . . . . . Camara D-Link DCS-930L. . . . . . . . . . . . . . . . . . . . . . . Iluminacion posterior difusa y direccional. . . . . . . . . . . . . Iluminacion frontal oblicua y direccional. . . . . . . . . . . . . . Iluminacion de campo oscuro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 12 12 14 16 18 20 21 22 24 25 26 28 32 32 33 34 35 36 37 38 39 40 40 41 42 44 45 46 47 47 3.1 3.2 3.3 Polea diseñada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comparación de rendimiento de librerías de Visión Arti cial . . . . . Imagen de el acuario con la iluminación seleccionada. . . . . . . . . . 54 62 64 4.1 4.2 Diagrama de pines de la Raspberry PI usando la librería WiringPI. . . Esquemático de la PCB diseñada.. . . . . . . . . . . . . . . . . . . . . . 66 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4 8 vii viii 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24 4.25 4.26 4.27 4.28 4.29 4.30 Parte delantera de la PCB diseñada. . . . . . . . . . . . . . . . . . . . Parte trasera de la PCB diseñada.. . . . . . . . . . . . . . . . . . . . . PCB montada sobre la Raspberry PI. . . . . . . . . . . . . . . . . . . . Poleas y estructura montadas sobre el acuario. . . . . . . . . . . . . Poleas y estructura montadas sobre el acuario. . . . . . . . . . . . . Interfaz web de WebIOPI. . . . . . . . . . . . . . . . . . . . . . . . . . Página principal de WebLab-Deusto. . . . . . . . . . . . . . . . . . . Proceso de creación de un usuario para la federación. . . . . . . . . Proceso de creación de un experimento. . . . . . . . . . . . . . . . . Interfaz web del laboratorio gestionado. . . . . . . . . . . . . . . . . Interfaz web del laboratorio no gestionado. . . . . . . . . . . . . . . Disposición de las cámaras en el acuario. . . . . . . . . . . . . . . . . Captura de imagen de la cámaras de la derecha. . . . . . . . . . . . Aplicacion de la funcion boundingRect(). . . . . . . . . . . . . . . . . Captura de imágenes cambiando el contraste. . . . . . . . . . . . . . Captura de imágenes cambiando el brillo. . . . . . . . . . . . . . . . Aplicacion del desenfoque gaussiano.. . . . . . . . . . . . . . . . . . Diferencia entre los diferentes valores para la función de Canny().. Aplicacion del ltro Canny sobre la imagen en escala de grises. . . Aplicacion de diferentes transformadas de Hough. . . . . . . . . . . Tiempos de procesado en segundos. . . . . . . . . . . . . . . . . . . Capturas con diferentes umbrales del acumulador. . . . . . . . . . . Proceso hasta llegar a aplicar un umbral a la imagen. . . . . . . . . Aplicación de algoritmos para la búsqueda de guras. . . . . . . . . Circunferencia corregida. . . . . . . . . . . . . . . . . . . . . . . . . . Imagen con texto sobre la posición de los elementos sumergibles. Comparación de tiempos (en segundos) con y sin paralelización.. . Interfaz web de Supervisor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 69 70 71 72 76 81 82 82 85 86 87 89 90 91 91 92 93 94 96 97 98 100 100 101 102 102 104 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 Costes asociados a los Recursos humanos. . . . . . . . . . . . . . . . . Costes asociados a los Recursos hardware. . . . . . . . . . . . . . . . . Costes asociados a los Recursos Software. . . . . . . . . . . . . . . . . Costes asociados al material fungible.. . . . . . . . . . . . . . . . . . . Costes jos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Costes jos mensuales. . . . . . . . . . . . . . . . . . . . . . . . . . . . Porcentaje de penetración. . . . . . . . . . . . . . . . . . . . . . . . . . Estimación de penetración en el mercado. . . . . . . . . . . . . . . . . Estimación de ingresos anuales. . . . . . . . . . . . . . . . . . . . . . . Diagrama de ujos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de tareas primarias para la consecucion de este proyecto. 106 107 108 108 108 109 110 110 110 111 111 6.1 Interfaz de usuario del laboratorio en Graasp. . . . . . . . . . . . . . . 115 Índice de Tablas 2.1 2.2 2.3 2.4 2.5 Comparación de algunas características de los RLMS más relevantes Comparativa entre los principales formatos de imagen en web. . . . Comparativa entre los tipos de motores propuestos. . . . . . . . . . . Comparación de CPU y GPU de las plataformas embebidas. . . . . . . Comparación de las comunicaciones de las plataformas embebidas.. 18 30 34 43 43 3.1 Comparativa entre los motores seleccionados.. . . . . . . . . . . . . . 54 ix Índice de Bloques de Código fuente 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24 4.25 4.26 Comando para la grabacion de Raspbian en la tarjeta SD. . . . . . . . De nicion de la struct motor. . . . . . . . . . . . . . . . . . . . . . . . . Main de programa del motor. . . . . . . . . . . . . . . . . . . . . . . . Funcion turnMotor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcion setMotor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servicio web para devolver el estado de los elementos sumergibles. Servicio web para mover los elementos sumergibles. . . . . . . . . . URL /get_status/ con parametro ALL. . . . . . . . . . . . . . . . . . . . URL /get_status/ con parametro numerico. . . . . . . . . . . . . . . . . URL /calibrate_elements/. . . . . . . . . . . . . . . . . . . . . . . . . . . URL /show_element/. . . . . . . . . . . . . . . . . . . . . . . . . . . . . URL /move_ball/. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comandos para bajarse el codigo fuente de WebLab-Deusto. . . . . . Instalacion de Java y Python. . . . . . . . . . . . . . . . . . . . . . . . . Instalacion de WebLab-Deusto. . . . . . . . . . . . . . . . . . . . . . . Creacion de instancias en WebLab-Deusto. . . . . . . . . . . . . . . . . Codigo para la creacion de un experimento en Java. . . . . . . . . . . Codigo para recortar la imagen necesario para la vision arti cial. . . Codigo para ajustar el contraste y el brillo en la imagen. . . . . . . . Codigo para cambiar de espacio de color. . . . . . . . . . . . . . . . . Codigo para aplicar el ltro canny a la imagen. . . . . . . . . . . . . . Codigo para aplicar la busqueda de lineas. . . . . . . . . . . . . . . . . Codigo para aplicar la busqueda de circulos. . . . . . . . . . . . . . . . Otro codigo para aplicar la busqueda de circulos. . . . . . . . . . . . . Codigo para generar nuevas imagenes. . . . . . . . . . . . . . . . . . . URL /image_medium_processed/. . . . . . . . . . . . . . . . . . . . . . 66 73 74 74 75 76 77 78 78 78 79 79 80 80 80 80 84 89 90 92 93 95 98 99 101 103 xi PROYECTO FIN DE GRADO 1. OBJETIVOS Y ALCANCE La participación del autor en este proyecto se limita simplemente al desarrollo técnico de un laboratorio remoto basado en una arquitectura asíncrona distribuida que permita el aprendizaje de conceptos educativos asociados al Principio de Arquímedes. En este sentido, la parte pedagógica del proyecto no es obra del autor, pero sigue siendo una parte del análisis, con el fin de contextualizar adecuadamente el trabajo realizado en el proyecto. La siguiente lista de objetivos y requisitos presentará una visión general de los objetivos del proyecto. De acuerdo a lo especificado en el párrafo anterior, el autor se limitará a desarrollar los objetivos técnicos, así como supervisar los demás objetivos que tienen que ver más con la parte social y pedagógica. Estos últimos son parte de un esfuerzo continuo en el proyecto europeo GO-Lab. De hecho, una vez que el autor ha completado el desarrollo del laboratorio remoto para la experimentación, es decir, el aspecto técnico, el proyecto ha entrado en la fase de investigación pedagógica, donde toda la parte de interacción con el usuario del experimento será mejorada y, finalmente, se probará en situaciones reales. 1.1 OBJETIVOS Un laboratorio remoto es una combinación de hardware y software que permite a un estudiante controlar desde la distancia los dispositivos que están físicamente en un laboratorio. Este control, normalmente, se hace a través de una interfaz web. La experimentación mediante laboratorios remotos es una tendencia creciente en la educación. De hecho, y a modo de anécdota, la UOC (en catalán Universitat Oberta de Catalunya) imparte Másteres oficiales no presenciales aprobados por los diferentes colegios de ingenieros basados en laboratorios remotos. Estos laboratorios tratan de proporcionar una alternativa a los experimentos que se llevan a cabo en los laboratorios presenciales, permitiendo a los estudiantes realizar experimentos reales a través de Internet. Además, el acceso a estos recursos puede realizarse desde cualquier parte del mundo y en cualquier momento. A diferencia de los laboratorios virtuales y las simulaciones, los laboratorios remotos proporcionan a los usuarios experimentación real (Ma & Nickerson 2006). De esta forma, el alumno puede estar visualizando los resultados de su experimentación en tiempo real sin tener que estar físicamente en el lugar en el que se desarrolla del experimento. Además, estos laboratorios suponen un importante ahorro de costes, ya que el mismo laboratorio se puede llegar a compartir entre millones de personas. Es posible que todas estas personas pueden llegar a interactuar unas con otras durante el desarrollo del experimento. 1 1 OBJETIVOS Y ALCANCE Figura 1.1: Interfaz del laboratorio remoto para física WebLab-Deusto Visir. Una de las principales barreras históricas que ha frenado la evolución y expansión de los laboratorios remotos es la falta de definición entre los diferentes roles que intervienen tanto en el desarrollo, como en el consumo de laboratorios remotos. A menudo, en las universidades los equipos que investigan en experimentación remota han implementado laboratorios. Sin embargo, estos laboratorios remotos han estado enfocados al desarrollo de experimentos propios de las asignaturas que imparten estas universidades desde su particular perspectiva educativa. Podemos pensar entonces que tradicionalmente los laboratorios remotos se han desarrollado para consumo propio, dificultando su consumo desde otros centros educativos. Además, al vincular los laboratorios remotos con asignaturas específicas no se ha favorecido con carácter general, su reutilización en otras asignaturas ni cursos, y aún menos, su extensión a otros centros. Por tanto, se puede decir que nunca se ha pensado en los laboratorios remotos como un contenido educativo universal que se pueda compartir. Es precisamente esta polivalencia, una de las metas que persigue este proyecto. 2 PROYECTO FIN DE GRADO En este proyecto se pretende implementar un laboratorio remoto que permita la experimentación con un contenido educativo universal en áreas científico-tecnológicas (en inglés STEM, que viene de Science, Technology, Engineering and Mathematics). Este laboratorio tratará de proporcionar una píldora educativa que pueda ser consumida por multitud de usuarios con independencia de su localización, curso o asignatura. En este sentido se ha elegido el Principio de Arquímedes por ser un principio físico fácilmente demostrable visualmente y con una gran variedad de aplicaciones a lo largo de toda la carrera educativa de un niño o adolescente. Este Principio afirma que “un cuerpo total o parcialmente sumergido en un fluido en reposo, recibe un empuje de abajo hacia arriba igual al peso del volumen del fluido que desaloja”. Esto es exactamente lo que intenta plasmar este proyecto a través de diferentes herramientas que provee el laboratorio web. La idea de este experimento es que se pueda ser usado tanto por alumnos de primaria como por alumnos de secundaria, e incluso de ciertas carreras, cambiando únicamente las conclusiones a las que se pretende llegar. Hay que recalcar que este laboratorio remoto será ofrecido a más de 200 centros educativos europeos dentro del proyecto GO-Lab (Global Online Science Labs for Inquiry Learning at School) subvencionado por la Comisión Europeo dentro del Séptimo Programa Marco (FP7). GO-Lab proporciona laboratorios remotos en el ámbito de las ciencias para su consumo en gran escala en la educación. En este contexto el objetivo es implementar un laboratorio remoto que permita la experimentación con los conceptos educativos propios del Principio de Arquímedes a través de Internet. Para ello se utiliza una arquitectura asíncrona distribuida, basada en dispositivos de bajo coste, escalable y fácilmente accesible gracias al sistema de federación. 1.1.1 Objetivos Socio Económicos En disciplinas técnicas y científicas, así como en colegios de secundaria, la realización de experimentos en entornos reales es fundamental para consolidar los conceptos adquiridos en las aulas teóricas. Sin embargo, a causa de distintos motivos, los laboratorios reales no siempre están disponibles, lo cual sin duda, supone restricciones en el aprendizaje. Afortunadamente, las nuevas tecnologías basadas en Internet, pueden ser utilizadas para mejorar la accesibilidad a los experimentos. WebLab-Deusto, a través de estos experimentos tiene la intención de que los alumnos sean capaces de arraigar conocimientos en campos como la física, la química, el control, etc., e incluso que estas prácticas puedan irse extendiendo a otras áreas del conocimiento. Por otro lado, el gasto requerido para la adquisición y mantenimiento de un laboratorio dentro de un centro educativo para su utilización puntual es habitualmente difícilmente amortizable. Gracias a los laboratorios remotos, este coste puede ser compartido entre varias instituciones y siempre se gozará de una disponibilidad total del laboratorio. El modelo de gestión a través de federación del sistema WebLab-Deusto, no solo permite que cada instalación rentabilice su potencial, sino que además, es capaz de escalar el número de usuarios de los laboratorios gracias a que distribuye la carga de accesos entre los diferentes centros educativos que comparten recursos. Es decir, podría haber más de 3 1 OBJETIVOS Y ALCANCE una copia de cada laboratorio en diferentes centros, para mejorar la disponibilidad del experimento. Así, podría darse el caso de que, más de 600 estudiantes usaran un mismo laboratorio, a través del balanceo de carga de todos ellos en copias del laboratorio presentes en los diferentes centros educativos repartidos en todos los continentes. Figura 1.2: Modelo de federación de WebLab-Deusto. Además, este modelo permite crear una dinámica de intercambio de recursos que propicia que el sistema sea económicamente sostenible. Aquellos centros educativos dispuestos a compartir sus laboratorios pueden fijar unas directivas de uso determinando prioridades de acceso, marcando el tiempo de las sesiones e incluso limitando el acceso en base al número de sesiones o a restricciones basadas en el calendario. Este sistema de federación permite vender o intercambiar accesos a laboratorios, creando por tanto un mercado. Este proyecto persigue el diseño de una arquitectura que facilite la publicación a través de internet de los laboratorios presenciales instalados en centros educativos sin necesidad de que estos investiguen directamente en esta línea de investigación y, sin requerir grandes inversiones, mediante el empleo de dispositivos de bajo coste. 4 PROYECTO FIN DE GRADO 1.1.2 Objetivos Tecnológicos El principal objetivo tecnológico del presente proyecto es la implementación de un laboratorio remoto para la experimentación con el principio de Arquímedes mediante una arquitectura asíncrona distribuida. Una herramienta de estas características implica unos importantes retos tecnológicos y científicos que se pueden dividir en cuatro áreas: OT1. Implementación de una plataforma de gestión para el despliegue de laboratorios remotos mediante hardware de bajo coste. Desplegar un RLMS (Remote Laboratory Management System) en una plataforma embebida de bajo coste, proporcionando todas las herramientas que permitan la administración y configuración del mismo, así como la instalación para adaptarse a un entorno federado. OT2. Desarrollo de las comunicaciones mediante una arquitectura asíncrona distribuida. Desarrollo de todo el sistema de comunicaciones que permita la interacción entre los diferentes subsistemas necesarios para el desarrollo de un laboratorio remoto basado, sí es posible, en hardware y software libre. OT3. Desarrollo de la interfaz de usuario. Desarrollo de un interfaz de usuario mediante tecnologías RIA (Rich Internet Applications) que permita la experimentación conjunta y simultánea de profesores y estudiantes en una misma sesión. OT4. Procesamiento de imagen aplicado a acuario para el reconocimiento de objetos. Desarrollo de todo el software necesario para el procesamiento y reconocimiento de los diferentes objetos que se irán vertiendo al acuario para posibilitar la experimentación con el Principio de Arquímedes. 1.2 ALCANCE DEL PROYECTO El alcance de este proyecto comprende la realización de la implementación íntegra de un laboratorio remoto mediante el desarrollo de componentes reutilizables. Este proyecto tiene como finalidad la de facilitar el despliegue de laboratorios remotos por entidades no especializadas, como pueden ser centros educativos o instituciones sociales. Este sistma, que permitirá la experimentación con el principio de Arquímedes, servirá de prueba de concepto para una arquitectura asíncrona distribuida que establece los mecanismos de comunicación entre los subsistemas encargados de llevar a cabo las acciones propias de control de la experimentación y aquellos que administran el acceso remoto. Esta arquitectura estará basada en hardware de bajo coste, ya que la idea es que cualquier centro educativo o institución social tenga acceso a este tipo de laboratorio remoto independientemente de la capacidad de los recursos económicos de los que puedan disponer. Además, y gracias a la federación, estas entidades podrán compartir estos inputs con otras. 5 1 OBJETIVOS Y ALCANCE La arquitectura estará basado en los submódulos que se explican a continuación. Así, el desarrollo de una estructura compleja como esta puede ser dividida en varios subproblemas más simples, y éstos a su vez, en otros subproblemas más simples. Básicamente se ha separado el desarrollo de la estructura global en submódulos hasta obtener subproblemas lo suficientemente simples como para resolverlos fácilmente. Ésta técnica se llama refinamiento sucesivo, divide y vencerás o análisis descendente (en inglés, Top-Down). Cada uno de estos submódulos tiene una tarea bien definida y algunos necesitan de otros para poder operar. En el caso de los submódulos que necesitan de otros para poder funcionar, se comunican con éstos mediante una interfaz de comunicación bien definida. Podemos ver la arquitectura dividida en lo submódulos más abajo, en la figura 1.3 1.2.1 Subsistema de manipulación y gestión remota del laboratorio Este subsistema mecánico permitirá la experimentación y gestión del laboratorio, así, por ejemplo, algunas de sus tareas que realizará son el izado y arriado de elementos sumergibles, la medición de la temperatura del acuario, la alimentación de los peces del acuario, el encendido y apagado de luces en función de diferentes parámetros, etc. Este subsistema debe realizar estas tareas como procesos ligeros o hilos (del inglés threads), repartiéndose en el procesador de forma dinámica. Este subsistema contara con un núcleo de tiempo real que gestionará el reparto del tiempo del procesador. Además, todo esto debe ser realizado en plataformas hardware de bajo coste como la platarforma Raspberry PI, que tengan por lo menos un número mínimo de GPIOs (General Purpose Input Output) para llevar a cabo la gestión de los sensores. Además, este subsistema utilizará servicios web para sus comunicaciones. Así, todas las comunicaciones serán asíncronas, basadas en REST (Representational State Transfer), y a través de peticiones POST y GET. 1.2.2 Implementación de RLMS en plataforma embebida de bajo coste Uno de los principales propósitos de este proyecto se basa en la instalación del sistema de gestión de laboratorios remotos WebLab-Deusto en una plataforma embebida con núcleo ARM. Los procesadores ARM son, en la actualidad, procesadores de gran popularidad, incluso se podría decir que se encuentran en el interior de los gadgets más vendidos en el mercado. Dispositivos como teléfonos o tablets son algunos de los aparatos con procesadores ARM incorporado. Los procesadores ARM están enfocados a dar altas prestaciones, con un consumo reducido gracias a la arquitectura RISC. Los ARM son procesadores ágiles, sencillos de implementar y programar, de muy bajo consumo y a un coste muy reducido. De este modo, se consigue alcanzar uno de los principales objetivos del proyecto que es que los centros educativos puedan desplegar de forma sencilla y barata WebLab-Deusto y alguno de sus laboratorios de su elección, proporcionando todas las herramientas que permitan la administración y configuración del mismo. Además, tal y como se ha especificado anteriormente, gracias a la federación, podrían compartir sus laboratorios. 6 PROYECTO FIN DE GRADO 1.2.3 Implementación de una interfaz sencilla para el manejo del laboratorio remoto El sistema debe tener una aplicación web simple que permita desde el exterior hacer uso del sistema. Esta aplicación web estará diseñada como una RIA, y debera ser ejecutada sin problemas bajo navegadores web estandarizados, como puede ser Mozilla Firefox o Google Chrome. Este tipo de aplicaciones buscan mejorar la experiencia y productividad del usuario, así como visualizar la aplicación en cualquier tipo de dispositivo conectado a Internet. Además, la aplicación web estará dividida en módulos para poder implementar futuras mejoras, como hacer widgets con cada módulo sin apenas esfuerzo. Como ejemplos de módulos podrían señalarse el módulo de imagen procesada, el módulo de vídeo, el módulo de dar de comer a los peces, etc. 1.2.4 Implementación de visión artificial para el laboratorio remoto Este subsistema es específico de este laboratorio, ya que es difícilmente aplicable a otros, sin embargo, se estudiará la forma de aplicarlo a otros. En él, se llevara a cabo la detección, localización y reconocimiento de ciertos objetos en imágenes, en este caso objetos de diferentes colores y formas. También se evaluarán los resultados obtenidos para posteriormente pasarlos a la aplicación web que se creara. Se pretende también crear un registro de diferentes imágenes de una misma escena con sus objetos asociados para intentar hacer concordar un mismo objeto en diversas imágenes. Por último, se pretende hacer un seguimiento de los diferentes objetos en una secuencia de imágenes. Además, para que el subsistema de visión artificial funcione requiere de una cuidadosa elección del mejor tipo de luz adaptada al entorno que se plantea. 7 1 OBJETIVOS Y ALCANCE Figura 1.3: Arquitectura planteada para el laboratorio. 8 PROYECTO FIN DE GRADO 2. ESTADO DEL ARTE El presente proyecto tratará de implementar una arquitectura asíncrona distribuida basada en hardware de bajo coste en el contexto de un laboratorio remoto para experimentación con el principio de Arquímedes. En este sentido, el estado de la arte abarca varias áreas clave que necesitan ser identificados y analizadas por separado. En primer lugar, se intenta proporcionar una visión general de los RLMS (Remote Laboratory Management System) que poseen los laboratorios remotos actuales y más populares, así como los sistemas federación y autenticación que usan, y el diseño de la interfaz gráfica de usuario. En segundo lugar, el documento intenta recoger las principales arquitecturas de red presentes en los laboratorios remotos, así como las tendencias que han aparecido en los últimos años. En tercer lugar, se repasan las diferentes aplicaciones que existen para visión artificial enfocadas en laboratorios remotos y procesado de imagenes en movimiento, y por último, se hace un breve resumen del hardware de control que existe para este tipo de desarrollos, basicamente dispositivos embebidos adaptados. A pesar de que en estas areas clave no aparece explicitamente señalada la parte del software, si que se hace un pequeño estudio de las necesidades software en los puntos necesarios. Este capítulo queda por tanto dividido de la siguiente forma: • RLMS • Tipos de Arquitecturas de Red • Visión Artificial • Hardware 2.1 RLMS Judson Harward director del CECI (Center for Educational Computing Initiatives), y presidente del GOLC (Global Online Laboratories Consortium), donde se acuñó el término RLMS, subrayó durante la keynote de la conferencia GOLC’2011 “en el mundo existen tres grandes RLMS capaces de ofrecer autenticación, autorización, planificación, seguimiento de los usuarios, y además, ser reusables de un laboratorio a otro: MIT iLabs, Labshare Sahara, y WebLab-Deusto”. Existen algunos más que cumplen, en parte, los requisitos expuestos en las líneas anteriores y que resulta preciso mencionar. 9 2 ESTADO DEL ARTE A continuación se describen las principales características de cada una de estas plataformas comentadas anteriormente: • MIT iLabs • Labshare Sahara • WebLab-Deusto • Otros sistemas Por ultimo se hara una pequeña comparación entre las características que mas interesan en este proyecto de los RLMS más relevantes 2.1.1 MIT iLabs El CECI, perteneciente al MIT (Massachusetts Institute of Technology), ha desarrollado un sistema de gestión de laboratorios remotos llamado ISA (iLab Shared Architecture). Este sistema de gestión de laboratorios remotos es, actualmente, el más extendido en todo el mundo, con diferentes iniciativas para compartir laboratorios de Europa, Australia, Asia y Estados Unidos. Es también el primer RLMS que incluyó la federación como una característica nativa (Harward, Del Alamo, Lerman, Bailey, Carpenter, DeLong, Felknor, Hardison, Harrison, Jabbour et al. 2008). En 2001 ILabs desplegó una nueva arquitectura basada en servicios web, que posteriormente se convirtió en una infraestructura común para todos los laboratorios. Su desarrollo fue liderado completamente por el CECI. Esta arquitectura, denominada ISA permite compartir de forma nativa los laboratorios entre diferentes universidades. Como simple curiosidad, WebLab-Deusto pasó en 2004 a formar parte de la ISA. Esta arquitectura en sus comienzos solo soportaba el concepto de laboratorios por lotes, donde las tareas propuestas por los estudiantes se ejecutaban y los resultados eran devueltos posteriormente. Los estudiantes no eran capaces de interactuar con el laboratorio durante el tiempo asignado. Sin embargo, en 2007 la ISA comenzó a desarrollar laboratorios interactivos, que permitían a los estudiantes interactuar en tiempo real con ciertos elementos hardware, y verlo al mismo tiempo. El sistema de iLabs divide los experimentos en dos categorías principales: • Laboratorios por lotes (gestionados mediante colas) • Laboratorios interactivos (gestionados a través de reservas) La arquitectura de los laboratorios por lotes se representa en la Figura 2.1. En la figura, hay dos campus que podrían ser dos universidades diferentes. Cada campus tiene un servidor de laboratorio (en inglés Lab Service) que es el sistema de software sujeto al equipo final que será utilizado por los estudiantes, y contiene la lógica de la que depende directamente el laboratorio. Además, cada campus tiene un proveedor de servicios (en 10 PROYECTO FIN DE GRADO inglés Service Broker), que es el servidor que realiza el logueo de usuarios, la gestión de permisos y la gestión de accesos. Figura 2.1: Arquitectura de iLabs para experimentos por lotes. Los estudiantes inician sesión en el proveedor de servicios de su campus, donde tienen un conjunto de credenciales y permisos para acceder a sus cuentas. Una vez iniciada la sesión, los alumnos son capaces de utilizar esos experimentos con independencia del lugar dónde se encuentren. De esta manera, si un estudiante de la Universidad “A” quiere utilizar un laboratorio ubicado en la Universidad “B”, el estudiante inicia la sesión en el proveedor de servicios de la Universidad “A” y transfiere las peticiones a este proveedor de servicios. El proveedor de servicios de la Universidad “A” las reenvía al servidor de laboratorio de la Universidad de “B” directamente, y le devuelve al estudiante la respuesta generada por este servidor de laboratorio. Todas estas comunicaciones están implementadas con SOAP. La cola está gestionada por el servidor de laboratorio, en la medida en que puede ser contactado por los estudiantes de diferentes proveedores de servicios al mismo tiempo. El servidor de laboratorio ofrece una interfaz Web para su gestión. Este servicio de gestión de las colas podría aplicarse de diferentes maneras por diferentes servidores de laboratorios, siempre y cuando mantengan la misma interfaz. La cola se gestiona a través una base de datos intermedia. Como se ve en la figura 2.2, el servidor valida los experimentos antes de agregarlos a la cola. De esta manera, la cola solo se llena con experimentos válidos, por lo que los estudiantes que no presentan experimentos válidos no tienen que esperar para conseguir una ranura de tiempo. Internamente otro proceso recogerá y procesará los experimentos desde la base de datos. 11 2 ESTADO DEL ARTE Figura 2.2: Gestión interna de colas en el servidor de laboratorio. La arquitectura de los laboratorios interactivos se representa en la figura 2.3. El objetivo de esta arquitectura es optimizar la comunicación entre el cliente y el servidor de laboratorio. En la arquitectura por lotes esto es irrelevante, ya que no existe comunicación entre ellos. Para optimizar esta comunicación se usa una conexión directa entre nodos, utilizando un protocolo elegido por el desarrollador del servidor de laboratorio. La comunicación entre los diferentes servidores implicados a nivel ISA se basa en SOAP. Figura 2.3: Arquitectura de iLabs para experimentos interactivos. 12 PROYECTO FIN DE GRADO Dado que los experimentos interactivos en iLab duran alrededor de 20 minutos, se ha desarrollado un sistema de reservas. Además, dado que estos laboratorios son federados, hay diferentes actores que pueden influir en las reservas de distintas formas. Por ejemplo, es posible que los administradores del lado de los estudiantes tengan que cambiar las reservas en algún momento. También es posible que los administradores del lado del laboratorio tengan que realizar este proceso (por ejemplo, por un cambio en la planificación del laboratorio planificada o no). 2.1.2 LabShare Sahara Labshare Sahara es un sistema de gestión de laboratorios remotos desarrollado por la UTS (University of Technology Sydney) como parte del proyecto Labshare. En mayo de 2010 varios laboratorios remotos migraron para proporcionar una administración centralizada común, entendiéndose este como un RLMS (Lowe, Murray, Weber, de la Villefromoy, Johnston, Lindsay, Nageswaran & Nafalski 2009). En enero de 2011, se incorporaron varios cambios, como el desarrollo de reservas basadas en el calendario, y algunas más. En esta sección, se discutira sólo la última versión, ya que es la que se usa actualmente. La arquitectura del Labshare Sahara está compuesta por tres componentes principales. Las interacciones entre estos componentes se pueden ver descritas en la Figura 2.4: • La Interfaz Web (WI, en inglés web interface), desarrollado en PHP, gestiona la interfaz de usuario básica para la aplicación de autenticación, las tareas de administración, se muestran los permisos, etc. • El servidor de programación, desarrollado en Java utilizando la infraestructura OSGi (Open Services Gateway initiative) y gestiona la asignación de los recursos, los contactos de los laboratorios para comprobar si están rotos los sistemas, y lleva a cabo todo el proceso de planificación. • El cliente Rig, escrito en Java, que es el componente de software que se ejecuta en el equipo final. Labshare Sahara posee una de los más complejos, avanzados y potentes sistemas de programación en los laboratorios remotos. Es compatible con el balanceo de carga local, por lo que el sistema puede gestionar más de una copia de cada laboratorio. En efecto, en la UTS hay desplegadas varias copias de los laboratorios y los estudiantes van siendo balanceados entre ellos automáticamente por el sistema según van entrando. Además, el planificador divide los recursos desde los laboratorios solicitados, para que los estudiantes hacer una petición a un laboratorio llamado, por ejemplo, medida de fuerzas. Mientras que unos estudiantes están haciendo solicitudes a medida de fuerzas otros pueden hacer solicitudes a medida de fuerzas vertical y otros a medida de fuerzas horizontal. De esta manera, un recurso puede servir a más de un tipo de laboratorio. Por ejemplo, el laboratorio de medida de fuerzas vertical puede servir a los estudiantes que solicitan medida de fuerzas vertical y medida de fuerzas. 13 2 ESTADO DEL ARTE Además, Labshare Sahara posee un sistema de reservas en el que los estudiantes eligen si así lo desean usar el sistema de colas (es decir, ”quiero usar el laboratorio tan pronto como sea posible”) o a través de las reservas (es decir, ”prefiero usarlo mañana a una hora concreta”). Figura 2.4: Arquitectura de Labshare Sahara. 2.1.3 WebLab Deusto WebLab-Deusto es un RLMS de código abierto que se utiliza con los estudiantes de la Universidad de Deusto desde febrero de 2005 como una herramienta esencial para sus prácticas de laboratorio en diferentes materias relacionados con la ingeniería. Desde WebLabDeusto se ofrecen experimentos reales como FPGAs, CPLDs, microcontroladores PICs, etc. a un cierto grupo de usuarios a través de Internet. La experiencia de la utilización de los experimentos que tienen los estudiantes es exactamente la misma a la que obtendrían si estuvieran delante de un laboratorio tradicional. WebLab-Deusto ofrece una arquitectura de software distribuida, abierta y escalable que facilita la integración de nuevos experimentos (WebLab-Deusto 2005 onwards). Existen dos tipos de experimentos: • Experimentos gestionados, en los que WebLab-Deusto permite que el desarrollador del experimento utilice cualquiera de las tecnologías web comunes para el lado del cliente como JavaScript, Flash, applets de Java, etc. y exige que use la tecnología para el lado del servidor que WebLab-Deusto provee. WebLab-Deusto cuenta con bibliotecas para C, C++, NET, LabVIEW, Java. y Python. • Experimentos no gestionados, donde el desarrollador del experimento coloca una aplicación en una máquina virtual y WebLab-Deusto gestiona el control de acceso a la máquina virtual. 14 PROYECTO FIN DE GRADO Los dos tipos de experimento tienen las ventajas de todas las características comunes aplicadas para el RLMS WebLab-Deusto, que son: • Autenticación: WebLab-Deusto ofrece un sistema de autenticación extensible que soporta nombre de usuario y contraseña almacenadas en una base de datos MySQL, servidores LDAP remotos, comprobación de credenciales de OpenID para el acceso desde otras universidades o Facebook, y autenticación basada en la dirección IP del cliente. • Gestión de colas: WebLab-Deusto gestiona diferentes colas de reserva para las diferentes plataformas experimentales disponibles, así como balanceo de carga en los diferentes tipos de experimentos disponibles. • Escalabilidad: La arquitectura de WebLab-Deusto escala horizontalmente y tiene herramientas de prueba disponibles para probar diferentes implementaciones. • Seguridad: La arquitectura distribuida WebLab-Deusto mantiene en forma aislada el hardware dependiente de la experimentación, y el software, por lo que cualquier problema relacionado con un mal uso del experimento nunca puede poner todo el laboratorio remoto en riesgo. • Implementación: El sistema de implementación WebLab-Deusto hace fácil y flexible configurar la red distribuida en la que están implicados todos los servidores y experimentos. • Seguimiento del usuario: Los usos del laboratorio remoto se guardan automáticamente. En el caso de los experimentos gestionados, se almacenan incluso los comandos intercambiados entre el servidor y el cliente. La cantidad de eventos a registrar depende de lo que decida el administrador. • Administración: WebLab-Deusto ofrece herramientas de administración que permiten llevar a cabo fácilmente tareas de administración como la monitorización de usuarios en tiempo real, comprobación de accesos, añadir o quitar permisos a usuarios y grupos, etc. • Facebook: WebLab-Deusto se integra con Facebook, por lo que los usuarios pueden vincular sus cuentas y utilizarlo con herramientas que proporciona Facebook como el chat. • Dispositivos móviles: La interfaz de usuario de WebLab-Deusto también está adaptado para dispositivos móviles, y los experimentos gestionados están adaptados para proporcionar una versión más rápida y fácil de usar. • Extensible: Cualquier experimento existente se puede adaptar a WebLab-Deusto. Por poner un ejemplo, el Proyecto VISIR se adaptó a WebLab-Deusto. WebLab-Deusto utiliza una arquitectura de capas. Los usuarios proporcionan sus credenciales a un servidor aislado llamado servidor de entrada. Este servidor valida las credenciales, y si son válidas se pone en contacto con el servidor central para solicitar una nueva sesión. 15 2 ESTADO DEL ARTE Desde este punto de vista, los usuarios interactuan con el servidor central. El servidor central realiza todas las operaciones de la lógica de negocio como comprobar si los usuarios están autorizados a usar un laboratorio y en concreto, extraer la información personal del usuario, comunicarse con otros entornos federados, seguimiento de los usuarios, etc. Además, la mayoría de las interacciones con los experimentos pasan por este servidor, y será él el que las transmitirá al servidor adecuado para acceder a los laboratorios solicitados. Figura 2.5: Arquitectura local de WebLab-Deusto. WebLab-Deusto está construido sobre los siguientes cuatro supuestos relacionados: • Todas las peticiones que hacen los usuarios se envían al servidor central, el cual los envía con seguridad a el servidor de cada laboratorio, y éste los envía al servidor final del experimento. De esta manera, ni el servidor de laboratorios ni el servidor de experimento necesita tener una dirección IP pública. • Incluso si el servidor de experimento se encuentra en una red no fiable, el servidor de laboratorios garantiza que los mensajes se envían de forma segura desde el servidor central al lugar donde se encuentra. • Dado que toda la interacción se gestiona a través del servidor central, el es el que registra todas las interacciones. Si un usuario quiere llevar a cabo una acción malintencionada, puede acceder al servidor de experimento, puede romperlo, pero no hay forma de que modifique o acceda a la información enviada por otros usuarios. Tampoco es posible que un servidor de experimento quede mal programado o se manipule un equipo para detener el logueo de interacciones en el servidor central. 16 PROYECTO FIN DE GRADO • Las capas de seguridad requeridas pueden ser adoptadas por el servidor de laboratorios, e interactuar con el servidor de experimento. Este servidor de experimento se puede desarrollar en cualquier lenguaje de programación. Estas interacciones se muestran en la Figura 2.5, que resume la arquitectura local de WebLab-Deusto. En esta figura, se puede ver cómo los estudiantes conectan al servidor central, que envía las peticiones al servidor de laboratorios de la habitación 2, que envía las peticiones a los servidores particulares de cada experimento. Sin embargo, la adición de más capas añade dos inconvenientes: • Latencia: si se añaden más capas, más tiempo se necesitará para que un mensaje sea enviado al hardware final. • Flexibilidad: algunos protocolos (como RDP, VNC o SSH) simplemente no pueden ser reenviados como un conjunto de mensajes de comando. 2.1.4 Otros sistemas Existen otros sistemas que se diferencian de los anteriores RLMS en que no cumplen con todas las características citadas anteriormente, pero que sin embargo ofrecen características muy similares. VLCAP es una plataforma que tiene como objetivo el desarrollo rápido de laboratorios remotos dentro de instituciones académicas con unas nociones básicas de programación. Permite también la compartición de todos los laboratorios entre las diferentes instituciones implicadas en el proyecto. Además, y como característica principal tiene un sistema que permite que cada laboratorio pueda ser compartido hasta por mil personas a la vez para poder trabajar juntos. VLCAP tiene implementados repositorios de laboratorios, un sistema de gestión de laboratorios con autenticación basada en diferentes estándares y reservas, y sistemas para el despliegue rápido de nuevos laboratorios. Lab2go es un repositorio semántico de laboratorios remotos, sobre la base de ontowiki. El proyecto podría parecerse en algunas de las características a los sistemas de gestión de laboratorios remotos, ya que muestra una lista de los laboratorios disponibles en diferentes universidades. Sin embargo, garantizar acceso o gestionar la planificación de los laboratorios está fuera del alcance de Lab2go, ya que su única finalidad es la de mantener una lista actualizada de los laboratorios existentes, con la documentación, los lugares, y semánticamente clasificado. Lab2go es una gran herramienta para buscar laboratorios remotos. Con la misma idea de Lab2go, pero con el apoyo del GOLC y la Comunidad Europea, existe otro repositorio, no semántico, de los laboratorios remotos llamado LiLa (Library of Labs). LiLa es un portal de acceso a laboratorios remotos. Incluye servicios como sistemas de planificación, conexión a los recursos de las bibliotecas, sistema de tutorías, entornos 3D para la colaboración en línea, etc. Asimismo, LiLa crea un marco organizativo para el intercambio de experiencias entre las instituciones y para el acceso a los laboratorios remotos y ofrece ayuda didáctica para el profesorado en la integración de experimentos remotos y virtuales en los programas educacionales. 17 2 ESTADO DEL ARTE Figura 2.6: Diagrama de componentes de VLCAP. Existen dos proyectos que se ajustan a la definición de los sistemas de gestión de laboratorios remotos (RLMS) y se han desarrollado con la colaboración de estudiantes reales, pero por limitaciones técnicas no les ha sido posible desarrollar más de un laboratorio. El primero de estos proyectos, es el proyecto NETLab. Este proyecto constituye un laboratorio de electrónica remota desarrollado por la UniSA (University of South Australia), basado en una una profunda investigación sobre la programación de sistemas. El segundo de los referidos proyectos hace referencia a RVLab, proyecto que se ha desplegado como un laboratorio de domótica, pero que ha sido diseñado para soportar cualquier tipo laboratorio a través de XML-RPC API (Muros-Cobos & Holgado-Terriza 2012). 2.1.5 Comparación entre los RLMS más relevantes Laboratorios por lotes Laboratorios Interactivos Gestión de colas Balanceo de carga local Federación Labshare sahara 7 3 3 3 3 MIT iLabs 3 3 3 7 3 WebLab-Deusto 3 3 3 3 3 Tabla 2.1: Comparación de algunas características de los RLMS más relevantes 18 PROYECTO FIN DE GRADO 2.2 TIPOS DE ARQUITECTURAS DE RED La arquitectura de red es el medio más efectivo en cuanto a costos para desarrollar e implementar un conjunto coordinado de productos que se puedan interconectar. La arquitectura es el “plan” con el que se conectan los dispositivos de hardware, software y los protocolos. Esto redunda en benéficio tanto para los usuarios de la red como para los proveedores de hardware y software. Básicamente se puede señalar la existencia de tres tipos diferentes de arquitecturas de red, aunque realmente el tercer tipo, la arquitectura mixta, resulta de una combinación de las dos primeras. Estas arquitecturas de red son las siguientes: • Arquitectura Centralizada • Arquitectura Distribuida • Arquitectura Mixta Además, se ha desarrollado una pequeña comparativa de las características más interesantes de las mismas. 2.2.1 Arquitectura Centralizada La arquitectura centralizada se refiere a la arquitectura en la que el control, monitoreo y supervisión de los diferentes dispositivos y componentes se deben conectar directamente, bien por cables o de forma inalámbrica, hasta un sistema de control central, como puede ser un servidor central. Este sistema es el principal centro de control de la red, ya que recibe y reúne la información de todos los sensores que posee cada uno de los diferentes dispositivos físicos de la red, toma las decisiones y se las envía a los elementos actuadores para que ejecuten la tarea asignada, o bien lo envía a otra red que lo solicite por medio de Internet. El mayor inconveniente de este tipo de arquitectura radica en que cualquier fallo en el servidor central deja fuera de servicio el sistema en su totalidad. Esto significa una reducción en las posibilidades de desarrollo en cuanto a la robustez e implementación en grandes instalaciones y apunta a unas reconfiguraciones muy costosas. El bajo costo que representa este tipo de arquitectura, que permite tener un solo dispositivo central del que dependan otros dispositivos o directamente sensores, es su principal ventaja frente a otras, puesto que los elementos que la componen muchas veces no necesitan ni siquiera módulos adicionales para el direccionamiento, ni interfaces de comunicaciones para distintos buses. También es importante destacar la sencillez en la instalación y la compatibilidad entre la gran variedad de elementos y dispositivos que ofrece el mercado. 19 2 ESTADO DEL ARTE Figura 2.7: Ejemplo de arquitectura centralizada. 2.2.2 Arquitectura Distribuida La arquitectura distribuida se define como una colección de dispositivos separados físicamente y conectados entre sí por una red de comunicaciones distribuida; cada dispositivo posee sus propios componentes hardware y software, pero el usuario lo percibe como un solo sistema (no necesita saber qué cosas están en cada dispositivo). Así, el usuario puede acceder a los recursos remotos de la misma manera en que accedería a recursos locales (Garcia-Zubia, Orduña, Angulo, Irurzun & Hernández 2008). Estos sistemas se caracterizan por ser una topología de red ausente de un centro individual o colectivo. Los nodos se vinculan unos a otros de modo que ninguno de ellos tiene poder de filtro sobre la información que se transmite en la red. Desaparecen por tanto los nodos centrales característicos de las redes centralizadas. Se entiende que estas redes deben de tener ciertas características comunes a todos ellos como son: • Tolerancia a fallos: Los sistemas distribuidos deben ser muy confiables, es decir, que si un componente del sistema se estropea, otro componente debe ser capaz de reemplazarlo. • Escalabilidad: Los tamaños de los sistemas distribuidos puede ser muy variados, pueden ser decenas de dispositivos dentro de una red LAN (Local Área Network), centenas de dispositivos dentro de una WAN (Wide Area Network), o millones de dispositivos, como es el caso de Internet. 20 PROYECTO FIN DE GRADO • Transparencia: La transparencia se define como la ocultación, al usuario y al programador de aplicaciones, de la separación de los componentes de un sistema distribuido, de manera que el sistema se percibe como un todo, en vez de una colección de componentes independientes. La transparencia ejerce una gran influencia en el diseño del software de sistema. Además, se puede definir otra característica adicional, importante en los laboratorios remotos, que resulta interesante en esta línea, que es la apertura del sistema. • Apertura: Un sistema informático es abierto si el sistema puede ser extendido de diversas maneras. Un sistema puede ser abierto o cerrado con respecto a extensiones hardware (añadir periféricos, memoria o interfaces de comunicación, etc.) o con respecto a las extensiones software (añadir características al sistema operativo, protocolos de comunicación y servicios de compartición de recursos, etc.). La apertura de los sistemas distribuidos se determina primariamente por el grado hacia el que nuevos servicios de compartición de recursos se pueden añadir sin perjudicar ni duplicar a los ya existentes. Figura 2.8: Ejemplo de arquitectura distribuida. 2.2.3 Arquitectura Mixta La arquitectura mixta se basa en una arquitecturas descentralizada donde todos los sistemas son totalmente independientes en su funcionamiento, pero deben estar comunicados entre sí por medio de una conexión física (cables) o inalámbrica. Normalmente, estos sistemas están basados en una o varias unidades de control de gestión y uno o varios módulos 21 2 ESTADO DEL ARTE receptores o actuadores. Este tipo de arquitectura resulta de una combinación entre los sistemas con arquitectura centralizada y distribuida, aprovechando las ventajas que brindan, entre ellas se puede mencionar la flexibilidad, ya que permite que el sistema se pueda configurar con múltiples opciones de acceso al usuario final. Como resultado no existe un único dispositivo central sino un centro colectivo de conectores. La caída de uno de los dispositivos centralizadores, conlleva la desconexión de uno o más dispositivos del conjunto de la red mientras que la caída del cluster centralizador produciría necesariamente la ruptura o desaparición de la red. La red se rige por principios como la “adhesión” o la “participación”. El nacimiento del telégrafo marcó el inicio de las redes descentralizadas. La Wikipedia es un ejemplo perfecto de lo que son las redes descentralizadas. Figura 2.9: Ejemplo de arquitectura mixta. 2.2.4 Comparación entre las arquitecturas propuestas Una vez repasados como es cada una de las opciones de arquitecturas disponibles es necesario hacer un pequeño resumen que aúne las ventajas y desventajas de cada uno de ellas. En el caso de la arquitectura centralizada existe una ventaja clara respecto al resto de arquitecturas que radica en la gran potencia e inteligencia de los procesadores alojados en el servidor, ideal para integraciones de gran complejidad y donde tenemos que convivir con diferentes sistemas. Resulta de especial interés en el caso de que el sistema deba procesar una gran cantidad de información a gran velocidad. Sin embargo, presenta una desventaja importante que es que toda la responsabilidad del sistema recae en el servidor central, y en caso de fallo todo deja de funcionar. 22 PROYECTO FIN DE GRADO En la arquitectura distribuida existe la ventaja de que cada dispositivo tiene una autonomía propia, lo cual le proporciona una gran seguridad al sistema. Debido a que se hace un reparto de responsabilidad entre los diferentes nodos del sistema pueden caerse partes del mismo y seguir funcionando otras. Otra gran ventaja de estos sistemas es que son fácilmente escalables, ya que por su tipo de arquitectura podemos distribuir tareas entre los diferentes, y cuando tengamos problemas, incluir nuevos nodos. Como desventaja es necesario destacar el hecho de que al tener la inteligencia repartida por pequeños dispositivos en pequeños procesadores que sólo acometen sus pequeñas funciones en su programa de aplicación, no se puede, en principio, obtener gran potencia del sistema. Además al estar los nodos preprogramados para funciones específicas no suelen ser demasiado flexible a la hora de volver a programarlos. Por último, en lo que se refiere a la arquitectura mixta, tal y como se ha indicado anteriormente, ésta aúna las ventajas de las dos arquitecturas anteriormente citadas, consiguiendo minimizar las desventajas aportando además una importante descentralización que derive en el aumento de la flexibilidad del sistema. 2.3 VISIÓN ARTIFICIAL La visión artificial, también conocida como visión por computador (computer vision), es un subcampo de la inteligencia artificial. El propósito de la visión artificial es programar un dispositivo para que ”entienda” una escena o las características de una imagen. La visión artificial incluye métodos para adquirir, procesar, analizar y la comprensión de las imágenes. Algunos de los objetivos más hábituales de la visión artificial son la detección, segmentación, localización y reconocimiento de ciertos objetos en imágenes (por ejemplo, caras humanas), el seguimiento de objetos en una secuencia de imágenes, etc. Las aplicaciones van desde tareas tales como por ejemplo la inspección de botellas. Como disciplina científica, la visión por ordenador se refiere a la teoría de los sistemas artificiales que extraer información de imágenes. Los datos de imagen se pueden tomar muchas formas, tales como secuencias de vídeo, vistas desde múltiples cámaras o datos multidimensionales desde un escáner. En este proyecto hay dos partes importantes asociadas a la visión artificial, que son: • Librerías para Visión Artificial • Formatos de archivos de imagen 2.3.1 Librerías para Visión Artificial Existen muchas alternativas para utilizar algoritmos de visión artificial desde diferentes dispositivos como ordenadores o sistemas embebidos, y que son libres, pero las más utilizadas, y por tanto las que más documentación tienen detrás, son las que se estudiaran en detalle en esta sección para ser integradass en el proyecto. En este caso la función principal de la visión artificial es la de reconocimiento de ciertos objetos simples (Torralba, Murphy, Freeman & Rubin 2003). 23 2 ESTADO DEL ARTE Entre las diferentes opciones de librerias se han seleccionado las siguientes: • LTI • VXL • OpenCV + IPP 2.3.1.1 LTI LTI es una biblioteca orientada a objetos con los algoritmos y estructuras de datos utilizadas en el procesamiento de imágenes y visión por ordenador. Ha sido desarrollada en la Universidad de Tecnología de Aachen, en el marco de muchos proyectos de investigación en visión por computador que tratan sobre robótica, reconocimiento de objetos y reconocimiento de gestos, etc. El objetivo principal de la LTI es proporcionar una librería orientada a objetos en C++ que proporcione algoritmos rápidos que se puedan utilizar en aplicaciones reales. Ha sido desarrollado utilizando GCC en Linux, y Visual C++ en Windows, es decir, puede funcionar sobre estas dos plataformas sin problemas. Muchas de las clases de la API encapsulan las funcionalidades de Windows y Linux con el fin de simplificar el hecho de tratar con el código específico de cada sistema o de cada hardware asociado. Un ejemplo es que existen clases para gestionar el “multi-threading” y la sincronización, las medidas del tiempo, y el acceso al puerto serie). Las funciones de LTI principalmente sirven para operaciones con Álgebra lineal como matrices, vectores, ecuaciones lineales, estadísticas, etc. Aplicaciones de procesamiento de imágenes para filtros lineales, filtros orientables, etc. Además, posee una serie de herramientas para la visualización y herramientas de dibujo que nos sirven para dibujar algo de información extra en la imagen (un poco de texto, elipses, cuadros, líneas o puntos). Esto nos puede ayudar a ahorrar mucho tiempo de procesamiento. Figura 2.10: Proceso de segmentación de una imagen con LTI. 24 PROYECTO FIN DE GRADO 2.3.1.2 VXL VXL (Vision-something-Library) es una colección de bibliotecas de C++ diseñadas para la investigación de la visión artificial por ordenador y su aplicación en productos finales. Fue creado a partir TargetJr con el objetivo de hacer un sistema ligero, rápido y consistente. VXL está escrito en ANSI / ISO C++ y está diseñado para ser multiplataforma. En el núcleo de VXL hay varias bibliotecas que son: • VNL (Números): Se encarga de la gestión de los contenedores y algoritmos numéricos. Por ejemplo matrices, vectores, descomposiciones, optimizadores. • VIL (Imágenes): Librería para cargar, guardar y manipular imágenes en muchos formatos de archivo, incluyendo imágenes muy grandes. • VGL (Geometría): Aplica los principios de la geometría a los puntos, curvas y otros objetos elementales en 1, 2 y 3 dimensiones. • VSL (Streaming de Entradas y Salidas), VBL (Plantillas básicas), VUL (Utilidades): Librerías de miscelánea independientes de cada plataforma. Figura 2.11: Imagen obtenida con VXL aplicando un ltro de contornos. Además de las bibliotecas del núcleo, existen librerías que cubren algoritmos numéricos, procesamiento de imágenes, sistemas de coordenadas, la geometría de la cámara, gestión del sonido, manipulación de vídeo, recuperación de la estructura del movimiento, modelos de probabilidad, diseño de interfaces gráficas de usuario, la clasificación, estimación de sistemas robustos, seguimiento de funciones, topología, manipulación de estructuras, imágenes en 3D, y mucho más. Cada librería del núcleo de la biblioteca es ligera, y se puede utilizar sin referencia a las otras bibliotecas del núcleo. Del mismo modo, las bibliotecas no estratégicas no dependen más que de lo absolutamente necesario, para poder compilar y enlazar solamente las bibliotecas que realmente se necesiten para ahorrar recursos del sistema. 25 2 ESTADO DEL ARTE 2.3.1.3 OpenCV OpenCV es una biblioteca libre de visión artificial originalmente desarrollada por Intel (Laganière 2011). Desde que apareció su primera versión alfa en el mes de enero de 1999, se ha utilizado en infinidad de aplicaciones. Desde sistemas de seguridad con detección de movimiento, hasta aplicativos de control de procesos donde se requiere reconocimiento de objetos. Esto se debe a que su publicación se da bajo licencia BSD, que permite que sea utilizada libremente para propósitos comerciales y de investigación con las condiciones en ella expresadas. OpenCV es multiplataforma, existiendo versiones para GNU/Linux, Mac OS X y Windows. Contiene más de 500 funciones que abarcan una gran gama de áreas en el proceso de visión, como reconocimiento de objetos (reconocimiento facial), calibración de cámaras, visión estéreo y visión robótica. Figura 2.12: OpenCV diferenciando colores dentro de una Raspberry PI. El proyecto OpenCV lo que pretende es proporcionar un entorno de desarrollo fácil de utilizar y altamente eficiente. Esto lo ha logrado, realizando su programación en código C y C++ optimizados aprovechando además las capacidades que proveen los procesadores multi núcleo. OpenCV puede además utilizar el sistema de primitivas de rendimiento integradas de Intel, un conjunto de rutinas de bajo nivel específicas para procesadores Intel (IPP). Cuando OpenCV hace uso del código de IPP (que es un código muy optimizado) consigue acelerar la ejecución. Y esto le da un minimiza de forma importante a su velocidad de ejecución. IPP se activa por defecto al utilizar OpenCV en caso de tenerlo instalado. 26 PROYECTO FIN DE GRADO 2.3.2 Formatos de archivo de imagen Los formatos de archivo de imagen son medios normalizados de organización y almacenamiento de imágenes digitales. Los archivos de imagen se componen de datos digitales en uno de estos formatos que se pueden rasterizar para su uso en una pantalla de ordenador, cualquier medio digital, o una impresora. Un formato de archivo de imagen puede almacenar los datos sin comprimir, comprimidos, o formatos vectoriales. Una vez rasterizada, una imagen se convierte en una cuadrícula de píxeles, cada uno de los cuales tiene un número de bits para designar su color, que es igual a la profundidad de color del dispositivo en que se visualiza. En términos generales, en las imágenes de mapa de bits, el tamaño de archivo de imagen se correlaciona positivamente con el número de píxeles de una imagen y la profundidad de color o bits por píxel, de la imagen. Además, para ahorrar espacio en disco, las imágenes se pueden comprimir de diversas maneras utilizando algoritmos que almacenan una representación exacta o una aproximación de la imagen original en un número menor de bytes. Teniendo en cuenta diferentes compresiones, es común que dos imágenes del mismo número de píxeles y la profundidad de color, una comprimida, y otra sin comprimir, puedan tener un tamaño muy diferente del archivo comprimido. Por otra parte, las imágenes vectoriales, a diferencia de las imágenes normales, pueden ser de cualquier dimensión independiente del tamaño del archivo. El tamaño del archivo de las imágenes vectoriales solo aumenta con la adición de nuevos vectores. Hay dos tipos de algoritmos de compresión de archivos de imagen, que son: • Algoritmos de compresión sin pérdidas, que reducen el tamaño del archivo, preservando una copia perfecta de la imagen original sin comprimir. • Algoritmos de compresión con pérdidas, que preservan una representación de la imagen original sin comprimir que puede parecer una copia perfecta, pero no es una copia perfecta. A menudo, la compresión con pérdida puede alcanzar tamaños de archivo más pequeños que los de compresión sin pérdidas. La mayoría de los algoritmos de compresión con pérdida permiten la compresión variable que baja la calidad de imagen a cambio de reducir el tamaño de el archivo. Incluyendo los tipos de imágenes propietarios, hay cientos de tipos de archivos de imagen. Los formatos GIF, PNG, y JPEG son los que más a menudo se utilizan para mostrar imágenes en Internet (Miano 1999). En la figura 2.13 podemos ver las diferencias de los tres formatos en cuestión de tamaño. Todas están en la mejor calidad. Estos formatos gráficos se enumeran y describen brevemente a continuación. • GIF • PNG • JPEG • Otros formatos Además, se ha desarrollado una pequeña comparativa entre los formatos mas importantes de la web. 27 2 ESTADO DEL ARTE Figura 2.13: Diferencia de tamaño de los formatos principales en la web. 2.3.2.1 GIF El formato GIF (Graphics Interchange Format) está limitado a una paleta de 8 bits o 256 colores. Esto hace que el formato GIF sea adecuado para almacenar gráficos con pocos colores como diagramas, formas, logotipos o imágenes del estilo de dibujos animados, y apropiado para la web, ya que consume poco espacio (Amer, Iren, Sezen, Conrad, Taube & Caro 1999). El formato GIF soporta animaciones y se utiliza mucho para proporcionar efectos de animación. También utiliza compresión sin pérdidas que es más efectiva cuando existen grandes áreas de un solo color, y un poco ineficaz para imágenes con detalle o texturas. 2.3.2.2 PNG El formato PNG (Portable Network Graphics) fue creado como la alternativa libre de patentes, de código abierto, para suceder al formato GIF y en parte, también para las imágenes TIFF. El formato de fichero PNG soporta imágenes con paleta de 8 bits (con la transparencia opcional para todos los colores de la paleta) y 24 bits de color verdadero (16 millones de colores) o 48 bits de color verdadero con y sin canal alfa - mientras que GIF sólo soporta 256 colores y un solo color transparente. En comparación con JPEG, PNG es útil para imágenes con grandes áreas de color uniforme. Así, el formato sin pérdidas PNG es el más adecuado para las imágenes aún en edición, y los formatos con pérdida, como JPEG, son los mejores para la distribución final de las imágenes fotográficas, ya que en este caso los archivos JPG son generalmente más pequeños que los archivos PNG. PNG nos permite tener imágenes en color indexado, escala de grises, etc. además de un agregar un canal alfa opcional (Roelofs & Koman 1999). 28 PROYECTO FIN DE GRADO PNG está diseñado para funcionar bien en aplicaciones de visualización en línea, como los navegadores web por lo que resulta muy interesante a la hora de desarrollar un video visualizando progresivamente una serie de imágenes. PNG es robusto, proporcionando tanto la comprobación de la integridad del archivo completo y la detección simple de errores de transmisión comunes. 2.3.2.3 JPEG JPEG (Joint Photographic Experts Group) es un método de compresión. Las imágenes JPEG comprimidas se suelen almacenar en el formato de archivo JFIF (JPEG File Interchange Format). La compresión JPEG es, en la mayoría de los casos, compresión con pérdida. La extensión de archivo JPEG / JFIF es JPG o JPEG. Casi todas las cámaras digitales pueden guardar las imágenes en formato JPEG / JFIF, que soporta 8 bits en escala de grises e imágenes a color de 24 bits, 8 bits para cada uno de los colores, rojo, verde y azul. JPEG aplica una compresión con pérdida a las imágenes, lo que puede resultar en una reducción significativa del tamaño del archivo. Es posible especificar la cantidad de compresión que se quiere usar en una escala de cero a cien, ya que la cantidad de compresión que se elija afectará a la calidad visual del resultado (Pennebaker 1992). Cuando la imagen no es demasiado grande la compresión no disminuye notablemente de la calidad de la imagen, sin embargo cuando se tiene una imagen muy grande se puede notar a simple vista la pérdida de calidad de la imagen. Además, los archivos JPEG pueden sufrir degradaciones cuando son editados y guardados en varias ocasiones. Aunque JPEG también proporciona almacenamiento de imágenes sin pérdidas, esta versión sin pérdidas no es muy compatible con los diferentes navegadores y aplicaciones, y no esta aconsejado usarla. 2.3.2.4 Otros formatos Aunque existen otros formatos de imagen como son TIFF, BMP, XBM, etc. es sabido que sólo se deben utilizar los formatos GIF, PNG y JPEG en los sitios web de producción. Todos los demás formatos de imagen sean o no compatibles con los navegadores, no se han optimizado lo suficiente y de forma eficiente para su uso como imágenes dentro de una página web. 29 2 ESTADO DEL ARTE 2.3.2.5 Comparativa entre los formatos mas importantes de la web GIF PNG JPEG Ventajas Soporta animaciones. Formato ampliamente soportado (Standard). Soporta transparencias. Sin pérdidas. Formato ampliamente soportado (ISO 15948). Soporta transparencias. Sin pérdidas. Formato sin patente. Color 48 bits. Sin pérdidas o con pérdidas. Tamaño de archivo resultante muy pequeño. Color 24 bits. Desventajas Relación compresion eficiencia pobre. Limitado a 256 colores (8 bits). Tamaño grande. de archivo resultante Calidad limitada en formato con pérdidas. En caso de elegir buena calidad, uso intensivo del procesador. Tabla 2.2: Comparativa entre los principales formatos de imagen en web. 2.4 HARDWARE Respecto al hardware, se tienen que diferenciar tres partes diferentes implicadas en el proyecto: • Mecatrónica: que comprende los motores, drivers asociados, poleas, etc. así como la forma de unión a los experimentos. • Plataformas embebidas: encargadas de gobernar el resto de subsistemas y procesar todas las tareas. • Cámaras e iluminación: para maximizar la calidad de las imágenes que se ofrecerán a través de la plataforma web y poder llevar a cabo el desarrollo de la visión artificial. 2.4.1 Mecatrónica La mecatrónica es una disciplina que sirve para diseñar y desarrollar productos que involucren sistemas de control para el diseño de productos o procesos inteligentes, lo cual busca crear maquinaria más compleja para facilitar las actividades del ser humano a través de procesos electrónicos en la industria mecánica principalmente. Su punto fuerte es la versatilidad. Por otro lado, más allá de las cuestiones técnicas, la mecatrónica también se ha adoptado como una disciplina científica aplicada, en la cual se hace modelado, análisis, síntesis y control de sistemas de naturaleza multidominio y se ha tratado de homogeneizar la ciencia para este tipo de sistemas. Algunos ejemplos de aspectos teóricos cuyo objeto de estudio son los sistemas mecatrónicos desde un enfoque abstracto son el modelado por “bond graph”, los sistemas hamiltonianos con puertos, las técnicas de control basadas en la energía como lo es el moldeo de energía, el diseño óptimo de estructura y control, y más recientemente a un grado más de integración como lo son los sistemas híbridos (Miu 1993). 30 PROYECTO FIN DE GRADO En este caso se van a estudiar los siguientes dispositivos que integrará el proyecto: • Motores • Dispositivos para izado y arriado de los objetos sumergibles • Estructura de sujeción 2.4.1.1 Motores Los criterios que condicionan la elección de los motores para el izado y arriado de los objetos a sumergir están relacionados principalmente con la alimentación que requieren y el par que son capaces de generar. En este sentido, es necesario que los motores no requieran una tensión de alimentación superior a 12V, puesto que esta es la tensión nominal que proporciona la fuente disponible para el experimento. Además, el par motor debe ser suficiente para poder soportar cargas de hasta un kilogramo. En principio no hay ningún tipo de limitación en lo referente al tipo de motores utilizados, pero sí que resulta más conveniente que sean motores con alimentación de corriente continua. Dentro de éstos, podemos distinguir tres grandes tipos: • Motores paso a paso (PAP) • Servomotores • Motores DC (Direct Current) Además, se ha desarrollado una pequeña comparación de las características mas interesantes de los diferentes tipos de motores. 2.4.1.1.1 Motores paso a paso (PAP) Los motores paso a paso son dispositivo electromecánicos que convierten una serie de impulsos eléctricos en desplazamientos angulares discretos, lo que significa es que son capaces de avanzar una serie de grados, lo que se llama el paso, dependiendo de sus entradas de control. Los motores paso a paso se comportan de la misma manera que se comportan los conversores digital-analógico DAC (Digital Analogic Converter) pudiendo ser gestionados fácilmente por impulsos procedentes de sistemas lógicos (Kenjĺo & Sugawara 1984). Estos motores presentan las ventajas de tener alta precisión y repetitividad en cuanto al posicionamiento. 31 2 ESTADO DEL ARTE Figura 2.14: Imagen de un motor paso a paso de una impresora. 2.4.1.1.2 Servomotores Un servomotor (también llamado servo) es un dispositivo similar a un motor de corriente continua (explicado más adelante) que tiene la capacidad de ubicarse en cualquier posición dentro de su rango de operación, y mantenerse estable en dicha posición. Este tipo de motor cuenta con la capacidad de ser controlado, tanto en velocidad como en posición. Normalmente se usan en sistemas de radio control y en robótica. Están formados por un motor, una caja reductora y un circuito de control. En general los servomotores no permiten que el motor gire 360 grados, sólo aproximadamente 180. Los servomotores usan de la modulación por ancho de pulsos PWM (Pulse Wide Modulation) para controlar la dirección o posición de los motores de corriente continua (Van de Straete, Degezelle, De Schutter & Belmans 1998). La mayoría trabaja en la frecuencia de los cincuenta hercios, así las señales PWM tendrán un periodo de veinte milisegundos. Figura 2.15: Imagen de servomotor. un Los servomotores se caracterizan por tener fuerza, velocidad, baja inercia y un consumo de energía reducido. 32 PROYECTO FIN DE GRADO 2.4.1.1.3 Motores DC (Direct Current) Los motores de corriente continua convierten la energía eléctrica continua en mecánica, provocando un movimiento rotatorio simple. Un motor de corriente continua se compone principalmente de dos partes, un estator que da soporte mecánico al aparato y tiene un hueco en el centro generalmente de forma cilíndrica y un rotor. En el estator se encuentran los polos, que pueden ser de imanes permanentes o devanados con hilo de cobre sobre núcleo de hierro. El rotor es generalmente de forma cilíndrica, también devanado y con núcleo, al que llega la corriente mediante dos escobillas. El sentido de giro de un motor de corriente continua depende del sentido relativo de las corrientes circulantes por los devanados inductor e inducido. La inversión del sentido de giro del motor de corriente continua se consigue invirtiendo el sentido del campo magnético o de la corriente del inducido. La principal característica del motor de corriente continua es la posibilidad de regular la velocidad desde vacío a plena carga. Su fácil control de posición, par y velocidad los han convertido en una de las mejores opciones en aplicaciones de control y automatización de procesos (Yeung & Huang 2003). Figura 2.16: Motor DC extraído de un juguete. 2.4.1.1.4 Comparación entre los motores propuestos A continuación se exponen a modo de resumen las ventajas e inconvenientes de cada uno de estos tipos de motores. 33 2 ESTADO DEL ARTE Tipo de motor Motor PAP Servomotor Motor DC Ventajas No necesitan un Encoder o dispositivo de medición para calcular la posición del motor. Proporcionan un gran par a bajas velocidades. Excelente repetibilidad en el control de posición. No pueden dañarse por sobrecargas mecánicas. Pueden ser controlados, tanto en velocidad como en posición. Poseen una fuerza y una velocidad considerable. Tienen un consumo energético bajo. Tiene muy poca inercia. Mantienen el para altas velocidades. Son altamente eficientes. Son capaces de proporcionar un alto par de aceleración. Alta relación potencia/tamaño. Desventajas Son muy ineficientes. El par disminuye considerablemente para velocidades altas. Baja potencia en relación al tamaño y peso. Normalmente tienen un ángulo de giro de 180º El control de posición requiere el uso de un Encoder. El motor puede verse dañado si se ve sujeto a sobrecargas mecánicas. Tabla 2.3: Comparativa entre los tipos de motores propuestos. 2.4.1.2 Dispositivos para izado y arriado de objetos sumergibles Para esta tarea se ha decido que la alternativa más adecuada incluye la utilización de algún tipo de polea. Una polea, es una máquina simple, un dispositivo mecánico de tracción, que sirve para transmitir una fuerza. Se trata de una rueda o disco, generalmente maciza y rallada en su borde, que con el concurso de una cuerda o cable que se hace pasar por el canal (”garganta”), se usa como elemento de transmisión para cambiar la dirección del movimiento en máquinas y mecanismos. En nuestro caso la finalidad de la polea será izar y arriar un objeto sumergible que podrá ser de diferentes formas y pesos, con el desafío que esto implica a la hora de seleccionar la polea. Figura 2.17: Representación básica de una polea. 34 PROYECTO FIN DE GRADO Se ha realizado una gran búsqueda de poleas en el mercado, así como una importante labor de testar el funcionamiento de las mismas en relación a diferentes materiales como plástico PVC con o sin bulón, aluminio, y hierro fundido. Sin embargo, el resultado obtenido exponía que ninguna de estas reunía los requisitos esperados al respecto, ya que la adaptación a los diferentes motores que probamos no era posible. Tras barajar distintas posibilidades, se ha determinado que la mejor opción radica en la fabricación customizada de las poleas necesarias para este caso en concreto, por lo que se ha realizado el diseño y fabricación de las mismas a través de en una impresora 3D. Las ventajas de estas poleas resultan innumerables, ya que se adaptan perfectamente a los motores, y permite obtener el tamaño deseado para su perfecta adaptación en la estructura unida a la pecera que se ha construido. Estas poleas fueron construidas con material plástico de primera calidad, y fueron pintadas en varios colores para que posteriormente, con visión artificial, se pudiera diferenciar automáticamente entre ellas. Figura 2.18: Diseño de la polea a medida en CAD. 2.4.1.3 Estructura de sujeción Con la finalidad de que todo el hardware asociado a la pecera, incluyendo motores, plataformas embebidas, etc. se adaptara al acuario, a la vez que estuviera bien sujeto era necesario crear una estructura de sujeción robusta y que a la vez permitiera la respiración del acuario, así como dar de comer a los peces. hay que recordar que los peces son seres vivos que necesitan aire, agua, y comida. Para este propósito se determinó que las mejores opciones eran las siguientes: • Makerbeam • Erector • Lego Mindstorms 35 2 ESTADO DEL ARTE 2.4.1.3.1 MakerBeam MakerBeam es un sistema de construcción de código abierto de ranura tipo Mini-T. la ranura de tipo Mini-T es una versión en miniatura de la ranura de tipo T. La ranura de tipo T es una tecnología que se utiliza ampliamente para la automatización industrial, robótica y recintos de las máquinas. Gracias a ser Mini-T no sólo es lo suficientemente pequeño como para trabajar como un sistema de construcción de modelos, sino que también es preciso y lo suficientemente fuerte como para construir máquinas y robots reales (Hodges, Taylor, Villar, Scott & Helmes 2013). Se compone de vigas cuadradas de 10 mm de aluminio extruido, varios conectores y el hardware necesario para construir cualquier cosa. Es un material de muy buena calidad, y según explican en su web “no hay absolutamente nada que se puede no se pueda hacer con MakerBeam y un poco de imaginación”. Como ventajas cabe señalar el hecho de que los montajes de motor se pueden atornillar directamente a las vigas y que con el uso de sus escuadras pequeñas, se pueden integrar incluso servos. Además, MakerBeam es totalmente de código abierto, así que es muy recomendable para desarrollar y construir piezas propias para interconectar con el estándar de ranuras de tipo Mini-T, incluso ampliando aún más las posibilidades si quieres integrarlas con el estándar de ranuras de tipo T. Figura 2.19: Kit de piezas de MakerBeam. 2.4.1.3.2 Erector Erector es una marca de juegos de construcción de metal de juguete, originalmente patentado por Alfred Carlton Gilbert. Erector consta de varias vigas de metal con agujeros regulares para el montaje con tuercas y tornillos. También posee otras serie de piezas mecánicas, tales como poleas, engranajes, ruedas, y motores eléctricos pequeños que son parte del sistema. Lo que convierte a Erector en único es la capacidad de construir un modelo, desmontarlo y construir posteriormente otro modelo con las mismas piezas, o incluso sumarle más piezas a la construcción anterior. Erector se convirtió rápidamente en una de las plataformas de construcción de prototipos más populares en los Estados Unidos, muy probablemente porque era la única construcción de hace unos años que permitía la 36 PROYECTO FIN DE GRADO sujeción de motores. Actualmente se comercializan bajo la marca para “Montador”, que es propiedad y está comercializado por Mecano. Erector tiene una gran cantidad de sets de montaje que permiten dar respuesta a casi todas las necesidades. Como evidencia diversos test realizados sobre estas estructuras, éstas son capaces tanto de sujetar motores como de crear plataformas que soporten kilos sobre su estructura. Figura 2.20: Propaganda de Erector de los años 70. 2.4.1.3.3 Lego Mindstorms Lego Mindstorms es un juego de robótica para niños fabricado por la empresa Lego, el cual posee elementos básicos de las teorías robóticas, Lego Mindstorms es un juego de robótica para niños fabricado por la empresa Lego, el cual posee elementos básicos de las teorías robóticas, como la unión de piezas y la programación de acciones, en forma interactiva. Comercialmente se publicita como «Robotic Invention System», en español Sistema de Invención Robotizado (RIS). También se vende como herramienta educacional, lo que originalmente se pensó en una sociedad entre Lego y el MIT. La versión educativa se llama «Lego Mindstorms for Schools», en español Lego Mindstorms para las escuelas. Lego Mindstorms puede ser usado para construir un modelo de sistema integrado con partes electromecánicas controladas por algún tipo de ordenador. Prácticamente todo puede ser representado con las piezas tal como en la vida real, como un ascensor o robots industriales. Lego Mindstorms trae algunas piezas extras que permiten dar flexibilidad y movimiento a cualquier estructura que estemos construyendo. 37 2 ESTADO DEL ARTE Figura 2.21: Piezas sueltas de Lego Mindstorm. 2.4.2 Plataformas embebidas Entre las plataformas embebidas que se pueden usar para este proyecto se han decidido destacar cinco principales que han sido valoradas de forma minuciosa, detalle a detalle. Estas plataformas son las siguientes: • Raspberry PI • PandaBoard ES • Arduino Mega 2560 • Fit-PC2 • BeagleBoard Ademas, se ha desarrollado una pequeña comparación de las características mas interesantes de las mismas. 2.4.2.1 Raspberry PI La Raspberry Pi es un mini ordenador del tamaño de tarjeta de crédito desarrollado en el Reino Unido por la Fundación Raspberry Pi, con la intención de promover la enseñanza de la informática básica en las escuelas. La Raspberry Pi tiene un chip Broadcom BCM2835, que incluye un procesador ARM1176JZ-S a 700 MHz. Además, su firmware incluye una serie de modos ”Turbo” para que el usuario puede hacer overclocking de hasta 1 GHz. Este chip también tiene internamente una GPU VideoCore IV y dependiendo del modelo que elijamos puede tener 256 MB o 512 MB de RAM. La Raspberry PI no incluye no incluye 38 PROYECTO FIN DE GRADO disco duro o unidad de estado sólido , sino que utiliza una tarjeta SD para el arranque y almacenamiento de datos a largo plazo. El objetivo de la raspberry PI es ofrecer dos versiones, con precios de aproximadamente 25 euros la más sencilla y 35 euros la opción superior. La Raspberry PI funciona fácilmente bajo Debian y distribuciones Arch Linux ARM disponibles en su página web para su descarga, y tiene integradas herramientas de desarrollo para utilizar Python como lenguaje de programación principal. Una de las pegas de la Raspberry Pi es que no viene con un reloj de tiempo real, sin embargo, podemos añadirle un reloj de tiempo real como el DS1307a través de la interfaz I²C (Upton & Halfacree 2012). Además, el modelo B trae incorporado un conector Ethernet para conectarlo a la red cableada directamente, los dos modelos incluyen pines GPIO para entradas y salidas digitales. Figura 2.22: Infografía de una Raspberry PI modelo B. 2.4.2.2 PandaBoard ES La PandaBoard ES es una plataforma de desarrollo de bajo costo y bajo consumo de energía basado en el chip de Texas Instruments OMAP4430. Su precio ronda los 174 euros. El OMAP4430 cuenta con una CPU de doble núcleo a 1.2GHz ARM Cortex-A9 MPCore y una GPU PowerVR SGX540 a 304 MHz. Posee un acelerador de hardware multimedia con un DSP IVA3 programable y 1 GB de memoria DDR2 SDRAM. Al igual que la Raspberry PI la unidad de almacenamiento primaria es una ranura para tarjetas SD que permite usar tarjetas SDHC de hasta 32 GB. Además, incluye cable Ethernet 10/100, así como conectividad Ethernet inalámbrica a través de WiFi, y Bluetooth. El dispositivo funciona con un núcleo Linux, Android o Mozilla Firefox OS. Además, existen versiones optimizadas de Android y Ubuntu que están implementadas a partir de Linaro (Instruments 2012). 39 2 ESTADO DEL ARTE Figura 2.23: Imagen de la PandaBoard ES. 2.4.2.3 Arduino Mega 2560 La Arduino Mega 2560 es una placa que incluye un microcontrolador ATmega2560. Esta placa lleva 54 entradas o salidas digitales y 14 de estas pueden utilizarse para salidas PWM. Además lleva 16 entradas analógicas, UARTs (de inglés Universal Asinchronous Receiver Transmitter).Posee, además, un oscilador de 16MHz, una conexión USB, un conector de alimentación, un header ICSP y un pulsador para el reset. La placa lleva todo lo necesario para soportar el microprocesador. Para empezar a utilizar la placa sólo es necesario conectarla al ordenador a través de un cable USB, o alimentarla con un adaptador de corriente AC/DC o una batería, y programarla en función de las necesidades del proyecto a implementar (Bergmann, Wallace & Calia 2010). Tiene una memoria Flash de 256 KB, el bootloader ocupa unos 8 KB, una SRAM de 8 KB y una memoria EEPROM de 4 KB. Figura 2.24: Imagen de la Arduino Mega 2560. 40 PROYECTO FIN DE GRADO Una de las características más interesantes de la MEGA 2560 es que no utiliza el convertidor USB-serial FTDI, sino que utiliza el microprocesador Atmega8U2 programado como convertidor USB-serial, lo que nos permite que esta placa sea reconocida como cualquier tipo de interfaz USB. 2.4.2.4 Fit-PC2 El Fit-PC2 proporciona un rendimiento completo similar al de un PC, pero a diferencia de un ordenador normal requiere sólo 10W de potencia a pleno funcionamiento. El Fit-PC2 encaja en casi cualquier espacio, y además de su construcción está pensada para ambientes industriales donde su uso es continuado veinticuatro horas al día y siete días a la semana, es decir, es una plataforma bastante robusta. El Fit-PC2 no tiene ventilador y se diferencia de las otras plataformas embebidas en que tampoco tiene GPIOs, por lo que con esta plataforma no se podrían gobernar directamente los motores. El Fit-PC2 no encaja del todo en este proyecto ya que no posee GPIO, sin embargo solo serviría para implementar los algoritmos de visión artificial y desplegar el RLMS de WebLab-Deusto (Garcia-Zubia, Angulo, Hernandez, Castro, Sancristobal, Orduña, Irurzun & de Garibay 2010). Tiene una CPU basada en un chip de Intel US15W SCH, con una memoria RAM de 2GB DDR2-533, además tiene un disco duro integrado SATA HDD. Para los gráficos una GPU Intel GMA500 con aceleración de gráficos, además de una entrada Ethernet y tecnología WiFi integrada. Figura 2.25: Imagen del Fit-PC2. 41 2 ESTADO DEL ARTE 2.4.2.5 BeagleBoard La BeagleBoard es una placa hardware de bajo consumo de código abierto producida por Texas Instruments en asociación con Digi-Key. La BeagleBoard fue diseñada con el desarrollo de software de código abierto en la mente, y como una manera de probar el procesador de Texas Instruments OMAP3530. La placa fue desarrollada por un pequeño equipo de ingenieros como recurso educativo que podría ser utilizado en universidades de todo el mundo para enseñar hardware de código abierto y las capacidades del software de código abierto (Gowtham 2011). La BeagleBoard mide aproximadamente 75 por 75 mm y tiene toda la funcionalidad de un ordenador muy básico. El procesador OMAP3530 incluye una CPU ARM CortexA8, que puede ejecutar Linux, FreeBSD, RISC OS, Android o Symbian. Posee un DSP TMS320C64x acelerador de vídeo y una GPU PowerVR SGX530 para proporcionar acelerado y renderizado de imágenes 2D y 3D compatible con OpenGL. Tiene una única ranura para tarjetas SD y MMC que soporta SDIO, un puerto USB, una conexión serial RS-232, una conexión JTAG, y dos jacks estéreo de 3.5mm para audio. Incorpora además 256MB de memoria flash NAND y 256 MB de RAM. La placa utiliza hasta 2W de potencia y puede ser alimentado desde el conector USB, o una fuente de alimentación separada de 5V. Debido a su bajo consumo de energía, no requiere refrigeración adicional ni disipadores de calor. Figura 2.26: Imagen de la Beagleboard. 42 PROYECTO FIN DE GRADO 2.4.2.6 Comparación entre las plataformas embebidas propuestas En la table 2.4 y 2.5 se puede ver una comparación entre las caracteristicas mas importantes de cada una de la plataformas embebidas. Plataforma Raspberry PI PandaBoard ES Arduino Mega 2560 Fit-PC2 BeagleBoard CPU ARM11 ARM Cortex-A9 ATmega2560 Intel Atom Z530 ARM Cortex-A8 GPU VideoCore IV PowerVR SGX540 NO Intel GMA500 PowerVR SGX530 Tabla 2.4: Comparación de CPU y GPU de las plataformas embebidas. Plataforma Raspberry PI PandaBoard ES Arduino Mega 2560 Fit-PC2 BeagleBoard Ethernet 3 3 7 3 3 WiFi 7 3 7 3 7 GPIO 26 28 74 7 32 Linux 3 3 7 3 3 Tabla 2.5: Comparación de las comunicaciones de las plataformas embebidas. 2.4.3 Cámaras e iluminación El experimento remoto propuesto en este proyecto requiere de la utilización de cámaras para la captación de imágenes de la pecera así como de iluminación para maximizar la calidad de las imagenes obtenidas. Por tanto este apartado se dividira en dos subapartados: • Cámaras • Iluminación 2.4.3.1 Cámaras Todas las imágenes obtenidas serán posteriormente procesadas mediante software para detectar la posición de los elementos sumergibles respecto al nivel del agua. Las cámaras utilizadas estarán conectadas a la Raspberry PI, encargada de procesar las imágenes. Será necesario procesar un gran número de imágenes por segundo y, por ello, es preferible evitar las operaciones de escritura y lectura en memoria física, ya que esto introduciría considerables ralentizaciones en el programa. Por este motivo y debido a que el puerto USB de algunas de las plataformas embebidas propuestas están pobremente implementados y proporcionan velocidades de transferencia muy bajas, se decidió que era preferible la utilización de cámaras IP, basadas en conexiones de red inalámbrica (WiFi) (Torralba et al. 2003). Esto permite evitar el acceso a memoria de disco y realizar la lectura de las imágenes partir de una dirección IP fija, reduciendo 43 2 ESTADO DEL ARTE así considerablemente la latencia del sistema. Además, el uso de una cámara IP confiere mayor flexibilidad de despliegue al sistema, ya que la cámara no debe necesariamente estar colocada cerca de el sistema embebido que se encargue de procesar las imágenes. Siguiendo este razonamiento, se buscaron modelos de cámaras IP de bajo coste y con una confiabilidad testada en laboratorios remotos anteriores. Se encontraron las dos siguientes: • D-Link DCS-5220 Pan/Tilt Camera • D-Link DCS-930L Celestres N Network Camera Ambos son modelos ampliamente utilizados anteriormente en WebLab-Deusto para otros experimentos remotos. La primera cámara, la D-Link DCS-5220, tiene como principal característica el hecho de que se trata de un modelo Pan-and-Tilt, es decir, que incluye dos servomotores que permiten rotar la cámara tanto en un eje vertical (“pan”) como en uno horizontal (“tilt”). Esto resulta útil en situaciones en las que la vista de la cámara no llega a abarcar toda la imagen que se quiere obtener. En este caso, la cámara puede moverse para enfocar las zonas deseadas. En cuanto a características técnicas, soporta conexión Ethernet o 802.11g, está equipada con un sensor CMOS de 0,5 Lux que la hace ideal para condiciones de baja luminosidad y tiene zoom digital de hasta 4x. Figura 2.27: Camara D-Link DCS-5220. La DCS-930L por su parte no se trata de un modelo Pan-and-Tilt, sino de un modelo convencional. Esto la hace más ligera y fácil de instalar, pero menos flexible, ya que no permite ajustar el ángulo de visión de la cámara. Sin embargo, a nivel de conexión, este modelo ofrece 802.11n, emplea un sensor CMOS y también dispone de un zoom digital de hasta 4 aumentos. 44 PROYECTO FIN DE GRADO Figura 2.28: Camara D-Link DCS-930L. Este experimento remoto, se basa en la recepción de imágenes de varias cámaras, ya que resulta imposible captar la vista de toda la pecera desde un solo dispositivo. Podría, no obstante, hacerse uso de una cámara Pan-and-Tilt, que rotara para visualizar toda la pecera, pero el problema, en este caso, surgiría del elevado tiempo que utilizaría la cámara en reposicionarse. Por ello, resulta más conveniente utilizar 3 cámaras simples: una para una vista general y dos para captar dos objetos sumergibles cada una. En base a lo anterior, tras considerar las necesidades del proyecto y las características de cada cámara, se optó por la DCS-930L, al tratarse ésta de una solución que permite implementar el protocolo 802.11n, de mayor cobertura y mayor tasa de transferencia de datos que la versión 802.11g empleada por el modelo alternativo y resultar, asimismo, una opción económica en términos de costes (Li, Babcock & Parkhurst 2006). 2.4.3.2 Iluminación Respecto a la iluminación es necesario recalcar que igual que al igual que el ojo humano, la visión artificial depende de la iluminación y la óptica para poder trabajar. Métodos diferentes de iluminación pueden tener efectos visuales muy diferentes (Lee, Breneman & Schulte 1990). A este respecto, es importante señalar que contar con una buena iluminación resulta trascendental a la hora de poder realizar un análisis sobre una imagen con contraste suficiente entre las partes a inspeccionar y el fondo. 2.4.3.2.1 Técnicas de iluminación Dentro de la iluminación podemos distinguir varios técnicas como son: • Iluminación posterior o backlight • Iluminación frontal oblicua y direccional • Iluminación de campo oscuro o darkfield 45 2 ESTADO DEL ARTE La iluminación posterior o backlight permite delinear el contorno de las piezas, minimizando la visibilidad de gabinetes traslúcidos en caso de que existan y permite visualizar perforaciones pasantes. Esta técnica brinda un contraste muy alto y es fácil de implementar (Brosnan & Sun 2004). En las imágenes tomadas bajo esta técnica, el fondo aparece uniformemente blanco y el objeto se visualiza mediante su silueta. Dentro de las técnicas de iluminación posterior se pueden encontrar la difusa y la direccional. En la iluminación posterior difusa los rayos de luz se transmiten en diversos ángulos y en la iluminación posterior direccional un colimador hace que todos los rayos de luz se propaguen en direcciones paralelas como podemos ver en la figura 2.29. Figura 2.29: Iluminacion posterior difusa y direccional. La dirección de la iluminación, conocida como el ángulo de incidencia, es él ángulo formado por el plano normal a la superficie y el rayo incidente. Cuando los haces de luz forman un ángulo de 20 grados con la superficie, se puede maximizar el contraste en objetos con relieves de manera que los bordes aparezcan brillantes frente al fondo oscuro que forman las superficies planas del objeto. En la iluminación frontal direccional, el ángulo entre los rayos incidentes y la superficie es de 30 grados, lo que reduce un poco el contraste pero incrementa la cantidad de información obtenible de las superficies planas. Entre los dispositivos comerciales se pueden encontrar los anillos y los domos. Los anillos son adecuados para superficies planas y difusas. Están disponibles en espectro blanco, rojo, IR, UV, azul, verde, iluminación continua o pulsante, con lente difusor o no difusor. Los domos producen una iluminación difusa y uniforme. Se utilizan para iluminar superficies reflectantes. Están disponibles con luz continua o pulsante y fuentes conectadas mediante fibra óptica. 46 PROYECTO FIN DE GRADO Figura 2.30: Iluminacion frontal oblicua y direccional. La iluminación de campo oscuro o darkfield es luz directa de alta intensidad que se hace incidir sobre el objeto con un ángulo muy pequeño respecto a la superficie donde descansa. De esta manera se consigue que sobre superficies que presentan hendiduras o elevaciones, éstas interfieran en la trayectoria de la luz produciéndose zonas brillantes. Esta técnica consiste en hileras de LEDs montadas a 75 o 90º con respecto al eje óptico. La iluminación puede ser continua o pulsante (strobe). Además del modelo en anillo, también se fabrican con haces paralelos ajustables individualmente. La iluminación de campo oscuro realza el contraste de los detalles superficiales tales como grabados, marcas y defectos. Figura 2.31: Iluminacion de campo oscuro. 47 2 ESTADO DEL ARTE 2.4.3.2.2 Tipos de iluminación Anteriormente, se presentaron las distintas formas de iluminar un objeto teniendo en cuenta las técnicas de iluminación existentes para las diferentes aplicaciones. A continuación, el enfoque estará puesto en los dispositivos comerciales que se utilizan en la actualidad: • Fibra óptica • Fluorescentes • LED • Láser Cada uno de ellos presenta sus particulares ventajas y desventajas con respecto al uso concreto que se le pretenda otorgar. Es por esto que, dependiendo del tipo de aplicación resultará más conveniente uno u otro. La elección estará basada en el análisis de los siguientes cuatro factores condicionantes del tipo de iluminación: • La intensidad lumínica necesaria para captar correctamente las imágenes y poderlas procesar posteriormente con un dispositivo embebido. • La duración de la iluminación escogida. No resultaría de utilidad el despliegue de un laboratorio cuya utilización prevista es de veinticuatro horas al día, siete días a la semana funcionando si fuera necesario cambiar la iluminación cada 300 horas. • La flexibilidad de diseños que permita su adaptación al tipo de laboratorio que se esté desarrollando, pero que además se disponga de recambios en caso necesario. • El precio de adquisición de los diferentes componentes de la iluminación, así como su fluctuación en el mercado. Fibra óptica La iluminación mediante fibra óptica proporciona una gran intensidad de luz uniforme, con ausencia de sombras. Es ideal para iluminar objetos de reducidas dimensiones y se puede sujetar al objetivo de la cámara o a la óptica de un microscopio. A los anillos de luz se les pueden acoplar filtros de colores, polarizadores/analizadores, y difusores para eliminar reflejos y aumentar el efecto difusor. 48 PROYECTO FIN DE GRADO Fluorescentes La iluminación mediante fluorescentes proporciona una luz brillante, sin sombras. Las lámparas son diseñadas normalmente para suministrar el máximo de intensidad durante al menos 7000 horas, lo que proporciona una mayor productividad. Existen lámparas blancas en distintas temperaturas de color, Y también ultravioletas (UV). Esta iluminación se aplica en entornos que requieren mucha luz, y ningún tipo de sombra, (análisis biológicos, inspección y la microscopía, Ensamblaje, Inspección de circuitos, Industria, Laboratorios, Visión Industrial, Fotografía, Control de Calidad, Robótica, etc.). LED La iluminación mediante diodos led proporciona una luz difusa muy útil para la aplicación en ciertos objetos. Pueden ser de iluminación directa y en anillo. Láser La iluminación mediante láser se basa en una serie de patrones láser que se utilizan mayoritariamente en aplicaciones de medida de profundidad, y de superficies irregulares. Mediante ópticas especialmente diseñadas se puede llegar a convertir un puntero láser en diferentes formas y tamaños. 49 PROYECTO FIN DE GRADO 3. JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS En esta sección se explicarán las tecnologías elegidas y sus motivos. Es importante recalcar que todas las elecciones se han hecho teniendo en cuenta que la idea inicial era que la arquitectura implementada se basará en sistemas de código abierto, así como hardware libre en el caso de las plataformas embebidas. También resulta necesario tener en cuenta que se utilizaran exclusivamente tecnologías libres, con licencia pública, y reconocidas como estables y robustas para evitar problemas futuros. El uso de estas tecnologías permite ofrecer un precio asequible, ahorrando licencias, así como la posibilidad de ofrecérselo a una comunidad que con carácter adicional a su utilización, pueda mejorarlo y volver a ofrecérselo a la comunidad creando una espiral que beneficie el desarrollo de soluciones eficientes y en constante evolución. Además de ser libres, se pensó que estas tecnologías deberían ser portables, es decir que funcionen tanto bajo sistemas Unix como bajo sistemas Windows, y otros sistemas operativos. 3.1 SUBSISTEMA DE MANIPULACIÓN Y GESTIÓN REMOTA DEL LABORATORIO Como ya se ha señalado en el capítulo 2 de este proyecto este subsistema permite la experimentación y gestión del laboratorio. A este respecto, ha sido necesaria la realización de una gran cantidad de pruebas, así como el consejo de personal altamente cualificado con experiencia en el área ppara poder satisfacer cada uno de los requisitos de este subsistema. Las decisiones tomadas para la justificación de las tecnologías usadas en este subsistema se pueden dividir en las secciones que a continuación se señalan: • Arquitectura del subsistema • Dispositivo embebido y sistema operativo asociado • Mecatrónica • Servicios web • Lenguajes de programación 51 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS 3.1.1 Arquitectura del subsistema A la hora de seleccionar la arquitectura del subsistema se ha determinado que la estructura más adecuada es aquella en la que todo el subsistema en su conjunto posee una arquitectura distribuida frente a una centralizada o mixta, ya que permite tener una redundancia del sistema (Garcia-Zubia et al. 2008). Gracias esta redundancia se aumenta la confiabilidad del sistema, es decir, se consigue una escalabilidad mayor y mucho más fácil que con una arquitectura centralizada. Este aspecto constituye uno de los puntos fuertes del sistema, ya que la idea es que sea posible replicar de manera rápida y fácil el laboratorio. Además una separación la arquitectura distribuida permite hacer una separación de tareas en subtareas, lo que influye en una mejor respuesta del sistema. Es reconocido el hecho de que al no basarnos en una arquitectura centralizada, en el eventual supuesto de que se estropee uno de los sistemas, el fallo no implicaría una caída del sistema central. Otra de las fortalezas de la elección considerada se basa en la apertura del sistema. Como se ha señalado en capítulos anteriores, los sistemas distribuidos son normalmente sistemas abiertos, lo que significa que se diseñan sobre protocolos estándar que permiten combinar equipamiento y software de diferentes implementados en diferentes tecnologías (Tian-ran & Dao-kui 2002). Además la concurrencia en un sistema distribuido permite que varios procesos puedan operar al mismo tiempo sobre diferentes dispositivos de la red, lo que puede redundar en una gran ventaja a la hora de procesar una gran cantidad de imágenes. Estos procesos pueden comunicarse con otros paralelamente durante su funcionamiento normal interactuando para minimizar los tiempos de procesado. 3.1.2 Dispositivo embebido y sistema operativo asociado Uno de los principales requerimientos de este subsistema es que debe estar implementado sobre una plataforma hardware de bajo coste, y si fuera posible libre para permitir, de esto modo, la adicción de características customizadas en caso de que fuera necesario. En este caso se ha escogido la plataforma llamada Raspberry PI, ya que usa un sistema operativo basado en el núcleo Linux, que es popular entre programadores y desarrolladores e implica un espíritu de colaboración, y todos los sistemas de WebLab-Deusto están basados en Software libre (Hertel, Niedner & Herrmann 2003). Como desventaja de la Raspberry PI cabe señalar que no es hardware libre. Como inciso, y debido a que hay un gran debate detrás de los que es el hardware libre, a continuación se detallan brevemente las características del software libre. Los dispositivos de hardware libre son aquellos cuyas especificaciones, diseños y esquemas son de acceso público (que no siempre implica gratuidad) y que, en cierta medida, lleva al mundo del hardware la filosofía del software libre. La raspberry PI tiene abiertas sus especificaciones, sin embargo no provee de sus diseños ni esquemas. Se ha escogido un sistema Linux como sistema operativo ya que permite ejecutar varios procesos a la vez de forma ininterrumpida, es decir, se puede disponer de un servidor web en ejecución y, simultáneamente disponer de la utilización de otros programas sin ningún inconveniente. Además la Raspberry PI posee una serie de características que la hacen perfecta para el proyecto en cuestión. 52 PROYECTO FIN DE GRADO La primera de las características es que posee varios puertos GPIO (General Purpose Input Output), necesarios para la conexión y comunicación con dispositivos electrónicos como los motores que se utilizan o señales audibles en ciertos eventos importantes del sistema. La segunda de las características que contribuyen a la idoneidad viene de la mano de la conectividad. La Raspberry PI posee un controlador 10/100 Ethernet (RJ-45) vía hub USB, le que permite conectividad con otros dispositivos a través de Ethernet. Además existe un modulo USB llamado WiPI cuyo coste es de aproximadamente 20€ que prove a la Raspberry PI de conectividad WiFi que el sistema operativo seleccionado soporta nativamente. El coste de la Raspberry PI modelo B es de aproximadamente 35 Euros, y su consumo eléctrico es bastante ajustado. En base a varios estudios acometidos al respecto, se calcula que el consumo mensual del dispositivo con una media de funcionamiento de 24 horas al día, y una utilización de la CPU al 15% de media, oscila entre 0,5 y 1 € en la factura eléctrica (Pi & An 2012). No obstante, estos estudios no son fácilmente aplicables a nuestro proyecto ya que no consideran el movimiento de los motores por lo que previsiblemente, el consumo de energia en este caso será mayor. Respecto al sistema operativo que gobernará la placa se ha seleccionado la distribución Raspbian Wheezy. Raspbian Wheezy, un sistema operativo Linux libre basado en Debian Wheezy (Debian 7.0) diseñada específicamente para la Raspberry Pi (Trapp 2013), orientado a la enseñanza de informática. Raspbian Wheezy posee soporte para I2C, SPI y One Wire, además, cuenta con un servidor SSH por defecto para acceder a la placa y ocupa tan poco que cabe sin problemas en una tarjeta SD de 4GB. 3.1.3 Mecatrónica En lo que a la mecatrónica se refiere, los motores serán controlados mediante los GPIOs de la Raspberry PI. Tras la realización de diversos ensayos, se decidió descartar la utilización de los servomotores para este tipo de aplicación, puesto que el rotor debía ser capaz de rotar 360º y los servomotores estudiados tenían una libertad de movimiento limitada a 180º como consecuencia de su método de construcción. Por lo tanto, las opciones más convenientes en este caso serian por un lado slos motores paso a paso y por otro, los motores DC. A este respecto,una característica deseable para este proyecto es que los objetos a sumergir sean liberados lo más rápidamente posible, para así simular en tanto en cuanto es posible una caída libre, se requieren altas velocidades de revolución. Asimismo, es necesario prever que quizás sea necesario utilizar objetos sumergibles de hasta un kilogramo. Esto decanta la elección a favor de los motores DC, puesto que los motores paso a paso perderían demasiado par a altas velocidades. Una vez determinada la opción de utilizar motores DC, se realizó un pequeño estudio sobre varios modelos disponibles en el mercado a través de distribuidores conocidos y de confianza. 53 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS Como resultado, se obtuvo la siguiente lista de modelos (se incluyen además algunas de sus características): Motor Pololu D3 Pololu II M12V200 Cytron EMG30 Voltaje 6VDC 12V 12V 12V 12V Reductora 50:1 30:1 RPM 120 200 200 170 170 Par 3.6 kg·cm 12 kg·cm 3.59 kg·cm 2.75 kg·cm 1.5 kg·cm Extras Encoder Encoder Encoder Encoder Encoder y sensores de efecto Hall Tabla 3.1: Comparativa entre los motores seleccionados. Finalmente, se seleccionó el modelo EMG30, ya que es un motor de 12v totalmente equipado con encoders y con una caja reductora 30:1. Este motor resulta ideal para aplicaciones pequeñas como la nuestra, y nos proporciona una relación calidad coste de las más altas de todos los motores que hemos estudiado. Además posee sensores de efecto Hall necesarios en nuestra aplicación para la determinación de la posición de los motores en cada momento. Para poder manejar los motores a través los GPIO de la Raspberry PI fue necesaria una electrónica asociada. Toda esta electrónica, fundamentalmente basada en la utilización de resistencias, conectores y drivers L293N, así como una PCB (Printed Circuit Board) capaz de controlar cuatro motores de manera independiente, fue desarrollada e implementada en el experimento del acuario. Además, dado que los motores debían encargarse del izado y arriado de los objetos sumergibles que acabarán en la pecera, y no existía en el mercado ninguna solución que se adaptara a las necesidades del proyecto, se tuvieron que fabricar unas poleas a medida. Para la fabricación de estas poleas a medida su tuvo hacer un estudio tanto de las fuerzas implicadas como de las características necesarias para la adaptación de las mismas a los motores seleccionados. Posteriormente se diseñaron las poleas desde DeustoTech Telecom a petición del tutor de este proyecto, Nacho Angulo Martínez. Estas poleas fueron diseñadas en una herramienta de edición 3D, teniendo en cuenta todo lo anterior, y se imprimieron en una impresora 3D profesional. Figura 3.1: Polea diseñada. 54 PROYECTO FIN DE GRADO 3.1.4 Servicios web Este subsistema utiliza servicios web para todas las comunicaciones que lleva a cabo. Todas estas comunicaciones se hacen contra el servidor de WebLab-Deusto, y desde el comienzo se ha determinadoque sean comunicaciones asíncronas. En las comunicaciones asíncronas el emisor envía la información sabiendo que puede no obtener una respuesta inmediata. El receptor será consciente de la llegada de los mensajes sólo cuando este acceda al canal específico. Por tanto, se suele decir que la disponibilidad del emisor o receptor es incierta y marca de forma importante el contexto de la comunicación. Para llevar a cabo todas estas comunicaciones se ha elegido utilizar REST (Representational State Transfer). Un concepto importante en REST es la existencia de recursos (elementos de información), que pueden ser accedidos utilizando un identificador global o URI (Uniform Resource Identificator). REST Está totalmente bajo las especificaciones del protocolo HTTP (Hipertext transfer Protocol), en donde todo actúa como un único recurso, ni siquiera los servicios se escapan, se trata el mensaje igual que si de un elemento HTML se tratase (Hipertext Markup Language) (Wilde 2007). Además, no resulta tan estricto como SOAP (Simple Object Access Protocol). Es decir, los datos pueden mantenerse estrictamente o de forma desacoplada, mediante la URI, y los recursos implicados pueden consumirse fácilmente desde JavaScript (la mayoría de las aplicaciones que utilizan OpenID o el protocolo OAuth utilizan JavaScript para realizar llamadas con REST, por ejemplo twitter). Por último, resulta importante enfatizar que para sistemas embebidos como los que se desean manejar, se ha tratado de lograr que r que los mensajes transmitidos sean bastante ligeros, de manera que no se vea perjudicado el rendimiento y la escalabilidad óptima del sistema. Para poder alcanzar este propósito se estima que el formato más adecuado resulta de la utilización de XML (Extensible Markup Language) o JSON (JavaScript Object Notation) (Crockford 2006). En el caso particular del presente proyecto, la comunicación entre los diferentes dispositivos hace uso de JSON, ya que desde el punto de vista del sistema interesa un formato ligero para el intercambio de datos, frente a la principal alternativa XML, un lenguaje de marcado de propósito general. La elección de JSON se debe asimismo a la velocidad en que se procesa desde JavaScript (lado cliente) y a que resulta muy simple su procesado tanto para humanos como para máquinas. Ademas, JSON está orientado a las estructuras de datos de los lenguajes de programación modernos y no se necesita la validación mediante esquemas de las respuestas, como en el caso de XML. 3.1.5 Lenguajes de programación El lenguaje de programación escogido constituye un punto importante en este proyecto, ya que, en parte, el tiempo de desarrollo del sistema depende de él. Además, se pretende que este proyecto pueda ser reutilizado y reimplementado por un gran número de usuarios. Por tanto, se debe escoger un lenguaje fácil de entender y rápido de aprender por personal no especializado. En consecuencia, se ha escogido el lenguaje de programación Python (Python Software Foundation 2013) para la implementación completa de los servicios web. 55 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS Python es un lenguaje de programación de alto nivel, fácil de aprender, y con librerías creadas y fácilmente modificables para todas las tareas que necesitábamos desarrollar. Asimismo, Python consituye un lenguaje de código libre y disponible para la mayoría de los sistemas operativos actuales. Además genera un código fácil de leer y su biblioteca estándar es muy completa. Este lenguaje es especialmente útil en la materialización de los objetos en JSON para transmitirlos al lado del servidor. Las principales librerías que se usan en este subsistema son WebIOPi (Eric Ptak 2013) para el control y debugueo de los GPIO, así como, para tener una interfaz web que provee de acceso directo a los GPIO, y Tornado para la creación de los servicios web. Gracias a WebIOPI se consigue tener una API para la gestión de los GPIO de manera fácil y rápida, y permite relacionar la Raspberry PI con el Internet de las cosas. Por otra parte, Tornado permite implementar fácilmente servicios web asíncronos, pudiendo escalar a decenas de miles de conexiones abiertas mediante el uso de conexiones no bloqueantes. Para la programación de los motores se ha escogido el lenguaje de programación C. Se ha detrminado que C es la opción más adecuada debido a la necesidad de rutinas de bajo nivel. A pesar de usar programación C, en esta parte se creará una API para llamar a las funciones desde Python, y que así, el tiempo de desarrollo sea menor. 3.2 IMPLEMENTACIÓN DE RLMS EN PLATAFORMA EMBEBIDA DE BAJO COSTE Uno de los puntos fuertes de este proyecto está constituido en base a la elección del RLMS que gestionará el laboratorio remoto que se pretende diseñar. El RLMS está llamado a encargarse tanto del acceso a los usuarios del sistema como de la compartición de archivos, la gestión de colas, etc. pero también se tiene que encargar, por ser el caso especial de la pecera, del procesado de las imágenes provenientes de la pecera, así como de mantener los procesos asociados a estas imágenes. Por tanto, vemos se pueden diferenciar dos partes importantes: • RLMS • Dispositivo embebido y sistema operativo asociado 3.2.1 RLMS En cuanto a los RLMS que se testaron se determinó que la mejor opción, era el RLMS WebLab-Deusto. Weblab-Deusto permite hacer uso de la autenticación basada en OpenID o LDAP, lo que abre las puertas a que toda la comunidad educativa pueda disfrutar del laboratorio remoto desarrollado. Esta alternativa ofrece también la gestión de colas para manejar de forma transparente las reservas del laboratorio basándose en tiempos, asi como en permisos de usuarios. WebLab-Deusto permite asimismo escalar el experimento automáticamente, así como extenderlo en el momento que lo necesitemos. Además, su interfaz web de adminis- 56 PROYECTO FIN DE GRADO tración permite dar permisos a usuarios automáticamente dependiendo del dominio al que pertenezca su logueo. Por último, y quizás lo más importante, Weblab-Deusto nos provee de la capacidad de que el desarrollo que se haga en web valga tanto en ordenadores como en dispositivos móviles, lo que implica que un mayor número de usuarios puedan acceder al experimento (WebLab-Deusto 2005 onwards). Además, la implementación del lado servidor de WebLab-Deusto está íntegramente realizada en Python, el lenguaje de programación en el que se pretende desarrollar el laboratorio entero y programar los servicios web. Esto, teóricamente, permite que la interacción sea más fácil entre los distintos dispositivos implicados en el laboratorio remoto. El despliegue de WebLab-Deusto en esta plataforma es tan fácil como bajarse el código fuente de Github, y seguir las instrucciones para su instalación. Además, los desarrolladores de WebLab-Deusto se encuentran en la misma universidad en la que se desarrolla el proyecto, luego, en caso de tener algún problema, es más fácil contactar con ellos que con los desarrolladores de otros RLMS como MIT iLabs o LabShare Sahara. 3.2.2 Dispositivo embebido y sistema operativo asociado Respecto a la plataforma que ha sido usada para embeber WebLab-Deusto es preciso señalar que existian básicamente dos candidatas principales que cumplían los requisitos básicos, la Raspberry PI y la PandaBoard ES. La Raspberry Pi, ofrecía la ventaja de ser muy económica, y de poder basar el laboratorio enteramente en Raspberry Pis. No obstante, finalmente se seleccionó la PandaBoard ES. La PandaBoard ES fue seleccionada ya que el laboratorio remoto tenía que implementar una aplicación de visión artificial que presumiblemente necesitaría procesar imágenes de una manera fluida, y después de probar la Raspberry PI se llegó a la conclusión que esta solo podía ofrecer unas cuatro imágenes por segundo más el procesado asociado a las mismas, y eso, en las mejores condiciones. Por otro lado, se realizaron pruebas con la PandaBoard ES y era capaz de procesar entre veinte y veinticuatro imágenes por segundo sin ningún problema, además de guardarlas en su tarjeta SD y ofrecerlas mediante un servicio basado en REST, como hemos descrito anteriormente. La PandaBoard ES tiene un procesador Dual-Core de 1.2 GHz cada uno para llevar a cabo las tareas y una GPU PowerVR SGX540 para hacer todo lo relacionado con el procesado de imagen. Dentro de la PandaBoard ES se ha elegido introducir también un sistema operativo basado en Linux, ya que, WebLab-Deusto está más orientado a desplegarse en plataformas con sistemas operativos de este tipo. El sistema elegido ha sido Ubuntu Server 12.04 LTS (basado en Linaro por ser un procesador ARM), ya que es LTS (Long Term Support), lo que implica que desde la fecha que salió, hasta dentro de cinco años ofrecerá actualizaciones y soporte. Ubuntu ofrece un sistema operativo fácil de usar, con un gestor de paquetes muy intuitivo frente a las otras opciones que eran Armstrong o Linaro. Parece la opción más viable para un desarrollo rápido en la PandaBoard ES. Además, en la PandaBoard ES existe la posibilidad de programar directamente sobre un DSP (Digital Signal Processor) integrado que permite el procesado de imágenes en tiempo real, algo muy importante en este tipo de proyectos. 57 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS Para poder utilizar el DSP se ha decidido instalar los extras de TI OMAP (Texas Instruments, Open Multimedia Applications Platform) sobre la distribución escogida, Ubuntu Server 12.04 LTS, así como volver a reconstruir el Kernel Linux para que sea un Kernel Linux de tiempo real. A un sistema operativo de tiempo real RTOS (Real Time Operating System) se le puede exigir que sea determinista, fiable, y tolerante a los fallos (Yodaiken & Barabanov 1997). 3.3 IMPLEMENTACIÓN DE UNA INTERFAZ SENCILLA PARA EL MANEJO DEL LABORATORIO REMOTO La interfaz web es uno de los puntos más importantes de cara a la utilización del laboratorio remoto, ya que constituye la primera impresión en la experiencia de utilización del laboratorio remoto. Una de las principales máximas que se debe respetar es la usabilidad, así como la estética no recargada. Asimismo, los esfuerzos en este sentido deben encaminarse a que el laboratorio configurado logre probar la arquitectura propuesta en todas las modalidades de laboratorio que existen. Por esto, en un momento inicial del proyecto se pensó que sería más interesante implementar dos interfaces diferentes para probar los dos tipos de laboratorios que tiene WebLab-Deusto, los laboratorios gestionados y los laboratorios no gestionados. Se decidió también que lo mejor sería que las dos interfaces se implementaran usando tecnologías web y con la capacidad de acceder a todos los recursos de manera asíncrona, desde cualquier parte del mundo, y cuando fuera necesario, así como crear interfaces compatibles con dispositivos móviles. Por tanto, se diferencian dos alternativas: • Interfaz web para laboratorios gestionados • Interfaz web para laboratorios no gestionados 3.3.1 Interfaz web para laboratorios gestionados Tras analizar las opciones existentes se determino que en la parte de los laboratorios gestionados se usaría GWT (Google Web Toolkit). La decisión de usar GWT se basó en el hecho de que permite crear aplicaciones web multiplataforma y multinavegador, desarrollando ágil y rápidamente, además de que reduce el ancho de banda una vez cargada la aplicación en la caché y una cosa más importante en nuestro caso, reduce la carga en el servidor (los datos que con otras tecnologías se cargan en la sesión del servidor con GWT pasan al cliente). Además, en este caso no son necesarios conocimientos de JavaScript, únicamente de Java, ya que posee un compilador Java-to-JavaScript y un browser especial que ayuda en el debug de las aplicaciones. Ayudo a decidir también el hecho de que la mayoría de los laboratorios actualmente desplegados en WebLab-Deusto poseen una interfaz de usuario basada precisamente en GWT que además, hacen uso de diferentes servicios web. 58 PROYECTO FIN DE GRADO 3.3.2 Interfaz web para laboratorios no gestionados Para la parte de laboratorios remotos no gestionados se determino que la mejor opción se basa en la utilización de tecnologías diferentes a las que usa WebLab-Deusto, pero que resultan plenamente compatibles con este. Así, que en cuanto a ejecución de código en el navegador del usuario para determinar la disposición de los resultados, las alternativas son básicamente dos: utilizar código JavaScript o una aplicación utilizando la tecnología de Adobe Flash. La primera alternativa está hoy presente en la práctica totalidad de los navegadores y, aunque hay problemas por las diferencias entre los distintos intérpretes, existe cierto grado de estandarización. La segunda nos permite evitar esas diferencias de ejecución en los distintos navegadores si utilizamos la implementación oficial, sin embargo las aplicaciones Flash son pesadas de cargar, su tecnología es privativa (lo que va en contra de la naturaleza abierta de la web, y nuestro proyecto) y obligan al usuario a instalar un complemento a su navegador que muchas veces no está disponible en todos los navegadores, como pasa en los de los dispositivos móviles. Por esta razón se decidió usar JavaScript para el desarrollo de la interfaz web del cliente para el laboratorio no gestionado. Debido a la falta de un estándar claro de JavaScript/ECMAScript es aconsejable la utilización de una biblioteca que permita no tener que preocuparse porque los desarrollos se ejecuten de formas distintas en los diferentes navegadores. Además la utilización de grandes bibliotecas o framework simplifican la manipulación del DOM (Document Object Model), el tratamiento de eventos y la comunicación asíncrona. Dentro de la amplia variedad de librerías para JavaScript disponibles se optó por el uso de jQuery por su velocidad y simplicidad, porque tiene una baja curva de aprendizaje bastante fácil y cuenta con una excelente documentación y tiene una gran cantidad de extensiones. A la hora de hacer la disposición de resultados en la pantalla, una vez descartada la tecnología Adobe Flash por las razones comentadas, queda básicamente la utilización de HTML junto a Twitter Bootstrap. se usa HTML ya que HTML5 es aún un borrador, y por tanto, no aportaría demasiadas funcionalidades, aunque en un futuro puede ser una buena opción. HTML5 está aún en proceso de implantación y sólo disponible en las últimas versiones de los distintos navegadores y en algunos casos parcialmente. En cuanto a CSS se ha elegido desarrollar sobre Twitter Bootstrap (Twitter, Inc. 2013), un framework CSS liberado por twitter que permite un desarrollo rápido de la interfaz web. Bootstrap es una colección de herramientas de software libre para la creación de sitios y aplicaciones web. Contiene plantillas de diseño basadas en HTML y CSS con tipografías, formularios, botones, gráficos, barras de navegación y demás componentes de interfaz, así como extensiones opcionales de JavaScript. 3.4 IMPLEMENTACIÓN DE VISIÓN ARTIFICIAL PARA EL LABORATORIO REMOTO La visión artificial es uno de los puntos más críticos del experimento en cuanto a procesado de datos. Implica a los dispositivos hardware que capturarán las imágenes, en este caso cámaras, y la plataforma que procesará estas imágenes y se las ofrecerá al sistema, así como el software que se utilice para procesar estas imágenes. 59 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS Se puede dividir en varias partes: • Dispositivos de captura de imágenes • Dispositivo embebido y sistema operativo asociado • Software de procesado de imágenes • Tipos de formatos de imagen • Iluminación 3.4.1 Dispositivos de captura de imágenes En cuanto a los dispositivos de captura de imágenes se ha elegido la opción de cámaras web frente a las opciones alternativas, cámaras vía USB (Universal Serial Bus) o cámaras integrada en las plataformas embebidas. Lo que determino que se optara por las cámaras web fue la capacidad que tienen de guardar ellas mismas las imágenes y devolverlas a través de un servicio web a una velocidad realmente rápida, en muchos casos triplicaba la velocidad de realizar la misma tarea de una cámara vía USB. Las cámaras web permiten recoger imágenes en el momento que sean necesarias sin tener que preocuparse por guardarlas en disco a cada momento. Si fuera necesario guardar estas imágenes a cada momento el sistema se ralentizaría mucho. Esta ventaja se ve potenciada por el hecho de que las cámaras web que han sido elegidas funcionan por WiFi, lo que evita una buena parte del cableado que representa una tarea engorrosa en cualquier laboratorio remoto. A pesar de esto, en caso necesario, estas cámaras tienen la opción de usar cableado tipo Ethernet. Las cámaras web seleccionadas poseen algunas desventajas respecto a las cámaras USB como son el hecho de que las cámaras vía USB presentan mucha calidad de imagen por un precio razonable, mientras que con las cámaras web si quieres mucha calidad de imagen los precios se disparan. Después de algunas pruebas se ha llegado a la conclusión de que en este laboratorio la máxima calidad no es necesaria, con una cámara de calidad media es suficiente. Las cámaras web que han sido seleccionadas son las que corresponden al modelo DCS932L de la marca D-Link, ya que son cámaras muy fáciles de utilizar e instalar, simplemente es necesario bajar un software al ordenador ysiguir los pasos que aparecen en su página web.Este seria el proceso a seguir en sistemas operativos Windows, en nuestro caso se ha utilizado el programa NMAP para hacer un mapeo de los dispositivos conectados a la red, encontrar las cámaras y configurarlas. Por último es necesario añadir que estas cámaras ya se usan en otros laboratorios y parece que tienen una calidad de imagen suficiente para el laboratorio a desarrollar, y el precio es bastante ajustado. 60 PROYECTO FIN DE GRADO 3.4.2 Dispositivo embebido y sistema operativo asociado En lo relativo al hardware utilizado para el procesado de las imágenes, después de varios pruebas realizadas se ha decidido compartirlo con la plataforma que tendrá dentro el RLMS, en este caso WebLab-Deusto, como hemos dicho más arriba. La primera idea fue tener un dispositivo especializado únicamente en el procesado de imágenes como un DSP, o una FPGA programada especialmente para el procesamiento y guardado de las imágenes, así como para servir las mismas. Debido al coste, y es que estos sistemas eran costos en general, y a que el uso de este hardware específico complicaba un poco más el desarrollo de los sistemas web asociados a este, se decidió utilizar la PandaBoard ES, un hardware de propósito general, con un precio bastante ajustado, y lo más importante en este caso, con un DSP integrado para el procesado de las imágenes y el servicio web que las compartiría con el RLMS. 3.4.3 Software de procesado de imágenes Ya se han explicado las características de la PandaBoard ES anteriormente, por lo que no se será objeto de reiteración en este apartado. Sin embargo, es preciso añadir que uno de los motivos de elección de la PandaBoard ES es que al poder ejecutar sobre ella un sistema operativo de propósito general como Ubuntu Server 12.04, el procesado de imágenes se puede basar en bibliotecas ya hechas y testeadas sobre este tipo de plataformas durante mucho tiempo. Después de probar las diferentes bibliotecas de procesado de imagen que aceptaba esta plataforma se decidió usar OpenCV, ya que además de ser software libre y tener API tanto para C, C++ y Python, arrojó los tiempos de procesado menores en algunas de las tareas de procesado que más se estimaba que se iban a usar. Para estas pruebas se usó un equipo Pentium M a 1.7GHz, y se realizaron cuatro tareas diferentes que pretendían parecerse a las que realizamos en el proyecto: • 2D DFT: Transformada Discreta de Fourier de una imagen de 512 × 512 píxeles. • Cambio de tamaño: Se pasó de una imagen de 512 × 512 píxeles. a otra de 384 × 384 píxeles, mediante interpolación bilineal. Las imágenes eran de ocho bits y tres canales. • Flujo óptico: Se siguieron 520 puntos con una ventana de 41 × 41 píxeles. y 4 niveles de la pirámide. • Red neuronal: buscamos el punto de referencia de una red en FANN (Fast Artificial Neural Network Library). 61 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS Los resultados se pueden ver en la figura 3.2 Figura 3.2: Comparación de rendimiento de librerías de Visión Arti cial Como podemos ver en la figura anterior, la librería que mejor rendimiento ofrece en todos los casos es OpenCV, además, si se tiene instalado IPP se puede apreciar que los tiempos de ejecución son más bajos. Esto se consigue gracias a la optimización de código que ofrece IPP. Como esta decisión constituía una elección de gran importancia, ya que todo el procesado de imagen iba a desarrollarse con el software que fuera elegido, se comprobó entre las diferentes opciones que OpenCV tenía para acceder directamente al DSP de la PandaBoard ES. En el caso de OpenCV solo era necesario instalar un complemento, mientras que con otras librerías era necesario volver a compilar algunas de las librerías del sistema operativo cambiándoles algunos de los flags, lo que parecía ser bastante engorroso. En cuanto al lenguaje de programación a utilizar para el procesado de imágenes se volvió a seleccionar Python, ya que es el mismo lenguaje que se iba a utilizar para el desarrollo de los sistemas web. Como se puede apuntar que programando con las librerías de OpenCV con la API de C, o C++ existe soporte para más funciones, e incluso en algunas funciones es posible seleccionar opciones a más bajo nivel. Sin embargo, en este proyecto todas las necesidades quedan cubiertas programando con la API de Python. A modo de anécdota, es necesario informar de que al principio se empezó a programar con la API de C, ya que se pensaba que la API de Python no iba a tener implementadas todas las funciones necesarias en el proyecto. Después de comprobar de nuevo la documentación de OpenCV resultó evidente que todas las funciones que se usaban en el proyecto de la API de C estaban también en la API de Python, y las que no estaban eran de fácil implementación. Por este motivo, se decidió cambiar inmediatamente. Además, se llegó a la conclusión de que la integración directa de OpenCV en los servicios web reducía los tiempos a la hora de compartir las imágenes entre las diferentes partes del sistema implicadas en el procesado de las mismas, 62 PROYECTO FIN DE GRADO y a la hora de guardarlas. 3.4.4 Tipos de formatos de imagen Respecto al formato de las imágenes, y después de hacer un estudio sobre todas las opciones posibles buscando utilizar un único formato, se decidieron utilizar dos formatos diferentes. Esta decisión fue tomada como consecuencia de que existían diferentes necesidades a cubrir que no se podían solucionar sólo con uno de los formatos. Por una parte, para mostrar una sucesión de imágenes en tiempo real que generen la sensación de vídeo en la pantalla del usuario se ha elegido usar el formato JPG (Joint Photographic Experts Group), ya que este formato utiliza un algoritmo de compresión con pérdida para reducir el tamaño de los archivos de imágenes con flexibilidad a la hora de ajustar el grado de compresión. Así, los usuarios no necesitan descargarse tantos datos, ni el servidor tiene que mandarlos y ocupar todo su ancho de banda. Por otra parte, para las imágenes estáticas que le llegaran al usuario cuando las solicite se le servirán en formato PNG, ya que se necesita hacer uso de transparencias, y JPG no lo permite. Además, PNG es un formato sin pérdida de calidad con una excelente compresión. 3.4.5 Iluminación Dado que la iluminación era un factor importante se optó por desarrollar un sistema de iluminación a medida. Este sistema de iluminación se determino en basea muchas pruebas realizadas a lo largo de todo el proceso de desarrollo del proyecto. De este modo, se determinó que la mejor forma de iluminación, de acuerdo con el presupuesto acordado, consistía en una serie de tubos fluorescente por la parte trasera de 60W cada uno, así como una lámina opaca para conseguir una iluminación difusa, y la adicción de otro tubo fluorescente en la parte superior que iluminara directamente los objetos sumergibles. La iluminación posterior no era suficiente ya que permitía marcar bien las siluetas pero otorgaba poco color a los objetos sumergibles haciéndolos difícilmente identificables. estopor este motivo, se incluyó un fluorescente en la parte superior. Gracias a este fluorescente es posible la identificación de los objetos sumergibles por color, además deconsiguir una imagen visualmente más atractiva. 63 3 JUSTIFICACIÓN DE LAS TECNOLOGÍAS UTILIZADAS Figura 3.3: Imagen de el acuario con la iluminación seleccionada. 64 PROYECTO FIN DE GRADO 4. DISEÑO E IMPLEMENTACIÓN En este capítulo se presenta, en base a la justificación de las tecnologías utilizadas que se ha hecho en el capítulo anterior, cómo fue diseñado y desarrollado el proyecto. Desde el punto de vista de desarrollo, es necesario dividir la fase de ejecución en varios procesos principales. Cada uno de ellos se ocupará de uno de los aspectos clave del proyecto: • Subsistema de manipulación y gestión remota del laboratorio • Implementación de RLMS en plataforma embebida de bajo coste • Implementación de una interfaz sencilla para el manejo del laboratorio remoto • Implementación de visión artificial para el laboratorio remoto 4.1 SUBSISTEMA DE MANIPULACIÓN Y GESTIÓN REMOTA DEL LABORATORIO Dentro del subsistema de manipulación y gestión remota del laboratorio se pueden diferenciar entre la parte software de este subsistema, y la parte hardware. Para ello se ha decidido dividir esta sección en dos secciones que se complementan entre ellas: • Dispositivo embebido y mecatrónica • Servicios web 4.1.1 Dispositivo embebido y mecatrónica Una vez definidos los elementos a utilizar, expuestos en el capítulo 3, se llevó a cabo el diseño de una PCB que sirviera para establecer las comunicaciones entre el hardware específico del laboratorio, los motores, drivers, etc. con la plataforma embebida seleccionada. El primer paso después del diseño de esta PCB estuvo constituido por la puesta en marcha de la raspberry PI. Para ello se hizo la instalación del sistema operativo, en este caso Raspbian Wheezy, sobre una tarjeta SD de 4GB. La imagen de Raspbian Wheezy se puede bajar de forma gratuita, ya que es un sistema operativo libre basado en Debian GNU/Linux, de la pagina web oficial del proyecto Raspberry PI (http://www. raspberrypi.org/downloads), y una vez se tiene la imagen en un ordenador, y teniendo en cuenta que estas instrucciones solo sirven para algunos sistemas Linux, como Ubuntu, se debe ejecutar el comando mostrado en el bloque de código fuente 4.1. 65 4 DISEÑO E IMPLEMENTACIÓN sudo dd if=/home/gustavo/2013−02−09−wheezy−raspbian.bin of=/dev/sdc bs=4M Bloque de código fuente 4.1: Comando para la grabacion de Raspbian en la tarjeta SD. Este comando permite copiar y convertir datos de archivos a bajo nivel. Con el parámetro if se especifica el origen de los datos, y con el parámetro of se especifica el destino, que en este caso es la tarjeta SD. Por último, con el parámetro bs se especifica el número de bytes a leer y escribir en cada uno de los cachos que se vayan grabando. Una vez instalado y configurado el sistema operativo Raspbian Wheezy dentro de la Raspberry PI resultó necesario pensar en el número de motores que se decidirían mover con cada Raspberry PI. En un primer momento se pensó que lo ideal sería que cada Raspberry PI pudiera gestionar hasta seis motores, pero después de revisar la documentación de los pines de la Raspberry PI y las especificaciones de los motores y drivers elegidos se llegó a la conclusión de que cada Raspberry PI sólo podría gestionar un máximo de cuatro motores. Además, sólo es posible la gestión de cuatro motores por cada Raspberry PI si se conecta solo uno de los sensores de efecto Hall para cada uno de los motores (cada motor posee dos sensores de efecto Hall). El hecho de solo poder conectar cuatro motores encuentra su razón en que la Raspberry PI solo proporciona diecisiete GPIO totalmente programables, y es necesario un mínimo de cuatro pines por cada motor, es decir, que se usan un total de dieciséis pines para los cuatro motores, y el que sobra se ha usado para poner un zumbador que avise ante ciertos eventos de la Raspberry PI. Figura 4.1: Diagrama de pines de la Raspberry PI usando la librería WiringPI. 66 PROYECTO FIN DE GRADO Como se ha mencionado anteriormente, cada uno de los motores se gestiona a través de cuatro pines conectados directamente a los GPIO de la Raspberry PI como se explica a continuación: • El primero de estos pines se usa para de la lectura de uno de los sensores Hall (el segundo permitiría adivinar la dirección, que en este caso conocemos al gobernarla directamente) permitiendo saber el número de vueltas que ha dado el motor en cada momento. • Dos de los pines de los motores se usan para gestionar el terminal positivo y el terminal negativo del motor. • El ultimo pin se conecto directamente al driver asociado al motor, en este caso el L298N, más concretamente a su pin de “enable”, que se utiliza para ahorrar energía activando las salidas del driver solo cuando es necesario. En la figura 4.2 se puede observar el esquemático que fue desarrollado con el software Eagle para el conexionado de los motores, sus drivers asociados, y los GPIO de la Raspberry PI en la PCB que se desarrolló. Se puede observar además que cada PCB tiene conexión con sus cuatro motores EMG30 asociados que se ha comentado anteriormente, así como dos drivers y los GPIO de la Raspberry PI. Es preciso señalar que señalar que siguiendo los datasheets de cada uno de los componentes electrónicos usados se pusieron una serie de resistencias y varios condensadores, pero cuando se ensamblaron todos los componentes en el laboratorio resultó que no funcionaban correctamente, y después de un estudio exhaustivo de la electrónica se decidieron quitar los condensadores e inmediatamente la PCB pasó a funcionar. En la documentación del driver L298N aparecen estos condensadores como aconsejados, sin embargo en la práctica estos condensadores no sólo no hacen falta, sino que en nuestro caso llevaron al mal funcionamiento de los motores. Se puede apreciar también como cada uno de los sensores de efecto Hall llevan una resistencia del tipo ”pull up” asociada. Una pequeña anécdota con respecto al mal funcionamiento de esta PCB fue que la primera que llegó se ensamblo como se suponía que debería funcionar siguiendo cada una de las especificaciones. Sin embargo se olvidó deshabilitar los pines de comunicación serie (TX-RX) de la Raspberry PI. Estos pines si no se deshabilitan mandan por el pin de transmisión todos los mensaje de arranque del sistema por defecto. Como era de esperar se quemaron varias pistas de la PCB y hubo que arreglarlas manualmente. Aunque en el esquemático de la PCB no se aprecia se puede apreciar mejor en las figuras 4.3 y 4.4 que corresponden a la PCB creada, los conectores elaborados específicamente para la placa. Fue preciso desarrollar dos librerías en Eagle para dos conectores diferentes presentes en la placa. 67 4 DISEÑO E IMPLEMENTACIÓN Figura 4.2: Esquemático de la PCB diseñada. 68 PROYECTO FIN DE GRADO La primera librería que se creó fue dirigida a los conectores de los motores, estos conectores llamados JST PHR6 son unos conectores de muy bajo coste, pero también con muy poca documentación, y por supuesto sin librerías para Eagle (o por lo menos no hubo suerte a la hora de encontrarlas). La librería que se creó íntegramente, encajo perfectamente a la hora de soldar los conectores, y por supuesto, fue liberada a la comunidad. La otra segunda librería que se creó fue la de los pines para acoplarla a la Raspberry PI como si fuera un shield de Arduino. Esta librería se obtuvo de Internet, pero al no responder a las necesidades que se le demandaban, se sometió a diversas modificaciones. Gracias a estas modificaciones, la placa quedó perfectamente encajada sobre la Raspberry PI. También se liberó a la comunidad esta librería, y los esquemáticos de la placa entera. Figura 4.3: Parte delantera de la PCB diseñada. Figura 4.4: Parte trasera de la PCB diseñada. 69 4 DISEÑO E IMPLEMENTACIÓN Una vez fabricada la PCB se procedió al montaje de la misma y a la ejecución de las pruebas independientes de cada subsistema. En este punto, y dado que se necesitaba comprobar que el trabajo que se había realizado funcionaba efectivamente como se esperaba, se procedió al montaje la PCB que se había creado con todos los componentes soldados sobre la Raspberry PI. En la figura 4.5 se puede observar una figura que muestra exactamente el resultado. Figura 4.5: PCB montada sobre la Raspberry PI. Posteriormente, se incluyeron las cuatro poleas y se estableció la estructura capaz de soportar tanto el peso de la Raspberry PI como el de los motores, sin eludir el peso de las tres cámaras web que posteriormente se introducirían. Además este soporte debía considerar asimismo el espacio necesario para albergar el correcto funcionamiento del dispositivo de suministro de comida para los peces , por lo que no podía tratarse de una placa sin ningún tipo de agujero sobre la pecera, sino que debía de tratarse de una superficie específicamente diseñada a medida que permitirá suministrar el alimento a los peces asi como la posible introducción de objetos en el agua. Esta estructura se construyó con MakerBeam y termino resultando perfecta y de fácil adaptación al entorno de trabajo. Como consecuencia de que en algunos puntos la estructura estaba demasiado vencida por el peso de los diferentes componentes del sistema, se trato de liberar parte de la carga enganchando unos pequeños anclajes al techo que se unían a la estructura mediante una cuerda de pita desde el techo a la estructura. Esto liberó mucho la carga que soportaba la estructura en algunos de los extremos, y mejoró la estabilidad de la misma. La estructura quedó tal y como aparece en la figura 4.6. 70 PROYECTO FIN DE GRADO Figura 4.6: Poleas y estructura montadas sobre el acuario. Por último, se engancho cada uno de los elementos sumergibles, en este caso bolas de ping pong con líquidos diferentes para conseguir pesos diferentes y, por tanto, densidades diferentes, mediante cuerdas de pita a cada una de las poleas y se volvió a comprobar su funcionamiento. La prueba fue totalmente positiva, el funcionamiento fue el esperado y no existió ningún problema. Adicionalmente, ya que se necesitaba mantener una línea de agua constante para que no hubiera ningún problema al izar y arriar los elementos sumergibles seleccionados y tener así un sistema fiable y robusto, se decidió instalar un dispositivo nivelador de agua. Este dispositivo posee un sensor magnético que mide constantemente el nivel del agua y cuando sobrepasa por debajo ese nivel una bomba empieza a bombear agua hasta llegar al nivel óptimo. La inclusión de este dispositivo fue motivada como consecuencia de la observación de que durante semanas la pecera perdía cerca de cinco litros de agua al día. En la figura 4.7 se puede ver una de las poleas con la bola de ping pong colocada. 71 4 DISEÑO E IMPLEMENTACIÓN Figura 4.7: Poleas y estructura montadas sobre el acuario. 4.1.2 Servicios web El siguiente estuvo constituido por la programación de los motores desde la Raspberry PI. Para ello, se hizo uso del lenguaje de programación C. El programa creado EMG30.c se encarga de la gestión de los motores. Este programa permite decidir el número de vueltas que el motor sube o baja, así como saber en qué posición se encuentran los motores gracias al sensor de efecto Hall integrado y un contador interno. Este funcionamiento es posible gracias a una serie de argumentos que se introducen para su consideración a la hora de la llamada al mismo. En el bloque de código fuente 4.2 se puede observar una parte del importante código programado que lo que llama a la librería wiringPi, que es libre, está realizada en el lenguaje de programación C y se encarga de gestionar fácilmente todos los GPIO de la Raspberry PI, lo que supone un ahorro de tiempo importante en el desarrollo. Se define el número de objetos sumergibles que tendrá la pecera y un número de vueltas máximo que como depende del radio interior de la polea se ha calculado a base de prueba y error. Y se define también una estructura de datos para describir los pines del motor. Por último se definen dos funciones, una para mover el motor y la otra para mandar datos a los pines del motor seleccionado. Estas funciones serán explicadas más adelante. 72 PROYECTO FIN DE GRADO #include <wiringPi.h> // Libreria de gestión GPIO para la Raspberry PI #define maxBalls 4 #define maxTurns 12 //1 vuelta = 1/3 de vuelta del motor typedef struct { int pinMotorA; int pinMotorB; int pinEnable; int pinSensor; } motor; // Pines asignados para el movimiento del motor // Pin para habilitar el driver del motor // Pin del sensor de efecto Hall sensor del Motor void turnMotor(char sense, int turns, motor M); //gira el motor motor setMotor(int ball); //selecciona el motor Bloque de código fuente 4.2: De nicion de la struct motor. Una vez definida esta estructura del motor se define un nuevo motor en el main del programa. Como se puede ver en bloque de código fuente 4.3 el main del programa acepta tres parámetros: • El primero de ellos es el sentido de giro del motor. Únicamente son válidos los valores UP y DOWN para subir y bajar el motor respectivamente. • El segundo es el número de bola que se desea mover. Este número tiene que estar comprendido entre 1, y el valor de maxBalls. • El último parámetro es el número de vueltas que debe dar el motor. Este número tiene que estar comprendido entre 1, y el valor de maxTurns. En este parámetro cada unidad representa exactamente un tercio de vuelta del motor. Una vez recibidos los parámetros y comprobados que son correctos se selecciona el motor al que se le quieren dar órdenes con la función setMotor y se le dan las órdenes de subir o bajar los elementos sumergibles con la función turnMotor. Estos parámetros que ahora mismo parecen no muy importantes pasan a ser trascendentales desde el momento que se decide que todo este funcionamiento tiene que pasar a formar parte de un servicio web al que va a ser necesario llamar desde cualquier parte del mundo. Es necesario advertir que se han eliminado algunas líneas de código que gestionaban los errores que pudieran ocurrir en la entrada de los parámetros para facilitar la comprensión del mismo. 73 4 DISEÑO E IMPLEMENTACIÓN int main(int argc, char * argv []) { int numBall, numTurns; char sense; motor M; sense = argv [1][0]; numBall = strtol(argv[2], NULL, 10); numTurns = strtol(argv[3], NULL, 10); if ((numBall <= maxBalls) && (numTurns <= maxTurns)) { M = setMotor(numBall); turnMotor(sense, numTurns, M); } return 1; } Bloque de código fuente 4.3: Main de programa del motor. Se implementó también la función turnMotor, que, tal ycomo se ha apuntado anteriormente, sirve para mover el motor en función de los parámetros de entrada. Si recibe UP mueve el motor en sentido horario para subir los elementos sumergibles, y si recibe DOWN mueve el motor en sentido antihorario para bajar el elemento sumergible. Dependiendo del número de vueltas que se le pase a la función el elemento sumergible subirá o bajara más o menos. Como se puede ver en el bloque de código fuente 4.4 para escribir un 1 o un 0 sobre un pin digital utilizamos la función digitalWrite de la librería wiringPi y para leer su valor utilizamos la función digitalread de la misma librería. Además, fue necesario crear una variable cont que lleva de las vueltas que ha subido o bajado el elemento sumergible en cada momento. void turnMotor(char sense, int turns, motor M) { int cont = 0; digitalWrite(M.pinEnable, HIGH); if (sense == ’U’) { digitalWrite(M.pinMotorA, HIGH); digitalWrite(M.pinMotorB, LOW); } else { digitalWrite(M.pinMotorA, LOW); digitalWrite(M.pinMotorB, HIGH); } while (digitalRead (M.pinSensor) == 0); while (cont < (turns * 30)) { while (digitalRead (M.pinSensor) == 1); while (digitalRead (M.pinSensor) == 0); cont++; } digitalWrite(M.pinMotorA, LOW); digitalWrite(M.pinMotorB, LOW); digitalWrite(M.pinEnable, LOW); } Bloque de código fuente 4.4: Funcion turnMotor. 74 PROYECTO FIN DE GRADO Por último se creó la función setMotor que únicamente sirve para seleccionar el motor objetivo que queremos mover. Como se puede ver en el bloque de código fuente 4.5 se definen los pines a los que mandar la información en función del motor seleccionado y posteriormente se modifican las líneas para ser entradas o salidas. Se han eliminado líneas de código ya que lo único que aportaban eran los números de los pines. motor setMotor(int ball) { motor M; switch (ball) { case 1: // Lineas del motor 1 M.pinMotorA = 8; M.pinMotorB = 9; M.pinEnable = 0; M.pinSensor = 7; break; case 2: // Lineas del motor 2 ... ... default : break; } // Modificación de las líneas del motor pinMode (M.pinMotorA, OUTPUT) ; pinMode (M.pinMotorB, OUTPUT) ; pinMode (M.pinEnable, OUTPUT) ; pinMode (M.pinSensor, INPUT) ; return M; } Bloque de código fuente 4.5: Funcion setMotor. Para la integración de los motores con los servicios web se utilizo la librería WebIOPI. WebIOPI es una librería que sirve para facilitar la creación de servicios web asociados a estos GPIO de la Raspberry PI escrita en lenguaje de programación Python. Usando WebIOPI lo que se hizo fue crear dos tipos de servicios web diferentes, el primero de ellos es el que se ha quedado explicado en las páginas anteriores, para subir y bajar las elementos sumergibles eligiendo el número de vueltas, y el segundo de ellos dirigido a devolvernos el estado actual de los elementos sumergibles. En la figura 5.1.5 podemos ver cómo han quedado configurados cada uno de los GPIO gracias a la interfaz web por defecto que nos provee WebIOPI. Se puede apreciar como están ocupados todos los pines posibles y que el número de salidas es trece, y el de entradas es cuatro por lo que hemos explicado anteriormente de la distribución de las líneas de los motores y el zumbador para eventos de la Raspberry PI. 75 4 DISEÑO E IMPLEMENTACIÓN Figura 4.8: Interfaz web de WebIOPI. El servicio web asociado a WebIOPI fue desarrollado para funcionar mediante REST únicamente haciendo peticiones web de tipo POST y GET, y pasando los datos de un dispositivo a otro en formato JSON. El servicio se creó buscando la fácil comprensión del mismo para que en caso necesario se pudieran mejorar o incrementar las funciones disponibles. En el bloque de código fuente 4.6 se puede ver parte del código que se desarrolló utilizando WebIOPI. A este respecto,se ha decidido no mostrar todo el código utilizando, omitiendo aquella parte del código que no aporta información. De este modo, se puede observar que cuando se hace un GET a la URL /ballStatus/ el programa busca en los archivos que guardan el estado de cada una de los elementos sumergibles y finalmente transmite un JSON con estos datos al solicitante además de un código 200 de HTTP que comunica que todo el proceso ha sido satisfactorio. def do_GET(self, relativePath): ... ... elif relativePath.startswith(”ballStatus/”): (mode, numBall) = relativePath.split(”/”) for num in range(1, max_balls + 1): strPath=”/home/pi/emg30/ballStatus%s”, num with open(strPath) as f: ball_status[] = f.read() out =json.dumps(”[’Balls’ : ball_status[] ]”) return (200, out, M_PLAIN) Bloque de código fuente 4.6: Servicio web para devolver el estado de los elementos sumergibles. 76 PROYECTO FIN DE GRADO Como se puede ver en el bloque de código fuente 4.7 para mover los motores también se usa WebIOPI. En esta ocasión, en vez de responder a un GET, responde a un POST. Este Post tiene que llevar como primer parámetro en la URL la palabra MOVE para indicar que lo que se pretende realizar es el movimiento de los motores. Todos los demás parámetros son los que se han explicado anteriormente en el código para mover los motores, UP o DOWN, el número de motor y el número de vueltas. Esta función de Python lo que hace es llamar a un proceso que alude al programa en C que se ha desarrollado para mover los elementos sumergibles. Le proporciona un tiempo calculado para ejecutarse y en caso de no responder correctamente finaliza el proceso y transmite un mensaje de un error. Si el funcionamiento es el correcto, se mueve el elemento sumergible en función de la petición y se transmite un código 200 de HTTP seguido de un string indicando que todo todo el proceso ha sido satisfactorio. def do_POST(self, relativePath): if relativePath.startswith(”MOVE/”): (mode, sense, numBall, numTurns) = relativePath.split(”/”) cmd = ”sudo /home/pi/emg30/moveBall ” + sense + ” ” + numBall + ” ” + numTurns proc = subprocess.Popen([cmd], stdout=subprocess.PIPE, shell=True) for contador_timeout in range(5): time.sleep(1) if proc.poll () is not None: break; if proc.poll () is None: proc. kill () out = ’Error: Ball is stuck’ else : (out, err) = proc.communicate() return (200, str(out)[2:−3], M_PLAIN) Bloque de código fuente 4.7: Servicio web para mover los elementos sumergibles. A continuación, se exponen ejemplos de llamadas a cada una de las funciones creadas, así como una explicación para cada una de ellas y la respuesta recibida por parte de la Raspberry PI. Es preciso señalar que todos los métodos disponen de una gestión efectiva de errores tanto en hardware como en software, y en caso necesario se reinicia automáticamente tanto el software como el hardware, poniendo todos los objetos sumergibles en la posición inicial. En el caso del primer método que se va a explicar se trata de una petición GET estándar a un servicio web. Esta petición corresponde a uno de los fragmentos de código fuente explicados anteriormente. Obviando el hecho de que como se ha desarrollado todo dentro de una red local se puede usar sin ningún problema el direccionamiento IP local, en este método se ve como se hace una petición GET a la URL que aparece en el código 4.8, y en este caso con el parámetro ALL, aunque podría ser también un número entero del uno al número de motores que haya instalados. Lo que se espera que devuelva es un ”200 OK” en caso de que la petición se realice correctamente, así como un JSON que debe contener una lista con un número igual al número de elementos sumergibles presentes en el acuario representando la posición en la que están mediante un cero para decir que están en la posición más alta, o un número entero positivo indicando el número de vueltas que han dado para estar en la posición que se encuentran. Es decir, si el elemento sumergible está en la posición de arriba del todo el servicio devolverá un 0 para ese elemento sumergible concreto. Si por el contrario el motor ha dado dos vueltas para que el elemento sumergible este sobre el agua el servicio devolverá un seis. 77 4 DISEÑO E IMPLEMENTACIÓN − Petición: GET /get_status/ALL HTTP/1.1 Host: 192.168.0.130:8000 − Respuesta: 200 OK Content−Type: application/JSON {”status”: [0,1,0,7]} Bloque de código fuente 4.8: URL /get_status/ con parametro ALL. Este mismo método se puede usar para comprobar la posición de un elemento sumergible en concreto simplemente poniendo como parámetro el número entero correspondiente a ese elemento sumergible. Entiéndase que el elemento definido como uno será el que más a la derecha se encuentra desde el punto de vista del observador. En el ejemplo que se presenta a continuación, podemos ver lo que ocurre si solicitamos el estado de uno solo de los elementos sumergibles. Como podemos ver, por temas de compatibilidad y reutilización de código, si le hacemos una petición a un solo elemento sumergible devuelve también una lista pero solo con el número de vueltas de ese elemento. − Petición: GET /get_status/4 HTTP/1.1 Host: 192.168.0.130:8000 −Respuesta: 200 OK Content−Type: application/JSON {”status”: [7]} Bloque de código fuente 4.9: URL /get_status/ con parametro numerico. Otro de los métodos se llama haciendo una petición POST a la URL del bloque de código fuente 4.10 con una serie de datos que se mandan al servidor a procesar, Estos datos son únicamente el color de los elementos sumergibles, el líquido que contienen, el peso total de elemento sumergible, y por último la densidad del líquido que contienen. Ninguno de estos datos es obligatorio, es decir se puede cambiar en cualquier momento el color sin cambiar el líquido del interior o el peso. Este método, en caso de que los datos se procesen bien, es decir que sean añadidos a la base de datos correctamente en la Raspberry PI, devuelve un JSON con una lista que contiene el número de elementos creados o modificados, y una respuesta HTTP 201, que indica que un nuevo recurso ha sido creado. En este caso, para simplificar el proceso se asume que el máximo de elementos sumergibles por el momento es siempre cuatro, así como que la forma de estos elementos es siempre circular. − Petición: POST /calibrate_elements/ HTTP/1.1 Host: 192.168.0.130:8000 element1_color=white&element1_density=0.83&element2_color=yellow −Respuesta: 201 Created Content−Type: application/JSON {”elements_created”: [2]} Bloque de código fuente 4.10: URL /calibrate_elements/. 78 PROYECTO FIN DE GRADO Existe otro método, que se nutre de la base de datos generada mediante el método anterior, y que sirve para conocer el color y la forma de un solo elemento sumergible que está en esos momentos en la pecera. Este método se llama haciendo una petición GET a la URL del bloque de código fuente 4.11 seguida de un parámetro que es un número entero positivo comprendido entre uno y el número de elementos sumergibles que hay en la pecera. Este método devuelve un JSON con los datos que tiene la base de datos del elemento seleccionado. − Petición: GET /show_element/1 HTTP/1.1 Host: 192.168.0.130:8000 −Respuesta: 200 OK Content−Type: application/JSON {”element_1”: {”color”: ”white”,”density”: 0.83}} Bloque de código fuente 4.11: URL /show_element/. Por último, existe un método que responde a los POST a otra URL, la del bloque de código fuente 4.12, y le pasamos tres parámetros. El primero de los parámetros es un string de texto, y solo tiene dos posibilidades, UP para subir la bola, y DOWN para bajarla. El segundo de los parámetros es un número entero positivo que representa el número de bola que queremos subir o bajar. Y el tercero, es otro entero positivo que representa el número de vueltas que queremos que baje o suba el objeto sumergible. − Petición: POST /move_ball/UP/3/5 HTTP/1.1 Host: 192.168.0.130:8000 − Respuesta: 200 OK Bloque de código fuente 4.12: URL /move_ball/. La base de datos utilizada para interactuar con estos servicios web fue desarrolla sobre MongoDB, ya que está pensada precisamente para guardar directamente los archivos de tipo JSON y devolverlos más rápidamente que lo haría MySQL. Como no necesita esquema si en algún momento se quiere agregar un nuevo campo temporal se puede hacer sin tener que cambiar nada de su estructura. 4.2 IMPLEMENTACIÓN DE RLMS EN PLATAFORMA EMBEBIDA DE BAJO COSTE Instalar el núcleo del WebLab-Deusto en un sistema Linux es bastante sencillo, ya que no requiere muchas librerías no instaladas por defecto. SSin embargo, para conseguir características adicionales a las básicas y ajustar el rendimiento a máquinas especiales es preciso acometer la realización de algunos pasos más complejos que la instalación básica. En este caso vale con una instalación básica que implica un despliegue simple. No requiere ningún servidor web instalado (como Apache o NGINX), ni un motor de base de datos (como MySQL o MongoDB). En su lugar, WebLab-Deusto hace uso de su servidor web interno y una base de datos SQLite simple. 79 4 DISEÑO E IMPLEMENTACIÓN WebLab-Deusto se puede descargar desde github usando git. Esta es la forma recomendada de descargarlo, ya que permite actualizar WebLab-Deusto de forma automática en el futuro, e incluso contribuir en la implementación de WebLab-Deusto fácilmente. Sin embargo, se requiere la instalación de git. Git es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran número de archivos de código fuente. Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. En la mayoría de las distribuciones de Linux, el paquete está disponible. En la distribución Ubuntu 12.04 instalada en la PandaBoard ES simplemente es necesario ejecutar el comando que aparece en el primer lugar en el bloque de código fuente 4.13 y una vez instalado solo es necesario bajarse el código fuente de github con el comando que aparece en segundo lugar en el bloque de código fuente 4.13. sudo apt−get install git git clone https://github.com/weblabdeusto/weblabdeusto.git weblab Bloque de código fuente 4.13: Comandos para bajarse el codigo fuente de WebLab-Deusto. El siguiente paso es instalar todos los requisitos. Lo primero y más importante es instalar Python, sin embargo en Ubuntu 12.04 viene instalado por defecto. Lo siguiente es instalar Java Development Kit (JDK) de los repositorios. Como en los repositorios no aparece directamente el JDK de Sun se opto por instalar openjdk. Se instalaron tambien las librerias de Python setuptools y python-pip. Para ello se ejecuto el comando que aparece en el bloque de código fuente 4.14 sudo apt−get install openjdk−7−jdk sudo apt−get install python−setuptools python−pip Bloque de código fuente 4.14: Instalacion de Java y Python. Para instalar propiamente WebLab-Deusto se debe ejecutar el comando que aparece en el bloque de código fuente 4.15 sudo apt−get install openjdk−7−jdk sudo apt−get install python−setuptools python−pip Bloque de código fuente 4.15: Instalacion de WebLab-Deusto. La primera vez que se ejecutó, pasaron varios minutos, unos veinte, antes de instalarse entero.Además la cantidad de memoria RAM que requirió fue muy grande. Si alguna vez se deseara cambiar algo del cliente, o se quisiera actualizar el sistema a través de git, se podría hacer yendo al directorio del cliente y ejecutando el script Gwtc.sh. Es bueno tener una instancia de WebLab-Deusto para producción y otra para desarrollo en caso de que se implemente una interfaz web propia. Con esta intención se creo una instancia para la web de producción en el puerto 80 y otra instancia para la web de desarrollo en el puerto 8000 con los comandos que aparecen en el bloque de código fuente 4.16. Seguidamente ponemos ambas instancias en funcionamiento.s weblab−admin.py weblab−admin.py weblab−admin.py weblab−admin.py create WebLab−Deusto−production −−http−server−port=80 create WebLab−Deusto−dev −−http−server−port=8000 start WebLab−Deusto−production start WebLab−Deusto−dev Bloque de código fuente 4.16: Creacion de instancias en WebLab-Deusto. 80 PROYECTO FIN DE GRADO Al iniciarse el servidor se hace una conexión de prueba a http://localhost:80 y en esa URL es en la que se encuentra la pantalla de registro de WebLab-Deusto como se puede ver en la figura 4.9. Figura 4.9: Página principal de WebLab-Deusto. La primera vez que se establece una conexión se deben introducir los credenciales por defecto que son admin como nombre de usuario y password como contraseña. Puede observarse ver que existen algunos laboratorios de muestra. Uno de ellos es local, aunque realmente no existe. El resto de los laboratorios están efectivamente ubicados en la Universidad de Deusto. De forma predeterminada, se crean estos laboratorios y se asignan al grupo de administradores. Estos laboratorios usan el modelo de federación de WebLabDeusto para conectarse a WebLab-Deusto y utilizar equipos reales allí. En el caso de este laboratorio se decidió federarlo en el WebLab-Deusto ubicado físicamente en la Universidad de Deusto. Para federar el laboratorio es necesario crear un usuario nuevo desde la interfaz de administración. En la figura 4.10 se puede apreciar el proceso de creación de usuario. En este caso, como se observa en la figura, se creó también un grupo llamado Go-Lab por si se diera el caso de querer agregar rápidamente más laboratorios. Para que este usuario funcione de forma federada, el WebLab-Deusto ubicado físicamente en la Universidad de Deusto debe crear también un usuario idéntico al que se creó localmente en la plataforma embebida. De esta forma, y después de tocar unas pocas líneas de código en el WebLab-Deusto ubicado en la Universidad de Deusto cualquier persona que se conecte al WebLab-Deusto ubicado en la Universidad de Deusto podrá seleccionar el experimento ubicado en cualquier parte del mundo gestionado mediante la plataforma embebida. Ademas, como es lógico se debe crear un experimento que apunte al experimento que se ha creado. En la figura 4.11 se ve el proceso para crear el experimento. 81 4 DISEÑO E IMPLEMENTACIÓN Figura 4.10: Proceso de creación de un usuario para la federación. Figura 4.11: Proceso de creación de un experimento. Al contrario de lo que sucedía al crear un usuario y federar un experimento, en el caso de crear un experimento no hace falta crear el mismo en el WebLab-Deusto ubicado en la Universidad de Deusto, ya que este experimento será gestionado desde la copia local de WebLab-Deusto ubicada en la plataforma embebida. 82 PROYECTO FIN DE GRADO 4.3 IMPLEMENTACIÓN DE UNA INTERFAZ SENCILLA PARA EL MANEJO DEL LABORATORIO REMOTO Como ya se ha comentado anteriormente se hicieron dos interfaces webs diferentes, una para el laboratorio gestionado, y otra para probar el nuevo módulo HTML de weblab para laboratorios no gestionados. Por tanto esta sección se dividirá en dos módulos: • Interfaz web para laboratorio gestionado • Interfaz web para laboratorio no gestionado 4.3.1 Interfaz web para laboratorio gestionado La interfaz del laboratorio gestionado se hizo con la API de Google Web Toolkit (GWT). Como ya hemos comentado anteriormente, GWT es un framework creado por Google que permite ocultar la complejidad de varios aspectos de la tecnología AJAX. El concepto de Google Web Toolkit es bastante sencillo, básicamente lo que se debe hacer es crear el código en Java usando cualquier IDE de Java y el compilador lo traducirá a HTML y JavaScript. Para crear un nuevo laboratorio gestionado dentro de la plataforma WebLabDeusto fue necesario recorrer su estructura de carpetas hasta llegar a la carpeta client/src/es/deusto/weblab/client/experiments. dentro de esta carpeta se hizo una nueva carpeta llamada aquarium en la se creo un archivo llamado AquariumCreatorFactory.java que añade la estructura general del nuevo laboratorio, y otra nueva carpeta llamada ui que debe de contener todos los elementos visuales que apareceran en la interfaz web. El archivo AquariumCreatorFactory.java es el mismo que el de los demás laboratorios solo cambiando el nombre de los demás laboratorios por aquarium. Este archivo implementa el interface IExperimentCreatorFactory como se puede ver en el bloque de código fuente 4.17. y tiene dos métodos, getCodeName y createExperimentCreator. El método getCodeName, devuelve un código exclusivo de laboratorio y posteriormente se utilizará en el despliegue. El metodo createExperimentCreator crea una clase ExperimentCreator donde se define la compatibilidad en dispositivos móviles e internamente creará la interfaz de usuario. 83 4 DISEÑO E IMPLEMENTACIÓN public class AquariumCreatorFactory implements IExperimentCreatorFactory { @Override public String getCodeName() { return ”aquarium”; } @Override public ExperimentCreator createExperimentCreator(final IConfigurationRetriever configurationRetriever) { return new ExperimentCreator(MobileSupport.full, getCodeName()){ @Override public void createWeb(final IBoardBaseController boardController, final IExperimentLoadedCallback callback) { GWT.runAsync(new RunAsyncCallback() { @Override public void onSuccess() { callback.onExperimentLoaded(new AquariumExperiment( configurationRetriever, boardController )) ; } @Override public void onFailure(Throwable e){ callback.onFailure(e); } }); } }; } } Bloque de código fuente 4.17: Codigo para la creacion de un experimento en Java. Lo siguiente es crear los componentes de la interfaz de usuario. Lo primero es crear un archivo que se llame AquariumExperiment.java y que gestionar el comienzo y la finalización del laboratorio, así como todos lo widget asociados a él mismo. Este archivo posee un método AquariumExperiment al que se le pasara toda la configuración y las referencias al nuevo experimento que se debe crear. También tiene un método start que iniciara todos los widgets asociados, cargará las configuraciones iniciales y se encargará del tiempo que se le da a cada uno de los laboratorios. Tiene dos métodos más para refrescarse y para servir mensajes al resto del sistema. Por último se deben de crear cada uno de los archivos que contendrán los widgets por separado. En la figura 4.12 se puede ver la interfaz basada en GWT acabada y funcionando correctamente. 84 PROYECTO FIN DE GRADO Figura 4.12: Interfaz web del laboratorio gestionado. 4.3.2 Interfaz web para laboratorio no gestionado Como se ha indicado anteriormente, esta interfaz es responsable de proporcionar la GUI (Graphical User Interface), así como el control de la gestión del laboratorio. Esto implica supervisar las comunicaciones entre la PandaBoard ES y la Raspberry PI, la gestión de dispositivos como las luces o el comedero, y la conexión con una base de datos que proporciona datos actualizados de cada uno de los diferentes objetos sumergibles. El cliente también obtiene diferentes imágenes del acuario en tiempo real a través de las cámaras web. En esencia, este cliente funciona del mismo modo que con la utilización de servicios web. Se basa en el framework de desarrollo web Django (Django Project 2013), escrito en el lenguaje de programación Python. Es importante señalar que, aunque Django se utiliza para implementar las tecnologías del lado servidor, en este caso Django se utiliza básicamente para ejecutar la aplicación cliente. Se ha implementado una interfaz web de manera que el usuario pulsa cualquiera de los botones de flechas presentes en la interfaz (escrita en HTML y Javascript), se envía como un comando POST para llamar a la función de Python responsable de manejar las peticiones web y devolver las respuestas (Forcier, Bissex & Chun 2008). Como se ha comentado, la interfaz se ha implementado como una página web escrita en HTML, CSS y Javascript, usando las plantillas proporcionadas por Twitter Bootstrap como punto de partida. Twitter Bootstrap hace que sea mucho más fácil de utilizar las funcionalidades gráficas e interactiva no avanzadas, como los mensajes emergentes, las alertas, los botones interactivos, las barras de herramientas desplegables, etc. Twitter Bootstrap viene incluido con muchos componentes prefabricados, que pueden también ser fácilmente modificados en CSS para adaptarse a las necesidades particulares de cada usuario. 85 4 DISEÑO E IMPLEMENTACIÓN La pantalla principal de usuario incluye una vista frontal del acuario en el lado izquierdo de la pantalla. Los controles de movimiento de los objetos sumergibles, los botones con flechas, se colocan en el lado derecho de la pantalla para mejorar la experiencia de los usuarios de la aplicación y que sean capaces de identificarlos nada más entrar a la aplicación. Debajo de éstos aparece imagen de una cámara secundaria del acuario. En la parte superior de la pantalla se sitúa la barra de herramientas principal y en la parte inferior de la imagen principal los botones básicos de la aplicación. En la esquina izquierda de la barra de herramientas hay un botón con el título “How it works”. que si se presiona muestra varias alertas pop-up en la pantalla que explica cómo utilizar el sistema. Además tiene una zona para la formulación de hipótesis por parte del usuario Una parte importante del código de la página web es el script que se encarga de la gestión de las cámaras web. Las cámaras operan a través de WiFi, y se les da direcciones IP estáticas, que se pueden utilizar para devolver capturas de imágenes en formato .jpeg en tiempo real. La página web del cliente solicita periódicamente a estas cámaras las imágenes actualizadas. La frecuencia de actualización es lo suficientemente alta de forma que, si no fuera por la latencia de la red, las imágenes cambiarían lo suficientemente rápido como para que el ojo humano no fuera capaz de detectar paradas en el movimiento, es decir, la idea es que a partir de las imágenes, el usuario crea estar viendo un vídeo. Figura 4.13: Interfaz web del laboratorio no gestionado. 4.4 IMPLEMENTACIÓN DE VISIÓN ARTIFICIAL PARA EL LABORATORIO REMOTO Con el objetivo de recoger las imágenes proporcionadas desde la pecera, se determinó el establecimiento de exactamente tres cámaras web principales y una de ellas secundaria. Solo se hara un análisis de las tres primarias, ya que el propósito de la secundaria no tiene nada en comun con la visión artificial. 86 PROYECTO FIN DE GRADO La primera de ellas, la cámara principal, se sitúa en la parte frontal y exactamente en el medio de la pecera, a una altura similar a la línea de agua de esta, y a una distancia un poco más lejana que las otras dos de la parte frontal. Esta cámara se encarga de mostrar las imágenes generales de la pecera, y es la imagen que aparecerá por defecto al entrar en el laboratorio. Esta imagen permite hacerse una idea general de donde están los objetos sumergibles y el número exacto que hay. No obstante, con las imágenes servidas por esta cámara no haremos apenas procesado de imagen, ya que la resolución máxima que puede entregar es exactamente de 640 x 480 píxeles, y los objetos que se muestran no tienen, en general, la calidad ni nitidez necesarias para poder procesarlos y recoger los datos que necesitamos acerca de ellos. Para conseguir este propósito se instalan las otras dos cámaras que se situan también en la parte frontal de la pecera, pero un poco más cerca del cristal que la anterior. Una de ellas está a la izquierda, y otra a la derecha, y cada una de ellas enfocada a dos bolas con mayor detalle que la cámara general para poder procesar esas imágenes de manera más sencilla y luego devolvérselas al usuario. Estas cámaras son iguales que la anterior, es decir, que su resolución máxima es de 640 x 480 píxeles, aunque al enfocar a espacios más reducidos que la anterior nos permite mayor calidad para los mismos objetos. Por último pusimos una cámara que se encuentra en un lateral, y a una altura muy superior a las demás, por encima de las poleas. Esta cámara no va a ser susceptible de que sus imágenes sean procesadas, sino que servirá solo para fines demostrativos. Es el mismo tipo de cámara web que todas las anteriores y servirá para mostrar como realmente se mueven las poleas cuando alguien usa las poleas desde cualquier parte del mundo. En la figura 5.4.1 podemos ver la disposición de las cámaras respecto a la pecera. Figura 4.14: Disposición de las cámaras en el acuario. 87 4 DISEÑO E IMPLEMENTACIÓN Para la parte software del sistema de visión artificial de este laboratorio se utilizó la PandaBoard ES. Desde el principio se pensó en utilizar las librerías de visión OpenCV sobre C++. Sin embargo, gracias a que a comienzos del proyecto se desarrolló una nueva versión mucho más completa de OpenCV para Python, se acabó desarrollando sobre Python, lo que permitía un ahorro de tiempo de desarrollo importante respecto a lo planificado anteriormente en caso de programarlo en C++. Para la programación se utilizó el IDE (Integrated Development Environment) Sublime Text 2, ya que permite la programación orientada a Python, y más concretamente a Django, que es un Framework web basado en Python que hemos utilizado para crear los servicios web en esta parte. Todo procesamiento de imágenes está totalmente integrado en Django, para mejorar los tiempos de respuesta ante las peticiones. Además a la hora de servir los recursos estáticos, las imágenes, se sirven desde un servidor web NGINX desarrollado para este tipo de tareas. El procesado de imágenes consta de varios pasos. El primero de los pasos es el reconocimiento de los objetos que están en la pecera cuando el usuario decide hacer una foto y recibir esa foto procesada. Este procesamiento de imagen se hace basándonos en el color y forma de los objetos sumergibles. La primera acción que lleva a cabo la PandaBoard es solicitar a la Raspberry PI el estado de los objetos, llamando a la URL del bloque de código fuente 4.8 del servicio web que hemos explicado anteriormente. Una vez la Raspberry PI nos devuelve las posiciones de todos los objetos, miramos cada una de las posiciones distintas de “0”, que es la posición inicial e implica que el objeto está en la base, y dependiendo de los objetos sumergibles que no estén en la base decidimos con que cámaras tomar imágenes. En las pruebas que se han llevado a cabo con propósitos explicativos se ha decidido dar tres vueltas a los motores de dos elementos sumergibles con densidades diferentes, pero uno junto al otro. Debido a los materiales que contenían estos objetos, se han quedado cercanos a la línea del agua. Para esta primera versión asumimos también que todos los objetos van a ser solo de formas circulares, y que ni las cámaras ni la línea de agua no se mueven. Entonces, empezamos a aplicar los algoritmos de visión artificial necesarios para reconocer los objetos en pantalla sobre las imágenes que obtengamos. Lo primero que hace la PandaBoard una vez que tiene las posiciones de los elementos sumergibles es pedir las imágenes de la cámara o cámaras que puedan tomar una imagen de esos elementos sumergibles, pero sin contar con la cámara del medio. Se piden las imágenes ya que son las de mayor calidad. En la figura 4.15 se puede ver la imagen que devuelve la cámara de la derecha del acuario. Esta imagen tiene unas dimensiones de 640 x 480 pixeles, y se devuelve en formato JPG de muy alta calidad. Como podemos ver en este caso los elementos sumergibles tienen densidades muy similares, y por eso su flotabilidad es muy parecida. 88 PROYECTO FIN DE GRADO Figura 4.15: Captura de imagen de la cámaras de la derecha. Una vez la imagen es capturada, se selecciona el área que realmente interesa utilizando OpenCV. Esta selección se lleva a cabo en función de la posición de cada elemento sumergible. Se usan las funciones boundingRect() para marcar la superficie a cortar y imwrite() para escribir la nueva imagen en disco. La función boundingRect() recibe como parámetros una lista de cuatro puntos entre los que se encuentran los elementos sumergibles. Esta función devuelve una imagen que contiene el rectángulo definido por esos cuatro puntos. Estos puntos pasados se calculan en base al comportamiento esperado de cada una de los elementos sumergibles implicados. Si la densidad del elemento sumergible es mayor que la del agua, el elemento flotara y, por tanto, estará situado cercano a la línea de flotación. Si el elemento tiene una densidad menor que la del agua tenderá a hundirse más y entonces se deberá usar la posición proporcionada por la Raspberry PI para afinar los puntos necesarios. Una vez ha sido definido el rectángulo mediante la función boundingRect() se guarda ese área en una variable llamada cropped y se llama a la función imwrite(). De esta forma se guarda la imagen en disco para futuros usos, además de mantenerse en el programa como la variable cropped que usaremos. rect = cv2.boundingRect(point_list) cropped = original[rect [0]: rect[0]+rect [2], rect [1]: rect[1]+rect [3]] cv2.imwrite(’cropped.png’, cropped) Bloque de código fuente 4.18: Codigo para recortar la imagen necesario para la vision arti cial. 89 4 DISEÑO E IMPLEMENTACIÓN En la figura 4.16 se puede ver la imagen guardada mediante la función imwrite(). Figura 4.16: Aplicacion de la funcion boundingRect(). La imagen obtenida pasa a ser una imagen de 640 x 200 pixeles, frente a los 640 x 480 pixeles de la imagen inicial, que contiene los elementos que realmente resultan interesantes para nuestra aplicación. Esta nueva imagen supone un ahorro significativo de tiempo de procesado en los siguientes pasos, ya que imágenes mayores suponen tiempos de procesado más altos. El siguiente paso es la detección los elementos circulares en la imagen. Primero es necesario ajustar bien el contraste y brillo, para que los siguientes algoritmos puedan diferenciar más fácilmente las formas y colores de los elementos sumergibles. Todas las pruebas previas realizadas con la iluminación y las cámaras han llevado a afianzar un valor de alpha de 1.5 para la mejora del contraste de la imagen. En la figura 4.17 se puede ver cómo afecta el contraste a la imagen. A partir de este valor alpha se crea una matriz de las mismas dimensiones y tipo que la imagen con todos sus elementos a ese valor alpha. Una vez creada la nueva matriz se llama a la función multiply() que permite hacer la multiplicación de la matriz de la imagen con la creada con los valores alpha elemento a elemento. Realmente lo que hace esta función es un escalado de los valores de la matriz. Por otra parte, para mejorar el brillo de las imágenes se usa un valor beta que gracias a muchas pruebas previas se ha definido con un valor de 30. En la figura 4.18 se puede ver cómo afecta el brillo a la imagen, y como un brillo de 30 la mejora notablemente. Se vuelve a crear una matriz del mismo tamaño y tipo que la imagen y se usa la función add() para sumar esta matriz a la creada en el paso anterior. alpha = 1.5 beta = 30 contrasted = cv2.multiply(cropped, np.array([alpha])) brighted = cv2.add(cropped, np.array([beta])) // contrasted = cropped*alpha // brighted = cropped*alpha + beta Bloque de código fuente 4.19: Codigo para ajustar el contraste y el brillo en la imagen. 90 PROYECTO FIN DE GRADO Figura 4.17: Captura de imágenes cambiando el contraste. Figura 4.18: Captura de imágenes cambiando el brillo. 91 4 DISEÑO E IMPLEMENTACIÓN A continuación se aplica la función cvtColor() a la imagen que se acaba de generar para pasar de la imagen que se dispone en formato RGB (Red Green Blue), que es el formato por defecto de OpenCV al coger las fotos, a escala de grises. Además se necesita crear también una copia de la imagen en formato BGR (Blue Green Red) con el método cvtColor() para que se pueda dibujar encima de ella texto y figuras que puedan ver los usuarios. Y a la imagen en escala de grises, que es la que se usará para buscar formas, se le aplica la función GaussianBlur(). Esta función permite desenfocar la imagen usando un filtro Gaussiano, reduciendo el ruido y algunos detalles significativos. Matemáticamente, aplicar un desenfoque Gaussiano a una imagen es la convolución de esa imagen con una función de Gauss. Aplicar un desenfoque Gaussiano permite reducir las componentes de alta frecuencia de la imagen, es decir, poner un filtro paso bajo. Gracias a este filtro se evitan falsos positivos en la detección de círculos que se hará posteriormente. gray = cv2.cvtColor(brighted, cv2.COLOR_RGB2GRAY) sketch = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) blurred = cv2.GaussianBlur(gray, (0,0), 5) Bloque de código fuente 4.20: Codigo para cambiar de espacio de color. En la figura 4.19 se ve la imagen en escala de grises antes y despues de aplicarle el filtro de desenfoque Gaussiano. Figura 4.19: Aplicacion del desenfoque gaussiano. Para el reconocimiento de los bordes en la imagen es necesario aplicar un filtro Canny (Canny 1986) con la función Canny() a la imagen en escala de grises. El filtro Canny utiliza un algoritmo de múltiples etapas para detectar una amplia gama de bordes en imágenes. La función Canny() recibe dos parámetros importantes que se usan para delimitar los umbrales por histéresis. El umbral alto, que aparece en el código aparece con un valor 120, marca los bordes más diferenciados. 92 PROYECTO FIN DE GRADO Un valor más alto en este umbral permite reconocer un mayor número de bordes y viceversa. El umbral bajo, que en el código aparece con un valor 80, se encarga del seguimiento de las líneas, así como la reducción del ruido asociado. Un valor más bajo en este umbral permite seguir un mayor número de bordes y viceversa. En la figura 4.20 se puede ver la imagen con diferentes valores para el umbral alto y el bajo, y como cambian los bordes detectados en función de estos umbrales. Figura 4.20: Diferencia entre los diferentes valores para la función de Canny(). Tras realizar un número considerable de pruebas se dictaminó la necesidad de que, en este caso, se usará un umbral alto de 120 y un umbral bajo de 80, ya que arrojaba los mejores resultados para hacer frente a las necesidades de la aplicación. low_threshold = 80 high_threshold = 120 edges = cv2.Canny(gray, low_threshold, high_threshold) Bloque de código fuente 4.21: Codigo para aplicar el ltro canny a la imagen. Se puede ver la imagen resultante de aplicar el filtro Canny con los parámetros utilizados finalmente en el proyecto en la figura 4.21. 93 4 DISEÑO E IMPLEMENTACIÓN Figura 4.21: Aplicacion del ltro Canny sobre la imagen en escala de grises. Con carácter previo a encontrar las circunferencias en la imagen, se debe distinguir la línea de agua, para poder medir las distancias que el elemento sumergible tiene por encima y por debajo del agua. Medir la línea del agua no es una tarea fácil, ya que uno de los requisitos es que la línea este totalmente alineada con el nivel de agua para tener medidas fiables. Para medir la línea se recurrió a la transformada de Hough, aunque se realizaron pruebas también la transformada probabilística de Hough (Matas, Galambos & Kittler 2000), los mejores resultados se consiguieron con la transformada de Hough, ya que es capaz de interpolar líneas. Como se puede observar en la figura 4.22 la transformada estadística de Hough nos devuelve segmentos pequeños de línea mientras que la transformada de Hough nos devuelve líneas enteras. El algoritmo de la transformada de Hough usa una matriz, llamada acumulador, cuya dimensión es igual al número de parámetros desconocidos del problema. En este caso, para detectar la existencia de una recta descrita por la ecuación: y = (m ∗ x) + n La dimensión del acumulador sería dos, ya sea su representación en coordenadas cartesianas de la forma (m,n), o en coordenadas polares (ρ, θ), son desconocidas. Las dos dimensiones del acumulador corresponden a los valores cuantificados para (ρ, θ). Para construir este acumulador es necesario discretizar los parámetros que describen la figura. Cada celda del acumulador representara una figura cuyos parámetros se pueden obtener a partir de la posición de esa celda. Asi, por cada punto en la imagen se buscan todas las posibles figuras a las que puede pertenecer ese punto. Esto se logra buscando todas las posibles combinaciones de valores para parámetros que describen la figura (los posibles valores se obtienen a partir del acumulador). Si es así, se calculan los parámetros de esa figura, y después se busca la posición en el acumulador correspondiente a la figura definida, y se incrementa el valor que hay en esa posición. Como se puede observar en el codigo de abajo la funcion HoughLines() recibe la imagenes que representa los bordes de la imagen real como primer parametro. El segundo parametro 94 PROYECTO FIN DE GRADO que recibe se denomina rho, que es resolucion de la distancia al acumulador expresada en pixeles. En nuestro caso hemos puesto la minima distancia, que es 1, y que es el minimo valor para hacer una busqueda exhaustiva. El tercer parametro que recibe se denomina theta y es la resolucion del angulo del acumulador expresada en angulos, en este caso, por motivos de rapidez de respuesta se decidio poner un valor de π/180. En cuanto al ultimo parametro se trata de un umbral de puntuacion, es decir, que las lineas que tengan una puntuacion por debajo de ese umbral, no se tendran en cuenta (Shi & Tomasi 1994). En este caso se ha puesto un umbral alto para evitar coger pequeños cachos de lineas. def find_lines(sketch): lines = cv2.HoughLines(edges, 1, math.pi / 180, 275) for rho,theta in lines [0]: a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(−b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 − 1000*(−b)) y2 = int(y0 − 1000*(a)) cv2. line (sketch,(x1,y1),(x2,y2),(0,255,0) ,2) Bloque de código fuente 4.22: Codigo para aplicar la busqueda de lineas. La imagen de arriba figura 4.22 corresponde a la aplicación en la imagen de la transformada estadística de Hough, mientras que la de abajo corresponde a la aplicación de la transformada de Hough. Ambas funciones se aplicaron con los mismos parámetros de entrada, que se pueden ver en el código de más arriba, y generaron salidas totalmente distintas. En el caso de la transformada estadística de Hough se puede observar como las líneas que aparecen sólo segmentos de líneas, mientras que la transformada de Hough efectúa también una interpolación de líneas. El siguiente paso es aplicar la detección de circunferencias. A pesar de que con el filtro Canny que se ha utilizado anteriormente parece que se reconocen bien los elementos sumergibles, sin embargo, se hicieron muchas pruebas y no era del todo fiable. Por tanto, se decidió usar la de nuevo la transformada de Hough para este propósito. Aunque normalmente esta transformada se utiliza para la detección de rectas, también se puede usar con el propósito de detectar circunferencias y algunas otras figuras geométricas. Entendiendo que una circunferencia la podemos representar con la ecuación: (x − a)² + (y − b)² = r² donde (a, b) es el centro de la circunferencia, r es el radio y (x, y) son pixeles de la imagen en los que nos vamos situando de forma progresiva. Como se ha descrito anteriormente la transformada de Hough se basa en dar puntuaciones a diferentes áreas de la imagen variando la posición del centro de la circunferencia (a, b), para cada píxel etiquetado (x, y), obteniendo los distintos valores del radio r. Las circunferencias seleccionadas serán aquellas que superen un cierto umbral de puntos recibidos. Su mayor inconveniente es su alto coste computacional. Sin embargo, gracias a que la distancia de las cámaras al acuario es constante se puede ahorrar tiempo de computación prefijando una serie de valores del radio del círculo. Así, las posibles coordenadas 95 4 DISEÑO E IMPLEMENTACIÓN Figura 4.22: Aplicacion de diferentes transformadas de Hough. del centro del círculo darán una nube de puntos limitados. Esta forma de detección de los circunferencias posee ventajas como la inmunidad al ruido y la capacidad de detectar circunferencias aunque exista oclusión de estas. La función utilizada para detectar circunferencias fue HoughCircles(). Esta función recibe nueve parámetros. El primero es la imagen sobre la que se realizará la búsqueda de circunferencias, que es la imagen en escala de grises, y con un ligero desenfoque gaussiano se ha creado anteriormente. Como segundo parámetro recibe el método que se utilizara para la detección de las circunferencias. Desgraciadamente OpenCV solo tiene implementado un método de detección, que es el “2-1 Hough transform” (Yuen, Princen, Illingworth & Kittler 1990), que permite ahorrar tiempo de computación implementando la transformada de Hough en dos pasos, en primer lugar se busca el centro y en segundo lugar se buscan los límites de la circunferencia. Únicamente tiene el problema de que si se comete un fallo en el primer paso y se desvía el centro o se encuentra un falso centro llevará a errores en el segundo paso. El tercer parámetro hace referencia a la resolución del acumulador en función de la resolución de la imagen. La resolución del acumulador será inversamente proporcional a este acumulador, es decir, si el valor esta puesto a 1 la resolución de acumulador será la misma que la de la imagen, si esta a 2, la resolución de acumulador será la mitad de la de la imagen. Este parámetro es importante a la hora de mejorar tiempos de procesado. En la figura 5.4.10 se pueden observar los diferentes tiempos de procesado en función de valor escogido para este parámetro. La aprecia claramente que a menor resolución del acumulador, mayor tiempo de procesado. Esto es debido a que cuanto más pequeño sea el acumulador más grande es la imagen usada para la transformada. Al ser más grande tiene más número de pixeles, y por tanto tarda más en procesar. Después de un análisis minucioso de estos tiempos se decidió que en este caso se iba a seleccionar un valor de 1.3 para este parámetro, ya que ofrece unos tiempos de procesado óptimos a la vez que permite una búsqueda de circunferencias muy buena. 96 PROYECTO FIN DE GRADO Figura 4.23: Tiempos de procesado en segundos. El siguiente parámetro, el cuarto, indica la mínima distancia entre los centros de las circunferencias detectadas. Como en esta aplicación las circunferencias estarán separadas claramente, se puede pensar que este parámetro siempre será superior al radio de las circunferencias que queremos encontrar. Se entiende que las cámaras se mantiene fijas y los elementos sumergibles tienen siempre el mismo radio y se mueven dentro del acuario que también está fijo. Por esto mismo se conoce que los elementos sumergibles pueden tener un radio de 35 a 45. Esto significa que es ente cuarto parámetro el menor valor a poner será 18. El quinto parámetro lo único que hace es crear la matriz que contendrá las coordenadas de las circunferencias encontradas. El siguiente parámetro que se ha utilizado se llama param1, y hace referencia al umbral más alto de los explicados anteriormente en el filtro Canny, automáticamente el umbral más bajo será la mitad que este. Aparece otro parámetro importante llamado param2 que es el umbral del acumulador para la fase de detección de circunferencias. Si este valor es muy bajo se detectarán muchas circunferencias que en realidad no existan, y si es muy alto no se detectara ninguna. Es importante ajustarlo bien. En la figura 4.24 se pueden observar las circunferencias encontradas para diferentes valores de param2. Se aprecia como un umbral de acumulador de 15 resulta demasiado pequeño y da muchos falsos positivos mientras que un umbral de acumulador de 60 resulta demasiado grande y solo encuentra una circunferencia de las dos. El umbral ideal parece situarse entre 30 y 40. 97 4 DISEÑO E IMPLEMENTACIÓN Figura 4.24: Capturas con diferentes umbrales del acumulador. Los últimos dos parámetros minRadius y maxRadius hacen referencia al mínimo y máximo radio esperado en las circunferencias, Como hemos dicho antes, estos valores se han definido como 35 y 45 respectivamente. def find_circles (gray): circles = cv2.HoughCircles(gray, cv2.cv.CV_HOUGH_GRADIENT, 1.3, 20, np.array([]), param1 =20,param2=40,minRadius=35,maxRadius=45)[0] for pos, c in enumerate(circles [:2]) : cv2. circle (sketch, (c [0], c [1]) , c [2], (0,255,0) , 2) cv2.putText(sketch, ”Bola %s” % pos, (c[0] + c[2], c[1] − c[2] ) , cv2. FONT_HERSHEY_DUPLEX, 1.0,(0,255,0)) Bloque de código fuente 4.23: Codigo para aplicar la busqueda de circulos. Como se puede observar en la figura 4.24, a veces, este procesado para buscar las circunferencias no es del todo exacto, y es necesario buscar los elementos sumergibles en base a sus colores. Para esto, se crea una imagen nueva por cada uno de los elementos sumergibles encontrados. Esta imagen será una imagen de 200 x 200 píxeles, que contendrá el elemento sumergible en el centro de la imagen. Para crear estas imágenes usamos la función GetSubRect(). Esta función recibe una matriz, en este caso la imagen que tenemos, y el área de la imagen que se desea copiar y pegar en la nueva imagen creada. Este área 98 PROYECTO FIN DE GRADO de la imagen se define con cuatro parámetros. Los dos primeros corresponden al eje X y el eje Y que definen el centro del elemento sumergible, y los dos siguientes corresponden a la distancia en el eje X y el eje Y desde el centro que cortaremos, es decir, las dimensiones de la nueva imagen. El centro de las imágenes creadas está basado en el centro que ha sido devuelto por la función HoughCircles(), luego, puede ser que no sea el verdadero centro. Sobre cada una de estas imágenes se aplica un filtro para pasar la imagen al espacio de color HSV (Hue, Saturation y Value, que en castellano corresponde a Matiz, Saturación y Valor). El espacio de color HSV es muy común a la hora de elegir o encontrar un color dentro de imágenes. El matiz se representa como un grado de ángulo cuyos valores posibles van de 0 a 360, aunque en OpenCV va de 0 a 180. Cada valor corresponde a un color. La Saturación se representa como la distancia al eje de brillo negro-blanco. Los valores posibles van del 0 al 255. Cuanto menor sea la saturación de un color, mayor tonalidad grisácea habrá y más decolorado estará. El valor Representa la altura en el eje blanconegro, los valores posible son de 0 a 255. Para pasarlas a el espacio de color HSV se usa la función cvtColor(), y como parámetros le pasamos la imagen a transformar, y el tipo de transformación a realizar. Una vez pasada la imagen al espacio de color HSV se le debe aplicar un umbral de colores para detectar un color en particular. En este caso se le aplicó un umbral para detectar solo colores amarillos. La función para hacer este umbral es inRange(). A esta función le pasamos la imagen en HSV y dos matrices con los límites de valores HSV que queremos que detecte. Estos valores en principio se pueden obtener de tablas. Sin embargo se tuvieron que ajustar en base a prueba y error, ya que se necesitaba unos valores muy concretos que permitieran diferenciar claramente los colores del fondo. Para el propósito de afinar en los colores HSV se creó un archivo llamado RGB2HSV_converter.py al que se le pasaba un color en un matriz de tres valores RGB, y te devolvía ese color adaptado a HSV para OpenCV. Ese pequeño archivo fue agregado con éxito a las librerías oficiales de OpenCV para Python (Solem 2012), en este caso se usaron las librerias de cv2. Gracias este pequeño programa creado se pudieron ajustar los valores para cada uno de los objetos sumergibles sin problemas. def find_circles_thresholded(blurred): ball_image = cv.GetSubRect(blurred, (center_X, center_Y, 200, 200)) hsv_image = cv2.cvtColor(ball_image, cv.CV_BGR2HSV) threshold_image = cv2.inRange(hsv_image, np.array((13., 75., 0.)), np.array((43., 255., 130.))) Bloque de código fuente 4.24: Otro codigo para aplicar la busqueda de circulos. En la figura 4.25 se puede ver las imágenes obtenidas correspondientes en primer lugar al elemento sumergible centrado en una imagen de 200 x 200 pixeles. En segundo lugar esta imagen en el espacio de color HSV. Y en tercer lugar esta imagen después de aplicarle umbral para los colores amarillos. 99 4 DISEÑO E IMPLEMENTACIÓN Figura 4.25: Proceso hasta llegar a aplicar un umbral a la imagen. Como se puede observar este código es capaz de conseguir una réplica del objeto bastante fiel al elemento sumergible original, sin embargo no es del todo fiel, por lo que se optó a hacer una media entre la figura que sale usando la imagen umbralizada y la que sale usando el algoritmo de Hough para encontrar circunferencias en la imagen. Gracias a la función findContours() podemos buscar automáticamente los contornos de una imagen después de aplicar un umbral. A la función findContours() se le pasara la imagen con el umbral aplicado, el modo de que se quiere usar para sacar los contornos y el método. Existen varios modos pero se seleccionó el más general, el que devolvía todos los contornos de la imagen. También existen varios métodos y se seleccionó el que hacía las operaciones más rápido. En la figura 4.26 se puede ver una comparación entre aplicar el algoritmo de Hough con la función HoughCircles(), a la izquierda, y aplicar la función findContours(), a la derecha. Este ejemplo es uno de los más drásticos que se han visto en todo el proyecto, de hecho, en la mayoría de los casos los puntos que aparecían coinciden. Sin embargo este ejemplo resulta de utilidad para explicar cómo la suma de ambos puede corregir deficiencias de cada uno de ellos. Figura 4.26: Aplicación de algoritmos para la búsqueda de guras. 100 PROYECTO FIN DE GRADO Una vez ejecutadas las dos funciones, se recogen los resultados de ambas y se hace media de los puntos para sacar una circunferencia lo más cerca de la realidad posible. De esta manera se consigue una reproducción de la circunferencia lo más fiel posible. Para este propósito se recurrió a la lista de matrices que devuelve la función findContours(). Esta función devuelve los contornos más grandes en última posición. Como el contorno que se necesita es precisamente el más grande, solo se mira la última posición de esta lista. A partir de este contorno se obtiene un nuevo centro y un nuevo radio que se comparará con el anterior y se determinará una media entre ambos. def print_new_circle(circle, contours): max_value_x = 0 min_value_x = 200 for cnt in contours[−1]: max_value_x = max(cnt[0][0], max_value_x) min_value_x = min(cnt[0][0], min_value_x) center_x = (max_value_x + min_value_x) / 2 radius = center_x − min_value_x real_center_x = (center_x + circle[0]) / 2 real_radius = (radius + circle[2]) / 2 cv2. circle (img, (real_center_x,circle [1]) , real_radius, (0,0,255) , 2) Bloque de código fuente 4.25: Codigo para generar nuevas imagenes. Como se puede apreciar en la figura 4.27 la circunferencia dibujada sobre la figura corregida corresponde exactamente a los bordes del elemento sumergible. Figura 4.27: Circunferencia corregida. 101 4 DISEÑO E IMPLEMENTACIÓN Además, se implementó una forma numérica de representar la flotabilidad de los elementos sumergibles sobre las imágenes. De esta forma, dependiendo de la posición de la línea del agua y del elemento sumergible respecto a ella. De esta forma los usuarios pueden ver directamente los tantos por ciento bajo el agua y sobre el agua de los elementos sumergibles sin tener que medirlos. En la figura 4.28 se puede ver cómo la imagen misma informa edl tanto por ciento por encima y por debajo del agua que esta el elemento sumergible, así como su color y el líquido que contiene. Esta información es totalmente customizable y solo depende de la información que guardemos en la base de datos. Figura 4.28: Imagen con texto sobre la posición de los elementos sumergibles. Una vez se definieron las funciones para buscar la línea, y las circunferencias en la imagen obtenida se pensó en reducir los tiempos de procesado de estas imágenes. Teniendo en cuenta que el dispositivo embebido que se usa, la PandaBoard ES, tiene dos núcleos se probó a ejecutar cada una de estas funciones en cada uno de los núcleos en vez por separado en vez de dejar que el dispositivo lo gestionará automáticamente. Como se puede observar en la figura 4.29 los resultados fueron satisfactorias, reduciendo el tiempo en casi 0.005 segundos. Puede parecer que esta mejora en el tiempo es insignificante, sin embargo, cuando se tienen 400 peticiones seguidas esto representa una mejora de dos segundos. Figura 4.29: Comparación de tiempos (en segundos) con y sin paralelización. En el siguiente estado se ejecuta el guardado de las imágenes en disco, así como la generación de una carpeta específica que llevará como nombre un timestamp en formato unix. Este nombre único de cada carpeta permite diferenciarlas sin problemas y recuperarlas 102 PROYECTO FIN DE GRADO en un futuro si fuera necesario sabiendo la fecha y hora de conexión. El guardado de las imágenes en disco representa un tiempo importante, más o menos 0.02 segundos, que es lo mismo que es más que lo que tardamos en procesar la imagen. Al mismo tiempo, que se guarda la imagen genera un JSON que contiene las imágenes solicitadas y la ruta a estas. Este JSON pertenece a un servicio web creado con la idea de que cuando un usuario solicite una imagen no le llegue directamente sino que esta imagen se guarde con otras utilidades que podrá usar en el futuro. Realmente no es un solo servicio web, sino que son varios, sin embargo, estos servicios web siempre devuelven lo mismo, rutas a imágenes y/o archivos de excel generados en ese momento. Las diferentes URI a las que se puede llamar son /image, que devolverá solo la imagen real en ese momento. /image_low_processed que devolverá la imagen real y una imagen donde están marcados los elementos sumergibles y la línea de agua. /image_medium_processed que devolverá las mismas imágenes que el método /image_low_processed y además un excel donde se podrá ver el tanto por ciento que los elementos sumergibles están dentro y fuera del agua. /image_high_processed que devolverá la imagen real y una imagen con los elementos sumergibles y la línea de agua marcada, así como el tanto por ciento que los elementos sumergibles están fuera y dentro del agua directamente escrito sobre la imagen. Y por ultimo /image_virtual que nos devolverá una representación en 2D de la imagen que vemos y datos como el peso del elemento sumergible, la densidad, etc. Nótese que todos estos métodos se utilizan para abarcar un mayor número de tipos de usuarios en nuestro laboratorio remoto. Como todos los servicios son muy parecidos se va a explicar solo el más común. El servicio más común consiste en llamar a la URI /image_medium_processed. Este servicio devolverá un JSON con las rutas a los archivos especificados más arriba. − Petición: GET /image_medium_processed/ HTTP/1.1 Host: 192.168.0.155:8000 −Respuesta: 200 OK Content−Type: application/JSON {”real_image_[timestamp]”: ”192.168.0.155:8008/tmp/[timestamp].jpg”, ”processed_image”: ”192.168.0.155:8008/tmp/[timestamp]_processed.jpg”, ”excel_data”: ”192.168.0.155:8008/tmp/[timestamp].xls”} Bloque de código fuente 4.26: URL /image_medium_processed/. El parametro [timestamp] que aparece en el bloque de código fuente 4.26 es una marca temporal en formato UNIX que es utilizada para localizar cada una de las imágenes, así como saber en qué momento fueron solicitadas al servidor y eliminarlas en caso de que tengan más de dos semanas de antigüedad. Como se puede apreciar en las líneas de arriba, cuando un usuario solicita una imagen no recibe la imagen directamente, sino llama a un servicio web que le devuelve la dirección de la imagen. De la devolución de la imagen se encarga NGINX, que es un servidor web ligero de alto rendimiento. NGINX es software libre y de código abierto, y permite servir las imágenes de manera mucho más rápida que si se hiciera directamente desde la aplicación que se ha creado. 103 4 DISEÑO E IMPLEMENTACIÓN Como este servicio es un servicio crítico, en caso de caerse tiene que volver a estar operativo en el menor tiempo posible. Para conseguir esto se instaló Supervisor. Supervisor es un sistema cliente - servidor que permite a los usuarios monitorizar y controlar una serie de procesos en los sistemas operativos tipo UNIX. Además, permite iniciar cualquier programa en el arranque, por lo que en caso de que la máquina se reinicie el servicio configurado volverá a correr. Además posee una interfaz web que te permite ver y gestionar estos procesos desde cualquier lugar del mundo. Figura 4.30: Interfaz web de Supervisor. 104 PROYECTO FIN DE GRADO 5. PLANIFICACIÓN Todo este proyecto se planificó de acuerdo a un período de trabajo de entre cuatro y cinco meses, a partir de febrero de 2012, con el inicio de la colaboración del autor en WebLab-Deusto. En el apartado de la planificación de un proyecto es muy importante tener en cuenta dos tipos de planificaciones diferentes, pero que se complementan: • Planificación económica. • Planificación de tiempos. 5.1 PLANIFICACIÓN ECONÓMICA Es sabido que un apoyo fundamental en la consecución del éxito a la hora de desarrollar e implantar proyectos de índole eminentemente tecnológica resulta de una cuidadosa planificación financiera. En este sentido, un análisis de índole tanto cualitativo como cualitativo, permite determinar qué recursos resultan imprescindibles para el proyecto, así como determinar cuál es el coste asociado a los mismos. Desarrollar este análisis constituye un pilar básico ya que, sólo cuando se conoce y cuantifica el esfuerzo económico necesario para desarrollar un proyecto se está en posición de iniciar un análisis centrado en la viabilidad del negocio en torno a la variable principal de cualquier análisis económico, el mercado al que pretendemos satisfacer. Por ello, si bien es cierto que podrían ser muchas y muy distintas las variables a tener en cuenta a la hora de realizar una planificación económica, la estructura de este apartado se centra en analizar aquellas variables que, con carácter general, tienen un impacto decisivo a la hora de realizar la puesta en marcha de un proyecto: • Planificación de costes y recursos. • Ingresos y mercado. 5.1.1 Planificación de costes y recursos La instalación de un laboratorio remoto, y su puesta a disposición a través de una plataforma digital con capacidad de transmitir en tiempo real imagen y sonido, requiere de recursos precisos, cada uno categorizado en un estanco particular, y respecto de los cuales se debe ser capaz de combinar perfectamente entre sí para constituir un sistema homogéneo capaz de dar la mejor respuesta a los usuarios. En concreto, a continuación se exponen los recursos necesarios, así como los costes asociados a los mismos, necesarios para el desarrollo del proyecto: 105 5 PLANIFICACIÓN • Recursos humanos. • Recursos hardware. • Recursos software. • Material fungible. • Costes fijos totales y mensuales. 5.1.1.1 Recursos humanos El proyecto requiere de la dedicación de al menos dos ingenieros. El perfil del primero de ellos sería informático, con una dedicación estimada de 150 horas, siendo su principal responsabilidad la realización y desarrollo de la parte de programación de algoritmos, así como la programación de partes del interfaz web y optimizacion del codigo. Por su parte, resulta asimismo necesario, y con una presencia y dedicación mayor, esto es de 280 horas, un ingeniero de telecomunicaciones, cuya labor se centra en el análisis e implementación de toda la vertiente digital de la plataforma, como es el diseño de los servicios web, el diseño y modelización de procesado de las imágenes, etc . Adicionalmente, el equipo estaría completado por un diseñador gráfico con una dedicación estimada de 30 horas, así como por un electricista y un carpintero con una dedicación de 10 y 8 horas respectivamente, que asistan en las labores de instalación del acuario. El subtotal ligado a los costes en el campo de personal asciende a 24.480 euros en términos globales (dependiendo de las particularidades ligadas a las modalidades de contratación, a estos gastos podrían añadirse los costes de seguridad social, los cuales llegado el caso serán objeto de un análisis más pormenorizado). Figura 5.1: Costes asociados a los Recursos humanos. 5.1.1.2 Recursos hardware Como no podía ser de otro modo considerando la naturaleza del proyecto, los recursos hardware constituyen asimismo una vertiente fundamental de análisis a la hora de determinar los costes del proyecto. Entre los diversos dispositivos necesarios para la implementación del laboratorio remoto, cabe destacar por su impacto en costes el osciloscopio, las poleas a medida y el propio acuario. El análisis adjunto incluye la mejor alternativa 106 PROYECTO FIN DE GRADO en base a calidad-precio para cada uno de estos elementos, así como para el resto de dispositivos necesarios. A este respecto, conviene señalar que la calidad de los elementos explícitamente señalados (acuario, osciloscopio o poleas), aunque todos los elementos son importantes, resulta imprescindible a la hora de lograr el mejor rendimiento del laboratorio remoto. Figura 5.2: Costes asociados a los Recursos hardware. 5.1.1.3 Recursos software Con carácter complementario a los recursos hardware señalados anteriormente, resulta asimismo preciso contar con herramientas software que nos faciliten y aseguren, entre otros aspectos, la calidad en la interacción del usuario con el laboratorio, aspecto decisivo en la experiencia del usuario de este tipo de laboratorios. En la medida en que todo el apoyo software se basa en la utilización de software libre, el coste de utilización resulta neutro y por lo tanto, estas herramientas no constituyen un mayor coste necesario en la elaboración de este tipo de laboratorios. 107 5 PLANIFICACIÓN Figura 5.3: Costes asociados a los Recursos Software. 5.1.1.4 Material fungible Intrínsecamente ligado a la actividad del laboratorio remoto, es necesario contar con ejemplares de peces, los cuales lo son de distinta morfología, de este modo resulta sin duda más atractivo de cara al usuario y en concreto al público al que nos dirigimos (como por ejemplo, escuelas). El coste total en este caso asciende a 48 euros. Figura 5.4: Costes asociados al material fungible. 5.1.1.5 Costes fijos totales y mensuales Una vez determinada la estructura de costes fijos, los cuales ascienden a 29.398 euros (de acuerdo con la figura adjunta), constituye asimismo objeto de análisis los costes variables ligados al funcionamiento del laboratorio remoto. Figura 5.5: Costes jos. En concreto, para el desarrollo de la actividad sería preciso incurrir en unos costes mensuales de 340 euros que incluyen la conexión a internet, el servicio de contratación de backup 3.5G, la contratación de una IP fija y, gastos propios de mantenimiento de la pecera así como los gastos de luz y agua. 108 PROYECTO FIN DE GRADO Figura 5.6: Costes jos mensuales. 5.1.2 Ingresos y mercado El proyecto se encuentra fundamentalmente dirigido hacia dos segmentos de mercado; el primero de ellos estaría conformado por museos de orientación científico-tecnológica, mientras que el segundo se centraría en el sector de conformado por los centros de educación. En concreto, en este segundo se estaría haciendo referencia por una parte a los centros de educación primaria, secundaria y bachiller y por otra, a centros universitarios de ingenierías superiores y escuelas técnicas superiores. Determinado, lo que en marketing se define como “target market”, resulta preciso analizar las siguientes cuestiones: • Tamaño del sector y porcentaje de penetración. • Estructura de obtención de recursos. 5.1.2.1 Tamaño del sector y porcentaje de penetración Pese a que no existe un censo oficial en Europa que recoja el número total de museos en Europa, se estima que la oferta de los mismos sólo en España es superior a 1.000 centros (Ministerio Estatal de Educación Cultura y Deporte 2012a). De la oferta total, aproximadamente la mitad de ellos albergan con habitualidad exposiciones de contenido científico-tecnológico, con lo que el tamaño de este sector sería de 500 museos solo a nivel nacional. Por su parte, en lo referente a centros educativos (enseñanza básica y superior), a nivel nacional existen censados 210 centros de enseñanza superior (universitaria y técnica) (Instituto Nacional de Estadística 2012) y 7.401 centros de impartición de enseñanza secundaria obligatoria (Ministerio Estatal de Educación Cultura y Deporte 2012b). Estimando un porcentaje de penetración en cada uno de estos sectores del 1% para museos, 0,8% para centros de educación obligatoria y 4,8% para universidades, se estaría atendiendo a un total de 5 museos, 60 colegios y 10 universidades: Es imprescindible señalar que estos datos están analizados a nivel nacional de manera que el tratamiento de las cifras sea más manejable. No obstante, el proyecto es un programa con un desarrollo a nivel europeo y de divulgación telemática por lo que la extensión del mismo es con casi toda seguridad bastante mayor. 109 5 PLANIFICACIÓN Figura 5.7: Porcentaje de penetración. 5.1.2.2 Estructura de obtención de recursos La obtención de recursos económicos se centra en establecer un peaje por horas de acceso a la plataforma. De este modo el precio por hora de acceso en el caso de museos asciende a 12 euros mientras que en el caso de centros de educación el precio es de 10 euros la hora. En el caso de museos, la demanda de horas al mes sufrirá variaciones en función del número y duración de la exposición en aquellos museos con alternancia de exposiciones, si bien, en aquellos dedicados íntegramente a la exposición de contenido científico-tecnológico es previsible que demanden estos servicios con carácter permanente. Por su parte, en el caso de centros de educación, debe advertirse que es predecible que ciertos centros concierten estos servicios a lo largo de un trimestre/semestre al año. Para realizar la estimación de ingresos, se ha fijado un porcentaje de penetración tal que entiende que alternadamente la media de universidades que al mes demandarían los servicios seria de 60 colegios y 10 universidades, si bien la demanda en ese segmento no sería homogénea a lo largo del año. En concreto, la estimación realizada se recoge en la siguiente figura: Figura 5.8: Estimación de penetración en el mercado. Determinando un total de 12 meses para el caso de museos y, 10 meses lectivos en el caso de centros educativos, el importe de ingresos anuales estimados es de 70.400 euros. Figura 5.9: Estimación de ingresos anuales. 110 PROYECTO FIN DE GRADO Ligando la estimación de ventas con la de costes y, asumiendo un incremento de ingresos el primer año de un 5%, el segundo de un 3% y los sucesivos de un 1%, así como el incremento correlativo de costes, el diagrama de flujos para el horizonte temporal de 5 años sería el siguiente: Figura 5.10: Diagrama de ujos. Determinado cuál sería el flujo de retorno económico de la inversión realizada, no conviene por otra parte desatender el papel fundamental que, en este caso, desempeña la vertiente social del proyecto. Como suele ser habitual en estos casos, resulta complicado trasladar a magnitudes monetarias el beneficio social de proyectos que no son estrictamente diseñados desde el único prisma de la obtención de beneficios económicos en el mercado al que estamos acostumbrados. El proyecto GO-Lab, “learning from the experience” tal y como se ha descrito previamente, se configura como un proyecto europeo de trascendental calado en el desarrollo del mundo de la educación e investigación. Desde esta perspectiva, se pretende adaptar la oferta de este tipo de servicios, fundamentales en el desarrollo social, al desarrollo tecnológico e innovación de nuestros tiempos. Con todo, estamos ante un proyecto que visiblemente se muestra como rentable desde la doble perspectiva económico-social. 5.2 PLANIFICACIÓN DE TIEMPOS Figura 5.11: Diagrama de tareas primarias para la consecucion de este proyecto. El lector podra encontrar una explicacion mas detallada de tareas y tiempos en el Anexo A. 111 PROYECTO FIN DE GRADO 6. CONCLUSIONES Y TRABAJO FUTURO El resultado del proceso de trabajo de este proyecto ha desembocado en la generación de los modulos software, hardware y documentación necesarios para el cumplimiento de los requisitos del proyecto GO-Lab. Sin embargo, como parte de la continua investigación en laboratorios remotos aplicados a la educación queda mucho que mejorar todavía. Estas secciones siguientes pretenden ofrecer una visión general de los objetivos que se han logrado, y el trabajo futuro de investigación y desarrollo que queda por hacer. 6.1 RESULTADOS DEL PROYECTO Repasando los objetivos técnicos, sociales y económicos del proyecto, tal como se describe en la sección 1.1, se podría decir que la realización del proyecto ha cumplido con las expectativas de manera exitosa. De hecho, se ha implementado un laboratorio remoto para la experimentación con el principio de Arquímedes basado en una arquitectura asíncrona distribuida. El experimento permite a los usuarios controlar los objetos sumergibles del acuario, dar de comer a los peces, y lo más importante: experimentar con los conceptos asociados al principio de Arquímedes. Para la consecucion de estos objetivos el desarrollo del proyecto ha incluido ciertos modulo que pueden ser reutilizados en el futuro desarrollo de nuevos laboratorios remotos: • Una arquitectura de comunicaciones entre los diferentes subsistemas de un laboratorio remoto adaptable a las nuevas exigencias de los dispositivos embebidos. • Un cliente web sencillo y reutilizable que permite la comunicación entre el laboratorio y los usuarios. Todo esto se ha desarrollado manteniendo la compatibilidad con la API WebLab-Deusto, teniendo en cuenta que la integración dentro de este marco era una de las metas del proyecto. El diseño del laboratorio, así como la arquitectura asociada, se han mantenido simples utilizando dispositivos hardware que facilitan el desarrollo y que por lo general han sido validados en el laboratorio en experimentos anteriores. El proyecto también ha tratado de hacer uso de las tecnologías apropiadas y únicamente de los recursos de software necesarios. El proyecto en sí ha sido considerablemente multidisciplinar, ya que abarca aspectos tales como las tecnologías de las comunicaciones, electrónica, diseño de PCB, mecatrónica, diseño de software, programación, tecnologías web y desarrollo web. Por otra parte, no se ha limitado al ámbito de la ingeniería, dado que el autor también ha llevado a cabo un trabajo relacionado con la preparación de documentos, el diseño de interfaces de usuario que mejoren la experiencia del usuario, etc. 113 6 CONCLUSIONES Y TRABAJO FUTURO 6.2 TRABAJO FUTURO Una vez que la estructura básica y la funcionalidad del experimento se han definido e implementado, se ha establecido la base para la mejora y la investigación futura de un laboratorio remoto para la experimentación de los conceptos del principio de Arquímedes basado en una arquitectura asíncrona distribuida. Los siguientes pasos de este proyecto se refieren a la ampliación de su funcionalidad, mejoras generales en la usabilidad, y su uso como punto de partida para la investigación pedagógica a mayor escala. En este sentido, el futuro trabajo más relevante se puede clasificar en cuatro áreas: • Integración completa del laboratorio en el entorno Graasp • Integración completa del laboratorio no gestionado en WebLab-Deusto • Mejoras en la interfaz gráfica de usuario • Mejoras en el sistema de izado y arriado de elementos sumergibles • Diseño de una nueva versión del laboratorio Cabe señalar que todas estas tareas persiguen los propósitos principales de aumentar la facilidad de uso y capacidad de aprendizaje desde la perspectiva del usuario, así como llegar a ofrecer un cantidad mayor de posibilidades educacionales. 6.2.1 Integración completa del laboratorio en el entorno Graasp Sobrepasando los objetivos del presente proyecto, el experimento desarrollado durante el mismo ha sido integrado en el entorno no formal de aprendizaje colaborativo Graasp, desarrollado por la EFPL (en frances École Polytechnique Fédérale de Lausanne). Para llevar a cabo esta integraciónn todos los objetos individuales incluidos en el laboratorio han sido dispuestos al usuario de forma independiente, mediante widgets, permitiendo adecuar la interfaz de usuario a las necesidades de cada experimento individual. Este trabajo ha sido desarrollado por el Doctor Pablo Orduña dentro de su aportación al proyecto GO-Lab. Se puede observar la interfaz de usuario del laboratorio funcionando en el entorno no formal Graasp en la figura 6.1. Se aprecia como todos y cada uno de los componentes del laboratorio son representados mediante widgets. 6.2.2 Integración completa del laboratorio no gestionado en WebLab-Deusto Dentro de este proyecto se ha desarrollado un cliente, así como un pequeño servidor para los laboratorios no gestionados, implementados y probados siguiendo los requisitos de la API WebLab-Deusto. En el caso del laboratorio no gestionado, el experimento no ha sido desplegado en Internet como parte totalmente funcional de WebLab-Deusto. Durante todas las pruebas se mantuvo ejecutando el servidor de la aplicación en un equipo local, implemetado sobre la plataforma PandaBoard ES. En este punto hay que recalcar que este experimento se desplegó con éxito para laboratorios gestionados. 114 PROYECTO FIN DE GRADO Figura 6.1: Interfaz de usuario del laboratorio en Graasp. El trabajo futuro en esta área se dedicará a una implementación completa del laboratorio dentro de WebLab-Deusto (https://www.weblab.deusto.es/). En este marco, el experimento se pretende implementar como un laboratorio gestionado, beneficiándose así de una serie de ventajas como son: • No hay necesidad para el desarrollador del experimento de gestionar las comunicaciones, ya que estas son gestionadas directamente desde la API. Ademas, todo esta información viaja desde el servidor de forma segura bajo SSL. A pesar de esto, todos los comandos son HTTP puro, para que puedan atravesar los firewalls y servidores proxy. • Toda la información de la interacción entre el experimento y el usuario se almacena en una base de datos. Esto es útil para los profesores y pedagogos a la hora de estudiar el uso de los experimentos y los comandos enviados al laboratorio por los alumnos y modelizar el mismo. • Existe un balanceo de carga local, de modo que, en el caso de que existen múltiples copias del mismo laboratorio, el servidor WebLab-Deusto gestiona internamente los mensajes enviados por el cliente y los envía a la copia adecuada del laboratorio en cada momento. La autenticación de los usuarios se realiza automáticamente desde el servidor WebLab-Deusto. • Todas la colas son gestionadas internamente por WebLab-Deusto. 115 6 CONCLUSIONES Y TRABAJO FUTURO • Es posible la compartición de laboratorios entre las diferentes instituciones gracias a la federación. El grado de trabajo requerido para incorporar adecuadamente estas mejoras en el experimento actual no es muy grande, por lo que espera que esto se complete en las semanas siguientes a la publicación de este documento. 6.2.3 Mejoras en la interfaz gráfica de usuario La actual interfaz gráfica de usuario desarrollada como parte del cliente experimental es funcional y ofrece acceso a los principales controles necesarios para gestionar y controlar el laboratorio. Sin embargo, podría beneficiarse de algunas mejoras desde el punto de vista del diseño, ya que actualmente no es lo bastante intuitiva. Un aspecto del que actualmente carece es el desarrollo de un mecanismo apropiado para mostrar las diferentes opciones que existen a la hora de procesar la imagen, así como una descripción detallada de este proceso. En un primer momento también se pensó en proveer de un sistema de recompensas que fomente la participación de los usuarios, así como su integración en un Serious Game. Las diferentes propuestas incluyen una representación gráfica interactiva de Arquímedes en un estado de angustia, que vaya desapareciendo a medida que los usuarios adivinen el líquido que contiene los elementos sumergibles. Por último, sería interesante desde el punto de vista del usuario pintar en cada una de las imágenes que obtiene una regla que sea capaz de medir hasta milímetros para comparar las distancias de los elementos sumergibles respecto de la línea de agua, o incluso respecto del fondo. 6.2.4 Mejoras en el sistema de izado y arriado de elementos sumergibles Un aspecto del que actualmente carece el experimento es el desarrollo de un mecanismo apropiado para el intercambio rápido entre diferentes objetos sumergibles que puedan ser utilizados. Existen algunas propuestas que intentan solucionar el problemas desde el punto de vista del software que incluyen una representación gráfica interactiva de cada uno de los objetos sumergibles que puedan ser movidas desde la interfaz gráfica. Desde el punto de vista del hardware se plantea una pequeña grúa dirigible que deje caer y recoja estos objetos sumergibles. Otro aspecto planeada es incluir elementos sumergibles de formas diferentes, e incluso líquidos diferentes donde dejar caer estos elementos. El hecho de incluir formas diferentes podría funcionar mediante la preparación anterior de estos elementos en función de reservas. Los líquidos diferentes donde dejar caer los líquidos se podría solucionar teniendo varios acuarios más pequeños. 116 PROYECTO FIN DE GRADO 6.2.5 Diseño de una nueva versión del laboratorio Pese a que el laboratorio remoto desarrollado en este proyecto cumple todos los requisitos demandados y se ajusta perfectamente al diseño llevado a cabo durante la definición del mismo (Anexo B), existen ciertas modificaciones recomendables. Como parte de la etapa preliminar del proyecto Go-Lab, se han desarrollado una serie de presentaciones (Visionary Workshops) de los diferentes laboratorios remotos incluidos en dicho proyecto, incluyendo el Aqualab, a una representación de profesores de secundaria voluntarios que han participado en una encuesta de satisfacción. Las principales conclusiones resultantes de dichos workshops son las siguientes: • Más allá de la fuerza de flotación y densidad, analizadas en la versión actual del Aqualab, existen otras variables importantes que deberían ser analizadas: Volumen, peso y flotabilidad. • Las medidas principalmente demandadas por la comunidad de usuarios son Masa/Peso de los objetos, desplazamiento resultante del agua e imágenes. La mayor parte de los profesores encuestados asigna un peso considerable a los procesos de realidad aumentada sobre los objetos sumergidos. • Es preferible centrar el AquaLab en una aplicación real del principio de Arquímedes o en una situación real en lugar de propiciar el descubrimiento del principio mediante experimentos pequeños. • El 70% de los profesores encuestados apoya el uso del bloc de hipótesis y las imágenes procesadas y rechaza el empleo del mapa conceptual. En base a estas conclusiones se han propuesto dos enfoques diferentes para la implementación de un nuevo laboratorio remoto que se acerque a lo demandado por la comunidad educativa: • Implementar un acuario más grande y rediseñar la mecánica del experimento para incluir un número superior de objetos sumergibles. • Diseñar experimentos individuales para cada objeto. Cada experimento individual consistirá en: – Un tubo de ensayo pequeño, con una escala de medición, y un objeto llenado con un determinado líquido. – Un sistema mecatrónico para el control de los objetos: motor, driver, la polea, la mecánica y la Raspberry Pi. – Una cámara web y un sistema de iluminación. – Un dinamómetro. – Una caja para aislar el experimento. 117 6 CONCLUSIONES Y TRABAJO FUTURO Con el segundo enfoque, el usuario será capaz de medir el desplazamiento de agua, el peso y la flotabilidad. También se pueden tomar fotografías. El líquido en cada tubo de ensayo se puede cambiar, pudiendo ser alterado periódicamente. Permite tener un conjunto de objetos (más que el número de experimentos) y en función de la clase o el escenario de aprendizaje que se pueden modificar. Este enfoque está en consonancia con el WordPackage técnico del proyecto Go-Lab, facilitando su integración en Graasp porque cada experimento puede ser fácilmente widgetizado. Elementos simples de realidad aumentada pueden ser agregados como una escala o regla de medición. 118 PROYECTO FIN DE GRADO AGRADECIMIENTOS Después de escribir mas de cien páginas, uno empieza a sentir un ligero dolor de cabeza y un cosquilleo en los pies cada vez que las vuelve a repasar. Sin embargo, es reconfortante expresar mis agradecimientos en esta página a: • Ignacio Angulo: Por dirigir este proyecto y por su inestimable ayuda incluso los fines de semana. Por estar detras mio cada vez que me abstraia y por comerse mis M&M’s cada vez que los veía. • Javier García Zubia: Por saber dar buenos consejos y dirigir el proyecto GO-Lab. Por las canciones y frases tan buenas que me ha pegado durante estos meses. • Olga Dziabenko: Por toda la ayuda con las partes pedagógicas y su paciencia. • Iñigo Iturrate: Por su ayuda con el desarrollo del hardware y por sus galletas Principe todas las tardes a las 18:00. • Pablo Orduña: Por ser el Lord del WebLab y ayudarnos a los meros mortales con todas las cosas relacionadas con el software. • Rubén del Río: Por llenarme la cabeza de antenas. • Luis Rodríguez: Por su ayuda con la plantilla de LATEX. • Iker de Echaniz: Por ser un modelo a seguir y por sus interminables conversaciones sobre temas tan interesantes como los fallos de seguridad que tienen algunos sistemas electrónicos en producción. • Andoni Renart: Por aportar sus conocimientos en RTOS aunque no hayan servido de mucho... • Pedro Manuel Sasia: Por ayudar con los aspectos relacionados con la ética del proyecto, algo tan necesario en estos tiempos. • Mi novia, Nerea: Por aportar sus amplios conocimientos en este proyecto. • Mis padres: Por estar ahí siempre, ser capaces de aguantarme durante estos largos años y aún no haberme echado de casa. • Todos los demás: Incluyendo profesores, amigos y compañeros. Porque no se pueden incluir todos los nombres por escrito, pero sigo agradeciéndoos el estar ahí. 119 PROYECTO FIN DE GRADO REFERENCIAS Alonso, G., Casati, F., Kuno, H. & Machiraju, V. (2004), Web services, Springer. Amer, P. D., Iren, S., Sezen, G. E., Conrad, P. T., Taube, M. & Caro, A. (1999), ‘Network-conscious gif image transmission over the internet’, Computer Networks 31(7), 693–708. Arduino (2013a), ‘Arduino Language Reference’. [Online; accessed 2013-05-17]. URL: http://arduino.cc/en/Reference/HomePage Arduino (2013b), ‘Arduino UNO Product Page’. [Online; accessed 2013-05-17]. URL: http://arduino.cc/en/Main/ArduinoBoardUno Athitsos, V., Swain, M. J. & Frankel, C. (1997), Distinguishing photographs and graphics on the world wide web, in ‘Content-Based Access of Image and Video Libraries, 1997. Proceedings. IEEE Workshop on’, IEEE, pp. 10–17. Bergmann, N. W., Wallace, M. & Calia, E. (2010), Low cost prototyping system for sensor networks, in ‘Intelligent Sensors, Sensor Networks and Information Processing (ISSNIP), 2010 Sixth International Conference on’, IEEE, pp. 19–24. Bradski, G. & Kaehler, A. (2008), Learning OpenCV: Computer vision with the OpenCV library, O’reilly. Brosnan, T. & Sun, D.-W. (2004), ‘Improving quality inspection of food products by computer vision—-a review’, Journal of Food Engineering 61(1), 3–16. Canny, J. (1986), ‘A computational approach to edge detection’, Pattern Analysis and Machine Intelligence, IEEE Transactions on (6), 679–698. Crockford, D. (2006), ‘The application/json media type for javascript object notation (json)’. Django Project (2013), ‘Django Web Framework Documentation’. [Online; accessed 201307-01]. URL: https://docs.djangoproject.com/en/1.5/ Eric Ptak (2013), ‘WebIOPi Raspberry Pi Internet of Things framework’. [Online; accessed 2013-07-01]. URL: http://code.google.com/p/webiopi/ Forcier, J., Bissex, P. & Chun, W. (2008), Python web development with Django, AddisonWesley Professional. 121 Referencias FriendFeed (2013), ‘Tornado Web Framework’. [Online; accessed 2013-07-01]. URL: http://www.tornadoweb.org/en/stable/ Garcia-Zubia, J., Angulo, I., Hernandez, U., Castro, M., Sancristobal, E., Orduña, P., Irurzun, J. & de Garibay, J. (2010), Easily integrable platform for the deployment of a remote laboratory for microcontrollers, in ‘Education Engineering (EDUCON), 2010 IEEE’, IEEE, pp. 327–334. Garcia-Zubia, J., Orduña, P., Angulo, I., Irurzun, J. & Hernández, U. (2008), ‘Towards a distributed architecture for remote laboratories’, International Journal of Online Engineering (iJOE) 4, 11–14. Gonzalez, R. C. & Woods, Richard, E. (2002), Digital image processing, Prentice Hall Press. Gowtham, P. (2011), ‘An interactive hand gesture recognition system on the beagle board’, International Proceedings of Computer Science and Information Technology 20, 113–118. Harward, V. J., Del Alamo, J. A., Lerman, S. R., Bailey, P. H., Carpenter, J., DeLong, K., Felknor, C., Hardison, J., Harrison, B., Jabbour, I. et al. (2008), ‘The ilab shared architecture: A web services infrastructure to build communities of internet accessible laboratories’, Proceedings of the IEEE 96(6), 931–950. Hertel, G., Niedner, S. & Herrmann, S. (2003), ‘Motivation of software developers in open source projects: an internet-based survey of contributors to the linux kernel’, Research policy 32(7), 1159–1177. Hodges, S., Taylor, S., Villar, N., Scott, J. & Helmes, J. (2013), Exploring physical prototyping techniques for functional devices using. net gadgeteer, in ‘Proceedings of the 7th International Conference on Tangible, Embedded and Embodied Interaction’, ACM, pp. 271–274. Instituto Nacional de Estadística (2012), ‘Instituto Nacional de Estadística’. [Online; accessed 2013-07-01]. URL: http://www.ine.es/jaxi/menu.do?type=pcaxis&path=/t13/p405&file= inebase&L=0 Instruments, T. (2012), ‘Pandaboard’, OMAP4430 SoC dev. board, revision A 2. Jimenez, A., Ceres, R., Pons, J. et al. (2000), ‘A survey of computer vision methods for locating fruit on trees’, Transactions of the ASAE-American Society of Agricultural Engineers 43(6), 1911–1920. Kenjĺo, T. & Sugawara, A. (1984), Stepping motors and their microprocessor controls, Clarendon Press (Oxford and New York). Kepski, M. & Kwolek, B. (2012), Fall detection on embedded platform using kinect and wireless accelerometer, in ‘Computers Helping People with Special Needs’, Springer, pp. 407–414. 122 PROYECTO FIN DE GRADO Laganière, R. (2011), OpenCV 2 computer vision application programming cookbook, Packt Publishing. Lee, H.-C., Breneman, E. J. & Schulte, C. P. (1990), ‘Modeling light reflection for computer color vision’, Pattern Analysis and Machine Intelligence, IEEE Transactions on 12(4), 402–409. Li, D., Babcock, J. & Parkhurst, D. J. (2006), openeyes: a low-cost head-mounted eyetracking solution, in ‘Proceedings of the 2006 symposium on Eye tracking research & applications’, ACM, pp. 95–100. Lowe, D., Murray, S., Weber, L., de la Villefromoy, M., Johnston, A., Lindsay, E., Nageswaran, W. & Nafalski, A. (2009), ‘Labshare: Towards a national approach to laboratory sharing’, AAEE 2009 . Ma, J. & Nickerson, J. V. (2006), ‘Hands-on, simulated, and remote laboratories: A comparative literature review’, ACM Computing Surveys (CSUR) 38(3), 7. Martelli, A., Ravenscroft, A. & Ascher, D. (2008), Python cookbook, O’Reilly. Matas, J., Galambos, C. & Kittler, J. (2000), ‘Robust detection of lines using the progressive probabilistic hough transform’, Computer Vision and Image Understanding 78(1), 119–137. Miano, J. (1999), Compressed Image File Formats: JPEG, PNG, GIF, XBM, BMP, Your Guide to Graphics Files on the Web, Addison-Wesley Professional. Ministerio Estatal de Educación Cultura y Deporte (2012a), ‘Día Internacional de los Museos. 2013’. [Online; accessed 2013-07-01]. URL: http://www.ite.educacion.es/es/inicio/noticias-de-interes/ 1012-18-de-mayo-dia-internacional-de-los-museos-2013 Ministerio Estatal de Educación Cultura y Deporte (2012b), ‘Registro Estatal de Centros Docentes no Universitarios’. [Online; accessed 2013-07-01]. URL: https://www.educacion.gob.es/centros/home.do Miu, D. K. (1993), ‘Mechatronics-electromechanics and contromechanics’, NASA STI/Recon Technical Report A 93, 20853. Muros-Cobos, J. L. & Holgado-Terriza, J. A. (2012), ‘Rvlab: A server-side framework to build remote and virtual laboratories’, Remote Engineering and Virtual Instrumentation . Pennebaker, W. B. (1992), JPEG: Still image data compression standard, Springer. Pi, R. & An, A. (2012), ‘Gnu/linux box for $25’, Take a byte . Python Software Foundation (2013), ‘Python v2.7.5 documentation’. [Online; accessed 2013-05-17]. URL: http://docs.python.org/2/ 123 Referencias Roelofs, G. & Koman, R. (1999), PNG: The Definitive Guide, O’Reilly & Associates, Inc. Shi, J. & Tomasi, C. (1994), Good features to track, in ‘Computer Vision and Pattern Recognition, 1994. Proceedings CVPR’94., 1994 IEEE Computer Society Conference on’, IEEE, pp. 593–600. Solem, J. E. (2012), Programming Computer Vision with Python: Tools and algorithms for analyzing images, O’Reilly. Szeliski, R. (2011), Computer vision: algorithms and applications, Springer. Tian-ran, W. & Dao-kui, Q. (2002), ‘Open system architecture for control system for industrial robot [j]’, Robot 3, 013. Torralba, A., Murphy, K. P., Freeman, W. T. & Rubin, M. A. (2003), Context-based vision system for place and object recognition, in ‘Computer Vision, 2003. Proceedings. Ninth IEEE International Conference on’, IEEE, pp. 273–280. Trapp, B. (2013), ‘Raspberry pi: the perfect home server’, Linux Journal 2013(229), 1. Twitter, Inc. (2013), ‘Twitter Bootstrap Homepage’. [Online; accessed 2013-05-17]. URL: http://twitter.github.io/bootstrap/ Upton, E. & Halfacree, G. (2012), Raspberry Pi User Guide, John Wiley & Sons. Van de Straete, H. J., Degezelle, P., De Schutter, J. & Belmans, R. J. (1998), ‘Servo motor selection criterion for mechatronic applications’, Mechatronics, IEEE/ASME Transactions on 3(1), 43–50. Vazquez, J. I., Almeida, A., Doamo, I., Laiseca, X. & Orduña, P. (2009), Flexeo: an architecture for integrating wireless sensor networks into the internet of things, in ‘3rd Symposium of Ubiquitous Computing and Ambient Intelligence 2008’, Springer, pp. 219–228. WebLab-Deusto (2005 onwards), ‘WebLab-Deusto Documentation’. 2013-05-17]. URL: https://weblabdeusto.readthedocs.org/en/latest/ [Online; accessed Wilde, E. (2007), ‘Putting things to rest’. Yeung, K. & Huang, J. (2003), ‘Development of a remote-access laboratory: a dc motor control experiment’, Computers in Industry 52(3), 305–311. Yodaiken, V. & Barabanov, M. (1997), Real-time linux applications and design, in ‘Proceedings of the Linux applications development and deployment conference (USELINUX)’. Yuen, H., Princen, J., Illingworth, J. & Kittler, J. (1990), ‘Comparative study of hough transform methods for circle finding’, Image and Vision Computing 8(1), 71–77. 124 PROYECTO FIN DE GRADO ANEXOS A TAREAS Y DIAGRAMAS DE GANTT 125 14 12 13 Finish Predecessors Inactive Task Inactive Milestone Inactive Summary Manual Task Duration-only Milestone Summary Project Summary External Tasks Page 1 External Milestone Wed 20/02/13Fri 22/02/13 Wed 20/02/13Thu 21/02/13 Wed 20/02/13Thu 21/02/13 Wed 20/02/13Tue 26/02/13 Wed Tue 26/02/13 20/02/13 Wed 20/02/13Tue 26/02/13 Wed Tue 26/02/13 20/02/13 Wed Tue 23/04/13 4 27/02/13 Wed Tue 26/02/13 1 20/02/13 Wed 20/02/13Tue 26/02/13 Wed Tue 26/02/13 20/02/13 Fri 15/02/13 Tue 19/02/13 2 Fri 01/02/13 Tue 19/02/13 Fri 01/02/13 Thu 14/02/13 Start Split 40 days 5 days 5 days 3 days 2 days 2 days 5 days 5 days 5 days 5 days 5 days 3 days 13 days 10 days Duration Task Motores Sistemas de poleas Cámaras WiFi Análisis de software Framework del servidor Interfaz del cliente Sistema de visión artificial Desarrollo e Implementación 7 8 9 10 11 5 6 4 3 Definición del proyecto Pruebas de concepto y encuestas a agentes de influencia Documento de requisitos y objetivos Estudio de alternativas tecnológicas Análisis de hardware Sistemas basados en microcontroladores Task Name 1 2 Task Mode Project: Planificacion_Aqualab Date: Sun 30/06/13 ID T F S S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup Resource Names '13 04 Feb '13 M T W T F S S Inactive Milestone Inactive Summary Manual Task Duration-only Milestone Summary Project Summary External Tasks Page 2 Inactive Task Tue 11/06/13 Tue 11/06/13 20 Tue 11/06/13 Tue 11/06/13 25 24 22 23 21 14 15;16;17;18 Predecessors External Milestone 0 days 0 days 2 wks 1 wk 1 wk Tue 19/03/13 Finish Wed Tue 19/03/13 27/02/13 Wed Tue 19/03/13 27/02/13 Wed Tue 19/03/13 27/02/13 Wed Tue 23/04/13 20/03/13 Wed 24/04/13Tue 11/06/13 Wed 24/04/13Tue 30/04/13 Wed Tue 14/05/13 01/05/13 Wed 15/05/13Tue 21/05/13 Wed Tue 28/05/13 22/05/13 Wed Tue 11/06/13 29/05/13 Wed 27/02/13 Start Split Versión final del laboratorio remoto 27 26 25 23 24 35 days 1 wk 2 wks 5 wks 3 wks 3 wks 3 wks 3 wks Duration Task Pruebas y Debugeo Pruebas internas Primera fase de debugeo Pruebas externas Seguna fase de debugeo Rediseño de componentes del sistema Validación del sistema 20 21 22 19 18 17 16 Subsistema de manipulación y gestión remota RLMS en plataforma embebida Interfaz gráfica de usuario Algoritmo de visión artificial Integración del sistema Task Name 15 Task Mode Project: Planificacion_Aqualab Date: Sun 30/06/13 ID T F S S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup Resource Names '13 04 Feb '13 M T W T F S S 11 Feb '13 M T W T F S Project: Planificacion_Aqualab Date: Sun 30/06/13 S S Duration-only Page 3 Manual Task 04 Mar '13 M T W External Tasks S Project Summary S Inactive Summary F Summary T Inactive Milestone 25 Feb '13 M T W Milestone S Inactive Task S External Milestone F Split T Task 18 Feb '13 M T W T F S S T F S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup 11 Mar '13 M T W S 18 Mar '13 M T W T F S S 11 Feb '13 M T W T F S Project: Planificacion_Aqualab Date: Sun 30/06/13 S S Duration-only Page 4 Manual Task 04 Mar '13 M T W External Tasks S Project Summary S Inactive Summary F Summary T Inactive Milestone 25 Feb '13 M T W Milestone S Inactive Task S External Milestone F Split T Task 18 Feb '13 M T W T F S S T F S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup 11 Mar '13 M T W S 18 Mar '13 M T W T F S S 25 Mar '13 M T W T F S Project: Planificacion_Aqualab Date: Sun 30/06/13 S S Duration-only Page 5 Manual Task 15 Apr '13 M T W External Tasks S Project Summary S Inactive Summary F Summary T Inactive Milestone 08 Apr '13 M T W Milestone S Inactive Task S External Milestone F Split T Task 01 Apr '13 M T W T F S S T F S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup 22 Apr '13 M T W S 29 Apr '13 M T W T F S S 25 Mar '13 M T W T F S Project: Planificacion_Aqualab Date: Sun 30/06/13 S S Duration-only Page 6 Manual Task 15 Apr '13 M T W External Tasks S Project Summary S Inactive Summary F Summary T Inactive Milestone 08 Apr '13 M T W Milestone S Inactive Task S External Milestone F Split T Task 01 Apr '13 M T W T F S S T F S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup 22 Apr '13 M T W S 29 Apr '13 M T W T F S S 06 May '13 M T W T F S Project: Planificacion_Aqualab Date: Sun 30/06/13 S S Duration-only Page 8 Manual Task 27 May '13 M T W External Tasks S Project Summary S Inactive Summary F Summary T Inactive Milestone 20 May '13 M T W Milestone S Inactive Task S External Milestone F Split T Task 13 May '13 M T W T F S S T F S Progress Deadline Finish-only Start-only Manual Summary Manual Summary Rollup 03 Jun '13 M T W S T 11/06 11/06 10 Jun '13 M T W F S S PROYECTO FIN DE GRADO B MOCKUPS DEL PROYECTO GO-LAB 133