PHD THESIS: NETWORK DESING STRATEGIES FOR MULTISENSORY HUMAN-MACHINE INTERFACES OF NAVIGATION SYSTEMS FOR BLIND AND VISUALLY IMPAIRED PEOPLE

On July 13th, our colleague and lab member Santiago Real Valdés defended his PhD Thesis entitled “Network Design Strategies for Multisensory Human-Machine Interfaces of Navigation Systems for Blind and Visually Impaired People”. This work was carried out at B105 Electronic Systems Lab under the direction of Professor Alvaro Araujo.

The thesis defense took place at the ETSI Telecomunicación in Madrid. The work was evaluated positively earning the highest possible grade, along with the “cum laude” mention.

Overall, the research pursued design guidelines, tools, and methods for the development of networked navigation assistance systems for blind and visually impaired (BVI) individuals. Specifically, it resulted in the following contributions to the scientific community:

  • Study of the state-of-art at navigation assistance for BVI individuals. This was undertaken to re-evaluate the perspective of navigation systems for the blind and visually impaired (BVI) in a new technological-enabling context, attempting to integrate key elements of what is frequently a disaggregated multidisciplinary background.
  • Development of the Virtually Enhanced Senses (VES) System. VES is a wireless, mixed-reality platform developed to design, emulate, implement, and test complete navigation systems.
  • Development of novel Sensory Substitution Devices (SSD) and methodologies to assess navigation assistance in mixed reality environments. Novel and representative SSD were implemented building on previous solutions, design guidelines and recommendations. Thereafter, new methodologies and performance markers were developed to quantify the performance of the SSD under various network architectures and operation conditions.
  • Novel relations between Quality-of-Experience (QoE) and Quality-of-Service (QoS) in navigation assistance for BVI individuals were found.  Overall, a tradeoff was observed between the user’s spatial data acquisition and sensorimotor coupling degradation due to motion-to-photon delay.

Further information on the open-access VES system can be found at the following link. Also, the latest results were disseminated through the media:

Conferencia en la Academia de las Ciencias y las Artes Militares

El pasado 1 de febrero nuestro compañero Octavio Nieto-Taladriz impartió la conferencia en la Academia de las Ciencias y las Artes Militares (ACAMI) titulada “Prueba de concepto: Munición cooperativa, aspectos tecnológicos”.

Breve extracto:

Una de las principales labores de la Universidad es la de generar nuevas ideas y conceptos y en el caso específico de las tecnológicas, como la del conferenciante, ver cómo llegar a prototipos o productos mínimos viables (MVP). En este caso se presentará como idea la creación de una “red social” de munición autónoma en la que sus elementos colaboren para lograr uno o varios objetivos comunes.

Para ello se partirá de dispositivos de munición básica convencional y sobre ella se incorporarán elementos que permiten la creación de un modelo de “red social”, todo ello bajo un punto de vista tecnológico y de industrialización. La parte de estrategias de colaboración, doctrina, ética y legalidad quedarán para un futuro evento de la ACAMI.

La grabación de la misma está disponible en el siguiente link: https://youtu.be/ykq-9FPBAJo

PhD Thesis: Cross-layer Strategies for Improving the Quality of Service of Wireless Sensor Networks

A couple weeks ago, our lab member Alba Rozas Cid defended her PhD thesis entitled “Cross-layer Strategies for Improving the Quality of Service of Wireless Sensor Networks”. This PhD work was carried out at B105 Electronic Systems Lab under the direction of Professor Alvaro Araujo.

The thesis defense took place at the ETSI Telecomunicación in Madrid, and three members of the examination panel were physically present. However, due to travel restrictions, the other two members attended the act online from France and the USA, respectively. The work was evaluated positively earning the highest possible grade, along with the “cum laude” and international mentions. Learn and see how fire barriers’ role in preserving the environment here and how you can protect yourself in advance.

The following are some links where parts of this PhD research are explained or published:

Here are some pictures of the defense act:

And, finally, this is the list of peer-reviewed journal and conference publications that were obtained during the course of this PhD:

International journal articles:

  • A. Rozas, A. Araujo, and J. M. Rabaey, “Analyzing the Performance of WBAN Links during Physical Activity Using Real Multi-Band Sensor Nodes,” Applied Sciences, vol. 11, no. 7, p. 2920, Mar. 2021, doi: 10.3390/app11072920.
  • A. Rozas and A. Araujo, “An Application-Aware Clustering Protocol for Wireless Sensor Networks to Provide QoS Management,” Journal of Sensors, vol. 2019, pp. 1–11, Sep. 2019, doi: 10.1155/2019/8569326.
  • R. Utrilla, R. Rodriguez-Zurrunero, J. Martin, A. Rozas, and A. Araujo, “MIGOU: A Low-Power Experimental Platform with Programmable Logic Resources and Software-Defined Radio Capabilities,” Sensors, vol. 19, no. 22, Nov. 2019, doi: 10.3390/s19224983.
  • F. Tirado-Andrés, A. Rozas, and A. Araujo, “A Methodology for Choosing Time Synchronization Strategies for Wireless IoT Networks,” Sensors, vol. 19, no. 16, Aug. 2019, doi: 10.3390/s19163476.
  • R. Rodriguez-Zurrunero, R. Utrilla, A. Rozas, and A. Araujo, “Process Management in IoT Operating Systems: Cross-Influence between Processing and Communication Tasks in End-Devices,” Sensors, vol. 19, no. 4, Feb. 2019, doi: 10.3390/s19040805.
  • E. Romero, J. Blesa, A. Rozas, and A. Araujo, “Energy Efficiency Strategy in D2D Cognitive Networks Using Channel Selection Based on Game Theory and Collaboration,” International Journal of Distributed Sensor Networks, vol. 12, no. 8, Aug. 2016, doi: 10.1177/155014772834652.
  • J. Martin, A. Rozas, and A. Araujo, “A WSN-Based Intrusion Alarm System to Improve Safety in Road Work Zones,” Journal of Sensors, vol. 2016, pp. 1–8, Jun. 2016, doi: 10.1155/2016/7048141.
  • A. Molina-Pico, D. Cuesta-Frau, A. Araujo, J. Alejandre, and A. Rozas, “Forest Monitoring and Wildland Early Fire Detection by a Hierarchical Wireless Sensor Network,” Journal of Sensors, vol. 2016, pp. 1–8, Feb. 2016, doi: 10.1155/2016/8325845.
  • J. Blesa, E. Romero, A. Rozas, and A. Araujo, “PUE attack detection in CWSNs using anomaly detection techniques,” EURASIP Journal on Wireless Communications and Networking, vol. 2013, no. 1, p. 215, Aug. 2013, doi: 10.1186/1687-1499-2013-215.
  • J. Blesa, E. Romero, A. Rozas, A. Araujo, and O. Nieto-Taladriz, “PUE Attack Detection in CWSN Using Collaboration and Learning Behavior,” International Journal of Distributed Sensor Networks, vol. 9, no. 6, Jun. 2013, doi: 10.1155/2013/815959.

International conference proceedings:

  • A. Rozas, J. Blesa, E. Romero, and A. Araujo, “Controlling the degradation of Wireless Sensor Networks,” in 2015 International Wireless Communications and Mobile Computing Conference (IWCMC), Aug. 2015, pp. 1217–1223, doi: 10.1109/IWCMC.2015.7289256.
  • R. Utrilla, A. Rozas, J. Blesa, and A. Araujo, “A Hybrid Approach to Enhance Cognitive Wireless Sensor Networks with Energy-Efficient Software-Defined Radio Capabilities,” in 2017 International Conference on Embedded Wireless Systems and Networks (EWSN), Feb. 2017, pp. 294–299. [Online]. Available: https://dl.acm.org/doi/10.5555/3108009.3108086.

TFM: Design and implementation of a gateway node based on LTE mobile communications for a Wireless Sensor Network

Wireless Sensor Networks (WSN) research has recently become a key element in the Internet of Things (IoT) concept. These networks use autonomous devices, also known as nodes, whose purpose is to gather information from the environment and transmit it on the internet. We may classify these nodes into two categories: sensor nodes, which extract information from diverse environment parameters; and gateway nodes that transmit this information outside the network.

