martes, 17 de mayo de 2011

Simulación 3D de un Sistema de Impresión por Barrido en MATLAB

El Proyecto que se presenta ahora es: Simulación de una impresora. Dicha impresora cuenta con un sistema de impresión por barrido, el cual para lograr dicha tarea fue necesaria la utilización de herramientas y un motor de gráficos 3D para poder visualizar con claridad dicha simulación.

Idea Inicial:

· Todo el proyecto se basó en la idea de realizar un sistema empotrado, el cual sea capaz de realizar una impresión de forma primitiva, es decir, usando la técnica de impresión por barrido, y la velocidad de impresión de cualquier imagen dependería de la velocidad con que trabajarían los motores utilizados en el montaje del sistema empotrado real, para llegar a realizar dicho proyecto se buscó la forma de como probar el sistema sin antes montarlo, evitando así gastos en pruebas innecesarias, es decir se pensó en la SIMULACIÓN.

· Para realizar la simulación se utilizó el software MATLAB, en su versión R2009a y también el software de animaciones 3D para simulaciones V-Realm Builder, en su versión 2.0.

· Una de las ventajas de usar MATAB y V-Realm Builder, es que dichos programas pueden interactuar uno con el otro, es decir se podrá crear un interfaz de comunicación para que desde MATLAB se puedan controlar cualquier modelo hecho en V-Realm Builder.

Descripción Del Programa

· Al pensar cómo es que lo datos de una imagen pueden ser enviados a un sistema hardware sabiendo que solo este entiende unos y ceros, se plantea la idea de procesar la imagen y llegar a obtener datos que nos puedan servir para poder realizar dicha impresión.

El procesamiento de la imagen

Esta es la parte fundamental del proyecto, se partirá de una imagen cualquiera, de la cual tendremos que obtener la información necesaria para poder hacer que nuestro sistema de impresión entienda lo que tiene que imprimir, para lograr nuestro objetivo utilizaremos distintas funcionalidades que nos ofrece MATLAB.

El enfoque general será el siguiente:

Se puede partir de imágenes en formato RGB, en Escala de Grises, o en blanco y negro, a dicha imagen se le aplicará un algoritmo de Binarización, aplicando este algoritmo obtendremos la Matriz Lógica de la imagen.



Bueno ahora ya con esto tenemos nuestra imagen en una matriz de unos y ceros (con la misma dimensión de la imagen) como se quería al principio, donde el valor “0” representa los pixeles que están pintados, y el valor “1” representan los pixeles sin pintar, pero esto no es una restricción ya que al invertir esta definición obtendremos la misma imagen pero invertida. Por convención utilizaremos la primera definición.

Pero ahora se plantea la pregunta: ¿Que tan eficiente sería leer cada celda de la matriz y enviarlo al sistema empotrado para que comience a imprimir? Bueno y la respuesta es claramente que NO sería eficiente, ya que esto conllevaría un costo computacional muy alto si es que hablamos de lectura y escritura en puertos de comunicación (LPT y COM) esto daría como consecuencia un sistema realmente lento.

Entonces se ideó una solución para dicho problema, esta solución consiste en empezar a agrupar secuencias de ceros y secuencias de 1 que estén contiguos, para esto se diseñó un algoritmo al que se le denominó ALGORITMO DE SECUENCIAS, con este algoritmo lograremos obtener matrices que nos proporcionen datos que faciliten la comunicación con el hardware o con el sistema de impresión simulado y consiste en:

La Matriz Modo de Operación determinará si debe de pintar o no debe de pintar, la Matriz de Pasos determinará cuantos pasos debe de pintar y cuantos no, en conjunto estas matrices formaran la Matriz de Secuencias.

Este algoritmo devuelve tanto la matriz de secuencias original, así como también la matriz de secuencias invertidas en caso de que se decida imprimir la imagen en modo invertido. Los resultados obtenidos al aplicar este algoritmo a la matriz binaria son estos:


Lo que significa ‘P61’ es que se debe de pintar 61 pasos, luego ‘A15’ indicará que solo se debe de avanzar 15 pasos sin pintar, luego pintar nuevamente 25 pasos, así sucesivamente hasta llegar a ‘SL_RC’ que significa Salto de línea y retorno de carro.

En conclusión la Matriz de Secuencias obtenida nos brinda todos los datos necesarios para poder controlar el hardware asociado al diseño de la impresora real.

