ELO 329: Diseño y Programación Orientada a Objetos

GUI para Control Inalámbrico de Movimiento de un Robot

 

 

  1. Descripción del Problema

    El problema que se intenta resolver es el de diseñar una interfaz para usuario capaz de comunicarse con un terminal de forma inalámbrica, con el fin de enviar instrucciones de control. Estas instrucciones consisten en un campo asociado a una dirección espacial más un valor numérico que va desde 0 a 9. A modo de ejemplo, si el usuario desea enviar la  instrucción de dirección arriba acompañada del valor numérico 8, debe configurar la interfaz para tal propósito y realizar la acción de envío.

  2. Análisis del Problema

    Los elementos que participan en el contexto del problema (sistema) son una interfaz con capacidad de establecer una conexión bajo el protocolo UDP y un servidor que recibe las instrucciones enviadas por esta. La interacción con el medio externo viene dada por los  usuarios que utilizan la interfaz, además del envío de paquetes a través de la red. En el extremo del servidor también existirá una interacción con el medio externo una  vez que este, luego de recibir los paquetes de datos traspasa las instrucciones recibidas al dispositivo que interpreta las instrucciones.

    1. Casos de Uso

      A continuación se presentan tres casos de uso que describen la interacción entre el usuario y el sistema.

                                                              i.     
Titulo: Cambiar mouse por teclado.
Actor: Usuario.
Descripción: El usuario una vez iniciada la interfaz cambia el mouse por el teclado.
Flujo Principal:
1._ El usuario inicia aplicación para el cliente (interfaz).
2._ El usuario se desplaza con el puntero del mouse hacia la zona superior izquierda de la interfaz.
3._ El usuario mediante un clic izquierdo del mouse selecciona el envío de comandos a través del teclado.
4._ La interfaz cambia el campo de selección y resalta la imagen inferior correspondiente al teclado.
Variante:
3A1._ El usuario mediante un clic derecho selecciona el envío de comandos a través del teclado.
4A1._ La interfaz no realiza ningún cambio.

                                                            ii.     
Titulo: Establecer conexión.
Actor: Usuario.
Descripción: El usuario establece conexión con terminal.
Flujo Principal:
1._ El usuario inicia aplicación para el cliente (interfaz).
2._ El usuario se desplaza con el puntero del mouse hacia la zona inferior izquierda de la interfaz.
3._ El usuario mediante un clic izquierdo del mouse accede a modificar uno de los dos campos de texto.
4._ El  usuario ingresa el valor correspondiente.
5._ 3 y 4 dos veces (IP y Puerto).
6._ El usuario con el botón  izquierdo del mouse presiona “set”.
7._ La interfaz resalta “set” mientras el botón izquierdo del mouse siga presionado.
Variante:
6A1._ El usuario no presiona botón izquierdo del mouse en “set”.
7A1._ La interfaz no resalta “set” y no se establece conexión.

                                                          iii.     
Titulo: Envío de comando mediante mouse.
Actor: Usuario.
Descripción: Una vez establecida la conexión, él usuario envía un comando utilizando el mouse.
Flujo Principal:
1._ El usuario establece conexión (flujo principal caso de uso ii).
2._ El usuario se desplaza con el puntero del mouse hacia la zona derecha de la interfaz.
3._ El usuario mediante un clic izquierdo ó derecho presiona sobre una de las flechas de dirección de la interfaz.
4._ La interfaz cambia la imagen de la flecha presionada por una doble y resalta la imagen mientras el botón del mouse siga presionado.
Variante:
3A1._ El usuario presiona una tecla.
4A1._ La interfaz no responde.

 

  1. Diagramas de Alto Nivel

    1. Diagrama de Clases

      La estructura del sistema que muestra las clases, atributos y las relaciones entre ellos esta dada por el diagrama de clases. En este proyecto la  clase ProjectFrame implementará la interfaz gráfica bajo la cuál el usuario interactúa con el sistema. Las siguientes clases se enfocan en atender a los eventos que surgen de la clase principal (ProjectFrame), ya que está es la que permite al usuario configurar parámetros y enviar comandos. La clase TimerListener se encargará de contactarse cada cierto tiempo con la clase UDPClient para entregarle el comando enviado por el usuario. UDPClient enviará el dato recibido, KeyHandler y MouseHandler manejaran los eventos asociados al teclado y el mouse respectivamente. Finalmente SliderListener estará atento a los cambios que se hacen en la barra del número asociado a la dirección.

