Robot Butia como Tecnología de Asistencia
Contenido
Motivación
Al momento de su invención, el código Morse cambió definitivamente la forma en que nos comunicamos. Históricamente se ha utilizado en la navegación náutica, desde la aviación hasta la radio, pero aun así es fácil de aprender y su naturaleza universal lo convierte en un excelente método de entrada de datos para ser utilizado como tecnología de asistencia.
El código Morse tiene una serie de ventajas sobre otras estrategias alternativas de acceso a la computadora. Por lo general, es más rápido y requiere un control motor menos fino. Quizás su ventaja más importante es su capacidad para convertirse en un proceso subcognitivo. Después de usar el código por un período de tiempo, el usuario del código Morse ya no piensa en el código que está ingresando. Este es el mismo proceso que utilizan los mecanógrafos y tiene un impacto significativo en la velocidad, la precisión y la calidad del trabajo que se produce. Velocidades de entre 15 y 30 palabras por minuto son comunes y se pueden alcanzar velocidades de más de 60 palabras por minuto, convirtiendolo en una alternativa de ingreso de datos muy eficiente.
Actualmente, esta tecnología es muy usada en el area de tecnología de asistencia, algunos celulares incluso soportan de forma nativa la entrada de datos a partir de codigo Morse, pero sin duda la opción mas utilizada hoy en dia es el teclado de Google (Gboard). El mismo proporciona un método de entrada de datos a partir de codigo Morse y permite control total del dispositivo a partir del mismo. Google incluso tiene una coleccion de experimentos, conocidos como Hello Morse, donde incentiva a los usuarios a realizar dispositivos para potenciar el uso del codigo Morse como tecnología de asistencia.
Descripción del proyecto
La idea de este proyecto es aprovechar el uso de código Morse como una alternativa al teclado de la computadora, y junto a los sensores de contacto del robot Butiá desarrollar una aplicación que permita tener acceso a ciertas funcionalidades de la computadora (potencialmente lograr tener acceso total a la misma). El diferencial de este proyecto radica en la capacidad de poder disponer los botones de la forma que les sea mas conveniente, pudiendo incluso construir algun tipo de dispositivo con dichos botones, y adaptarlo a las necesidades de cada uno.
La idea general del proyecto consiste en 2 aplicaciones: una applicación en Python y una aplicación web que nos proporciona una interfaz grafica a la aplicación.
Aplicación Python
El backend esta desarrollado en Python, para lo cual se tiene una aplicación corriendo en 2do plano traduciendo las pulsaciones de los botones en el robot butiá en eventos del teclado. Hay 2 modos de entrada de datos:
- Modo Navegación: cuando este modo esté activado, las pulsaciones se traducien en eventos del teclado referentes a la navegacion dentro de la página web (un boton que se traduce en un TAB para navegar al siguiente elemento de la pagina, otro que se traduce a SHIFT+TAB que se utiliza para navegar al elemento anterior dentro de la pagina y otro boton que se traduce en un enter). Potencialmente se podrian configurar mas atajos que permitan mayor navegabilidad dentro del navegador. Si bien con los controles basicos mencionados se podria entrar a otros sitios web, se podrían agregar mas comandos que permitan realizar acciones como abrir/cerrar pestañas nuevas, lo cual proporcionaria mayor navegabilidad al momento de ingresar a otros sitios web.
- Modo escritura: se cuenta con 2 botones que se mapean uno con el . y otro con - como se establece en el codigo morse. Luego se mapean las secuencias de . y - a eventos del teclado correspondientes a la letra que representa dicha secuencia en código Morse. A su vez se hace uso de un 3er boton encargado de disparar el evento de la barra espaciadora.
Interfaz Web
Esta aplicacion proporciona una interfaz amigable para el usuario a traves de una aplicacion de escritorio desarrollada con Electron JS (la cual de fondo esta basada en una aplicacion web). Actualmente, los navegadores cuentan con atajos del teclado para poder navegar dentro del mismo completamente a travess del teclado. Por supuesto, dicha funcionalidad solo es util si la pagina web que se esta visitando es compatible con dichas funcionalidades de accesibilidad. Para esto, se siguen ciertos lineamientoses establecidos globalmente que permiten, entre otras cosas, la navegacion dentro de una pagina web completamente atraves del teclado (que en nuestro caso es a traves de los botones del butiá los cuales son traducidos a eventos del teclado). Las funcionalidades desarrolladas fueron las siguientes:
- Mandar mails (se realiza en conjunto con un script en Python que es el encargado de mandar el mail con el contenido que se ingresó en la app web)
- Procesamiento de voz a partir de la escritura (tambien se realiza junto con un script en python que utiliza la libreria GTTS para generar un audio a partir del string que se ingrese en la app web por medio de los botones del Butia en codigo morse, luego reproduce automaticamente dicho audio y finalmente lo elimina)
- Una sección para realizar configuraciones generales, como ser la velocidad de escritura, setear el email y contraseña de nuestra casilla de correo para utilizar la funcionalidad de mandar mails
- Una sección interactiva para aprender codigo Morse.
- Sistema de respuesta auditiva tanto al momento de cambiar el modo de los botones (se reproduce un audio indicando el nuevo modo en el que nos encontramos) y tambien al momento de escribir en codigo morse. Para esto, en el momento que la aplicacion traduce una secuencia de caracteres (conformada por puntos y guiones) en un evento del teclado no solo dispara el evento correspondiente sino que tambien reproduce el sonido de una pulsacion para dar nocion al usuario de que dicha secuencia fue ingresada con exito. En el caso que se ingrese una secuencia que no se corresponde con ningun caracter reconocido por el programa, no se generara ningun evento del teclado ni el sonido de ninguna pulsacion.
Publico Objetivo
Para llevar a cabo el proyecto se necesitará cierto manejo de la tecnología, no tanto para el armado del robot, ya que el mismo es bastante simple de montar, pero sí se requeriran ciertos conocimientos básicos, sobre todo nociones básicas del uso de la terminal, que se utilizara para instalar los elementos necesarios y levantar el programa. Se entregara un descargable que permitirá a los usuarios tener la aplicación funcionando de forma rápida y sencilla, permitiendo que personas sin mucho conocimientos de programacion puedan lograr levantar el programa de forma facil ya que el mismo contará con una arquitectura un poco compleja. Es por esto que si bien no se requerirán muchos conocimientos de programación ni de robotica en general, sí se necesitará tener nociones básicas del uso de la terminal para poner en funcionamiento el mismo.
Armado del Robot
En la actualidad se admiten varios tipos de entrada Morse:
- Interruptor simple, donde un guión se diferencia de un punto al mantener el interruptor presionado durante un período de tiempo más largo
- Interruptor doble donde un interruptor se usa para ingresar puntos mientras que el otro se usa para guiones
- Interruptor triple, donde un interruptor se usa para ingresar un punto, uno para un guión y el tercero para indicar el final del carácter o comando realizado.
En este proyecto se utiliza este ultimo metodo, donde para la traduccion de codigo morse se utilizan 3 interruptores, a su vez tambien se agrego un cuarto interruptor para facilitar las funcionalidades de navegacion.
Materiales del kit
- Placa USB4butia
- 4 botones pulsadores
- 4 cables Sensores RJ45
- 1 cable USB
- Cinta doble faz (opcional para el montado de los botones)
Para armar el robot lo unico que se debe hacer es conectar los sensores boton a la placa Butia como podemos ver en el siguiente video. En este caso simplemente se pegaron los botones a la placa con cinta doble faz, pero la idea es que cada uno lo adapte segun sus necesidades. La versatilidad de los 4 botones permite que los mismos se dispongan de forma la forma mas conveniente para cada uno.
Instalacion
Requisitos previos
Antes de correr el programa se deberá instalar lo siguiente desde la linea de comandos. En este caso se hizo desde el sistema operativo macOS, pero esto no deberia ser un problema ya que todos los paquetes utilizadas estan tambien disponibles tanto en para linux como para Windows:
Instalacion del Proyecto
Una vez instalados los paquetes previamente mencionados proseguimos a la instalacion del proyecto. Para ellos tendremos que primero clonar el siguiente repositorio, el cual lo haremos con el siguiente comando en la consola:
$giT clone https://github.com/noebassagoda/assistive-technology-morse-code.git
Una vez descargado el repositorio proseguimos a movernos dentro de la carpeta del mismo desde la consola, crear un entorno virtual de python, activarlo e instalar los paquetes a utilizar (los mismos estan especificados en el archivo requirements.txt y los instalaremos todos juntos desde la linea de comandos como mostramos en la siguiente imagen). Los entornos virtuales se utilizan para poder aislar el entorno de desarrollo de un proyecto del resto de las librerias instaladas en el sistema y asi poder asegurarse de que todas las personas que deseen instalar un proyecto compartan el mismo entorno de desarrollo. Cada entorno virtual tiene su propio binario de Python (que coincide con la versión del binario que se utilizó para crear este entorno, en este caso estaremos utilizando Python 2.7) y puede tener su propio conjunto independiente de paquetes de Python instalados en sus directorios de sitio. Para esto ejecutaremos los siguientes comandos en la consola:
$cd assistive-technology-morse-code $pythoN -m virtualenv env $sourcE env/bin/activate $pip install -r requirements.txt
Por ultimo nos falta instalar los modulos de node utilizados en la aplicacion web. Para ello procedemos a ejecutar el siguiente comando desde la consola:
$npm install
Una vez instalado esto estamos prontos para poner en funcionamiento la aplicacion. Para esto tendremos que ejecutar la app web. Una vez que corramos el siguiente comando, la aplicacion se abrira automaticamente desplegando ante nosotros la aplicación de escritorio:
$npm start
Por ultimo, abrimos otra pestaña en la consola, nos paramos en la carpeta del proyecto y procedemos a ejecutar la app de python que correra en segundo plano, lo cual haremos de la siguiente forma:
$cd engine $pythoN main.py
Requisitos adicionales
Si está utilizando macOS Mojave o más reciente, hay una nueva característica de seguridad donde se debe permitir explícitamente a las aplicaciones para poder hacer uso del mouse / teclado desde las mismas (en nuestro caso, queremos disparar eventos del teclado desde la linea de comandos). Para habilitar esto, debemos ir a Preferencias de seguridad > Seguridad y privacidad > Privacidad > Accesibilidad y elegir desde ahi a la aplicacion de la linea de comandos. Acontinuacion se muestra como realizarlo:
Funcionamiento
Como se menciona al comienzo de la guia, el robot cuenta con 4 botones, los cuales tendran distintas funcionalidades dependiendo del modo en el cual nos encontremos. Acontinuacion se deja una imagen explicatica de la disposicion de los botones junto con la funcionalidad que tendra segun el modo en el que se encuentre y el puerto correspondiente.
Demos
Seccion de Configuraciones
Lo primero que se recomienda hacer es configurar los permisos y credenciales del mail para asi poder hacer uso de dicha funcionalidad desde la aplicacion. Lo primero va a ser habilitar a que aplicaciones de terceros puedan enviar emails en tu nombre (en nuestro caso, estaremos enviando emails desde un script de python). Este paso puede que no sea necesario dependiendo del servicio de correo electronico que se use, por ejemplo en el caso de gmail se puede hacer de la siguiente forma:
Luego, una vez dentro de nuestra aplicacion iremos a la seccion de configuracion donde se nos da la opcion de ingresar las credenciales de nuestro mail y contraseña (opcionalmente podemos ingresarlos manualmente en el archivo config.txt). Una vez ingresado esto no tendras que volver a hacerlo (al guardar la configuracion, las credenciales se guardaran en el archivo antes mencionado y cada vez que se vaya a manda un email se utilizaran dichas credenciales). Cabe destacar que la aplicacion corre localmente, por lo que no conlleva riesgos de seguridad a la hora de ingresar las credenciales mencionadas previamente. Acontinuacion se deja una demo de como configurar nuestro email y contraseña, y como pueden ver en el video, al cargar la pagina inicialmente ya estan cargadas las credenciales guardadas anteriormente. Nótese que en esta seccion tambien se puede configurar la velocidad de escritura en codigo morse.
Enviar Emails
Una vez configurado todo podemos proceder a enviar mails desde la aplicacion como vemos a continuacion:
Procesamiento de Voz
Acontinuacion se muestra una pequeña demo de la funcionalidad del procesamiento de voz:
Seccion Interactiva
Por ultimo tenemos una pequeña demo de la seccion interactiva donde podemos encontrar un sencillo juego que tiene como finalidad ayudarnos a aprender a escribir en codigo morse a traves de los botones pulsadores.