El entorno de Simulación

En la búsqueda de software libre para diseñar modelos 3D a través de Internet, he probado con varias herramientas, y entre ellas encontré una distribución libre algo vieja basada en dos componentes (visor – plugin y editor) el V-Realm Builder el cual, a través de código basado en campos y nodos podías construir un modelo 3D de gran nivel.

El lenguaje que utiliza este software V-Realm Builder es el VRML, (Virtual Reality Modeling Language) , "Lenguaje para Modelado de Realidad Virtual" este formato de archivo normalizado que tiene como objetivo, la representación de gráficos interactivos tridimensionales; diseñado particularmente para su empleo en la web. Consiste en un formato de fichero de texto en el que se especifican los vértices y las aristas de cada polígono tridimensional, además del color de su superficie.

Además este software tiene la posibilidad de interactuar de forma directa con el software MATLAB.



Para la creación del modelo tridimensional, el lenguaje VRML se basa en la creación de nodos o bloque de objetos.

En la imagen mostrada apresiamos el diseño de la impresora, este diseño cuenta con dos rieles horizontales, y un soporte perpendicular a estos, el cual sostiene el cabezal o puntero de impresión.

Para poder simular el movimiento de los motores en el entorno V-Realm Builder se utilizó las funciones que brinda MATLAB para lograr una comunicación entre estos dos programas, de forma que asignaremos variables a los nodos de importancia en la simulacion; ademas se escribió funciones especificas para cada tarea que debería de realizar el sistema de impresión simulado.

Funciones Asociadas

1. Desplazar Puntero

2. Bajar Puntero

3. Subir Puntero


4. Avanzar


5. Retornar Puntero




Ahora ya se tiene el sistema montado y listo para empezar la simulación, es por tanto que será necesario diseñar una GUI (Interfaz Gráfica de Usuario), para que el sistema de impresión sea fácil de usar.

La interfaz Gráfica de Usuario presenta 3 campos, cada uno de ellos con un botón, el cual realiza una tarea específica.

1.Abrir: Este botón abre el navegador de archivos, desde el programa se especifica el formato permitido (*.jpg, *.png) para la apertura de archivos.

2.Procesar: El botón procesar llama a las funciones de conversión a escala de grises y binarización de la imagen, además aplica el algoritmo de secuencias y almacena en memoria las matrices de modo de operación y las matrices de pasos, otra funcionalidad de este botón es mostrar la imagen preprocesada y luego la imagen totalmente procesada.

3.Imprimir: El botón imprimir llama a las funciones que abre el sistema de simulación y lee de las matrices generadas por el botón de procesamiento, se hace una lectura de datos, los cuales representan movimientos para el sistema de simulación. El resultado es el siguiente:

Conclusiones y Resultados

·Se llegó a realizar una simulación de un sistema de impresión de una forma satisfactoria, dando como resultados imágenes impresas similares a las imágenes reales, llegando a la conclusión, que optar por una simulación y es mucho mejor y mucho más rentable que hacer pruebas físicas.

·Se llegó a determinar que usando una simulación en 3D se puede apreciar con más claridad el funcionamiento del sistema a realizar.

·El proyecto realizado reúne áreas de la ciencia de la computación con son el procesamiento de imagen, diseño de algoritmos, simulación de sistemas en tiempo real, diseño de hardware, diseño de software.

·El sistema de impresión simulado, tiene un tiempo de impresión considerable, es decir, mientras más grande sea la imagen, el tiempo será mayor, mientras más compleja sea la imagen, el tiempo será mayor. Esto se puede solucionar quitando o reduciendo los retardos directamente del código del programa, pero como la idea es simular un sistema real, se tomó tiempos aproximados a los tiempos reales del funcionamiento de un motor de pasos o un motor de corriente continua con los cuales se tiene experiencia en su funcionamiento y trabajo.


El link de descarga del código del programa está aquí:Simulación de Impresora, este proyecto también está publicado en la página de Mathworks:Aqui.

La documentación se puede descargar desde AQUI
Enlace
Después de revisar el trabajo, me gustaría recibir comentarios sobre que tal les pareció, además me gustaría saber si tienen algunas ideas en las cuales trabajar, para poder mejorarlo.

Atte. Gerardo Reaño Ortega
Estudiante de Ciencia de la Computación en la Universidad Nacional de Trujillo - Perú