English

Desarrollo Software

El objetivo del programa a desarrollar es el de ser utilizado como vínculo entre la API contenida dentro del Kit de Desarrollo Emotiv y la placa de interfaz que irá conectada al puerto paralelo.

Desarrollo Software
Desarrollo Software

Además deberá permitir operar el vehículo manualmente, conectar tanto con el Motor Emotiv como con el programa EmoComposer, monitorizar el estado del casco además de procesar las acciones detectadas y registrar los eventos recibidos pudiéndose guardar dicho registro en un fichero en el disco.

Adicionalmente será necesario poder realizar ajustes en los umbrales de activación de las acciones así como en la sensibilidad de las mismas, calibrar el acelerómetro del giróscopo, cargar un perfil de entrenamiento para el usuario activo y visualizar el manual de ayuda así como la ventana "Acerca de..." con información de la aplicación.

Las bibliotecas provistas dentro de la API se encuentran disponible tanto en C, como en C#. Se han escogido por afinidad las primeras y como entorno de desarrollo, C++Builder de Embarcadero Technologies este último especialmente por las facilidades que ofrece para desarrollar aplicaciones win32 utilizando las bibliotecas VCL.

Para controlar el puerto paralelo fue necesario emplear la biblioteca específica inpout32 la cual es gratuita para uso no comercial, y que permite a la aplicación acceder al mismo ya que a partir de Microsoft Windows NT no es posible modificar los registros del puerto paralelo directamente desde los programas que se ejecutan en modo usuario (De allí la necesidad de utilizar esta biblioteca que se ejecuta en modo kernel como si de un driver se tratase). Esta biblioteca se encuentra disponible en el sitio web logix4u.net distribuyéndose compilada en el fichero inpout32.dll junto con el código fuente y ficheros de ejemplo.

A continuación se describirá la funcionalidad del programa mediante los diagramas de casos de uso, se abordará el diseño arquitectónico utilizando los diagramas de clases y los diagramas de estados y por último se presentará la interfaz gráfica desarrollada.

DIAGRAMAS DE CASOS DE USO

A continuación se observa el caso de uso que describe las interacciones del usuario con el Motor Emotiv y con la interfaz hardware a través del puerto paralelo. Las operaciones disponibles para el usuario desde la interfaz gráfica del programa son:

  • Ajustar los umbrales de disparo para la detección de las acciones: avanzar, retroceder, girar a la izquierda y girar a la derecha.
  • Conectar con el Motor Emotiv o con el programa emulador EmoComposer, en este último caso será necesario especificar la dirección IP y el puerto configurados en el emulador.
  • Calibrar el acelerómetro mejorando la precisión en la detección de los giros de la cabeza del usuario. Éste deberá permanecer inmóvil durante medio segundo mientras se realiza la calibración.
  • Cargar el perfil de usuario desde un fichero previamente guardado en disco. Los perfiles se obtendrán realizando los entrenamientos apropiados utilizando el Motor Emotiv.
  • Ajustar las sensibilidades de detección de las acciones entrenadas dentro del perfil cargado.
  • Operación manual del vehículo utilizando el ratón para ejecutar los movimientos de avance y retroceso así como para fijar la posición de las ruedas para realizar un giro hacia la izquierda o hacia la derecha.

Utilizando el casco Emotiv Epoc, se podrá operar mentalmente el vehículo realizando las cuatro acciones antes enumeradas.

Interacciones con el Motor Emotiv y la interfaz
Interacciones con el Motor Emotiv y la interfaz

En la figura siguiente se representa el caso de uso correspondiente a las operaciones posibles sobre el registro del programa. El registro consiste en un área de texto en el cual se vuelcan los mensajes del programa, los errores y el contenido de cada estado recibido desde el casco. De este modo el usuario podrá:

  • Borrar el registro, vaciando el espacio de texto de modo que se descarten los mensajes antiguos.
  • Guardar el registro en disco para preservar los estados y eventos recibidos ya que al cerrar la aplicación el contenido del espacio de texto se pierde.

A través de los eventos recibidos desde el casco Emotiv Epoc se producirá el volcado del estado contenido en cada uno de ellos en el registro de la aplicación.

Operaciones sobre el registro
Operaciones sobre el registro

Por último se presenta el caso de uso que se corresponde con las opciones de visualizar el manual de ayuda o la ventana "Acerca de...".

Visualización de Ayuda y ventana Acerca de...
Visualización de Ayuda y ventana Acerca de...

DIAGRAMA DE CLASES

Habiendo definido en el punto anterior las acciones que se pueden realizar sobre el programa, ahora se procederá a describir el diseño arquitectónico del mismo.

En la figura siguiente se visualiza el diagrama de clases del diseño en el que se pueden observar las extensiones y agregaciones entre las distintas clases que componen el programa.

