Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Libro de Actas JCC&BD 2018 VI Jornadas de Cloud Computing & Big Data VI Jornadas de Cloud Computing & Big Data La Plata (Buenos Aires), 25 al 29 de junio de 2018 Organizador Facultad de Informática - Universidad Nacional de La Plata Libro de Actas: JCC&BD 2018 - VI Jornadas de Cloud Computing & Big Data; coordinación general de De Giusti Armando. - 1a ed. - La Plata: Universidad Nacional de La Plata. Facultad de Informática, 2018. Libro digital, PDF Archivo Digital: descarga y online ISBN 978-950-34-1659-4 1. Actas de Congresos. 2. Computación. 3. Minería de Datos. I. Armando, De Giusti, coord. CDD 006.312 Comité Científico Coordinador: Armando De Giusti (UNLP) Aguilar, José (Universidad de Los Andes, Venezuela) Abásolo, María José (UNLP) Ardenghi, Jorge (UNS) Balladini, Javier (UNCOMA) Bria, Oscar (UNLP) Castro, Silvia (UNS) De Giusti, Laura (UNLP) Denham, Mónica (UNRN) Diaz, Javier (UNLP) Doallo, Ramón (Universidad da Coruña, España) Errecalde, Marcelo (UNSL) Frati, Fernando Emmanuel (UNdeC) Garcia Garino, Carlos (UNCuyo) Gaudiani, Adriana Angélica (UNGS) Gil, Costa (UNSL) Guerrero, Roberto (UNLS) Hasperué, Waldo (UNLP) Igual Peña, Francisco Daniel (Universidad Complutense de Madrid, España) Lanzarini, Laura (UNLP) Leguizamón, Guillermo (UNSL) Luque, Emilio (Universidad Autónoma de Barcelona, España) Marín, Mauricio (Yahoo, Chile) Marrone, Luis (UNLP) Naiouf, Marcelo (UNLP) Olcoz Herrero, Katzalin (Universidad Complutense de Madrid, España) Olivas Varela, José Angel (Universidad de Castilla La Mancha, España) Pardo, Xoan (Universidad da Coruña, España) Piccoli, María Fabiana (UNSL) Piñuel, Luis (Universidad Complutense de Madrid, España) Pousa, Adrian (UNLP) Printista, Marcela (UNSL) Rexachs, Dolores (Universidad Autónoma de Barcelona, España) Rodríguez, Nelson (UNSJ) Saez, Juan Carlos (Universidad Complutense de Madrid, España) Sanz, Victoria (UNLP) Suppi, Remo (Universidad Autónoma de Barcelona, España) Tirado, Francisco (Universidad Complutense de Madrid, España) Touriño, Juan (Universidad da Coruña, España) Zarza, Gonzalo (Globant) Índice Análisis funcional de la pila de software de E/S paralela utilizando IaaS. Diego Encinas (UNLP), Sandra Mendez (LRZ – Alemania), Dolores Rexachs (UAB – España), Emilio Luque (UAB – España), Marcelo Naiouf (UNLP), Armando De Giusti (UNLP)……………………………………... 1 H-RADIC: The Fault Tolerance Framework for Virtual Clusters on Multi-Cloud Environments. Ambrosio Royo (UAB – España), Jorge Villamayor (UAB – España), Marcela Castro-León (UAB – España), Dolores Rexachs (UAB – España), Emilio Luque (UAB – España)…... 7 Cloud Robotics: Vehículo autónomo conectado a AWS. Manuel Costanzo (UNLP), Marcos Boggia (UNLP), Ismael Rodríguez (UNLP), Armando De Giusti (UNLP-CONICET)……………….. 14 SMOTE-BD: An Exact and Scalable Oversampling Method for Imbalanced Classification in Big Data. María José Basgall (UNLP-CONICET), Waldo Hasperué (UNLP-CIC), Marcelo Naiouf (UNLP), Alberto Fernández (UGR - España), Francisco Herrera (UGR – España)…………………. 23 Cloud Médicos – Privacidad, integridad y estandarización – Estado actual. Ezequiel Velurtas (UNLP), Patricia Bazán (UNLP)……………………………………………………………………... 29 Automatic and early detection of the deterioration of patients in Intensive and Intermediate Care Unit: technological challenges and solutions. Javier Balladini (UNCOMA), Pablo Bruno (UNCOMA), Rafael Zurita (UNCOMA), Cristina Orlandi (Hospital Francisco Lopez Lima)………... 36 Cloud Computing application model for online recommendation through fuzzy logic system. Elham Shojaei (UAB – España), Emilio Luque (UAB – España), Dolores Rexachs (UAB – España), Francisco Epelde (Hospital Universitari Parc Tauli – España)………………………………………. 46 Fire propagation visualization in real time. Sigfrido Waidelich (UNRN), Karina Laneri (Centro Atómico Bariloche-CONICET), Mónica Denham (UNRN-CONICET)………………………………. 53 Job Schedulers for Machine Learning and Data Mining algorithms distributed in Hadoop. Félix Martin Cornejo (UNSJ), Alejandro Zunino (UNICEN), María Murazzo (UNSJ)………………. 62 Predicción de nubes a corto plazo en una planta solar a partir de datos históricos. Rafael Caballero (UCM – España), Luis F. Zarzaleja (CIEMAT – España), Álvaro Otero (UCM – España), Luis Piñuel (UCM – España), Stefan Wilbert (DLR – Alemania)……………………………………... 69 Treatment of Massive Metagenomic Data with Graphs. Cristobal R. Santa María (UNLAM), Romina A. Rebrij (UBA), Victoria Santa María (UBA), Marcelo A. Soria (UBA)…………………….. 77 Análisis Simbólico de Datos: una potente herramienta para Big Data. Adriana Mallea (UNSJ), Myriam Herrera (UNSJ), María Inés Lund (UNSJ)………………………………………………….. 81 Análisis de las topologías IoT en Entornos Fog Computing mediante simulación. Javier Sillero Ros (UNSJ), Nelson Rodríguez (UNSJ), Matías Montiveros (UNSJ), María Murazzo (UNSJ), Fabiana Piccoli (UNSL), Miguel Méndez Garabetti (UCH)………………………………… 90 Implementing cloud-based parallel metaheuristics: an overview. Patricia González (UDC – España), Xoan C. Pardo (UDC – España), Ramón Doallo (UDC – España), Julio R. Banga (IIM_CSIC – España)………………………………………………………………………………… 101 Cloud Computing, Big Data y las Arquitecturas de Referencia para la Industria 4.0. Nancy Velásquez (UNLP), Elsa Estévez (UNS), Patricia Pesado (UNLP)…………………………………… 111 Orquestación de servicios para el desarrollo de aplicaciones para big data. María Murazzo (UNSJ), Miguel Guevara (UNSJ), Martín Tello (UNSJ), Nelson Rodríguez (UNSJ), Fabiana Piccoli (UNSL), Mónica Giménez (UNLAR)………………………………………………………………….. 118 Processing Collections of Geo-Referenced Images for Natural Disasters. Fernando Loor (UNSL- CONICET), Verónica Gil-Costa (UNSL-CONICET), Mauricio Marín (USACH – Chile)……………. 125 Secure Computer Network: Strategies and Challengers in Big Data Era. Mercedes Barrionuevo (UNSL), Mariela Lopresti (UNSL), Natalia Miranda (UNSL), Fabiana Piccoli (UNSL)……………. 133 Adjustement of a simulator of a complex dynamic system with emphasis on the reduction of computational resources. Mariano Trigila (UCA), Adriana Gaudiani (UNGS), Emilio Luque (UAB – España)……………………………………………………………………………………………... 142 Towards Elastic Virtual Machine Placement in Overbooked OpenStack Clouds under Uncertainty. Fabio López-Pires (PTI – Paraguay), Benjamín Barán (UNE – Paraguay), Carolina Pereira (UNE – Paraguay), Marcelo Velázquez (UNE – Paraguay), Osvaldo González (UNE – Paraguay)……………………………………………………………………………………………... 148 Análisis funcional de la pila de software de E/S paralela utilizando IaaS Diego Encinas1, Sandra Mendez2, Dolores Rexachs3, Emilio Luque3, Marcelo Naiouf1, and Armando De Giusti1 1Informatics Research Institute LIDI, CIC’s Associated Research Center. National University of La Plata, 50 y 120, La Plata, 1900, Argentina. {dencinas, mnaiouf, degiusti}@lidi.info.unlp.edu.ar 2High Performance Systems Division, Leibniz Supercomputing Centre (LRZ), Boltzmannstr. 1, Garching near Munich, 85748, Germany sandra.mendez@lrz.de 3Computer Architecture and Operating Systems Department. Universitat Autònoma de Barcelona. Edifici Q Campus UAB. Bellaterra, 08193, Spain {dolores.rexachs, emilio.luque}@uab.es Abstract Las operaciones de Entrada/Salida en los centros de supercomputación siguen siendo un cuello de botella para el procesamiento en paralelo. Esto provoca que la capacidad de procesamiento de los distintos nodos que componen estos centros se vea limitada. Por este motivo, en el presente trabajo se propone estudiar y evaluar el rendimiento de las principales operaciones paralelas de E/S. Las ejecuciones se realizan utilizando dos tipos de clústeres(fı́sico y virtual), empleando benchmarks especı́ficos de E/S y sistemas de archivos. Además, se propone diseñar, desarrollar e incorporar pequeñas secciones de código a algunas de las fun- ciones más importantes invocadas durante la ejecución de los benchmarks, de manera de obtener medidas de tiempo para cuantificar la ejecución en los distintos puntos del sistema de software de E/S. Keywords: Cloud Computing, Pila de Software de E/S, PVFS2, Instrumentación de Código 1 Introducción Los actuales sistemas de HPC proporcionan cada vez mayor capacidad de cómputo debido al rápido avance de las tecnologı́as de procesadores. Ese avance no es proporcional en el área de almacenamiento. Para re- ducir la diferencia entre el rendimiento computacional y el de almacenamiento, los actuales sistemas de E/S utilizan hardware de alto rendimiento por medio de redes de almacenamiento de alta velocidad y sistemas de discos en RAID para proporcionar E/S paralela. Para gestionar el hardware de E/S se usa la pila de software que está compuesta por capas que gestionan los diferentes módulos de la arquitectura. La Figura 1 muestra dos visiones del sistema de E/S, la infraestructura hardware y de la pila de software, el rendimiento del sistema depende de la carga de trabajo (patrones de E/S de las aplicaciones) y de la configuración del sistema. Existe una gran variabilidad en el comportamiento global del sistema dependiendo de la configuración y de los patrones de acceso a la E/S generados por las aplicaciones, observar el impacto de la configuración del sistema requiere el uso de sistemas rápidamente reconfigurables [1]. Una operación de E/S debe atravesar la estructura de la pila de software para escribir/leer a/desde los dispositivos. El encargado de gestionar el acceso a los datos es el sistema de ficheros, en HPC para con- seguir el paralelismo a nivel de E/S, se usan sistemas de ficheros paralelos. Cuando una aplicación se está ejecutando y realiza una operación de E/S, las librerı́as de E/S reciben la operación e interaccionan con el sis- tema de ficheros. Este tipo de sistemas multicapas trae una complejidad adicional que está relacionado con el análisis de rendimiento y de funcionalidad de toda la pila de software. Una de las técnicas para evaluar el rendimiento del Sistema de E/S a nivel de libreria es el uso de benchmarks especı́ficos como IOR, BT-IO, Mad- bench2, entre otros que generan diferentes patrones de acceso[2]. Para poder explicar el rendimiento ob- servado se pueden utilizar herramientas de análisis de rendimiento para HPC, pero la mayoria de las her- ramientas que permiten analizar el rendimiento de la E/S lo hacen a nivel MPI-IO y de POSIX-IO. Por lo cual no es posible obtener información sobre cómo interactúan todas las capas de la pila de SW de E/S. Entender la interaccion entre las capas de la pila de software es importante no solo para explicar el compor- tamiento observado, sino tambien para detectar cuellos de botellas y proponer tecnicas de optimizacion. Ade- mas, este tipo de informacion es fundamental para modelar y simular configuraciones del sistema de E/S para poder evaluar el impacto de las diferentes capas VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 1 Figure 1: Sistema de HPC: infraestructura y pila de software de E/S sin alterar sistemas en produccion. En este artı́culo se presenta un análisis funcional de pila de software de E/S, por medio de la instru- mentación de código en las capas de MPI-IO y del sistema de ficheros paralelo utilizando el servicio IaaS de Amazon. Para identificar las diferentes funciones que interactúan se ha optado por una técnica de instru- mentación de código fuente en la capa MPI-IO y del sistema de fichero paralelo. Se ha seleccionado una plataforma Cloud, para desplegar un clúster de HPC y configurar la pila de software con todas las modifi- caciones necesarias. Se ha optado por una plataforma IaaS debido a que los sistemas de I/O en clusters fisicos requieren permisos de administrador y cualquier cam- bio afecta a todos los usuarios del cluster. Además, se pueden evaluar varias configuraciones de E/S de manera más rápida y practica sin afectar el normal funcionamiento de un sistema de HPC en producción. El trabajo está organizado de la siguiente manera, en la Sección 2 se presentan los conceptos relacionados al software utilizado. En la Sección 3 se describen las capas de la pila de software elegidas para explicar el trabajo. La Sección 4 muestra los experimentos real- izados y los resultados encontrados. Finalmente, en la Sección 5 se presentan las conclusiones y trabajos futuros. 2 Conceptos relacionados En esta sección se introducen algunos conceptos básicos relacionados a la pila de software de E/S. 2.1 Middleware La Interfaz de Pasaje de Mensajes (MPI) es un sistema estandarizado y portable diseñado por un grupo de investigadores tanto del sector académico como del industrial para ser utilizado en una amplia variedad de arquitecturas de cómputo paralelo. Mientras que MPI-IO fue desarrollado en el Laboratorio Watson de IBM para proveer soporte de E/S paralela para MPI. Los llamados de funciones de MPI-IO son muy sim- ilares a los de MPI, escribir archivos MPI es seme- jante a enviar mensajes MPI y leer archivos MPI es parecido a recibir mensajes MPI. En este trabajo se utilizó MPICH que es una implementación de alto rendimiento y ampliamente portátil del estándar MPI. MPICH [3] está siendo actualmente distribuido como software abierto, con una licencia libre y gratuita. Ha sido probado en múltiples plataformas, incluyendo Linux (en IA32 y x86-64), Mac OS/X (PowerPC e Intel), Solaris (32 y 64 bits) y Windows. 2.2 Benchmarks Los benchmarks están diseñados para imitar un tipo particular de carga de trabajo en un componente o sis- tema. Los benchmarks sintéticos lo hacen creando programas especiales para imponer la carga de trabajo en el componente, mientras que los benchmarks de aplicación ejecutan programas del mundo real sobre el sistema. Los benchmarks de aplicación suelen ofrecer una mejor medición del rendimiento real de un sis- tema determinado, pero los sintéticos son útiles para probar componentes individuales, como un disco duro o un dispositivo de red. Idealmente, los benchmarks sólo deberı́an sustituir a las aplicaciones reales si la aplicación no está disponible o es demasiado difı́cil o costosa de ejecutar en un procesador o sistema deter- minado. Se ha optado por dos de los benchmarks de E/S más populares para evaluar los rendimientos de las operaciones paralelas de E/S en las que se centrará este trabajo: uno sintético, conocido como IOR, y otro de aplicación, llamado BTIO. 2.3 Sistemas de Archivos Paralelos Al constituir un clúster de cómputo de alto rendimiento, se tienen tres categorı́as principales de sistemas de archivos: NFS, los sistemas de red de área de almacenamiento (SAN) y los sistemas de archivos paralelos. El primero suele ser considerado fácil de VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 2 utilizar, pero el servidor NFS puede ser un lugar de fallo crı́tico y NFS no es correctamente escalable a través de grandes clústeres. En cambio, entre las principales ventajas que puede proveer un sistema de archivos paralelo se puede men- cionar un espacio de nombre global, escalabilidad y la capacidad de distribuir grandes archivos a través de múltiples nodos en un entorno de clúster, haciendo que un sistema de archivos de esta clase sea muy apropiado para subsistemas de E/S en HPC. Generalmente, un sistema de archivos paralelo implica un servidor de metadatos que contiene información sobre los datos en los nodos de E/S. Algunos sistemas utilizan un servidor particular para los metadatos, mientras otros distribuyen la funcionalidad del servidor de metadatos a través de los nodos de E/S. Algunos ejemplos de sis- temas de archivos paralelos para clústeres de cómputo de alto rendimiento sonPVFS y Lustre. En este trabajo se ha optado por PVFS2 que es so- portada por la Universidad Clemson y el Laboratorio Argonne. Aunque, puede mencionarse que Clemson desarrolló en 2008 una nueva rama llamada OrangeFS que incluye extensiones para soportar grandes direc- torios de pequeños archivos, mejoras de seguridad y capacidades de redundancia. Hacia el año 2011 Or- angeFS se convirtió en la lı́nea de desarrollo principal, aunque la mayorı́a de las actualizaciones son aplica- bles a ambas ramas [4]. 3 Análisis funcional de la pila de soft- ware Desde la petición por parte de la aplicación de usuario hasta que la misma llega a realizarse fı́sicamente so- bre el disco, es importante determinar los programas y módulos que utilizan cada una de las operaciones, esto permitirá decidir dónde incluir código adicional para determinar el tiempo de ejecución de las distintas funciones ante las diferentes operaciones de E/S. En la Figura 2 se muestra un esquema de la estructura analizada para realizar lo antes dicho. En la Figura 2 se puede ver la estructura interna de MPICH con respecto a su implementación de MPI- IO y su vı́nculo con el sistema de archivos del clus- ter. ROMIO es una implementación portable y de alto rendimiento de MPI-IO, optimizada para patrones de acceso no contiguos, los cuales son comunes en las aplicaciones paralelas. Un componente clave de ROMIO, que permite una implementación tan portable de MPI-IO, es una capa interna de dispositivo ab- stracto para E/S paralela llamada ADIO (Abstract- Device Interface for I/O). Es el componente ADIO el que contiene los módulos que incluyen las funciones que envı́an las peticiones de E/S de las aplicaciones de usuario hacia el sistema de archivos paralelo. Es decir, la capa ADIO Common contienen las funciones co- munes a todos los sistemas de archivos. Mientras que AD PVFS contienen las funciones para implementar la interfaz MPI-IO en el sistema de archivos PVFS2. 3.1 Instrumentación La instrumentación insertada en el código de los com- ponentes de MPICH y del sistema de ficheros PVFS2 [5] ha sido utilizada para identificar las funciones invo- cadas durante la ejecución de una aplicación paralela. En particular las interacciones de alguna funciones que son ejecutadas durante el procesamiento de deter- minadas solicitudes como son las de apertura / cierre, escritura y lectura de archivos. En la Figura 3 se muestran, por ejemplo, las fun- ciones en la capa de ROMIO y de System Interface de PVFS2, detectadas durante la ejecucion de IOR y BT-IO clase FULL. 4 Evaluación Experimental Plataformas como Amazon ofrecen distintos tipos de instancias de acuerdo al tipo de servicio que se adquiera. En este caso se desplegó un clúster de HPC haciendo uso del servicio gratuito de AWS. 4.1 Entorno Experimental Existen varias herramientas para crear clústeres vir- tuales de manera automática en la plataforma EC2 de Amazon, algunas son StarCluster o CfnCluster. Pero en este caso era necesario desplegar un clúster de forma manual y con una pila de software instru- mentada ya que el objetivo del trabajo es un análisis detallado de las diferentes capas que comprenden el sistema. En la Figura 4 se pueden ver los entornos fı́sicos y virtuales con las respectivas configuraciones. Se creó un clúster con 5 nodos: un master y 4 nodos de cómputo. La incorporación de PVFS2 obligatoria- mente debe ser llevada a cabo antes de instalar MPICH o los benchmarks para que estos programas puedan re- conocerlo. Tanto en el clúster fı́sico como en el virtual se utilizó SSH para ejecutar comandos e implementar las configuraciones. Se optó por asignar cuatro nodos de E/S o servidores de datos y un servidor de metadatos o storage. La descripción de las caracterı́sticas de los clústeres se puede ver en la Tabla 1. 4.2 Aplicación Los experimentos fueron diseñados para analizar el comportamiento del sistema frente a la escritura y lec- tura de tres tamaños de archivos: 1GB, 2GB y 4GB. Las razones de restringir a estos tamaños se deben al objetivo de no prolongar demasiado los tiempos de ejecución y al mismo tiempo no exceder el limitado espacio de almacenamiento ofrecido por el entorno del clúster virtual para almacenar datos. Para conseguirlo VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 3 Figure 2: Capas analizadas de la pila de software de E/S Figure 3: Funciones identificadas en la capa de MPI-IO y PVFS2 del lado del cliente Figure 4: Clusters Fı́sicos (figura en la izquierda) y Virtuales (figura en la derecha) VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 4 Table 1: Caracterı́sticas de los clústeres utilizados Componente Clúster Fı́sico Clúster Virtual Procesador Xeon, i7, AMD Xeon RAM (por nodo) 8 GiB 1 GiB Red de almacenamiento 1 Gbps Ethernet Baja a Moderada Número de Data Server 4 4 Número de MetaData Server 1 1 Librerı́a MPI MPICH versión 3.2.1 MPICH versión 3.2.1 Sistema de Archivos Global PVFS 2 versión 2.8.2 PVFS 2 versión 2.8.2 Sistema Operativo Red Hat Enterprise Linux Red Hat Enterprise Linux simplemente hubo que utilizar los parámetros adecua- dos en el caso de IOR. La lı́nea de comandos utilizada fue: mpirun -np NP ./IOR -a $API \ -t $TRANSFER_SIZE -b $BLOCK \ -F -o OUTPUT_FILE En donde: • -np representa el número de procesos MPI • -a establece la interfaz o API de E/S • -t define el tamaño en bytes del buffer de trans- ferencia • -F define que cada proceso trabaja sobre su pro- pio archivo local • -b define el número de bytes contiguos a escribir por proceso • -o se establece el nombre completo del archivo de prueba En el caso de BTIO se utilizó la clase W pero hubo que modificar el código fuente. Puntualmente se reem- plazó la variable niter por el número de iteraciones necesarias para lograr el tamaño de archivo deseado. Ya que la clase seleccionada posee por defecto 200 iteraciones para escribir un archivo de 188 MB. A par- tir de esta relación se puede determinar fácilmente la cantidad de iteraciones requeridas para el tamaño de archivo buscado. En la Tabla 2 se pueden ver las con- figuraciones para la utilización de los dos benchmarks. 4.3 Resultados Para mostrar los resultados se han tomado como ejem- plo la capa AD PVFS2 que contiene las funciones para implementar la interfaz MPI-IO en PVFS2 y en este caso las funciones ADIOI PVFS2 WriteContig() y ADIOI PVFS2 ReadContig(). También la capa Sys- tem Interface que es una interfaz del lado cliente que permite la manipulación de los objetos del sistema de archivos y en particular las funciones PVFS sys write() y PVFS sys read(). En la Figure 5: Métricas de IOR Figura 5 se pueden ver los tiempos obtenidos con el benchmark IOR. En la Figura 6 se pueden ver los tiempos obtenidos con el benchmark BTIO. Las diferencias con el clúster fı́sico se deben principalmente a las distintas presta- ciones de hardware conseguidas en los dos entornos de ejecución pero siguen la misma tendencia. A pesar que los recursos hardware del clúster fı́sico son ligeramente mejores a los del clúster virtual, en todos los casos el virtual presenta un rendimiento con- siderablemente superior. Se puede tomar esta situación como confirmación de que la velocidad de red es mu- cho más inferior en el clúster fı́sico que en el virtual. Sumado al poco peso que poseen los accesos efectivos a disco sobre el tiempo de ejecución total del bench- mark, provoca que el incremento en la complejidad de la red supera el beneficio que implica poder realizar múltiples lecturas y escrituras simultáneas en disco en lugar de hacerlas sólo de a una por vez. Finalmente, se puede observar que con el clúster virtual se dispone de un sistema dedicado con el cual es posible realizar un análisis detallado de la pila de software de E/S. Esto permite definir la importancia temporal de los módulos o funciones de la pila rela- cionados al flujo de datos en los servidores de E/S VI Jornadas de Cloud Computing & Big Data (JCC&BD2018) 5 Table 2: Configuraciones seleccionadas para IOR y BTIO Parámetro BTIO IOR API para E/S (Interfaz) MPI-IO MPI-IO Tamaño del buffer de transferencia 0,94 MB para 1GB 128 MiB para 1GiB 0,94 MB para 2GB 128 MiB para 2GiB 0,94 MB para 4GB 128 MiB para 4GiB Tamaño del bloque de datos a escribir por proceso 256 MB para 1 GB 256 MiB para 1GiB 512 MB para 2GB 512 MiB para 2GiB 1 GB para 4GB 1 GiB para 4GiB Figure 6: Métricas de BT-IO como en los servidores de metadatos. La relevancia de conseguir medidas de tiempo en los componentes de la pila es fundamental ya que como se ha expli- cado anteriormente, distintos patrones de E/S o cargas de trabajo provocarán que el sistema se comporte de diferente manera. 5 Conclusión El trabajo realizado en Cloud ha permitido identificar las funciones principales en la capa de MPI y del sis- tema de ficheros paralelo PVFS2 con mayor impacto en el comportamiento del sistema de E/S. Las métricas obtenidas en el clúster virtual no son similares a las en- contradas en el clúster fı́sico. Las diferencias se deben principalmente a las distintas prestaciones de hardware conseguidas en los dos entornos de ejecución. Sin embargo, los experimentos demuestran que se puede utilizar el entorno cloud para modificar y medir en el sistema ya que las medidas obtenidas representan el comportamiento de la pila. Para poder usar esa información y esta técnica en sistemas en producción a nivel de usuario, se está traba- jando en la implementación de un trazador (wrapper) para capturar las funciones de interés usando instru- mentación dinámica, de manera que no sea necesario recompilar ninguna capa de la pila de software de E/S. Agradecimientos This research has been supported by the MICINN/MINECO Spain under contracts TIN2017- 84875-P. References [1] P. Gomez-Sanchez, D. Encinas, J. Panadero, A. Bezerra, S. Mendez, M. Naiouf, A. D. Giusti, D. Rexachs del Rosario, and E. Luque, “Using AWS EC2 as Test-Bed infrastructure in the I/O sys- tem configuration for HPC applications,” Journal of Computer Science & Technology, vol. Volumen 16, 11/2016 2016. [2] R. Thakur, W. Gropp, and E. Lusk, “Data Sieving and Collective I/O in ROMIO,” in Proceedings of the The 7th Symposium on the Frontiers of Mas- sively Parallel Computation, FRONTIERS ’99, (Washington, DC, USA), pp. 182–, IEEE Com- puter Society, 1999. [3] MPICH, “Mpich overview,” 2018. [4] OrangeFS, “The orangefs project,” 2018. [5] T. PVFS2, “PVFS 2 File System Semantics Docu- ment,” tech. rep., PVFS Development Team, 2015. VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 6 H-RADIC: The Fault Tolerance Framework for Virtual Clusters on Multi-Cloud Environments Ambrosio Royo, Jorge Villamayor, Marcela Castro-León, Dolores Rexachs and Emilio Luque CAOS – Computer Architecture and Operating Systems, Universitat Autònoma de Barcelona, Bellaterra (Cerdanyola del Vallès), Barcelona 08193, Spain pabloambrosio.royo@e-campus.uab.cat, {jorgeluis.villamayor,marcela.castro,dolores.rexachs,emilio.luque}@uab.cat Abstract Even though the cloud platform promises to be reliable, several availability incidents prove that they are not. How can we be sure that a parallel application finishes the execution even if a site is affected by a failure? This paper presents H-RADIC, an approach based on RADIC architecture, that executes a parallel application in at least 3 different virtual clusters or sites. The execution state of each site is saved periodically in another site and it is recovered in case of failure. The paper details the configuration of the architecture and the experiments results using 3 virtual clusters running NAS parallel applications protected with DMTCP, a very well-known distributed multi-threaded checkpoint tool. Our experiments show that the execution time was increased between a 5% to 36% without failures and 27% to 66% in case of failures. Keywords: Cloud, Fault-Tolerance, High- Performance Computing, RADIC. 1. Introduction We know that there aren’t any computers small or big safe from failures, we have seen big cloud providers fail, Windows Azure had availability problems for the Olympic Games in 2012 [1], Amazon Web Services had been affected from the extreme weather [2] and by human errors [3], also Google Cloud Platform was attacked by a low-level software [4] or even Oracle Cloud’s wide network error issue that was fixed by restarting the network [5]. Since communication with a cloud can be lost due to a wide range of possible errors, also causes loss of computational resources, power consumption and money; different authors have worked to prevent failures when there are parallel applications with message passing running on cloud environments; in the work of Villamayor et. al [6] where they propose Resilience as a Service (RaaS), a Fault Tolerant (FT) framework for High Performance Computing (HPC) applications running in a cloud, and Gomez et. al [7] propose a multi-cloud FT framework that was capable to continue working if any of the cloud sites fail and delivered the results on the due date. We have studied the previous work and took advantage of the elasticity (easy provisioning of “hardware”) of cloud computing. We propose to take the Redundant Array of Distributed Independent Controllers (RADIC) architecture and hierarchically scale it up to be applied to a fully automated, elastic FT framework for virtual clusters running on different cloud environments. Capable to protect applications running in private or public clouds from fatal fails like: loss of nodes during execution and loss of communication between clouds. The next section presents some related state of the art work and the description of the RADIC architecture. In section 3, we will describe an overall detail of the H-RADIC architecture, fallowed up by section 4, a summary of the experiments done from the implementation of the H-RADIC architecture, after that section 5 with the conclusions, finishing with future work in section 6. 2. Background In Japan, Bautista-Gomez et. al [8] proposed a low- overhead high-frequency multi-level checkpoint technique, that implement a three level checkpoint scheme that compensates for the overhead of the FT VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 7 by dedicating a thread of execution per node. Another group of IEEE members [9] in the USA, set up an online two-level checkpoint model for HPC, one level deals with logical problems such as transient memory errors and the other one deals with hardware crashes like node fails, contributing with an online solution that determines the optimal checkpoint patterns and doesn’t required the knowledge of the job length in advance. Egwutuoaha et. al [10], from Australia, approached the problem by not relaying on spare node prior of a fail, aiming to reduce the time and cost of the execution on the cloud. And of course, the work of Gomez et. al [7] and Villamayor et. al [6], that we mention in the introduction. 2.1. RADIC Architecture The RADIC architecture is transparent and automatic, therefore the application doesn’t have to be modified to apply it and there is no need of human intervention, also it is elastic since it has the ability to add new nodes whenever one crashes [11]. It consists on implementing FT for message passing applications, by intercepting and masking error which detect and manage errors instead of ending the application. Taking advantage of the hardware redundancy, RADIC needs at least three physical nodes to work so the application doesn’t have to stop and start again. It works with two distributed software RADIC components [12]: Observers and Protectors; there is a protector running in each node and one observer for every process running in the application, as shown in Fig. 1. Additionally, a table named RadicTable is used to store the relation between nodes, observers andprotectors which is updated by the RADIC Components. Observer: When the application is launched, a software instance is created and attached to every processor used in the program, its job is to perform checkpoints and intercept the messages of its processor and send it to the Protector to store it. Protector: It’s in charge to request the observers to perform checkpoints and store the checkpoint files in its own Stable Storage (SS), and also to verify that the node that it’s protecting is working and, in the case, that it fails launch the latest checkpoint. Fig. 1 - RADIC Architecture RADIC defines four functions Protection, Detection, Recovery and Error Masking. Protection: Observer O3 is in charge of monitor Process P3, then O3 gets a Protector TA located in a different node NA. At some point TA will ask O3 to get the state of it process and send it to TA to be stored in TA´s Stable Storage (SS), this is called a checkpoint; checkpoints will be done periodically to keep on saving the state of the processes during a fault free execution. The moment that every T has its neighbor’s checkpoint, the RADIC protection will be in place. Detection: Node NB faults when the process P3 cannot communicate with another process P2 in the same node, that’s when O3 sends the error message to TA. Also, a node faults when there is no communication between nodes, that is, each protector (TA) is in charge of detecting a possible failure in the neighbor Node (NB). Each protector keeps a heartbeat/watchdog protocol with its neighbors Protectors, in this way a fault detection mechanism is implemented; in one hand, the Protector TB is periodically sending heartbeats to TC, and in the other hand, TB is the watchdog of TA, so if TB loses communication with both neighbor protectors, TB will destroy itself because it has been left alone, if TA and TC can’t see TB, then TA will launch the recovery and error masking functions. Based on this function, RADIC needs at least 3 nodes to work properly. Recovery: Protector TA restarts/rolls-back the processes running in NB, using the data saved in the SS from the last checkpoint, if the system has a spare node, the processes will be restarted in it, otherwise the processes are restarted in the node (NA) that has the checkpoint. Error Masking: After the recovery function, when the processes have been restarted, the Observers that got the error message hide the communication error caused from the node failure. The Protector TA sends a message to the affected Observers (O0-1 and O4-5) with the new address where the processes have been recovered, also updates the RadicTable so communications are done as usual. RADIC has been originally designed to protect a parallel application with message passing, recently it has been leveraged to work in cloud environments. In our work we scale up the architecture to be used for parallel application protection, running in several virtual clusters on multiple cloud environments. 3. H-RADIC Architecture We propose a new protection level of RADIC, the Hierarchical RADIC (H-RADIC) architecture, an automated and elastic FT framework that protect a parallel application running in virtual clusters on VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 8 cloud; requires at least three virtual clusters, each one of them protected with the RADIC architecture and located in different geographical sites so they don’t share any of the physical resources, this will allow to identify nodes faults within and between the clusters. The architecture works for parallel applications with a Message Passing Interface (MPI), that is, besides the regular RADIC architecture designed to protect from node fails, H-RADIC will protect applications from crashing in the event of multiple fails; when the virtual nodes fail, the physical nodes that the virtual are mounted on fail and/or whenever there is loss of communication. H-RADIC will perform a diagnostic and then management of the error. Additionally to all the RADIC components, H- RADIC has an extra software component, the proTector of the Cluster (TC); on every cluster, a main node will be defined (controller Node - cN) to create the TC´s, which will be in charge of the communications between clusters, as it’s shown Fig. 2. 3.1. H-RADIC functions The H-RADIC architecture implements the RADIC functions in each cluster, that is, whenever there is a fault, the architecture tries to recover from it by applying the RADIC functions. H-RADIC functions will process the failures when the RADIC functions can’t process them. To guaranty the completion of the execution, H- RADIC transported the RADIC functions to be apply into programs running in multi-clusters environments and depict its functionality in the following functions: Protection: Only while the execution is running fault free, checkpoints will be periodically done. Once that the Protectors (T) have the checkpoint of each of the process, the Cluster Protector (TCY) will be in charge of collecting the updates in the Stable Storage (SS) of every T in the Cluster (CY). Then, TCY must send it to the assigned Cluster Protector TCX located in a different cloud to store the Cluster Checkpoint (multilevel checkpoint) at the Cluster SS. When every TC has a checkpoint of its neighbor C, the H-RADIC protection will be activated. Detection: This function works the same way as the RADIC detection function; TCX is in charge of identifying a possible failure in the neighbor Cluster CY, using a heartbeat/watchdog protocol. If CY does not answer, TCX asks TCZ to verify if there is an error with CY, if TCZ confirms that there is no communication with CY, Recovery and Error Masking functions are triggered. Recovery: Cloud Protector TCK restarts/rolls-back the process running in CL, using the data saved in the cluster SS from the last checkpoint, then TCK checks if there is a spare cluster to lunch the checkpoint in it, otherwise creates new nodes in CK to restart all the processes previously running in the failed CL, then updates the RADIC Tables. Error Masking: After the recovery function, when the processes have been restarted, the Cluster Protector hides the communication errors caused by the cloud failure, the Cluster Protector TCK sends a message to the affected Protectors with the new address where the processes have been recovered, updating the H-RADIC Table and broadcasting this update to every TC in the architecture, then communications will be done as usual. 3.1.1. H-RADIC Recovery function’ options After a fault is detected, the recovery function has two options to restart a checkpoint; the first one checks if there are spare clusters available in another cloud, viewed in Fig. 3, the second one checks if there are spare nodes in the same cloud, as shown in Fig. 4, then the checkpoint files are sent to the nodes that are in the spare cluster. Fig. 2 - H-RADIC Architecture VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 9 Fig. 3 - H-RADIC Recovery function - spare nodes/cluster in another cloud. Fig. 4 - H-RADIC Recovery function - spare nodes/cluster in the same cloud. The main difference between the two restart options is the way to store the checkpoints. In the case that there is a spare cluster available in other cloud (Fig. 3), H-RADIC will be working as usual, but if there are no spare nodes available in a third cloud, the checkpoint will be restarted in the spare nodes of the cloud that has the checkpoint. After the restart, the two clusters (X and Y’ in Fig. 4) will send their checkpoints to Cluster Z and vice versa. When the execution is working like the previous situation and if a new failure rises in one of the clouds, the three clusters will be together in one cloud, as shown in Fig. 5, and henceforth, all the checkpoints will be stored in one cloud storage.Although this situation will leave the execution exposed to the same vulnerabilities, that lead us to develop this type architecture. Such vulnerabilities like failures in the cloud controller, the storage and the physical computer that the virtual nodes are mounted on. This vulnerability will now allow us to be able to guaranty availability. Fig. 5 - H-RADIC Recovery function - spare nodes/cluster in the same cloud and not more clouds left. 4. Experiments To test the architecture, we mounted 3 clusters running on CentOS. Each one of them has a different NAS Parallel Benchmark [13] program compiled with an implementation of MPI named: MPICH [14]. H-RADIC will performing the checkpoints for this experiments in a coordinated approach, using the open source software package: Distributed Multi- Threaded CheckPointing (DMTCP) [15]. Each cluster has 3 nodes and every node have 8 processors, 24 processors per cluster. The DMTCP allows to work with the checkpoints at an application layer of the OSI model, making it perfect for virtualized environments. Also, whenever a checkpoint is done, it automatically compresses it using gzip. 4.1. Pseudocode of H-RADIC Before running the programs, they have to be compiled with the MPI implementation and also the inventory of nodes have to be depicted in the H- RADIC Table (Table 1); it’s been established that each cluster will have a Cluster Protector, this will be the previous row in the table, and it´s expressed as (cluster-1), if the program is in cluster Y, the cluster protector will be cluster X. If the cluster it’s in the first row (cluster X), then cluster protector will be the las row in the table (cluster Z), to complete a full loop. Table 1 - H-RADIC TABLE Cluster Nodes Controller Node 1 clusterX A, B, C A 2 clusterY D, E, F E 3 clusterZ G, H, I G All the logic described in the H-RADIC functions can be summarized in Algorithm 1. Algorithm 1 - H-RADIC pseudocode 1: // FUNCTIONS 2: function protection (program, cluster, ckPTime){ 3: Send the program to the controllerNode in cluster 4: launch dmtcpCoordinator with the program and ckPTime 5: call detection(cluster, ckPTime) 6: while 7: perform checkPoint every ckPTime seconds 8: send checkPoint to (cluster-1) 9: if program ends VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 10 10: broadcast succesfull end to all HRADIC Tables 11: break while 12: } 13: 14: function detection (cluster, ckPTime){ 15: // Goes to the HRADIC Table and takes the next cluster in the table to protect 16: establish watchdog protocol between cluster and (cluster+1) 17: while 18: get heartbeat from (cluster+1) 19: send heartbeat to (cluster-1) 20: if heartbeat/watchdogProtocol fails 21: ask (cluster+2) to establish connection with (cluster+1) 22: if the connection is established 23: nothing happens 24: else if (cluster+2) can't see (cluster+1) 25: recovery(cluster+1, ckPTime) 26: } 27: 28: function recovery (cluster+1, ckPTime){ 29: search for spareCluster in other clouds or in the local cloud 30: inizialize Nodes in spareCluster = Nodes in (cluster+1) 31: send checkPoint files to nodes in spareCluster 32: call errorMasking(spareCluster, cluster+1) 33: // Call the protection fuction again, but this time run the checkpoint instead of the original program 34: call protection(checkPoint,spareCluster,ckPTime) 35: } 36: 37: function errorMasking (spareCluster, cluster+1){ 38: remove (cluster+1) info. in the HRADIC Table 39: add spareCluster info. in the HRADIC Table 40: broadcast the update to all HRADIC Tables in all the clusters 41: } 42: 43: // MAIN 44: // Launch all the protection functions in parallel 45: execute protection(bt.C.16, clusterX, 60) 46: execute protection(lu.C.16, clusterY, 80) 47: execute protection(cg.C.16, clusterZ, 70) 4.2. Results Calculating the optimal checkpoint interval is a controversial subject; for these experiments, all the programs were executed several times, this was done to identify the average time that each node needed to perform a checkpoint and move it to the different nodes and also to the cluster protector. The experiment is measuring the time that it takes the application to finish its execution, in the following cases: 1) the application without applying H-RADIC but performing checkpoints, 2) the application with H-RADIC and without errors or failures and, 3) the application with H-RADIC and an induced error. Then by taking the increase percentage of time in 2) and 3), we got Fig. 6. Fig. 6 - H-RADIC percentage of time overhead. 4.2.1. Overhead Breakdown For the calculation of the overhead, we measured different time variables (as shown in Table 2): the first percentage shown in Fig. 6 is the application running with checkpoints as Eq (1), this time is considered the point of departure from where we are calculating the overhead. 𝑇𝑇𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 = 𝑝𝑝 + (𝑐𝑐𝑐𝑐𝑝𝑝𝑐𝑐 ⋅ 𝑛𝑛) (Eq. 1) In order to establish the RADIC and H-RADIC protection, all the checkpoints needed to be copied to the protector nodes and the cluster protector node respectively. This process is done at the background Eq (2) while the application keeps on executing. This process is represented in Fig. 2, by the checkpoint’s and cluster checkpoint’s lines. Since moving the files take some computational resources, it affects the program execution time, although its not directly in the critical path. 𝑏𝑏𝑐𝑐𝑏𝑏𝑏𝑏𝑏𝑏 = 𝑐𝑐ℎ𝑐𝑐𝑝𝑝𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ⋅ 𝑝𝑝𝑏𝑏𝑝𝑝𝑐𝑐𝑘𝑘𝑐𝑐𝑐𝑐 (Eq. 2) The Running Time percentage with H-RADIC without failure in Fig. 6 is the time that the application took to execute considering the RADIC and H-RADIC protection in Eq (3). 𝑇𝑇𝐻𝐻−𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 = 𝑇𝑇𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 + 𝑏𝑏𝑐𝑐𝑏𝑏𝑏𝑏𝑏𝑏 (Eq. 3) Finally, the third experiment, the Running Time percentage with H-RADIC with failure in Fig. 6 is the time that took the framework to restart the execution in a spare cluster Eq (4), considering the time to move VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 11 the checkpoint files and the time to restart the execution. 𝑇𝑇𝐻𝐻−𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 & 𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹𝐹 = 𝑇𝑇𝐻𝐻−𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 + 𝑚𝑚𝑝𝑝𝑚𝑚𝑘𝑘 + 𝑏𝑏𝑘𝑘𝑒𝑒𝑐𝑐𝑒𝑒𝑏𝑏𝑐𝑐 (Eq. 4) Table 2 - Time's variables description. Variable Description Tckpt Execution time with checkpoints p Program execution time ckpt Time to create a checkpoint n Number of checkpoints per execution TH-RADIC Execution time with H-RADIC without failures ckptSize Checkpoint size in MB protect Time to move the ckpt to establish H-RADIC protection. bkgrd Unpredictable time impact on p TH-RADIC &Failure Execution time with H-RADIC with failure move Time to move the checkpoint files to the spare cluster restart Time to restart the application In general, we can appreciate that the overhead caused by implementing H-RADIC and having 0 failures, does not really increase the program execution time, however if a failure rises, we can see the overhead percentage from as low as 22% to as high as 66% in time. This bottleneck is mainly due because of the time taken to move the checkpoint to the nodes in the spare cluster, since the time to restart the application once that the checkpoints where in the spare cluster is negligible. 5. Conclusion The proposal in this paper is based on the RADIC architecture, that is capable of assure a successful execution of the application even when failures occur. We analyzed every component of the framework and identified the improvement areas. By translating every RADIC concept to H-RADIC and taking them to a virtual multi-clusters level, we develop a FT framework capable of overcome fatal fails like the loss of a full site.The H-RADIC architecture fully implements RADIC and the new benefits from H-RADIC and it allows us to guarantee the completion of the execution in the event of errors like, loss of nodes, loss of communication between sites or general fails in several sites. It’s a solution that can be implemented in virtual and non-virtual environments. Considering that a traditional FT system, that consist on having one or two copies of a full site in another one, waiting for the main site to fail, with H- RADIC, by distributing the work load in different sites, the need of resources is way less that the ones needed for the traditional FT system. Finally, the experiments show us that the overhead in most of the programs is reasonable and proves the theory behind the concept. 6. Future Work Test the architecture implementing semi coordinated and no-coordinated checkpoints, to run a single program in several virtual clusters at the same time. Develop the architecture in a way that if the performance is decreasing, it can request more resources live to the cloud provider, to assure competition before the due date. Implement a mechanism that accelerates the transfer rate, by improving I/O, use incremental checkpoints and/or compress [16] the checkpoints even more. Acknowledgements The first author acknowledges the support from the National Science and Technology Council of Mexico (Consejo Nacional de Ciencia y Tecnología, CONACYT) that sponsored through a scholarship, and special thanks to all the team at CAOS and the UAB. References [1] B. Darrow, “Windows Azure outage hits Europe,” 26-Jul-2012. [Online]. Available: https://gigaom.com/2012/07/26/windows-azure- outage-hits-europe/. [Accessed: 30-Mar-2018]. [2] O. Malik, “Severe storms cause Amazon Web Services outage,” 29-Jun-2012. [Online]. Available: https://gigaom.com/2012/06/29/some-of- amazon-web-services-are-down-again/. [Accessed: 30-Mar-2018]. [3] “Summary of the Amazon S3 Service Disruption in the Northern Virginia (US-EAST-1) Region,” Amazon Web Services, Inc. [Online]. Available: https://aws.amazon.com/message/41926/. [Accessed: 31-Mar-2018]. [4] “Google Cloud Status Dashboard.” [Online]. Available: https://status.cloud.google.com/incident/storage /17002. [Accessed: 31-Mar-2018]. [5] J. Hult, “Oracle Cloud - unplanned outage - November 7, 2017,” JonathanHult.com, 17- Nov-2017. . [6] J. Villamayor, D. Rexachs, and E. Luque, “RaaS: Resiliance as a Service – Fault Tolerance for High Performance Computing in Clouds,” p. Accepted, Mar. 2015. VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 12 [7] A. Gómez, L. M. Carril, R. Valin, J. C. Mouriño, and C. Cotelo, “Fault-tolerant virtual cluster experiments on federated sites using BonFIRE,” Future Gener. Comput. Syst., vol. 34, pp. 17–25, May 2014. [8] L. Bautista-Gomez, S. Tsuboi, D. Komatitsch, F. Cappello, N. Maruyama, and S. Matsuoka, “FTI: High Performance Fault Tolerance Interface for Hybrid Systems,” in Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis, New York, NY, USA, 2011, p. 32:1–32:32. [9] S. Di, Y. Robert, F. Vivien, and F. Cappello, “Toward an Optimal Online Checkpoint Solution under a Two-Level HPC Checkpoint Model,” IEEE Trans. Parallel Distrib. Syst., vol. 28, no. 1, pp. 244–259, Jan. 2017. [10] I. P. Egwutuoha, S. Chen, D. Levy, B. Selic, and R. Calvo, “Cost-oriented proactive fault tolerance approach to high performance computing (HPC) in the cloud,” Int. J. Parallel Emergent Distrib. Syst., vol. 29, no. 4, pp. 363– 378, Jul. 2014. [11] L. Fialho, G. Santos, A. Duarte, D. Rexachs, and E. Luque, “Challenges and Issues of the Integration of RADIC into Open MPI,” in Recent Advances in Parallel Virtual Machine and Message Passing Interface, Springer, Berlin, Heidelberg, 2009, pp. 73–83. [12] M. Castro-León, H. Meyer, D. Rexachs, and E. Luque, “Fault tolerance at system level based on RADIC architecture,” J. Parallel Distrib. Comput., vol. 86, pp. 98–111, Dec. 2015. [13] “NAS Parallel Benchmarks,” NASA Advanced Supercomputing Division. [Online]. Available: https://www.nas.nasa.gov/publications/npb.html . [Accessed: 23-May-2018]. [14] “MPICH | High-Performance Portable MPI,” MPICH. [Online]. Available: https://www.mpich.org/. [Accessed: 02-Jun- 2018]. [15] J. Ansel, K. Arya, and G. Cooperman, “DMTCP: Transparent checkpointing for cluster computations and the desktop,” in 2009 IEEE International Symposium on Parallel Distributed Processing, 2009, pp. 1–12. [16] D. Tao, S. Di, X. Liang, Z. Chen, and F. Cappello, “Improving Performance of Iterative Methods by Lossy Checkponting,” ArXiv180411268 Cs, Apr. 2018. VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 13 CLOUD ROBOTICs: Vehículo autónomo conectado a AWS Manuel Costanzo1, Marcos Boggia1, Ismael Rodríguez1 and Armando De Giusti1,2 1 Instituto de Investigación en Informática LIDI (III-LIDI), Facultad de Informática, Universidad Nacional de La Plata. 2 Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET), Argentina. {mcostanzo, mboggia, ismael, degiusti}@lidi.info.unlp.edu.ar Resumen El trabajo desarrollado presenta un avance de la publicación realizada en el XXIII Congreso Argentino de Ciencias de la Computación (CACIC 2017), con título “Cloud Robotics: Auto Rover 4WD y Cuadricóptero controlados remotamente desde AWS” [1], en el cual se incorporan algoritmos para procesamiento y reconocimiento de imágenes, algoritmos para simulación y determinación de ruta óptima al destino establecido, algoritmos para detección de obstáculos a evitar y espacios transitables, con bajo costo computacional. Se presenta el despliegue de un sistema multi-robot, compuesto por un chasis de auto Rover 4WD con cámara de video y sensores integrados, como así también de una cámara aérea fija (simulando la captura de imágenes desde un cuadricóptero no tripulado – Drone), conectados al Cloud público de Amazon Web Services (AWS). Asimismo, se detallan los prototipos desarrollados, el protocolo de comunicación utilizado con el servicio de AWS IoT, y los algoritmos implementados para efectuar el control remoto del vehículo de cuatro ruedas no tripulado, con el fin de llegar a un destino de forma autónoma. Palabras claves: Autonomous Cars, Amazon Web Services, Cloud Robotics, Internet of Things, Protocolo MQTT, Herramienta de programación visual Node-RED. 1. Introducción Los avances en el paradigma de Cloud Computing han provocado un factor disruptivo de las TI en la industria tecnológica. Según el Instituto Nacional de Estándares y Tecnologías del Departamento de Comercio de los EEUU (NIST), como en varias publicaciones de diversos autores, se ha definido a Cloud Computing como: “un paradigma informático de cómputo distribuido, que proporciona grandes conjuntos de recursos virtuales (como ser hardware, plataformas de desarrollo, almacenamiento y/o aplicaciones), fácilmente accesibles y utilizables por medio de una interfaz de administración web. Estos recursos son proporcionados como servicios (del inglés, “as a service”) y pueden ser dinámicamente reconfigurados para adaptarse a una carga de trabajo variable (escalabilidad), logrando una mejor utilización y evitando el sobre o sub dimensionamiento (elasticidad). El acceso a los recursos se realiza bajo la demanda de los usuarios, en base a un modelo de autoservicio” [2]. El modelo de Cloud Computing presenta las características y beneficios siguientes: recursos disponibles bajo demanda, escalabilidad y elasticidad, aprovisionamiento automático de recursos y autoservicio. Dicho paradigma, brinda al menos tres modelos de despliegue: Cloud Público, Cloud Privado y Cloud Híbrido [3,4]. Por otro lado, considerando la gran influencia de la robótica en la sociedad y ladiversidad de servicios ofrecidos por robots, nos encontramos que los mismos presentan grandes limitaciones en consumo de energía, poder de cómputo, capacidad de almacenamiento, toma de decisiones, tareas cognitivas, etc. En el año 2010, comenzaron a surgir proyectos de investigación (ej: RoboEarth [5]), que integraban las tecnologías de Cloud con los sistemas de robots. Es así, que James Kuffner propone el concepto de Cloud Robotics, basado en combinar las tecnologías de robots con el paradigma de Cloud Computing [6]. La idea de Cloud Robotics, permite por medio de aplicaciones tratar los datos de los componentes de hardware del robot (sensores, actuadores/motores, cámaras, microcontroladores, memoria, etc.), sin importar las limitaciones de cómputo de las placas de desarrollo con microcontroladores y la capacidad de almacenamiento de las mismas [7]. En otras palabras, este concepto permite a los robots obtener resultados de tareas de cómputo intensivo, tales VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 14 como: procesamiento de imágenes, reconocimiento de voz, determinación de rutas, confección de mapas, acciones cognitivas, etc., sin tratamiento local, sino en el Cloud. Este paradigma brinda la capacidad de establecer escenarios para sistemas de multi-robot, donde cada robot se integra de un hardware mínimo; una placa microcontroladora con conectividad WiFi permite al robot comunicarse con el Cloud y otros robots. Los datos de sensores y/o sistemas de adquisición de imágenes se procesan en el Cloud y los actuadores de cada robot llevarán a cabo las operaciones necesarias [8]. El propósito de investigación del presente trabajo es el despliegue de un sistema de multi-robot, inicialmente con dos robots conectados al Cloud Público de Amazon Web Services con el fin de simular el desplazamiento autónomo de un vehículo de 4 ruedas, como así también la gestión de una cámara aérea (simulando la captura de imágenes desde un cuadricóptero no tripulado - Drone), ambos conectados al Cloud público de AWS, donde corre una instancia de EC2 con algoritmos de procesamiento de imágenes que determinan la ruta que debe efectuar el vehículo autónomo para llegar a un destino establecido. Para alcanzar tales objetivos, se determinó el método de comunicación con el Cloud; se registraron los robots como dispositivos o “cosas” en el servicio de AWS IoT [9]; también, se confeccionaron los prototipos de cada robot y se incorporaron los algoritmos para procesamiento y reconocimiento de imágenes, algoritmos para simulación y determinación de ruta óptima al destino establecido, algoritmos para detección de obstáculos a evitar y espacios transitables, con bajo costo computacional. El presente trabajo está estructurado de la manera siguiente: en la Sección 2, se introducen algunos conceptos elementales. A continuación, la Sección 3, presenta los prototipos confeccionados y sus componentes. En la Sección 4, se describe el trabajo experimental realizado. Por último, la Sección 5, expone los resultados obtenidos en relación a esta investigación. 2. Conceptos básicos 2.1. Amazon Web Services Es una plataforma de Cloud Público, que provee “Infraestructura como servicio”; a través de la tecnología de virtualización, provee un gran conjunto de recursos de cómputo, como ser, almacenamiento y capacidad de procesamiento, que pueden ser solicitados a demanda, como así también, se adecuan dinámicamente en tamaño conforme la necesidad del consumidor. Los servicios más destacados de AWS son “Elastic Compute Cloud” (EC2), “Simple Storage Service” (S3) y en nuestro caso utilizaremos los servicios de “AWS Internet of Things” (AWS IoT) [10]. 2.2. Internet of Things (IoT) Es un nuevo paradigma cuya definición deriva de considerar “objetos” o “cosas” conectadas a Internet por medio de redes Wireless, sean estas de tecnología WiFi o 4G LTE, utilizando protocolos de comunicación estándar. Dichas “cosas” pueden considerarse etiquetas de identificación por radio frecuencia (RFID), sensores, actuadores, teléfonos móviles, placas de desarrollos, etc. [11]. 2.3. Protocolo MQTT Message Queuing Telemetry Transport [12] es un protocolo de comunicación ligero, especialmente diseñado para tolerar conexiones intermitentes y reducir los requisitos de ancho de banda de la red. Desde finales del año 2014, fue presentado como un estándar abierto OASIS [13] y se ha convertido en el protocolo por excelencia para IoT. Soporta comunicación segura con TLS. Maneja tres niveles de calidad de servicio: QoS 0: A lo sumo una vez la entrega del mensaje. QoS 1: Al menos una vez la entrega del mensaje. QoS 2: Exactamente una vez la entrega del mensaje. Este protocolo, implementa la comunicación de mensajes por medio de la publicación/suscripción sobre un tópico específico (canal de comunicación), como se puede observar en la figura siguiente: Fig. 1 MQTT: publicación/subscripción de mensajes. 2.4. AWS IoT Es un servicio que proporciona AWS con el fin de conectar, administrar y operar grandes conjuntos de dispositivos o cosas. Ofrece mecanismos de conectividad y seguridad para la transmisión de datos. También, permite que los datos, una vez enviados a la plataforma, puedan ser procesados por las aplicaciones de análisis masivo de datos (Elastic MapReduce), análisis predictivo para aprendizaje automático (Amazon Machine Learning), almacenamiento en bases de datos, etc. [14]. AWS IoT permite conectar fácilmente dispositivos al Cloud y a otros dispositivos. El servicio es compatible con los protocolos: HTTP, WebSockets y MQTT. Amazon ha optado por este último, por ende AWS IoT utiliza la especificación del protocolo MQTT v.3.1.1 con QoS 0 y 1. VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 15 Cada dispositivo debe ser registrado como una “cosa” en AWS IoT, para lo cual se emitirá un certificado y un par de llaves privada-pública para el mismo. El certificado y la llave privada, junto con el certificado de la Entidad Certificantes (CA) de Amazon, deberán ser instalados en el dispositivo con el fin que este pueda conectarse al servicio de AWS IoT previa autenticación necesaria. 2.5. Node-RED Es una herramienta de programación visual, que permite programar algoritmos basados en flujos para IoT, sin la necesidad de escribir código. Provee de un editor de flujo basado en navegador WEB, que brinda una amplia paleta de nodos con diversa funcionalidad. El flujo se confecciona conectando los nodos entre sí. La funcionalidad de cada nodo está desarrollada sobre Node.js. Los flujos creados son almacenados utilizando JSON, lo cual facilita la importación o exportación para compartir los mismos [15]. 3. Prototipos y componentes Para el presente trabajo se ha ensamblado un chasis de robot Rover de cuatro ruedas, que simula un vehículo tradicional de propulsión trasera, es decir, con un motor que ejerce la transmisión del movimiento sobre el eje trasero; también, cuenta con la capacidad de orientar las ruedas delanteras para la dirección del mismo. Igualmente, se incorpora una cámara de video integrada para la detección de obstáculos de forma local al vehículo; y se utiliza una placa micro-controladora de bajo costo y un módulo de expansión compatible, para controlar el motor de la tracción trasera y un sensor de ultrasonido, como se detallan a continuación: 3.1. Chasis Rover 4WD con servo S3003 Es un chasis compuesto de dos capas de acrílico, con un motor de 3 a 24v DC y velocidades con carga de 258 a 347 rpm/min, cuatro ruedas y un servo S3003 que permite direccionar el chasis con giros de hasta 45 grados. Sus dimensiones son: 248mm (L) x 146mm (W) x 70mm (H). Fig. 2 Chasis Rover 4WD. 3.2. Microcontroladora Raspberry Pi 3 Placade bajo costo de desarrollo que brinda conexión WiFi, almacenamiento en memoria MicroSD de 32Gb y soporta alimentación de energía de 5v DC [16]. Fig. 3 Raspberry Pi 3. 3.3. RaspiRobot Board V3 Es un módulo de expansión [17] compatible con Raspberry Pi 3, que brinda la interfaz de conexión entre la placa de desarrollo y los motores; incluye una fuente de alimentación conmutada para el suministro de energía, tanto de la placa Raspberry Pi como de los actuadores. Fig. 4 Raspirobot Board V3. 3.4. Sensor Ultrasónico HC-SR04 El HC-SR04 es un sensor de distancias por ultrasonidos capaz de detectar objetos y calcular la distancia a la que se encuentra en un rango de 2 a 450 cm; cuantifica el delay de la señal, es decir, el tiempo que demora la señal en regresar el eco. Fig. 5 Sensor ultrasónico HC-SR04. 3.5. Raspberry Pi Camera Board Pi Camera V2.1, es un módulo de video alta calidad de 8MP con sensor de imagen Sony IMX219 y un lente de foco fijo. Es capaz de tomar imágenes VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 16 estáticas de 3280 x 2464 pixeles como así también, capturar vídeo de 1080p30, 720p60 y 640x480p90. Fig. 6 Raspberry Pi Camera Board V2.1. 3.6. Fuente conmutada Step-Down Fuente de alimentacióncon regulador Step-Down DC-DC XL4015, que brinda una salida regulada de 1.25 a 36V. Fig. 7 Fuente DC Step-Down. 3.7. Acelerómetro y Giroscopio de 3 ejes EL módulo Acelerómetro MPU tiene un giroscopio de tres ejes con el que podemos medir velocidad angular y un acelerómetro también de 3 ejes con el que medimos los componentes X, Y y Z de la aceleración. Utilizamos el sensor de giroscopio para que el robot pueda posicionarse en la dirección correcta. Fig. 8 Módulo MPU-6050. 4. Trabajo experimental El trabajo de investigación consistió en desarrollar una plataforma web que permita controlar remotamente, vía internet, el sistema de multi-robot que emula un vehículo autónomo de 4 ruedas y una cámara de video de un Drone. El escenario está compuesto por el Robot Rover 4WD, que posee una identificación por medio de la figura geométrica de un “cuadrado blanco con bordes negros”. Así también, se dispone de un punto de destino identificado por la figura geométrica “circulo blanco con bordes negros” para la detección aérea y un “cuadrado blanco con bordes negros” para la detección desde el Robot Rover 4WD. Por otro lado, los objetos obstáculos están identificados por las figuras geométricas de “círculos rojos”. Quien se encarga de identificar cada componente es el Cloud, por medio de las imágenes provenientes de la cámara aérea que emula a un Drone. Una vez identificados el Robot Rover 4WD y el punto destino sobre el escenario, se calcula el camino óptimo para que el vehículo se desplace hacia el punto desinto. A continuación se describen los procedimientos para el procesamiento de imágenes y la determinación del camino óptimo. 4.1. Procesamiento de imágenes El procesamiento de imágenes se realiza en una instancia de EC2 [18] en el Cloud, utilizando la librería OpenCV [19] y lenguaje de programación Python [20]. Se implementó un algoritmo que permite detectar e identificar sobre una imagen de captura aérea, las coordenadas de ubicación del Robot Rover 4WD con respecto al punto de destino; tomando como base dichas coordenadas se realiza el cálculo de la distancia entre el vehículo y el destino, como así también, los grados de diferencia entre los mismos. 4.1.1. Cámara aérea La cámara aérea emula la captura de video que puede realizar un Drone. Dentro del escenario experimental se ubicó a una altura de tres metros sobre el nivel de la superficie del Robot Rover 4WD, enfocando el escenario completo. Dicha cámara está integrada a una placa de desarrollo Raspberry Pi 3. Cuando el Robot aéreo recibe una señal vía el protocolo MQTT, desde el Cloud, solicitando una captura de imágen, el dispositivo realiza la captura de video en una resolución de 640x480 pixels, luego, disminuye la calidad en un 80% y realiza una compresión de la misma en base64, para por último enviarla vía MQTT a la instancia EC2, con el fin que el Cloud pueda realizar el reconocimiento y ubicación del Robot Rover 4WD y el punto de destino. Todo el procesamiento mencionado se implementó con el lenguaje de programación visual Node-RED. VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 17 4.1.2. Cámara local El Robot Rover 4WD, posee de forma integrada una cámara de video que permite realizar capturas de forma local al vehículo. Cuando llega una notificación del Cloud, se efectua una captura de video y se realiza el procesamiento de compresión detallado anteriormente en la cámara aérea y se envía la imagen a la instancia EC2 en el Cloud. A diferencia de la imágen capturada por la cámara aérea, en este caso, el punto destino es identificado por el reconocimiento de la figura geométrica “cuadrado blanco con bordes negros”. 4.1.3. Instancia EC2 Cuando la instancia EC2, recibe una imagen, vía MQTT, se procede a identificar las figuras geométricas en la imágen. En el caso de la imagen capturada por la cámara aérea, como ya se ha mencionado, se tiene que detectar un “cuadrado blanco con bordes negros” para identificar al Robot Rover 4WD; y la figura geométrica de un “círculo blanco con bordes negros” para identificar al punto de destino. Por otro lado, en el caso de la imagen capturada por la cámara local del Robot Rover 4WD, se debe identificar la figura geométrica de un “cuadrado blanco con bordes negros” para identificar al punto de destino. Una vez detectadas las figuras, se prosigue a calcular la distancia entre el vehículo y el destino. Previamente a este cálculo, es necesario haber calibrado las cámaras. Debido a que la visión de las cámaras es distinta, ya que la cámara aérea puede observar el escenario completo, en cambio, la cámara local sólo el punto de destino, la calibración de las mismas también difiere. La figura 9 presenta el flujo de procesamiento de una imagen. Fig. 9 Flujo de procesamiento de imágenes. 4.1.4. Calibración cámara aérea El proceso de calibración se basa en realizar cálculo de la medida del ancho (en centímetros) de la figura geométrica del “cuadrado blanco con bordes negros” del Robot Rover 4WD. El objetivo de la calibración es determinar cuántos “centímetros” hay en un pixel. Con esta referencia, se podrá conocer la distancia en centímetros entre cualquier par de pixels. Para lograr tal calibración, se calcula la distancia Euclidiana [21] entre dos extremos de la figura geométrica del cuadrado, y se divide por el ancho de referencia, como se puede observar en el algoritmo 1. Algoritmo 1 Distancia Euclidiana 1: # Librería para calcular la distancia euclidiana en PyTHON 2: from scipy.spatial import distance as dist 3: def get_distance(p1, p2, reference): 4: return dist.euclidean(p1, p2) / reference Ejecutado el algoritmo 1, se logra obtener el conocimiento de cuántos pixels forman un “centímetro”. Dicha información es útil para la determinación de la distancia en “centímetros” entre el Robot Rover 4WD y el punto de destino; ahora alcanza con realizar el cálculo las coordenadas (x,y) del centro de las figuras geométricas, e invocar a la función del algoritmo 1, reemplazando los parámetros p1, p2 y reference por las coordenadas del Robot Rover 4WD, las del punto destino y el resultado de la calibración respectivamente. 4.1.5. Calibración cámara local Este proceso de calibración [22] difiere del anteriormente mencionado, ya que no calcula la distancia entre objetos sobre una imágen, por el contrario, requiere conocer la distancia entre la cámara local y la figura geométrica “cuadrado blanco con bordes negros” del punto destino. Para estacalibración es necesario contar con dos datos: el ancho de la figura geométrica y la distancia en que se encuentra el Robot Rover 4WD con respecto de la figura al momento de la calibración; con dichos datos, se procede a realizar el cálculo de la longitud focal de la cámara local por medio de la ecuación 1: Longitud_Focal = 𝑊𝐹𝑖𝑔𝑃𝑋 ∗ 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑊𝑒𝑛𝐶𝑀 (ecuación 1) Donde: WFigPX: es el ancho de figura en Pixels WenCM: Ancho en centímetros. El cálculo de la distancia focal se obtiene tras la ejecución del algoritmo 2. Algoritmo 2 Longitud Focal 1: # Librería de Opencv 2: import cv2 3: def focal_length(contour, width, distance): 4: marker = cv2.minAreaRect(contour) 5: return (marker[1][0] * distance) / width 6: #marker[1][0] retorna el ancho en pixels de la figura geométrica. Una vez obtenida la distancia focal, se procede a calcular la distancia entre la cámara y cualquier VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 18 objeto en la imagen local, por medio de la ecuación 2: Dist_Objeto = 𝑊𝑒𝑛𝐶𝑀∗𝐿𝑜𝑛𝑔𝑖𝑡𝑢𝑑_𝐹𝑜𝑐𝑎𝑙 𝑊𝐹𝑖𝑔𝑃𝑋 (ecuación 2) Donde: WenCM: Ancho en centímetros. WFigPX: es el ancho de figura en Pixels La distancia al objeto se obtiene ejecutando el algoritmo 3. Algoritmo 3 Distancia Objeto 1: # Librería de Opencv 2: import cv2 3: Def distance_from_object_to_camera(contour, width, focal_length): 4: marker = cv2.minAreaRect(contour) 5: return (width * focal_length) / marker[1][0] 4.2. Planificación de camino óptimo Una vez finalizada el procesamiento de las imágenes y realizado el cálculo de distancia entre el Robot Rover 4WD y el punto de destino, se procede a determinar el camino óptimo. Un camino está compuesto por un conjunto de movimientos que guiarán al vehículo autónomo desde la posición donde se encuentra, hacia el punto de destino, evitando que colisione con los obstáculos que se presenten de por medio. Es necesario aclarar que si bien el algoritmo de planificación, que se detalla a continuación, contempla la identificación y el rodeo de los obstáculos, este trabajo se limita a que el Robot Rover 4WD alcance el punto de destino sin obstáculos de por medio. El Robot Rover 4WD puede realizar movimientos de giro en grados a derecha e izquierda (de 0 a 180 grados y de 0 a -180, respectivamente), como así también, movimientos para avanzar una determinada distancia en centímetros. La técnica de planificación elegida es la denominada RRT (Rapidly Exploring Random Trees) [23]. Este algoritmo se basa en la construcción de un árbol de configuraciones que crece buscando a partir de un punto origen en forma aleatoria, como se puede observar en el algoritmo 4. Previamente, se definen algunas variables: ● self.node_list: es el árbol generado ● self.start, self.end: son las coordenadas de inicio y de fin respectivamente ● self.rand_y, self.rand_x: es el espacio de configuraciones ● self.expand_dis: es la distancia en el que los nodos se expanden. En nuestro caso utilizamos la distancia euclidiana calculada en la calibración de la cámara aérea, por lo que los nodos están separados a un centímetro de distancia. Algoritmo 4 Algoritmo RRT 1: def planning(self): 2: # Flag que indica si encontró el destino. 3: goal_flag = False 4: # Lista de nodos del path. 5: self.node_list = [self.start] 6: for i in range(MAX_ITER): 7: # Búsqueda aleatoria 8: if random.randint(0, 100) > self.goal_sample_rate: 9: rnd = [random.uniform(self.rand_x[0], self.rand_x[1]), random.uniform( 10: self.rand_y[0], self.rand_y[1])] 11: else: 12: rnd = [self.end.x, self.end.y] 13: # Busca el nodo más cercano. 14: nind = self.get_nearest_list_index(self.node_list, rnd) 15: nearest_node = self.node_list[nind] 16: theta = math.atan2(rnd[1] - nearest_node.y, rnd[0] - nearest_node.x) 17: new_node = copy.deepcopy(nearest_node) 18: new_node.x += self.expand_dis * math.cos(theta) 19: new_node.y += self.expand_dis * math.sin(theta) 20: new_node.parent = nind 21: if not self.collision_check(new_node, self.path.obstacles): 22: continue 23: self.node_list.append(new_node) 24: # Verifica si se llegó al destino. 25: dx = new_node.x - self.end.x 26: dy = new_node.y - self.end.y 27: d = math.sqrt(dx**2 + dy**2) 28: if d <= self.expand_dis: 29: goal_flag = True 30: print("Goal!!") 31: break En la línea 9, se inserta el nodo inicial en la estructura del árbol de nodos. En la línea 10, se declara el límite de repeticiones del algoritmo. Este límite está dado por el valor que se le da a la constante MAX_ITER. Entre las líneas 13 y 18 se realiza la búsqueda aleatoria del nodo dentro del espacio de configuraciones. En la línea 22, se obtiene el vecino más próximo de VI Jornadas de Cloud Computing & Big Data (JCC&BD 2018) 19 la configuración aleatoria obtenida anteriormente. Entre las líneas 21 y 23, se determina el nuevo nodo a agregar al árbol realizando un salto (de tamaño self.expand_dis * math.cos(theta)) partiendo del vecino más cercano y el nodo aleatorio. Si se determina, que en el camino no hay una colisión, se agrega el nuevo nodo al árbol. Por el contrario, si efectivamente hay un obstáculo de por medio, se continúa con la iteración siguiente y no se agrega el nodo al árbol resultante. Entre las líneas 24 y 31, se verifica si se llegó al punto destino. Si la distancia entre el nuevo nodo y el punto destino es menor a la métrica establecida (un centímetro), se termina el procesamiento, obteniendo el árbol de nodos. Si la distancia no es menor, se continúa con la iteración siguiente. Se implementó una interfaz gráfica utilizando node- red-dashboard [24], que permite visualizar el resultado de la ejecución de la simulación del algoritmo RRT. Se puede observar en la figura 10, el resultado de simular la ejecución del algoritmo RRT tomando como punto de inicio la ubicación del Robot Rover 4WD (punto verde), el punto de destino (punto azul) y los obstáculos de por medio (puntos rojos). Fig. 10 Simulación de la ejecución del algoritmo RRT. Como resultado de la planificación se obtiene un vector, donde cada una de sus celdas posee una coordenada (x,y). Se debe transformar estas coordenadas en movimientos. Cada movimiento constará de un grado de giro y una distancia en centímetros. Para dicha transformación se utilizar el algoritmo 5. Algoritmo 5 Transformación a movimiento 1: def load_movements(self, prev_deg): 2: p1 = None 3: for p2 in coords: 4: if p1: 5: distance = helper.get_distance(p1, p2, self.config.pixel_distance) 6: xDiff = p2[0] - p1[0] 7: yDiff = p2[1] - p1[1] 8: degree = 360 - (math.degrees(math.atan2(yDiff, xDiff))%360) 9: degree_difference = ((degree - prev_deg) + 180) % 360 - 180 10: prev_deg = degree 11: self.movements.append(degree_difference, distance]) 12: p1 = p2 En la Línea 1, se declara el encabezado de la función, que consta de un parámetro llamado “prev_degree”. Este es el grado inicial del Robot Rover 4WD; a partir de este grado se podrá ir calculando la diferencia de grado entre los demás puntos. En la línea 3, comienza el bucle, iterando por todas las coordenadas resultantes de la planificación del camino. En la línea 4, se calcula la distancia Euclidiana ya mencionada anteriormente. En las líneas 6 y 7, se calculan las diferencias entre x2-x1, y2-y1. En las líneas 8 y 9, se calculan la diferencia de grados entre el punto anterior y un nuevo punto. Los grados varían en 0, 180 y 0, -180. Por último, en la línea 12 se almacena el movimiento. 4.3. Plataforma WEB Se desarrolló una plataforma WEB que brinda una interfaz gráfica; esta permite realizar la calibración de las cámaras como así también, visualizar el resultado de la ejecución del algoritmo
Compartir