The main goal of this thesis is the development of a gateway node based in fourth generation mobile communications (4G). This gateway node has been developed both at hardware and software level and should be integrated in a wireless sensor network at future stages.

The hardware for this project is based in a previous design of a modular PCB developed at the B105 Electronic Systems Lab. Some modifications have been introduced in the original design in the power supply, RF and voltage shifter blocks in order to complete a functional prototype. The software architecture has been completely designed and implemented from the very beginning based on YetiOS – an embedded OS developed at the B105 Lab – including a specific API for the module and diverse connectivity functionalities such as call features and TCP/IP communication establishment.

Each hardware and software module has been tested separately and also operation of the whole node. In addition, system performance was evaluated measuring three parameters: consumption, latency and throughput, which are critical in the deployment of a practical application for the node.

The obtained results are discussed at the end of the document, comparing them to the original objectives and finally some working lines are proposed to continue with the node development.

How to deploy a Node-Red environment on a GCP instance

Son numerosos los tutoriales en Internet que explican cómo montar un servidor Node-RED sobre GCP haciendo uso de clústers. Sin embargo cuesta encontrar (si es que los hay), tutoriales sobre como desplegar dicho servidor en una instancia, por lo que en este tutorial, nos centraremos en este caso. ¿Te suena a chino todo lo que hemos dicho? ¿Por qué montarlo sobre una instancia y no un clúster? Expliquemos brevemente los conceptos más raros de la frases anteriores para entendernos mejor.

  • Node-RED: es una herramienta de programación, de libre distribución, la cual nos permite de una forma rápida, y sobretodo muy intuitiva, desplegar una web con un estilo moderno y funcional. Node-RED hace uso de la programación “en cajas”, en la cual interconectamos distintos bloques ya pre hechos de las librerías disponibles. Node-RED usa Javascript y permite introducir bloques con nuestro propio código, pero para las tareas más sencillas no será siquiera necesario saber Javascript. Un ejemplo de un desarrollo simple en Node-RED sería el siguiente:

node_red_example

Node-RED permite además añadir librerías creadas por usuarios, siendo la librería “dashboard” una de las más populares, pues incorpora cajas con elementos visuales que permiten la interacción con el usuario así como la visualización de datos. Un ejemplo de ello:

maxresdefault

¿Fácil, verdad? Quien diría viendo esa web que se ha hecho sin necesidad de saber ningún lenguaje, solo juntando las cajas correctas. Existen otras opciones, como thingsboard.io, pero para gustos los colores, además de no ser la mayoría gratuitas (o tener planes gratuitos muy limitados). Nosotros preferimos Node-RED porque integra soporte para comunicaciones por UDP, TCP y el reciente MQTT, lo que permite comunicaciones con cualquier tipo de dispositivo, especialmente con dispositivos IoT. Además, la comunidad de desarrolladores es enorme y podemos encontrar muchos ejemplos ya hechos para su libre distribución, siendo estos ejemplos a veces, justo lo que buscamos.

Tenemos muchas formas de ejecutar Node-RED, en nuestro PC (esto es corriendo en un servidor local), en páginas que ponen a nuestra disposición servidores ya montados y listos para empezar a trabajar (FRED) o en servidores virtuales privados (VPS) de los cuales hay cientos de ofertas en Internet (aunque destacan por su catálogo y precios Microsoft Azure, Amazon Web Services [AWS] y Google Cloud Platform [GCP]). Las ventajas de ejecutar nuestro entorno en un VPS frente a nuestro ordenador o un entorno ya hecho (y cerrado) son inmensas: disponibilidad total, herramientas de protección, escalabilidad, no compromiso de nuestros datos privados, gestión de recursos… y esas son solo alguna de ellas.

  • Google Cloud Platform: es uno de los tantos servicios de gestión de VPS que hay hoy en día. Si bien es cierto que uno de los que más fuerza tiene es AWS, Google ofrece algo que no ofrece el resto: un servidor gratuito al año con 24/7 en ejecución. Vale que es un servidor muy modestito (10 GB de almacenamiento; 0.6 GB de RAM y un único procesador), pero es gratis y para diseños simples puede ser más que suficiente. Es por esto que nos centraremos en este gestor VPS en este tutorial.
  • Instancia vs. cluster: Google denomina a cada uno de los VPS que creamos instancia. Un grupo de instancias trabajando de forma conjunta, compartiendo recursos y distribuyéndose el tráfico de red entre ellas forma un clúster. Claro, a priori parece que el clúster es mejor (y lo es), pero no es gratis. La instancia, sin embargo, sí. Siempre y cuando esa instancia sea de las más simples de Google, como ya hemos comentado antes.