Diagrama de clases
Diagrama de clases

La aplicación comprende dos formularios que extienden la clase TForm que forma parte de las bibliotecas VCL. El primero, TFMain, representa la ventana principal de la aplicación en donde se gestionan todos los eventos de la interfaz gráfica además de contener el bucle principal de recuperación de eventos. El otro formulario, TFAboutBox, se utiliza para presentar la ventana ?Acerca de...? en donde se presenta la información de la versión, autoría, etc. Nótese que como la visualización de este formulario se realiza desde la instancia de la clase TFMain, ambas clases están relacionadas mediante una agregación.

La clase TGrafica también es una agregación de la clase TFMain ya que se encarga de gestionar, mediante seis gráficas que varían en el tiempo, la visualización de las señales: ninguna, neutral, avanzar, retroceder, girar a la izquierda y girar a la derecha que se reciben desde el casco.

La clase TActuador gestiona las operaciones sobre el puerto paralelo haciendo uso de la biblioteca impout32. La instancia de esta clase se crea desde la clase TFMain por lo que también es una agregación de la misma.

Para gestionar las operaciones con la API Emotiv se ha dispuesto la clase TConexion la cual es una clase abstracta ya que no implementa el método de conexión. Este método es implementado por las clases que la extienden, TConexionEmulador y TConexionCasco, cuya función es particularizar el comportamiento en el caso de que la conexión se vaya a realizar con el emulador EmoComposer o con el Motor Emotiv respectivamente.

Nótese que la clase TFMain también define una referencia a la clase TConexion para comunicarse con la API Emotiv lo que se denota con una relación de agregación, aunque como esta es abstracta, en realidad se define una instancia de una de sus clases hijas haciendo uso de polimorfismo (véase el listado siguiente).

private: TConexion *con; // Puntero a la instancia de conexión (...) // Conecta según la selección if (RadioGroupMotor->ItemIndex == 0) { // Conexión con el motor con = new TConexionCasco(); (...) } else { // Conexión con el emulador con = new TConexionEmulador(AnsiString(cadenaIp).c_str(), StrToInt(EditPuerto->Text)); (...) }
Uso del polimorfismo para la conexión

Diagrama de Estados

La aplicación durante su tiempo de vida pasa por diversos estados, los cuales se pueden visualizar a continuación:

Diagrama de estados de la aplicación
Diagrama de estados de la aplicación

Inicialmente el sistema se encuentra en modo manual (estado Manual) por lo que el vehículo se podrá controlar mediante el ratón, desde aquí es posible finalizar la ejecución de la aplicación, o bien pasar al modo casco (estado Casco Desconectado) desde el cual se puede emprender la conexión con el Motor Emotiv o con el emulador EmoComposer, existiendo también la posibilidad de finalizar la ejecución del programa. Por último en el estado Conectado sólo es posible desconectar y volver al estado anterior, no pudiéndose abandonar la aplicación en ningún caso.

Dentro del estado Conectado, existe una subdivisión de estados que se corresponden al estado de la conexión del Motor Emotiv con el casco (la aplicación se encuentra conectada al Motor Emotiv pero éste no necesariamente existe un enlace con el casco).

Siguiendo el diagrama estados de la figura siguiente, se observa que si el dispositivo receptor USB se encuentra desconectado, el enlace con el casco se encontrará en el estado Desconectado, al conectar el dispositivo, se activa el enlace pasando al estado Conectado, mientras que si aún no se ha cargado el perfil del usuario se pasará al estado Sin Perfil. Si al menos alguna de las señales recogidas desde los electrodos no proviene de un buen contacto el estado destino será el de Señal Ruidosa, mientras que si el enlace inalámbrico no es de calidad el estado al que se pasará será el llamado Sin Señal.

Diagrama de estados del bucle principal
Diagrama de estados del bucle principal

Comprobaciones del Software

Una vez desarrollada la aplicación, se comprobó su funcionamiento conectando con el emulador EmoComposer generando distintos tipos de eventos para comprobar que las respuestas y visualizaciones eran las correctas.

Nótese que desde el emulador no se pueden generar eventos para comprobar el funcionamiento de las acciones provenientes del giróscopo y que tampoco es posible utilizar un perfil de entrenamiento. Estas comprobaciones se realizarán en la etapa de Integración.

Aplicación conectada al programa EmoComposer
Aplicación conectada al programa EmoComposer

Por último, también se comprobó la correcta visualización del fichero de ayuda, el cual fue construido utilizando el programa Microsoft Help WorkShop, y la ventana Acerca de... con información del autor y de la versión.

Ventana Acerca de...
Ventana Acerca de...
Licencia Creative Commons