sábado, 19 de marzo de 2011

Finalizando GUI y comienzo de módulo de IA

En la versión actual del proyecto, la interfaz gráfica ya está casi finalizada, solo quedan por pulir errores menores de refrescos, y se han añadido algunos componentes nuevos:

-Un gráfico que muestra las direcciones tomadas por el vehículo; ésto se hará representando un volante.



-Representación de las de gráficas de las acciones (aceleración, frenado, dirección). Para ello ha sido necesario implementar un nuevo parser para la recepción de acciones. En la versión actual está configurado para recibir las acciones por parte del cliente, pero en futuras versiones, las acciones serán las que se determinen en el módulo de IA.

- Permitir cargar/guardar logs en .xls.


-Ajuste de escalas en las gráficas (por ejemplo en la gráfica de aceleración, la escala era demasiado grande).


-Cálculo del radio de curvatura a partir del radio de la circunferencia de la curva. Este punto ya es trivial, ya que en la versión anterior tenía ya calculado el radio de la circinferencia. Ahora simplemente tengo que hacer la inversa de este valor para obtener el radio de curvatura.

Radio curvatura=1/Radio circunferencia.

Cuánto menor sea el valor del radio de curvatura, significará que la curva es más abierta.

-Se ha mejorado también en esta versión el sistema de detecciones de curvas, ahora en vez de calcular las medias de los sensores derecho, central e izquierdo, simplemente se calculará cuál es el sensor que indica la máxima distancia, y ese sensor nos determinará hacia dónde va la curva o si se trata de una recta el entorno percibido.

-Se ha implementado los botones "Abrir fichero", "Opciones" y "Ayuda". El botón abrir fichero muestra una ventana desde la que se puede seleccionar un fichero .xls con datos a cargar. El botón opciones permite seleccionar si se desdea guardar o no un log de la carrera y también se puede seleccionar la ruta dónde se creará. El botón ayuda muestra una breve guía explicativa sobre las funciones de la aplicación.





También se ha comenzado 2ª fase del proyecto, el diseño e implementación del módulo de Inteligencia Artificial :
Este módulo constará de una serie de reglas con prioridad modificable que serán ejecutadas según la decisión que tome el motor de selección de reglas.
Las reglas se leerán desde ficheros externos Excel y estarán formadas por etiquetas booleanas.




Cuando se avance más en este módulo se explicará en má detalle.


Saludos.

lunes, 14 de marzo de 2011

Últimos avances

Después de haber pasado la época de exámenes, de nuevo he conseguido poder avanzar en el PFC.
En esta nueva versión hay múltiples cambios, mejoras y componentes nuevos, que describiré a continuación.
Resumiendo, he desarrollado los siguientes puntos:

  1. Mapa aparte
  2. Controles de reproducción centralizado para todas las pestañas.
  3. Colores en las gráficas VRA
  4. Cálculo del pequeño radio de distancia que hay desde el centro de la circunferencia formada por los sensores de distancia a cualquiera de los sensores.
  5. Corregir parpadeos en los gráficos.

Mapa aparte
---------------
Hay una nueva pestaña en la que se dibuja el mapa del circuito a la vez que se ejecuta la carrera.
Para pintarlo me baso en la estructura Entorno. Esta estructura contiene una cadena que define el tipo de entorno reconocido, así como el radio de curvatura en caso de ser una curva el entorno reconocido ( -1 si no es curva o es desconocido), y también contiene una estructura con el ciclo completo.
A partir de esta información se puede ir reconstruyendo una aproximación al circuito.
Tengo el problema de que al solo estar almacenando cambios de entorno, no sé con precisión cómo de larga tengo que representar por ejemplo una recta. En una siguiente versión este punto se mejorará. Quizá una posible solución sea almacenar los entornos de cada instante, y no solo en los instantes de cambio de entorno.

Controles de reproducción
----------------
Se ha independizado la barra de controles del resto de pestañas. Ahora aparece debajo de todos los paneles de pestañas, y cuándo se produce un evento relacionado con esta barra quedan afectados los paneles de gráficas VRA y el panel de telemetría.

Colores en las gráficas VRA
------------------
Una novedad importante es la mejora de la pestaña "gráficas". En esta pestaña se representan la velocidad, las revoluciones por minuto y la aceleración (de ahí el nombre VRA, para abreviar). Para cada vuelta, se representan las gráficas con un color distintos y cada vez que comienza una nueva vuelta se empieza a pintar desde el extremo izquierdo de cada gráfica. Una vez que ha terminado la ejecución, se puede seleccionar el instante deseado desde la barra de reproducción, señalándose en cada gráfica VRA el instante mediante una línea vertical negra. Esto último ha sido bastante costoso de implementar, he tenido que usar 2 búferes de imágenes, con la idea de que en el momento previo a pintar la línea vertical de marcado, se pintase de nuevo las gráficas con el estado que tenían al finalizar la ejecución, apareciendo así la ilusión de que se mueven las líneas verticales al mover el control de reproducción.
También se han incluído en esta pestaña varias cajas de texto, que muestran la distancia desde la salida, la velocidad , las revoluciones por minuto y la aceleración para un instante seleccionado.

Cálculo del radio de la circunferencia formada por los sensores de distancia
--------------------------------------------------------------------------
Esta parte está comentada en la entrada anterior.


Corrección de parpadeos en los gráficos
---------------------------------------
Para evitar que las actualizaciones de los gráficos interfieran entre las distintas pestañas solapándose, se ha empleado fundamentalmente el método setVisible(boolean v) . Al cambiar de pestaña se activan/desactivan los paneles adecuados.

Otras mejoras
-------------------
Otra mejora que he desarrollado ha sido la refactorización del código fuente, se han creado las clases MemGraficas y GraficasVRA.
La clase MemGraficas se ha utilizado para tener un histórico sobre qué coordenada x, velocidad, rpm, aceleración y nº de vuelta corresponde a cada tick (muestreo). Esta estructura es de gran utilidad cuándo hay que marcar instantes en las gráficas.

La clase GraficasVRA la diseñé para equilibrar la cohesión y el acoplamiento de la clase GUI_Telemetria, que ya estaba teniendo demasiada responsabilidad y se estaba dificultando la comprensión del código. Esta nueva clase tiene la responsabilidad de todas las operaciones de refresco, pintar un nuevo instante, representación de marcado, etc de las gráficas VRA.

A continuación incluyo una captura de la versión actual:


Un saludo y hasta la próxima actualización.