Ahora que ya hemos explicado todo un poco, relee si quieres el primer párrafo del post. Ahora ya parece obvio por qué queremos desplegar Node-RED (y no otro) sobre una instancia (y no un clúster), porque…

free

 

Empecemos…

Lo primero, lógicamente, es tener una cuenta de Google activa. Nos dirigiremos a la consola de Google Cloud y activaremos nuestra cuenta, registrándonos en la versión de prueba gratuita.  Solo por registrarnos Google nos regala 300 $ en servicios GCP. Para nuestros propósitos no nos harán falta, pero nos vendrán genial si queremos cacharrear con todas las opciones que GCP ofrece. Completaremos todos nuestros datos (incluida la tarjeta de crédito, pero no pasa nada: Google nos avisará previamente en caso de que hiciéramos algo que incurriera en un desembolso). Tras registrarnos se nos creará nuestro primer proyecto (que podremos renombrar si queremos pinchando en configuración de proyecto).

En el buscador escribimos Compute Engine y en la nueva ventana, una vez cargue, creamos una nueva instancia, con la configuración que vemos en la siguiente imagen:

g1
La zona da igual siempre que sea en América (salvo Virginia del Norte). América es la única región con VPS gratuitas. El tipo de máquina ha de ser micro y permitir el tráfico HTTP y HTTPS. Nosotros hemos elegido Ubuntu por familiaridad con los comandos, pero cualquier otra distribución de las gratuitas que ofrece Google es válida. Notad que para saber que estáis siguiendo los pasos correctos, debe apareceros el texto de la derecha donde os informa de que la máquina seleccionada es gratuita. Pulsamos en crear y esperamos.

Una vez creada, hay diferentes cosas que sería interesante hacer antes de empezar a cacharrear (asignarnos una IP estática y abrir algunos puertos).

-Asignando IP estática podremos entrar en nuestro servidor sin necesidad de consultar qué IP nos ha concedido Google esta vez: siempre será la misma. Para ello escribimos Red de VPC en el buscador y entraremos en la sección del menú lateral izquierdo “Direcciones IP externas”. Seleccionaremos nuestra instancia y cambiaremos su tipo a estática. Le ponemos un nombre identificativo a esta IP y aceptamos.

-Abriendo puertos (bien sea TCP o UDP) permitiremos un acceso remoto a nuestro servidor. Hay que notar que esto es un arma de doble filo, pues si bien no podemos hacer mucho sin tener acceso a nuestro servidor remoto también es una puerta abierta a hackers, por lo que recomendamos abrir solamente los puertos que vayamos a necesitar. En nuestro caso será obligatorio abrir el puerto TCP 1880, pues será el que usará Node-RED tanto para la interfaz de diseño (donde colocaremos las cajitas) como para la interfaz web (donde nos mostrará el resultado de colocar y conexionar esas cajitas). Para ellos tecleamos en el buscador “Reglas de cortafuegos” y elegimos la opción que lleve también escrito Red de VPC.

Creamos una regla nueva:allowtcp

 

El nombre es opcional, todo lo demás, recomiendo dejarlo a esos valores. Cuando cojáis más soltura con GCP os recomiendo etiquetar vuestras distintas instancias para poder elegir destinos de reglas del cortafuegos y así que cada máquina tenga abiertos los puertos que necesita. Por ahora, y como solo tenemos una máquina creada, no pasa nada por aplicar en el campo destinos “todas las instancias de la red”. Guardamos y ya estaremos listos para empezar la instalación de Node-RED sobre nuestro VPS.

Volvemos a la vista de Compute Engine, donde estará nuestra instancia. En el campo “Conectar” pulsamos sobre SSH. Se nos abrirá una ventana nueva y cuando cargue ya estaremos dentro de nuestro VPS.

