martes, diciembre 12, 2006

Paso 7: Visión, se pudo

Hace rato que no actualizamos la página y no por eso significa que el proyecto se haya abandonado, sino todo lo contrario. Queja más, queja menos, logramos hacer una interfaz medianamente decente para el sistema de visión del proyecto y lo mejor de todo... funcionó!

Ahora que está hecho, es muy probable que caigamos en el comentario típico: es una tonteria. Sin embargo, las idas y vueltas quer tuvimos desde finales de octubre nos levaron a tener severos atrasos en el desarrollo del programa, por lo que tuvimos miedo de fracasar en ésta etapa. Además, la cosa podía complicarse más de lo esperado si éste trabajo no se presentaba para la materia de Computadores II donde uno staba anotado en la materia y el otro la cursó de oyente para reforzar y aprender algunos temas perdidos.

Finalmente, en casi 5 días y sus respectivas noches, instalamos el bunker y le dimos duro y parejo, dejando como lo resultado lo que viene a continuación.





1. Retomando la idea del proyecto

Con el título de “Estimación de Posición y Velocidad de un Patrón Visual” se entregó un informe en el que se detallaron los sieguientes objetivos:

"Por medio del paquete Artoolkit, realizar la captura de imágenes, medición de la posición de un patrón visual en el plano y posterior estimación de la velocidad. Con estos datos, se presentan en pantalla las gráficas de los valores obtenidos. Finalmente, ésta información se enviará, vía puerto serial, a una terminal de dialogo para su posterior empleo. "

2. Sistema de visión

Dado que la etapa de captura de video significaba invertir una gran cantidad de tiempo en desarrollarla, decidimos adoptar como base el paquete Artoolkit v1.7.3 . De ésta forma pudimos no sólo capturar imágenes de video entregadas por una camara, sino que, además, nos permitió identificar los marcadores que servirán de objetivo para el seguimiento en posición y velocidad de la plataforma, al poder obtener con relativa sencillez la posición del marcador en el eje x-y-z.

3. Interfaz de Usuario

Al ejecutar el proyecto, se presenta una pantalla en la que se setean los parámetros de la captura de video tales como, la velocidad de cuadros por segundo, tamaño en píxeles de la ventana y el formato de color ha emplear, siendo estos últimos, los únicos que pueden modificarse.

Una vez finalizada la configuración del video, emerge la pantalla principal de la figura 1, donde se realizan todas las operaciones propuestas. En la misma, se puede observar los módulos anteriormente mencionados y demás información necesaria para la obtención y el análisis de los datos.

En un recuadro se presentan los parámetros dimensionales de la imagen como así también el tiempo de captura. Este tiempo es empleado por el programa para la realización de las siguientes tareas:

  • Ejecución del bucle principal. En él se almacena la imagen, detecta el marcador y se obtiene la matriz de transformación.
  • Exhibición de las coordenadas en pantalla.
  • Envío de la información por el puerto serial.
  • Conformación del vector de la imagen capturada.

Figura 1. Pantalla principal del entorno visual, identificación y comunicación.

Se ha colocado además una barra de desplazamiento (con un indicador de valor), con el objeto de establecer en forma manual el umbral de binarización empleado para la detección del marcador. Este valor, previamente seteado por default en 100, será enviado a la clase responsable del tratamiento de la imagen.

En el cuadro “Identificación del Marcador”, la clase responsable de la generación de gráficos, muestra una imagen en donde se efectúa el seguimiento, mediante cursores, del patrón empleado. La intercepción de la línea vertical y horizontal denota la ubicación actual del patrón, entendiéndose como la coordenada X=0 e Y=0 (independientemente de Z) la posición central de la imagen.

En otro cuadro, denominado “Estimación de la Posición”, se presentan los valores x-y-z que posee el marcador con respecto a la cámara. El patrón empleado para su identificación es el propuesto en el paquete Artoolkit.

Finalmente, se estableció un cuadro de Comunicación. En él se presenta información referente al manejo del puerto: apertura, configuración y tiempo de espera. Además, se colocó un botón que, al oprimirlo, establece los parámetros de la comunicación (velocidad de transmisión, cantidad de bits de datos, paridad y número de bits de parada). Ello habilita el puerto serial de la PC para el envío de datos.

La transmisión cesa al oprimir dicho botón nuevamente. Los datos enviados serán las coordenadas del marcador x-y-z.


4. Detalles del programa

La programación del proyecto fue realizada en wxDev-C++ V6.10, utilizando el compilador GCC por defecto, para ser usado en Windows (Win32 modo gráfico).

Se desarrollaron tres clases:

Artool: Núcleo del programa. Posee todos los métodos y atributos necesarios para el análisis de imágenes y detección de de los patrones o marcadores.

En un método de inicialización, abre la ruta de acceso a video, determina el tamaño de la imagen y configura los parámetros de la cámara.

El método principal, captura la imagen, detecta los marcadores, determina la visibilidad de los mismos y obtiene la matriz de transformación entre el marcador y la cámara.

Finalmente, detiene la captura de imágenes y cierra el acceso al recurso de video.

Complementariamente, la clase está provista de una serie de “geters” y “seters” para obtener las coordenadas del patrón y ajustar el umbral de binarización.

PlotXY: Esta clase realiza la confección de la imagen mostrada y, por medio de la importación de ciertos atributos de la artool, establece los cursores de identificación y seguimiento del marcador.

SerialCom: Una de las funcionalidades que se aportó a la librería Artoolkit es la comunicación con diferentes dispositivos desde la PC, a través del puerto serial.

La clase CSerialCom provee todas las características típicas del manejo del puerto. Entre ellas se puede contar con los parámetros de comunicación (tasa de baudios, cantidad de bits de datos, paridad, número de bits de parada), los tiempos de espera para la escritura y lectura de datos, la apertura y cierre del puerto y, finalmente, las funciones de envío y recepción de datos. Incluso, fue agregado un método dedicado al envío de cadena de caracteres ya que un solo byte no es suficiente para los fines del proyecto.


5. Conclusiones

Al desarrollar el Proyecto, nos propusimos cumplir con esmero los objetivos planteados en el pre-informe.

Los inconvenientes encontrados fueron, en su mayoría, la configuración del paquete Artoolkit y las librerías que éste requiere. Otra dificultad, que por falta de tiempo no hemos podido solucionar, fue el de presentar la imagen capturada por la cámara en el formulario. Y finalmente, el hecho de querer modificar on-line el tiempo de muestreo.

Como desarrollo a futuro, se trabajará para solucionar los inconvenientes presentados, como así también el de optimizar la identificación del marcador empleando, entre tantas cosas, un ajuste eficiente del umbral de binarización. Otorgarle robustez a la comunicación con dispositivos externos. Exhibir la imagen capturada conjuntamente con la identificación de los marcadores y la estimación de la velocidad de los mismos. Se desea incursionar también en el empleo de threads (hilos de ejecución) los cuales, por cuestiones de tiempo, no hemos llegado a preparar.