Figura 1: Diagrama de Clases

    1. Diagrama de Secuencia

      Para modelar la interacción entre los objetos que conforman el sistema se presenta el diagrama de secuencia para el caso de uso iii, el cuál describe como el usuario presiona sobre una flecha una vez establecida la conexión.

Figura 2: Diagrama de Secuencia

 

  1. Implementación

    Para la creación de la interfaz se utilizó el lenguaje de programación JAVA, además se trabajó con el ambiente de desarrollo NetBeans el cuál contiene una serie de herramientas que facilitaron la construcción y diseño.

  2. Pruebas

    A continuación se exponen los resultados para algunas pruebas correspondientes a los casos de uso indicados anteriormente. En el caso de la prueba relacionada con el envío de comando (caso de uso iii), se desarrolló un terminal de “test” capaz de interpretar la dirección enviada por el usuario que se encuentra utilizando la interfaz.


    1. Prueba caso de uso i “el usuario una vez iniciada la interfaz cambia el mouse por el teclado”.

Figura 3: El usuario inicia aplicación para el cliente

Figura 4: El usuario selecciona el envío de comandos a través del teclado



    1. Prueba caso de uso ii “el usuario establece conexión con terminal”.

Figura 5: El usuario modifica el campo IP

 

Figura 6: El usuario modifica el campo PORT.

Figura 7: El usuario presiona “set”

Figura 8: Se establece conexión



    1. Prueba caso de uso iii “una vez establecida la conexión, él usuario envía un comando utilizando el mouse.”

El usuario inicia aplicación para el cliente.

EL usuario presiona sobre una de las flechas de dirección de la interfaz

 

 

 

Figura 9: Terminal de prueba dibuja segmento de línea

 

 

Problemas y Dificultades Encontradas

 

A lo largo del desarrollo del proyecto surgieron una serie de dificultades que se debieron sortear, entre estas podemos destacar las siguientes:

 

·         Java maneja las teclas presionadas como eventos independientes, esto genera problemas en el caso en que necesitemos reconocer una combinación de teclas. Para solucionar lo anterior se utilizaron flags que permiten interpretar combinaciones (Estados).

·         Generar la sensación de fluidez cambiando dinámicamente la dirección cuándo se mueve el puntero del mouse con el botón presionado. Esto se solucionó implementando otras funciones del MouseListener como lo son  aquellas que detectan si el puntero esta fuera o dentro de la casilla del botón presionado.

 

·         Ya que se trabajó con envío de datos, se investigó como se crea el datagrama en el lenguaje JAVA.

 

 

Posibles Mejoras


Con el fin de mejorar el proyecto se incluyen ciertas mejoras que se pueden realizar a futuro:

·         Agregar un streaming de una webcam conectada al terminal e ir constatando mediante video el movimiento logrado.

·         Graficar  la trayectoria que se ha llevado desde el origen y determinar mediante unidades físicas cuánto se ha recorrido.

·         Que la interfaz acepte distintos tipos de control como un podrían ser un joystick USB, alguna aplicación dentro de un teléfono móvil ó control por voz.

 

 

Descarga de cliente y módulo de prueba


Descargar

Nota: el cliente debe utilizar los parámetros IP:PORT = 127.0.0.1:80 para pruebas locales.

 

 

Descargar la presentación


Descargar