Para poder empezar a trabajar, tecleamos los siguientes comandos:

Nótese que entre los comandos, se instalará nodejs. En nuestro caso hemos instalado la versión 8.x por ser la recomendada en el momento de realizar este tutorial, pero se aconseja mirar en la página de nodejs cual es la última versión recomendada. Escribimos ahora el comando que instalará Node-RED en nuestro VPS.

Es también interesante instalar algunas herramientas de node-red que nos harán más fácil la gestión de nuestro servidor, por lo que teclearemos:

Después de esto ya podemos probar que Node-RED está correctamente instalado. Para ellos tecleamos:

Lo que debería arrojar en el terminal una salida que acaba con:

Esto es indicativo de que todo está correcto. ¡Probémoslo! Escribamos en nuestra barra del navegador la IP estática concedida por Google (sin http ni https delante seguida del puerto de acceso a Node-RED, separado por dos puntos “:”), algo así como 123.123.123.123:1880. Deberíamos ver esto:

node-red1

 

¡Todo funciona! Sin embargo esto presenta un enorme, enorme inconveniente: cualquiera que sepa nuestra IP puede acceder a nuestro servidor Node-RED y borrarnos todo el trabajo o inyectar código malicioso. Por ello, el siguiente paso, de vital importancia, es proteger nuestro servidor. Volviendo a la terminal abierta por SSH, pulsamos ctrl+C para parar la ejecución de Node-RED y escribiremos:

Lo que nos preguntará por la contraseña con la que deseamos proteger el servidor. Tras escribirla y pulsar intro, nos devolverá una secuencia hash con nuestra contraseña encriptada, que deberemos copiar, pues usaremos ahora. Escribiremos sobre el archivo de configuración de Node-RED. En el terminal tecleamos:

y dentro de este archivo buscaremos el siguiente texto:

adminAuth: {
type: “credentials”,
users: [{
username: “USUARIO“,
password: “HASH_GENERADO“,
permissions: “*”
}]
},

// To password protect the node-defined HTTP endpoints (httpNodeRoot), or
// the static content (httpStatic), the following properties can be used.
// The pass field is a bcrypt hash of the password.
// See http://nodered.org/docs/security.html#generating-the-password-hash
httpNodeAuth: {user:”USUARIO“,pass:”HASH_GENERADO“},
httpStaticAuth: {user:”USUARIO“,pass:”HASH_GENERADO“},

En usuario escribiremos el usuario que queramos, y en los campos password y pass, el hash generado anteriormente. La primera parte protegerá la parte de gestión (donde colocamos las cajitas), la segunda, la parte de visualización (la web que crean las cajitas). Es importante descomentar las lineas necesarias (esto es, eliminar los caracteres “//” con los que empiezan algunas lineas), para que el resultado quede tal y como hemos puesto arriba. Guardamos con CTRL+O y salimos con CTRL+X.

Por último, será interesante que nuestro servidor cargue automáticamente Node-RED cuando se reinicie, lo que hará más tolerante a fallos nuestra implementación. Para ello, escribimos:

Que nos indicará nuestro nombre de usuario. A continuación:

donde copiaremos el siguiente texto:

[Unit]
Description=Node-RED
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/node-red
Restart=on-failure
KillSignal=SIGINT

# log output to syslog as ‘node-red’
SyslogIdentifier=node-red
StandardOutput=syslog

# non-root user to run as
WorkingDirectory=/home/TUUSUARIO/
User=TUUSUARIO
Group=TUUSUARIO

[Install]
WantedBy=multi-user.target

Hay que modificar solo los campos en rojo. Nuevamente, guardamos con CTRL+O y salimos con CTRL+X. Activamos el servicio creado escribiendo:

Comprobaremos que todo se haya hecho correctamente. Para ello primero es necesario reiniciar, por lo que escribimos:

Y tras esperar unos dos minutos, cargamos de nuevo la página con la IP del servidor en nuestro navegador. Ahora, al cargar node-RED debería pedirnos login, tanto a la parte de gestión como a la de visualización.

¡Eso es todo por nuestra parte! Ahora, a jugar.