Sistemas de Visión Artificial Introducción al Diseño de Micro Robots Móviles2009/10 Sistemas De Visión Artificial Autores: Alejandro Vicente Pedro Javier Oscar Sergio Carlos INDICE DE CONTENIDOS 1 Introducción....................................................................................................................4 1.1 Naturaleza de la luz.....................................................................................................4 1.2 La luz como Onda electromagnética...........................................................................5 1.3 Interacción entre la luz y la materia. (5)......................................................................6 1.4 Visión Humana y Visión Artificial.............................................................................7 1.5 Historia......................................................................................................................10 1.6 Definición actual de visión artificial.........................................................................11 1.7 Pasos de un sistema de visión artificial.....................................................................14 2 Sistemas de visión artificial en robótica.......................................................................16 2.1 Técnicas de procesado de imágenes en Visión Artificial..........................................16 2.2 Etapas en el proceso de Visión Artificial..................................................................17 2.3 Adquisición de imágenes...........................................................................................18 2.4 Pre procesado.............................................................................................................19 2.5 Segmentación.............................................................................................................19 2.6 Análisis......................................................................................................................20 2.7 Reconstrucción tridimensional en visión artificial....................................................20 2.8 Tipos de medición en Visión Artificial.....................................................................21 2.8.1 Visión Robótica 2D................................................................................................21 2.8.2 Visión 3D con una cámara......................................................................................22 2.8.3 Reconocimiento de formas 3D...............................................................................22 2.8.4 Reconocimiento mediante Fotogrametría 3D.........................................................23 2.8.5 Sensor óptico 3D estéreo........................................................................................24 2.8.6 Servo Visual 3D......................................................................................................25 3 Software de Visión artificial.........................................................................................26 3.1 Introducción...............................................................................................................26 3.2 Clasificación..............................................................................................................27 3.3 Paquetes de programas..............................................................................................27 3.3.1 MatLab....................................................................................................................27 3.3.2 LabView.................................................................................................................28 3.4 Librerías de funciones...............................................................................................28 3.4.1 OpenCV..................................................................................................................28 3.4.2 MIL.........................................................................................................................29 3.4.3 Mavis......................................................................................................................30 3.4.4 CMUcam(software)................................................................................................30 4 Detección de Objetos ...................................................................................................31 4.1 VISION BIDIMENSIONAL ....................................................................................31 4.1.1 Segmentación .........................................................................................................33 4.1.2 Establecimiento de umbrales .................................................................................33 4.1.3 Bases de la visión en color para máquinas ............................................................34 4.1.4 Detección de bordes ...............................................................................................35 4.1.5 Creación de regiones .............................................................................................36 4.1.6 Análisis Geométrico ..............................................................................................36 4.1.7 Propiedades de tamaño y forma .............................................................................36 4.1.8 Representaciones geométricas ...............................................................................37 4.1.8.1 Código de Longitud de Secuencia.......................................................................37 Página 2 de 77 4.1.8.2 Código de Encadenamiento.................................................................................37 4.1.8.3 Árbol Tetrafurcado ("Quadtree").........................................................................37 4.1.8.4 Otras Representaciones........................................................................................38 4.2 VISION TRIDIMENSIONAL .................................................................................38 4.2.1 Forma a partir de sombreado .................................................................................39 4.2.2 Forma a partir de textura .......................................................................................40 4.2.3 Forma tridimensional a partir de forma bidimensional .........................................41 4.2.4 Detección de distancia y visión en estéreo ............................................................41 4.2.5 Reconocimiento de objetos tridimensionales ........................................................42 4.2.6 Ejemplo de Aplicación Real ..................................................................................42 5 Seguidor de líneas.........................................................................................................43 5.1 Introducción...............................................................................................................43 5.2 Ejemplos de robots con estas características.............................................................44 5.2.1 Robot velocista con visión......................................................................................44 5.2.2 Control cinemático de robots autoguiados utilizando un sistema de visión artificial .........................................................................................................................................46 5.3 Sistema de posicionamiento del robot por visión......................................................47 5.4 Robot Pob-Bot..........................................................................................................48 5.5 Otros robots...............................................................................................................50 6 CMUcam......................................................................................................................51 6.1 Introducción...............................................................................................................51 6.2 Características............................................................................................................51 6.2.1 Tipos de CMUcam..................................................................................................51 .......................................................................................................................................51 6.2.1.1 CMUcam Original...............................................................................................51 6.2.1.2 CMUcam2...........................................................................................................52 6.2.1.3 CMUcam3...........................................................................................................52 6.3 Implementación (modos de uso)................................................................................53 6.4 Ejemplos y aplicaciones............................................................................................53 6.5 ¿Donde se puede conseguir una?...............................................................................54 6.6 ¿Cuánto puede costar?...............................................................................................55 6.7 ¿Cómo empezar?.......................................................................................................55 6.8 Resumen....................................................................................................................56 7.- Bibliografía................................................................................................................74 Página 3 de 77 1 Introducción Uno de los sentidos más importantes de los seres humanos es la visión. Ésta es empleada para obtener la información visual del entorno físico. Según Aristóteles, “Visión es saber qué hay y donde mediante la vista”. De hecho, se calcula que más de 70% de las tareas del cerebro son empleadas en el análisis de la información visual. El refrán popular de “Una imagen vale más que mil palabras” tiene mucho que ver con los aspectos cognitivos de la especie humana. Casi todas las disciplinas científicas emplean utillajes gráficos para transmitir conocimiento. Por ejemplo, en Ingeniería Electrónica se emplean esquemas de circuitos, a modo gráfico, para describirlos. Se podría hacerlo mediante texto, pero para la especie humana resulta mucho más eficiente procesar imágenes que procesar texto. La visión humana es el sentido más desarrollado y el que menos se conoce debido a su gran complejidad. Es una actividad inconsciente y difícil de saber cómo se produce. De hecho, hoy en día, se carece de una teoría que explique cómo los humanos perciben el exterior a través de la vista. 1.1 Naturaleza de la luz La luz fue considerara, hasta el siglo XVIII, como una corriente de corpúsculos. Éstos eran emitidos por los focos luminosos y disminuía su densidad a medida de que se alejaban del foco. Podían penetrar en las sustancias transparentes y se reflejaban en las superficies de los cuerpos opacos. Cuando los corpúsculos penetraban en el ojo, excitaban el sentido de la vista. Esta teoría corpuscular fue desarrollada por Newton en el siglo XVII y mejorada posteriormente, con el modelo cuántico, por Plank a principios del siglo XX. En el siglo XIX, los trabajos de Young, Fresnel y Foucault salvaron la mayoría de las objeciones de la teoría ondulatoria. El impulso definitivo lo dio Maxwell, al explicar la luz como una radiación ondulatoria. Sin embargo, el efecto fotoeléctrico proporciono evidencias experimentales de que la luz tenía carácter corpuscular en la interacción con la materia. Hoy se admite que en la emisión de la luz intervienen electrones con cantidades de energía determinadas o discretas. Cuando un electrón pasa de un nivel de energía a otro inferior emite una partícula discreta de energía, llamada cuanto o fotón. El problema ahora consiste en hacer concordar el cuanto o característica corpuscular de la luz con la idea de onda continua. Para la Mecánica Cuántica, cuando se trata del comportamiento de gran número de cuantos, la teoría ondulatoria explica satisfactoriamente los fenómenos, pero al considerar el comportamiento de unos pocos cuantos prevalece la teoría corpuscular. Así, los fenómenos de propagación de la luz encuentran su mejor explicación dentro de la teoría ondulatoria, mientras que la acción mutua entre luz y materia, en los procesos de absorción y emisión, es un fenómeno corpuscular. Hoy aún se mantiene la teoría dual de la luz. Más adelante trataremos sobre la propagación de la luz y la formación de las imágenes. Todos estos fenómenos pueden interpretarse a partir de la teoría ondulatoria. Por tanto, se puede considerar que las fuentes luminosas emanan de un frente de ondas, las cuales Página 4 de 77 pueden ser representadas, imaginariamente, por líneas rectas en la dirección de la propagación del tren de ondas, a las que se llamará rayo. 1.2 La luz como Onda electromagnética Algunos tipos de energía requieren de un medio conductor para propagarse. Como así sucede con la energía eléctrica o mecánica. Pero hay otros tipos de fuentes energéticas que no necesitan de un soporte conductor, éste el caso de la luz. Las radiaciones electromagnéticas se propagan en forma de dos ondas vectoriales mutuamente acopladas y perpendiculares entre sí; una onda para el campo eléctrico y otra para el campo magnético. Según la teoría ondulatoria, la luz se propaga en forma de onda que viaja en el espacio libre con una velocidad constante c = 3×108 m/s. El espectro visible es una porción muy pequeña del conjunto de ondas electromagnéticas que tiene la peculiaridad de ser captada por los ojos y procesada en el cerebro. El ojo humano es capaz de distinguir radiaciones de longitudes de onda comprendidas entre los 380 nm a los 780 nm, cuyas frecuencias oscilan entre los 3.2×1014 Hz y los 7.7×1014 Hz. El sentido de la vista transforma las diferentes amplitudes y frecuencias del espectro visible en sensaciones conocidas como brillo y color respectivamente. Fig. 1-1 Campo electromagnético Fig. 1-2 b) Espectro de la luz Fue Newton quien observó cómo la luz blanca, la procedente de la luz solar, se podía descomponer en unas serie de haces luminosos de colores cuando atravesaba un prisma óptico. Newton, con este experimento, hallo el espectro de la luz diurna mediante el fenómeno conocido como dispersión de la luz o dispersión cromática, cuya explicación física escapaba de su teoría corpuscular. Mediante la teoría ondulatoria se sabe que cada color es en realidad una onda electromagnética de frecuencia determinada y que, al penetrar en el prisma óptico, se desvía en una dirección diferente debido a que el índice de refracción de este material varia con la frecuencia de la onda penetrante, con lo que el haz se expande de forma que las radiaciones monocromáticas puedan ser distinguidas y observadas por el ojo humano. Página 5 de 77 Fig. 1-3 Descomposición de la luz Fig. 1-4 Dispersión cromática de la luz. 1.3 Interacción entre la luz y la materia. (5) Cuando un cuerpo recibe radiación luminosa, una parte es absorbida, otra es reflejada y hay otra parte que es transmitida. Por el principio de conservación de la energía, el flujo luminoso incidente será igualado a tres mecanismos: INCIDENTE TRANSMITIDA, ABSORBIDA Y REFLEJADA F = F + F + F Según sea la longitud de onda que reflejen, transmitan o absorban así será el color con el que se percibe el objeto. Un objeto que absorba todas las frecuencias se captará como negro, mientras que un cuerpo que refleje todas las longitudes de onda visibles aparecerá blanco. En los objetos opacos la transmitancia es insignificante, siendo las frecuencias que refleja el cuerpo las que determinan con que color se percibe. En los transparentes, por el contrario, son la reflectancia y la absortancia las que valen prácticamente cero. En consecuencia, una especificación puramente objetiva del color de una superficie opaca puede expresarse en términos de reflectancia espectral. En el caso de materiales transparentes vendrán dadas por la transmitancia espectral. La radiación reflejada, la captada por el observador, depende de la naturaleza de la superficie en la que se refleja el haz luminoso, así como las condiciones de iluminación y posición del punto de vista. Sea dA el área de una superficie plana: Página 6 de 77 Fig. 1-5 Sombra En la figura, un elemento de superficie cuya normal n forma un ángulo q respecto a un manantial puntual S. Asumiendo que la fuente luminosa S ilumina por igual en todas las direcciones. La relación entre el flujo incidente en la superficie respecto al área, define la iluminación como: Fig. 1-6 Ecuación Iluminación De otro lado, a la fracción del flujo incidente que sea reflejada en la dirección del observador, esto es, desde la superficie al sensor se la llama radiación reflejada o luminancia. La radiación reflejada de la superficie es definida como el flujo emitido por unidad de área reflejada y por unidad de ángulo sólido en la dirección vista por el sensor. Se define la radiación radiada, L, como: Fig. 1-7 Ecuación radiación Fig. 1-8 Reflejo 1.4 Visión Humana y Visión Artificial. La visión es el sentido más importante que tiene el ser humano. Así, mientras, para el oído se tiene alrededor de treinta mil terminaciones nerviosas, en la vista hay más de dos millones. La radiación exterior recibida por el ojo debe ser transformada en señales que sean procesadas por el cerebro. El ojo es el elemento transductor mientras que el cerebro es el que procesa dicha información. El ojo tiene una forma, aproximadamente, esférica de unos 2.5 cm de diámetro. Página 7 de 77 El ojo está formado por una óptica y una zona sensorial. La óptica está constituida por la córnea, el iris o pupila y el cristalino. La cornea es un material transparente y funciona como lente fija. La pupila regula la cantidad de luz que entra en el interior y el cristalino hace las veces de lente variable, permitiendo el enfoque dependiendo de la distancia de los objetos. Los músculos que sujetan al cristalino provocan su deformación, cuya consecuencia es el enfoque del campo visual. La misión de la óptica del ojo es conducir la radiación electromagnética, del espectro visible, hacia la retina. Fig. 1-9 Anatomía del ojo Fig. 1-10 Representación ojo mirando La retina se encuentra en la parte posterior del glóbulo ocular y es donde se ubican las células fotosensibles: los conos y los bastones. Fig. 1-11 Células fotosensibles En la retina se puede distinguir dos partes: la fóvea y la mácula. La fóvea es la parte central de la retina, de menor tamaño y donde se encuentran los conos. Es en esta zona donde se tiene mayor sensibilidad a la longitud de la onda electromagnética, con un ángulo visual de dos grados. La apertura corresponde, aproximadamente, con el ancho del pulgar extendido el brazo. La fóvea es tan pequeña que es necesario mover el ojo para enfocar dos puntos tan próximos como los del signo de puntuación (:). Esta información visual transmitida al cerebro se llama visión fóvea. La mácula es de mayor extensión, la agudeza visual es menor y está definida por los bastones. Esta zona se encarga de la visión periférica. Página 8 de 77 La percepción del color de una imagen la realizan los conos. Son unos seis millones y cada cono tiene conexión a varias neuronas. Basándose en la información aportada por los conos, el cerebro construye la sensación de color. Por el contrario, los bastones son más de 100 millones y son capaces de detectar la intensidad lumínica. Varios bastones están asociados a una única neurona. Fig. 1-12 Distribución de conos y bastones en el ojo Mientras la visión fóvea tiene mayor agudeza, más resolución y percibe los colores, la visión periférica le da al cerebro más información espacial que la fóvea y destaca los contrastes. De este hecho se destaca que en la oscuridad, la visión periférica es más adecuada que intentando centrar la visión sobre el objeto. Fig. 1-13 Visión diurna/nocturna Gráfico. Sensibilidad del ojo en luz diurna y en visión nocturna. La sensibilidad de la intensidad en el ser humano es alta siempre que los elementos que se comparen sean pocos. Cuando el número de intensidades involucradas simultáneamente es superior a unos 24 tonos se pierde la mayor parte de esta sensibilidad. Esto explica que, en la mayoría de los casos prácticos, sea suficiente el uso de 32 ó 64 niveles de intensidad para representar una imagen. El color es una característica del sistema de percepción humana y está relacionado con las sensaciones recibidas por el ojo en el espectro visible. El color es la respuesta del Página 9 de 77 sistema visual humano ante las variaciones de las longitudes de onda del espectro electromagnético visible. Estudios fisiológicos han revelado que existen tres tipos de conos, denominados tipos S, M y L. Los S son más sensibles a las ondas cortas (azules – 450nm), los M a las medias (verde – 540 nm) y los L a las de longitudes largas (rojo 650 nm). Este hecho ha dado base a la teoría del triestimulo, de manera que el color se puede representar en una base de tres componentes fundamentales: rojo-verde y azul (RGB – Red, Green, Blue). La sensibilidad de cada cono no es exactamente igual a cada parte del espectro fijado. Concretamente, los conos azules son los menos sensibles, mientras que los conos verdes son los más sensibles. Otra consideración a tener en cuenta es la refracción de los rayos luminosos que penetran en la retina. No todos afectan por igual. La luz de alta frecuencia (azul) focaliza en un punto anterior a la retina, mientras que las bajas frecuencias (rojos) lo hacen en puntos posteriores. Esto tiene como consecuencia que los detalles rojos o azules no puedan distinguirse netamente en una escena. Justo lo contrario de lo que ocurre con los verdes, cuyo punto de convergencia o focalización se sitúa exactamente en la retina, lo que induce a una mayor resolución del ojo para estas tonalidades. Resumiendo, las principales ventajas de la visión humana respecto a la artificial y viceversa, son: Sistema humano: Mejor reconocimiento de objetos. Mejor adaptación a situaciones imprevistas. Utilización de conocimiento previo. Mejor en tareas de alto nivel de proceso. Sistema artificial. Mejor midiendo magnitudes físicas. Mejor para la realización de tareas rutinarias. Mejor en tareas de bajo nivel de proceso. 1.5 Historia En el año 1826 el químico francés Niepce (1765-1833) llevó a cabo la primera fotografía, colocando una superficie fotosensible dentro de una cámara oscura para fijar la imagen. En 1838 el químico francés Daguerre (1787-1851) hizo el primer proceso fotográfico práctico. Daguerre utilizó una placa fotográfica que era revelada con vapor de mercurio y fijada con trisulfato de sodio. Página 10 de 77 Primeras fotografías Fig. 1-14 Fig. 1-15 - Fotografía aérea (mediados del s. XIX): cartografía - 1920: se utilizaba para el levantamiento de planos - Años 50: la fotografía en color (ya muy perfeccionada), los barredores multiespectrales y el radar, abrieron nuevas zonas del espectro electromagnético para su uso en prospección. - 1960: en satélites para el estudio de recursos naturales, cartografía, variables meteorológicas, etc. - 1980: guiado de robots, manipulación, control de calidad - 1997: Interpretación de imágenes obtenidas de otros planetas y galaxias. - 2000: imágenes en teléfonos móviles, videoconferencias, sistemas de vigilancia, de control de acceso... 1.6 Definición actual de visión artificial -La Visión Artificial, es el proceso de obtención, caracterización e Interpretación de la información a partir de imágenes. Se estima que aproximadamente las ¾ partes de la información que maneja el ser humano es visual, parece lógico pensar que el objetivo de rotar a las máquinas del sentido de la vista supondrá un salto cualitativo en sus capacidades de actuación. -La visión artificial tiene como finalidad la reproducción del sentido de la vista. Se trata de un objetivo ambicioso y complejo que se encuentra actualmente en una etapa todavía primitiva. Es la adquisición de imágenes y su análisis e interpretación posterior con el fin de obtener la información necesaria para controlar una máquina o un proceso industrial. La extracción de la información de un objeto o una escena en una o más imágenes se realiza de forma automática y sin establecer contacto físico con el objeto. Página 11 de 77 -La visión es un proceso de tratamiento de información que Permite obtener una descripción simbólica del mundo real a partir de Imágenes. Parece fácil pero es ciertamente difícil. Una definición más acorde con su estado de desarrollo actual sería: -Verificar un proceso o una actividad específica. Es una tecnología que integra aplicaciones informáticas, ópticas y electrónicas. Permite mejorar la producción, ajustar los costes e incrementar la seguridad general. La visión artificial (denominada también visión por ordenador o por computador o machine visión) es una técnica de captación óptica, limpia, segura y muy versátil. El análisis de las imágenes obtenidas permite detectar en un objeto características físicas invisibles al ojo humano o establecer o comprobar alguna propiedad o medida predeterminada. Para la industria, la visión artificial incrementa la calidad y la seguridad de los procesos de fabricación. Esta técnica tiene muchas aplicaciones. Se utiliza especialmente en el control de calidad, la manipulación de materiales, la ordenación por calidades (grading), el test y la calibración de aparatos y la monitorización de procesos. - Colimetría • La colorimetría tiene por objeto analizar los colores y atribuirles características lo suficientemente precisas para su identificación reconstrucción sin ambigüedades. y posible Representación del color. Entre los sistemas para representar el color, se pueden citar: Sistema HSV o HSI: el color se describe con ayuda de tres magnitudes: longitud de onda predominante, factor de pureza y luminancia (hue, saturation and value or intensity). Luminancia (L): Es la medida fotométrica de la intensidad de la radiación luminosa. Está asociado con el brillo (brightness), intensidad (intensity) o nivel de gris (value) del color: Fig. 1-15 Longitud de onda dominante (λd): Es la longitud de onda de la radiación monocromática o color puro más parecida al color considerado (nm). Está asociado con el tono (hue) del color. Página 12 de 77 Factor de pureza (p): Coeficiente numérico sin unidades y entre 0 y 1 (1 = color puro), que expresa el grado de disolución del color puro (λd) en blanco. Está asociado con el concepto de saturación (saturation) del color. Sistema RGB: el color se describe a partir de sus porcentajes de Red-Green-Blue. Fig. 1-16 Fig. 1-17 Si lo que interesa es la información relativa al color y no a la cantidad de luz (luminancia) se puede trabajar en el espacio r,g,b normalizado (más invariante ante cambios de iluminación1): Fig. 1-18 EL SISTEMA RGB Y EL HSI (Hue, saturation, Intensity) • El sistema RGB dispone usualmente de 8 bits por color (24 bits) pero existe redundancia de información ya que existe correlación entre los 3 planos. • En formato HSI (hue-saturation-intensity o tono-saturación intensidad) Página 13 de 77 no existe correlación entre los 3 planos; cada uno de ellos da información diferente sobre los detalles de la imagen. • Existen unas ecuaciones (no lineales) de transformación de RGB a HSI y viceversa. • Una pequeña perturbación en RGB puede producir importantes cambios en HSI. 1.7 Pasos de un sistema de visión artificial Un sistema de visión artificial consta de forma general de un conjunto de subsistemas capaces de realizar las funciones de: * Adquisición de imágenes. *Análisis de imágenes. Fig. 1-19 Adquisición de imágenes: Conjunto de operaciones que se efectúan para transformar la información luminosa de una escena en una señal digital. Este proceso permite almacenar una escena (imagen) en memoria o disco de forma digitalizada. Las operaciones necesarias en la adquisición de imágenes son: - Iluminación - Adquisición de la imagen a través de un sensor (transforma información luminosa en eléctrica analógica) y su óptica asociada (lente). - Digitalización: conversión analógico-digital a través de un ADC (la señal eléctrica analógica se transforma en digital). Análisis de la imagen: Página 14 de 77 El análisis o procesado de una imagen engloba a todas aquellas técnicas que permiten extraer una información explícita (posición, tamaño...) de los objetos que componen la imagen o escena. Estas técnicas se pueden englobar en cuatro bloques: - Pre-procesado: Conjunto de técnicas encaminadas a realizar una mejora de la imagen digitalizada. Consiste en modificar las características de la imagen digitalizada: * Nivel de gris * Contraste * Eliminación de ruido * Realce de características * Transformaciones geométricas - Segmentación: Proceso que divide una escena en partes constituyentes u objetos. Los objetos se extraen de la imagen para su posterior reconocimiento y análisis. Muchas de las técnicas de segmentación se basan en el análisis de: * Discontinuidad * Similitud -Descripción: consiste en extraer una serie de características (descriptores) de un objeto para reconocerlo. Los descriptores, a ser posible, deben ser independientes de la localización, orientación y cambios de escala de los objetos de una escena. Deben contener suficiente información para distinguir un objeto de otro. - Reconocimiento: Consiste en un proceso de etiquetado e identificación. Identificar cada objeto de una escena y asignarle una etiqueta. Identificar cada objeto segmentado en función de un conocimiento previo (inteligencia artificial). Fig. 1-20 Página 15 de 77 2 Sistemas de visión artificial en robótica. Los sistemas de visión artificial están en continuo desarrollo y evolución tecnológica, ya que proporcionan un valor añadido en los diferentes procesos productivos desarrollados mediante sistemas robotizados. Por ello, son muchas las empresas dedicadas a su fabricación debido al creciente número de consumidores que los utilizan integrándolos en células robotizadas con gran éxito. Estos sistemas nos permiten atender a las demandas más exigentes de calidad al permitir la inspección y el control del 100% del producto. Del mismo modo, resulta la opción idónea para el control de todo tipo de procesos y para el guiado de manipuladores y robots. Teniendo como principal ventaja que son sistemas que se amortizan rápidamente y tienen unos costes de funcionamiento muy reducidos. También se integran en sistemas avanzados de interacción hombre-máquina mediante visión por computador como son el seguimiento de manos, gestos, caras… Con esto, podemos realizar una primera clasificación de las posibles aplicaciones de los sistemas de visión artificial: Medición: Permitiéndonos realizar un control dimensional mediante la obtención de las magnitudes físicas de un objeto, para verificar que se corresponden con el patrón exigido. Como pueden ser medir las dimensiones de una pieza, sus diámetros, la plenitud de sus diferentes superficies, niveles... Guiado: Localización de la posición de un objeto detectando las coordenadas del mismo en el espacio para recogerlo y desplazarlo al lugar deseado. Sirviéndonos como guía a los robots para localizar o ensamblar piezas, guía el recorrido de un rollo de papel, tela, cartón... Identificación o clasificación: Asignar a un objeto la clase a la que pertenece mediante la extracción y procesado de sus características visuales (forma, color, etiquetaje, dimensiones, textura..). Permitiéndonos identificar piezas o productos por su perfil, realizar tareas de reconocimiento óptico (OCR) extrayendo de una imagen los caracteres que componen un texto para almacenarlos en un formato con el cual puedan interactuar programas de edición de texto… Inspección: Detecta la presencia-ausencia de piezas en ensamblaje, realiza la orientación de piezas, las inspecciones de defectos superficiales, la comprobación de la fecha en un lote de productos o su caducidad, los defectos en la superficie en productos producidos de forma continua... Control de calidad: Verificar el cumplimiento de los requisitos y especificaciones técnicas de un objeto a partir de un patrón dado. Siendo de gran importancia en los procesos productivos, ya que realiza inspecciones del 100%, evitando posibles escapes de la inspección ocular, lo cual garantiza la calidad y la homogeneidad de las piezas inspeccionadas. 2.1 Técnicas de procesado de imágenes en Visión Artificial Página 16 de 77 Una imagen es una representación visual de un objeto iluminado por una fuente radiante. Las que se perciben en las actividades visuales cotidianas provienen normalmente de la luz reflejada por los objetos. La naturaleza básica de una imagen está caracterizada por dos componentes: la cantidad de luz incidente que procede de la fuente de la escena contemplada, y la cantidad de luz reflejada por los objetos de la escena. Dichas componentes reciben el nombre de iluminación y reluctancia. En el proceso de formación de la imagen intervienen los siguientes elementos: el objeto, la fuente radiante y el sistema de formación de la imagen que consiste, básicamente, en un sistema óptico, un sensor y un digitalizador. Tenemos que tener en cuenta las dos principales causas que producen pérdida de información cuando se captura una imagen son la naturaleza discreta de los pixels de la imagen y el rango limitado de valores de intensidad luminosa que es capaz de ofrecer el sistema de digitalización. Efecto de muestreo: pudiendo crear una reducción de la resolución espacial de la imagen. Efecto de cuantificación: viene dado por la imposibilidad de tener un rango infinito de valores de medida para la intensidad de brillo de los pixels. Otro aspecto a tener en cuenta es la conectividad entre pixels, que establece las fronteras de objetos y las regiones componentes de una imagen. 2.2 Etapas en el proceso de Visión Artificial La visión artificial lleva asociada una enorme cantidad de conceptos relacionados con hardware, software y también con desarrollos teóricos. El primer paso en el proceso es adquirir la imagen digital. Para ello se necesitan sensores y la capacidad para digitalizar la señal producida por el sensor. Una vez que la imagen digitalizada ha sido obtenida, el siguiente paso consiste en el pre procesamiento de dicha imagen. Cuyo objetivo es mejorar la imagen de forma que el objetivo final tenga mayores posibilidades de éxito. El paso siguiente es la segmentación, siendo su objetivo es dividir la imagen en las partes que la constituyen o los objetos que la forman. Posteriormente, es necesario convertir estos datos a una forma que sea apropiada para el ordenador. La primera decisión es saber si se va a usar la representación por frontera o región completa. La representación por la frontera es apropiada cuando el objetivo se centra en las características de la forma externa como esquinas o concavidades y convexidades. La representación por regiones es apropiada cuando la atención se centra en propiedades internas como la textura o el esqueleto. Sin embargo, en muchas aplicaciones ambas representaciones coexisten. Finalmente, se el reconocimiento y la interpretación. El reconocimiento es el proceso que asigna una etiqueta a un objeto basada en la información que proporcionan los descriptores (clasificación). Mientras que la interpretación lleva a asignar significado al conjunto de objetos reconocidos. Estos pasos se recogen en el siguiente esquema: Página 17 de 77 Diagrama de bloques de las etapas de un sistema de V.A. Fig 2-1 2.3 Adquisición de imágenes En este primer paso, se trata de conseguir que la imagen sea lo más adecuada posible para que se pueda continuar con las siguientes etapas. Una correcta adquisición de la imagen supone un paso muy importante para que el proceso de reconocimiento tenga éxito. Dentro de esta etapa existen múltiples factores que atañen directamente al proceso de captura de la imagen, pudiendo resumirlos en dos grupos: El sistema hardware de visión artificial: cámara, óptica, tarjeta de adquisición de imagen, ordenador y software. el entorno y posicionamiento de los elementos: la iluminación, el fondo, posición correcta de la cámara, ruido eléctrico-óptico externo, etc. Un aspecto muy importante en este punto es obtener un perfecto calibrado de la posición de la cámara, para obtener una correcta imagen sin deformaciones. Es beneficioso utilizar un plantilla en la que se conozcan sus dimensiones mediante puntos de referencia. Además, será necesario realizar un programa de calibrado que determine de la imagen en tiempo real, los centros de gravedad de los puntos, la dimensión de cada punto, las Página 18 de 77 distancias de separación, la redondez de cada punto, el lado horizontal y vertical del cuadro, etc. 2.4 Pre procesado Toda imagen que se adquiere por medios ópticos, electroópticos o electrónicos sufre en cierta medida los efectos de la degradación que se manifiestan en forma de ruido, pérdida de definición y de fidelidad de la imagen. La degradación viene provocada por el ruido de los sensores de captura, imprecisiones en el enfoque de la cámara, movimiento de la misma o perturbaciones aleatorias, entre las que tiene relevancia el efecto de la propagación de la radiación en el medio de transmisión. Los mecanismos que tratan de contrarrestar estos efectos se incluyen dentro de la etapa de pre procesado, recibiendo el nombre de operaciones de restauración. Generalmente el pre procesado pretende reparar en la imagen los desperfectos producidos o no eliminados por el hardware: deformación de ésta, ruido introducido, poco o mucho contraste o brillo, falta de ecualización apropiada, etc. Los algoritmos de pre procesado permiten modificar la imagen para eliminar ruido, transformarla geométricamente, mejorar la intensidad o el contraste, etc. Por supuesto, como estos algoritmos necesitan gran cantidad de tiempo de procesado, es lógico que la mejor opción sería utilizar hardware adecuado que los evite. En un proceso de visión artificial estos algoritmos tienen que ser utilizados lo menos posible, un uso excesivo de ellos repercutirá en el tiempo de proceso total e indicará que la calibración, iluminación y selección de los elementos de la etapa de adquisición no ha sido la adecuada. Una parte importante en el pre procesado es la realización de un filtrado que nos ayude a eliminar el ruido existente. La mayoría de las implementaciones de filtros se realizan en dos dominios: Domino espacial: hacen referencia a la manipulación directa de la luminancia de los pixels. Dominio frecuencial: modifican indirectamente la luminancia de cada pixel utilizando como factores de ponderación los valores de los otros pixels de la imagen o del entorno del punto y las relaciones numéricas entre ellos. Estos filtros utilizan la Transformada Discreta de Fourier (DFT) y la transformada Discreta de Fourier Inversa (IDFT) para determinar las frecuencias que en las que se encuentra el ruido y utilizan filtros tipo FIR (con respuesta finita) e IIR (respuesta infinita). 2.5 Segmentación Segmentar una imagen digital consiste en diferenciar los diferentes objetos que componen la señal y determinar su posición con respecto al fondo de la imagen. El objetivo de esta es etapa es conocer perfectamente los objetos que hay para extraer las características propias de cada uno de ellos. Además, cada pixel de la imagen tiene que tener una etiqueta que los defina, de forma que simplemente por agrupación de Página 19 de 77 puntos con la misma etiqueta y conectados espacialmente, se pueda determinar la lista de objetos. 2.6 Análisis Una vez realizado el proceso de segmentación, donde se obtienen los bordes de los objetos bien definidos, el siguiente paso consiste en obtener parámetros que definan las características de cada objeto: forma, textura, color, orientación, etc. De entre todos los parámetros o descriptores que se puedan obtener, habrá que seleccionar aquellos que tengan las siguientes características: Ser discriminantes. Es decir, que diferencien lo mejor posible los objetos de una familia o clase con los de las otras. Ser independientes entre sí. Los descriptores que definan cada objeto no tienen que estar relacionados, de forma que si varía uno los demás no varíen por culpa de éste. Ser suficientes. Tienen que delimitar de forma suficiente la pertenencia de un objeto a una clase determinada. Además dentro de los descriptores podemos distinguir entre tres categorías básicas: Descriptores de frontera: pudiendo distinguir claramente el contorno de cada uno de los objetes. Descriptores de región: pudiendo representar a cada uno de los objetos presentes en la imagen mediante la región que ocupa en la misma. Descriptores adecuados para representar estructuras tridimensionales, que trataremos brevemente en el siguiente apartado. 2.7 Reconstrucción tridimensional en visión artificial Uno de los problemas clásicos del área de visión artificial es la reconstrucción tridimensional métrica a partir de imágenes adquiridas por una cámara sin calibración previa. Este problema involucra, específicamente, los siguientes pasos: la triangulación (cálculo de los puntos tridimensionales), la calibración de la cámara y la estimación de los parámetros de orientación y posición de la cámara. En primer lugar, hablaremos de la triangulación que tiene por objetivo encontrar la posición de un punto en el espacio a partir de la intersección de dos líneas que parten de la correspondencia de puntos en dos imágenes. Un problema en este punto consiste en la probable presencia de ruido en los datos medidos, que provocaría que la intersección no ocurra. En tal caso es necesario encontrar la mejor aproximación, que nos permita obtener un resultado lo más fiel posible a la imagen que se pretende reconstruir, y evite que el error se propague en el resto de los pasos. Una solución bastante empleada es resolver el problema mediante un algoritmo evolutivo, que lo trata como un problema de optimización multi-objetivo. Esta transformación suele ofrecer unos resultados bastante óptimos en comparación con otros métodos. Los procesos de calibración de la cámara y la estimación de los parámetros de orientación y posición de la cámara consisten en encontrar estos parámetros de las cámaras a partir de un conjunto de correspondencias de puntos extraídas de dos o más imágenes. Sin embargo, existen superficies y configuraciones de la cámara conocidas Página 20 de 77 como críticas donde se ha demostrado que es imposible extraer los parámetros de la cámara al usar, solamente, correspondencias de puntos. Una solución es aplicar un algoritmo evolutivo como el de evolución diferencial, basado en el modelo de la cámara oscura, que nos permite encontrar los parámetros de la cámara y obtener la reconstrucción tridimensional, aún en la configuración crítica de translación pura y en superficies críticas (puntos que yacen sobre un mismo plano). Otro problema importante dentro del área de la visión artificial, consiste en obtener la elipse que mejor se ajuste a un conjunto de puntos dado. Los algoritmos que resuelven este problema sólo minimizan el cuadrado de la distancia euclidiana entre la cónica y los puntos mediante métodos de gradiente, aunque no siempre convergen a la solución óptima. Para solucionar los casos en los que obtenemos soluciones que nos conduzcan a errores en la reconstrucción de las imágenes, se pueden aplicar algoritmos basados en evolución diferencial y algoritmos genéticos. Ya que tienen la flexibilidad de minimizar la distancia euclidiana o su aproximación cuadrática. Un aspecto a tener en cuenta es que el al emplear la distancia euclidiana e les da mayor peso a los puntos más cercanos, a diferencia de su cuadrado, en el cual se da mayor peso a los puntos más lejanos como se observa en los resultados. 2.8 Tipos de medición en Visión Artificial Como ya hemos comentado anteriormente, son muchas las empresas dedicadas al desarrollo y fabricación de sistemas de visión artificial. A continuación, realizaremos un breve repaso de las opciones que nos ofrece una empresa puntera en el mercado como es ISRA VISION. Donde podemos elegir entre distintos dispositivos en función de las necesidades que se impongan en la aplicación donde se van a utilizar: 2.8.1 Visión Robótica 2D Los sistemas de visión artificial 2D en robots son sistemas estándar para la identificación y / o reconocimiento de posición sin contacto directo por el sistema. Proporciona información fiable sobre la posición, el ángulo, y la variación de cualquier parte. La principal ventaja es una velocidad de reconocimiento muy alta a nivel subpíxel de extracción de contorno preciso. Características técnicas: Resistente, robusto y económico Máxima precisión en el reconocimiento de todo el camino desde el centro hasta el borde de la imagen El reconocimiento de partes de tocar o que se superponen unos a otros Reconocimiento de objetos de diferentes tamaños y la rotación Reconocimiento y diferenciación de la parte brillante en un fondo oscuro y parte oscura en zonas con más luz Fácil de usar Página 21 de 77 Fig. 1: Visión 2D 2.8.2 Visión 3D con una cámara En el pasado, los procesos y equipos disponibles para la medición 3D eran demasiado complejos, demasiado costosos y por lo tanto no eran económicamente viables para muchas aplicaciones. Hasta ahora, eran necesarios al menos dos cámaras (y generalmente más), incluyendo los equipos periféricos necesarios, para definir las posiciones de los objetos en una habitación. Esta es la razón por la que sólo fueron utilizados en tareas muy sofisticadas que justifiquen los gastos. El nuevo proceso de orientación 3D robot funciona con una sola cámara, lo que abre nuevas perspectivas para los usos coste-eficacia de procesamiento de imagen en todas las industrias importantes. Ahora es posible, con una sola imagen capturada, definir con precisión un objeto de tres dimensiones sobre la base de la medición de tres criterios con seis grados de libertad (posición y orientación). Características técnicas: Un ahorro considerable en el equipamiento de equipos y bajos costos de operación Alta flexibilidad Estacionario Integración en prácticamente todos los procesos de producción y control de simple Requiere poco espacio y facilidad de integración en espacios reducidos Ciclos de corta duración debido a un procesamiento rápido de la imagen Calibración y programación simple Fig. 2: Visión 3D con una cámara 2.8.3 Reconocimiento de formas 3D Página 22 de 77 Muchos procesos de producción modernos de fabricación son altamente complejos. Requiriendo un alto nivel de precisión y exactitud en las medidas realizadas, mayor flexibilidad y coste-eficacia de automatización. Características técnicas: Alta precisión de la medición, incluso en la producción en línea Simplicidad, ahorro de tiempo de instalación Combinación de iluminación: con sistema multi-LED y la superficie de iluminación Fig. 3: Sistema multi-LED Fácil integración en redes de sensores Precisión en la medición de hasta 0,01 mm Diseño compacto Continua medición 3D de objetos en movimiento Fig. 4: Reconocimiento formas 3D 2.8.4 Reconocimiento mediante Fotogrametría 3D Este sistema combina la información de varios sistemas de cámaras para determinar la posición de los objetos de gran tamaño en un espacio dado con una alta precisión y velocidad. Su función incluye el reconocimiento de los organismos como por ejemplo de coches enteros. Identificando las variaciones de una posición determinada en seis grados de libertad. Página 23 de 77 Fig. 5: Reconocimiento de objeto Características técnicas: Rápido, sin interrupciones en la producción de medición 3D Conjunto de cámaras flexibles Auto-determinación de parámetros de adaptación Totalmente automática de la calibración Fácil integración e instalación Medición de alta precisión Fig. 6: Sistema de reconocimiento 3D con fotogrametría 2.8.5 Sensor óptico 3D estéreo El sensor óptico 3D estéreo puede determinar las posiciones y los objetos midiendo en seis grados de libertad mediante el uso de bordes, huecos, curvas o partes de un objeto que puede ser descrito mediante sus elementos característicos (los bordes, las líneas o contornos). El sensor se puede montar fijo, así como en un brazo de robot o sistemas de manejo. Para lograr una precisión aún mayor, pueden ser utilizados múltiples sensores. Características técnicas: Medición 3D dada una geometría base Configuración flexible De calibración automática Medición sin puntos de referencia Página 24 de 77 Fig. 7: Sensor óptico 3D estéreo 2.8.6 Servo Visual 3D Utilizado para describir la sincronización en el transporte del robot utilizando el sistema de visión 3D. Esto permite un procesamiento de los procesos de montaje que tendrá lugar durante la alimentación de componentes, como por ejemplo para el conjunto de la rueda, o el llenado del tanque de gas en un vehículo en movimiento. En el seguimiento de la costura, el robot se mueve exactamente en función de la geometría de los componentes, por ejemplo para el sellado de las juntas precisa que no se ejecutan en una línea recta. Fig. 8: Servo visual 3D Página 25 de 77 3 Software de Visión artificial 3.1 Introducción La historia de la visión artificial ha estado ligada siempre al desarrollo de la informática; este desarrollo se ha ido acentuando en los últimos años y con ello ha aparecido una notable mejora de la visión artificial. En esta caso nos referimos a que el software que se utiliza ha ido mejorando y permitiéndonos una gran cantidad de nuevas posibilidades; aparte y en paralelo se ha desarrollado el hardware, pero atándose más a una mejora en las nuevas tecnologías. La captura y el tratamiento de imágenes se dividen en una serie de pasos, de los cuales, la gran mayoría, se ha de llevar a cabo con un software específico, a pesar de los indicados a continuación, se pueden realizar distintas subdivisiones de los distintos pasos: -El programa conecta el hardware (webcam) a un control. -Del hardware capturas un frame. -Pasas el frame a un mapa de bits (matriz). Se trata ahora la imagen binaria con librerías especializadas. Se devuelven los datos necesarios obtenidos de la imagen, o por otra parte, podemos obtener la imagen tratada. A partir de la captura de la imagen, todas las acciones a realizar requieren de un software, esto explica la gran importancia de la evolución de la informática dentro de la visión artificial. Los programas de visión artificial tratan las imágenes de una manera similar, las transforman en una matriz, dividiéndolas en pixeles, y les dan un valor; Este valor varía dependiendo del programa, ya que puede tratarse de un único número, que nos indicaría el tono del color del pixel, o puede trabajar con un vector, en este caso hemos de entender el modelo de colores RGB (red-green-blue), que representa un color con una matriz de 1x3 donde cuantifica la cantidad de rojo-verde-azul con los que se compone el color. Como ejemplos podemos ver: • negro (0,0,0) • blanco(255,255,255) • rojo(255,0,0) • verde(0,255,0) azul (0,0,255) amarillo(255,255,0) Página 26 de 77 Esta imagen se ha tratado y pasado a tonos de grises, luego en su matriz tendremos píxeles de distintos tono de gris, la cifra de cada elemento solo muestra el tono del color gris, y no de la mezcla RGB. (Imagen extraída de: http://robotica.albacete.org/material/martes1.pdf) Fig. 3-1 3.2 Clasificación Para trabajar con un software de visión artificial se suele utilizar unos paquetes o librerías de funciones que nos permitan trabajar con las imágenes y sus distintos formatos. Podemos hacer una pequeña división dentro de todo el software de visión, separándolo en tres grupos: por un lado tenemos aquellos paquetes que añadimos a algún programa para posibilitar el trabajo con imágenes; tenemos una serie de librerías que nos ofertan un gran número de funciones y que necesitan algún soporte software sobre el que trabajar ( Compiladores C++, .NET …) y por último distinguimos todo el software, que trabaja a modo de librería, pero que es específico de un determinado hardware. 3.3 Paquetes de programas 3.3.1 MatLab MatLab [“MATrix LABoratory”] es un programa que nos permite realizar cálculos numéricos con vectores y matrices, en determinados casos nos permite el uso de escalares y destaca por la representación de gráficos en dos y tres dimensiones (http://www.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/Matlab42/matlab42.p df ). Precisamente, por permitirnos trabajar con matrices, MatLab es de gran utilidad para el tratamiento de imágenes, convirtiendo nuestra imagen en una matriz de pixeles y Página 27 de 77 aportando un valor numérico correspondiente al color y tono de cada bit, aunque para ello debemos añadir paquetes especializados. Prácticamente todos hemos trabajado con MatLab, luego conocemos aquellas funciones que nos permiten trabajar con matrices, pero el programa nos ofrece unas específicas para el tratamiento de imágenes, por poner algunos ejemplos (http://193.146.57.132/depeca/docencia/alumnos.php?codigo=31592): [x , map]= gifread (“directorio de la imagen”); La función de este comando es devolvernos la imagen que le pasamos por parámetro indexada, y además un array con su mapa de colores (map). Imshow ( x , map) En este caso, la función del comando es la de mostrarnos esa imagen que anteriormente tratábamos en gifread. i=ind2gray( x , map); Visualizamos la imagen en escala de grises que se guarda en i. Los valores de luminancia resultantes van desde 0 (negro) a 1 (Blanco) y cada pixel es cuantificado con 8 bits (256 niveles de gris). Estos son los comandos más básicos de MatLab para comenzar con el tratamiento de la imagen, para ver mayor número de funciones mirar el enlace indicado. 3.3.2 LabView Otra herramienta que nos permite trabajar con imágenes en tiempo real es LabView (http://sine.ni.com/nips/cds/view/p/lang/es/nid/10419), aunque en este caso, nos ofrece herramientas para una visión artificial de mayor nivel, para ello el programa se sirve del módulo LabView NI Visión Development es para desarrollar aplicaciones de visión artificial y de imágenes científicas de LabView. Incluye IMAQ Visión, una biblioteca de poderosas funciones para procesamiento de visión y el Visión Assistant un entorno interactivo para desarrolladores que necesitan generar rápidamente prototipos para aplicaciones o que necesitan inspección fuera de línea. Por lo tanto, las dos principales prestaciones de este módulo son: Procesamiento de imágenes en escala de grises, a color y binarias. Visión artificial de alto nivel, funciones para procesar imágenes y herramientas para visualizar. Los dos ejemplos anteriores se basaban en paquetes que se añaden a programas para un mejor uso de este en visión artificial, pero podemos tratar las imágenes con librerías exclusivas para este propósito que simplemente necesitan de un entorno de desarrollo con un lenguaje específico y similar al de las funciones de las librerías. 3.4 Librerías de funciones 3.4.1 OpenCV Página 28 de 77 La librería OpenCV creada por Intel (7), las siglas de la librería representan:”Open Source Computer Visión Library”. Esta librería se centra en el tratamiento de imágenes en tiempo real, luego es de gran utilidad para las aplicaciones en robots móviles, está escrita en su mayoría en C, esto la hace portátil a otras plataformas; y es un sistema multiplataforma (Windows, Linux…). Como el propósito de este estudio es la aplicación de la visión artificial a un robot móvil podemos ahondar más en esta librería, que nos ofrece funciones para, como ya se ha dicho antes, trabajar con imágenes en tiempo real, y además aporta también tipos de datos necesarios para implementar las funciones nombradas antes; algunas de las posibilidades que se nos presenta con esto es por ejemplo: reconocimiento de objetos, reconocimiento de rostro, seguimiento de movimiento… Todo ello aplicable a proyectos de robótica móvil. Para comenzar a trabajar con OpenCV existen varias posibilidades, pero casi todas ellas pasan por compiladores de C tales como Visual C++, Devcpp…Y a través de internet podemos acceder a todas las funciones que nos ofrece la librería (wikipedia) y como usarlas (http://opencv.willowgarage.com/wiki/FullOpenCVWiki ///////http://docenciaeupt.unizar.es/ctmedra/tutorial_opencv.pdf). Como con matlab ponemos algunos ejemplos básicos de las funciones que ofrece OpenCV: void cvNamedWindow (char name, int type); Crea una ventana gráfica dándole nombre y tamaño por parámetro. void cvShowImage (char name, CvArr* img); Dibuja una imagen pasado por parámetro (img) en aquella ventana que nosotros le indicamos. void cvmGet (const CvMat* mat, int row, int col); Nos indica el valor de uno de los elementos de la matriz con la que estamos trabajando, es decir, indica el color del pixel situado en esa posición de la matriz. (Imágenes extraídas de: http://docencia-eupt.unizar.es/ctmedra/tutorial_opencv.pdf como ejemplo de lo que podemos realizar con OpenCV) 3.4.2 MIL Otro ejemplo de librería es MIL (9), Matrox imaging library; librería de alto nivel con un gran número de funciones y algoritmos de captura, display, gráficos, procesamiento Página 29 de 77 y análisis de imagen…, que al encontrarse agrupadas en diferentes módulos permiten realizar aplicaciones de visión artificial de alto rendimiento en un tiempo reducido. Las librerías están disponibles para Windows XP y Windows CE. Para más información sobre esta librería podemos consultar: http://www.interempresas.net/FeriaVirtual/Catalogos_y_documentos/81191/Software_ Matrox_Imaging_Library.pdf 3.4.3 Mavis Otro ejemplo más es Mavis, se trata de un paquete de visión para los robots móviles.Esta librería está orientada a las tareas de visión diseñadas específicamente para los robots móviles: localizar homebase , detectar obstáculos y así sucesivamente. La versión actual también incluye la detección de rostros. Mavis se ejecuta en Windows XP. Su interfaz se implementa como una dll independiente, por lo que los usuarios mavis pueden desarrollarse en cualquier lenguaje que se vincula a DLL ' s, incluyendo C o C++, Visual Basic, Java, Lisp, PROLOG o Forth. Mavis se implementa como una clase de C++. Requiere un programa para cargar y ejecutarlo, este programa se llama MavisCtl—Mavis, se trata de un programa de control que muestra los comentarios visuales de mavis como una imagen en su GUI. Puede también "hablar" directamente a mavis, cargar la dll de interfaz y utilizar la API de mavis. Cuando se carga la dll, MavisCtl muestra una GUI para controlar mavis directamente. (http://robinhewitt.com/mavis/. Esta traducido, luego puede existir algún error). 3.4.4 CMUcam(softw are) Dejando de lado las librerías especializadas, existe toda una línea de software para la CMUcam, hardware de introducción a la visión artificial y que también se trata en este trabajo. Actualmente el software facilitado trabaja sobre la versión CMUcam3 del hardware; este software se basa en el proyecto cc3 ofreciendo un entorno de desarrollo de código abierto flexible y de fácil uso, además se ofrece también una serie de compiladores para dicho código. Sobre este tema se trata en apartados posteriores. Y en Internet, en el enlace (http://www.CMUcam.org) Página 30 de 77 4 Detección de Objetos 4.1 VISION BIDIMENSIONAL El objetivo general de una máquina vidente es derivar una descripción de una escena, analizando una o más imágenes de dicha escena. En algunas situaciones la escena misma es básicamente bidimensional. Por ejemplo si el robot trabaja con piezas planas sobre una superficie plana, o si busca perforaciones en tal superficie. La visión para situaciones bidimencionales es más fácil que para las tridimensionales, y, como era natural, los primeros trabajos sobre máquinas videntes se hicieron en esa modalidad. El proceso de visión bidimensional Para que un robot reconozca partes, perforaciones, etc. en una superficie, y en general objetos, Primero debe distinguir los objetos de interés del resto de la superficie. En otras palabras, debe ser capaz de "destacar" partes de la imagen que corresponden a esos objetos. Este proceso de extraer subconjuntos de una imagen que corresponden a partes relevantes de la escena se denomina SEGMENTACION. Página 31 de 77 (foto extraída de "Detección de objetos por segmentación multinivel combinada de espacios de color") Cuando se ha extraído un subconjunto de una imagen, generalmente es necesario medir varias propiedades geométricas de tal subconjunto (tamaño, forma, etc.) tales medidas pueden ser la base para reconocer si el subconjunto representa un objeto dado, así como para determinar la posición y orientación de tal objeto. También pueden servir de base para una posterior segmentación dentro del subconjunto; por ejemplo, si dos objetos se tocan o superponen, puede ocurrir que hayan sido extraídos como un solo subconjunto, y puede ser necesario dividir este subconjunto en dos partes basándose en criterios geométricos, por ejemplo descomponiéndolo en partes convexas. Esta etapa del proceso de visión se denomina ANALISIS GEOMETRICO. Se pueden diseñar diferentes Página 32 de 77 algoritmos para Análisis Geométrico, dependiendo de la manera como estén representados los subconjuntos de imagen dentro del computador, por esto el tema de la La representación geométrica de subconjuntos de la imagen está estrechamente relacionada con el Análisis Geométrico. 4.1.1 Segmentación Una IMAGEN DIGITAL es una matriz de números que representan valores de iluminación en puntos regularmente espaciados de la imagen de una escena. Los elementos de más bajo nivel de tal imagen se llaman PIXELs (contracción de "Picture Element"), y sus valores se denominan NIVELES DE GRIS (el color casi no ha sido utilizado aún en los sistemas de visión robóticos). La efectividad de una técnica de Segmentación depende de las propiedades de la clase de imágenes a que se aplique. 4.1.2 Establecimiento de umbrales Si el brillo de un objeto difiere significativamente del de su entorno, origina en la imagen un conjunto de pixels con Niveles de Gris muy diferentes de los Niveles de los pixels circundantes. (A menudo pueden producirse grandes diferencias de brillo entre un objeto y su entorno controlando el ángulo en que incide la luz). Los subconjuntos de imagen con esa característica pueden extraerse de la imagen estableciendo un UMBRAL para los Niveles de Gris, o sea clasificando cada pixel como "claro" u "oscuro" dependiendo de si su Nivel de Gris es inferior o superior al umbral. Si la iluminación de la escena está bajo nuestro control, y podemos también calibrar el sensor, puede ser posible establecer un umbral permanente para segmentar correctamente escenas de determinada clase, pero, en general, será necesario determinar el umbral óptimo para cada imagen individual. Si los objetos ocupan una fracción significativa de la escena, esa determinación se puede hacer analizando el HISTOGRAMA DE LA IMAGEN, el cual es un gráfico que nos muestra la frecuencia con que ocurre en la imagen cada Nivel de Gris. Página 33 de 77 Este histograma debe tener dos picos, uno que representa el Nivel de Gris predominante en el fondo, y otro el predominante en el objeto. Los Niveles intermedios deben ser relativamente infrecuentes, correspondiendo en el histograma a valles entre los picos. Evidentemente, en estos casos un buen Nivel en el cual establecer el Umbral es el más infrecuente entre los Niveles de los dos picos (o sea correspondiente al punto más bajo del valle entre picos), ya que casi todos los pixels del objeto caen a un lado de tal umbral, y casi todos los pixels del fondo caen al otro lado. Si la iluminación de la escena no es uniforme, puede suceder que objetos intrínsecamente oscuros a un lado de la escena resulten más brillantes que un fondo intrínsecamente claro en otro lado, de tal manera que los objetos no pueden ser separados del fondo por la simple comparación con un umbral. Una manera de atacar esta situación es dividir la imagen en secciones y escoger un umbral adecuado para cada sección analizando su propio histograma. Posteriormente esos histogramas pueden ser interpolados para obtener un umbral variable que segmente convenientemente la imagen completa. 4.1.3 Bases de la visión en color para máquinas Página 34 de 77 Como se mencionó antes, la visión robótica a color ha sido poco estudiada en general, aunque tiene un papel muy importante en aplicaciones específicas. El color en un punto de una imagen puede representarse por tres números que representen, por ejemplo, los niveles de las componentes roja, verde y azul. Entonces una Imagen Digital a Color es una matriz de tripletas de valores. Si esos niveles de los pixels se grafican como puntos de un "espacio cromático", el objeto y el fondo originan cúmulos de puntos. Tales cúmulos son análogos a los picos del histograma y la imagen se puede segmentar en regiones de diferente color parcelando el espacio cromático de tal manera que se separen los cúmulos. Este ha sido el método clásico utilizado para segmentar las imágenes obtenidas por los sensores remotos multiespectrales, pero aún no tiene utilización extensiva en visión robótica. 4.1.4 Detección de bordes Los objetos pequeños no se extraen fácilmente del fondo en que se ven, utilizando el método del umbral, porque los picos que producen en el histograma son demasiado pequeños para detectarlos con confiabilidad. Similarmente, si una escena contiene muchos objetos de diferentes brillos, tampoco es fácil extraerlos por el método del umbral, porque sus picos respectivos en el histograma se superponen. En tales casos se puede utilizar otros métodos para segmentación, con tal de que los objetos posean un brillo relativamente uniforme y que contrasten fuertemente con su inmediato entorno. Página 35 de 77 Esto implica que la variación de nivel de gris ocurre muy gradualmente dentro de cada objeto, y rápidamente en los bordes de objetos. En tal caso los objetos se pueden extraer por Detección de Bordes, o sea detectando los pixels en los cuales la rata de cambio del Nivel de Gris respecto al espacio es alta. 4.1.5 Creación de regiones Los métodos de segmentación discutidos hasta ahora tratan cada pixel o su vecindad independientemente; no les concierne si los píxels resultantes constituyen una región conectada o si los segmentos de bordes resultantes constituyen una frontera suave de alto contraste. Se pueden obtener regiones o bordes de mejor calidad condicionando los resultados a que sean localmente consistentes, o sea que las regiones estén conectadas o que los bordes se encadenen suavemente. Para asegurar continuidad se puede utilizar métodos de seguimiento secuencial de los bordes, o acreción de regiones. Un método más poderoso, pero computacionalmente más costoso es buscar consistencia global por partes, o sea buscar regiones que sean óptimas con respecto a la consistencia o suavidad del Nivel de Gris, o bordes que sean óptimos respecto a contraste y a suavidad de la dirección. Un método útil para hallar regiones globalmente consistentes, es un proceso de "dividir y unir", en el cual las regiones se dividen si son inconsistentes, y se unen pares de regiones adyacentes si su unión es consistente. 4.1.6 Análisis Geométrico Una vez que en una imagen se ha segmentado una región , esta se puede representar por una imagen binaria, en la cual los pixels que pertenecen a la región tienen valor 1, y los del fondo tienen valor 0. De esta imagen binaria se pueden calcular varias propiedades geométricas de la región. Este proceso se denomina a veces como VISION BINARIA. 4.1.7 Propiedades de tamaño y forma El área de una región se puede medir aproximadamente en función del número de sus pixels, o sea el número de pixels que tienen una marca particular. A su vez, el perímetro es función del número de pixels del borde externo, o (para un borde específico) el número de movimientos necesarios para dar la vuelta por el borde pixel por pixel. Un parámetro geométrico usado frecuentemente y que mide lo compacto de una región es: C= Área/(perímetro)2. La elongación de una región se puede definir usando un proceso Página 36 de 77 de adelgazamiento y medición de área; una región es elongada si aunque tenga gran área desaparece al aplicarle un ligero adelgazamiento. Las medidas de distancia son otra fuente de información útil sobre las formas. Muchas propiedades formales de una región se pueden derivar midiendo la curvatura (o sea la tasa de cambio de dirección) de su borde externo. Son concavidades las partes del borde con curvatura negativa, o sea aquellas donde la dirección cambia el el sentido opuesto a las agujas del reloj cuando el borde se sigue en el sentido de dichas agujas. Las esquinas son puntos del borde donde la curvatura pose un valor absoluto muy alto. Tales propiedades formales son útiles para segmentar una región en caso de ser necesario, por ejemplo cuando dos objetos de la escena se tocan o se superponen parcialmente. 4.1.8 Representaciones geométricas Una región no tiene que ser representada por el conjunto de unos en su imagen binaria, se pueden usar otras representaciones más compactas si la forma de la región es simple. Las siguientes son algunas de las más conocidas: 4.1.8.1 Código de Longitud de Secuencia Cada fila de la imagen binaria consiste en secuencias de unos alternadas con secuencias de ceros. Así que una fila se determina completamente con especificar el valor inicial 0 o 1 y las longitudes de las cadenas. La mayoría de las propiedades geométricas de una región pueden medirse directamente de su código de Longitud de Secuencias. Este método de codificar una imagen ha sido muy utilizado en compresión de datos. 4.1.8.2 Código de Encadenamiento La secuencia de movimientos hechos al seguir un borde, junto con las coordenadas del punto de arranque, determinan completamente dicho borde; esta secuencia de movimientos se denomina el código de encadenamiento del borde. Una región queda determinada al especificar sus bordes de este modo, y muchas propiedades de la región se pueden calcular directamente a partir de esta codificación de los bordes. El mismo proceso se puede utilizar para codificar y procesar curvas digitalizadas. 4.1.8.3 Árbol Tetrafurcado ("Quadtree") Cualquier región es la unión de los bloques máximos de pixels (ej: cuadrados) que están contenidos en la región; así que la región queda determinada al especificar la lista de centros y tamaños de esos bloques (cuadrados). Tal representación es muy compacta Página 37 de 77 pero algo difícil de trabajar puesto que es una lista no ordenada. Una representación menos compacta pero más tratable es la denominada Árbol Tetrafurcado ("quadtree") que se obtiene al subdividir recursivamente la imagen binaria en cuadrantes, deteniéndose la subdivisión de un bloque cuando todos sus pixels son iguales. El proceso de subdivisión recursiva define una estructura de árbol que se va ramificando en dos a cuatro ramas; el árbol facilita el procesamiento para cálculos geométricos. 4.1.8.4 Otras Representaciones También son útiles varios métodos para aproximar la forma de una región. La frontera de una región puede ser aproximada por un polígono. Una región similar a una cinta posee un eje medio en el cual los centros de los cuadrados máximos caen aproximadamente a lo largo de una curva (el esqueleto de la cinta); entonces la región se puede aproximar especificando esa curva junto con una función de amplitud que especifica cómo varían los tamaños de los cuadrados al movernos sobre la curva. Las aproximaciones poligonales sucesivas a una curva se pueden organizar en una estructura de árbol, en la cual un nodo representa el lado de un polígono que aproxima un arco dado de la curva y los hijos de ese nodo representan los lados de un polígono refinado que aproximan su barcos del arco. 4.2 VISION TRIDIMENSIONAL La visión es mucho más compleja si requerimos tratarla tridimensionalmente, por ejemplo si el robot debe trabajar con una pila de objetos, o tiene que determinar la orientación de un objeto en el espacio. En tales escenas las superficies de los objetos pueden tener orientaciones variables y, por ejemplo, un objeto uniformemente reflectante puede no aparecer con brillo uniforme. También es difícil obtener información uniforme; las sombras son inevitables. Si se pueden calcular los efectos de la iluminación y de la orientación de las superficies, se puede corregir la información de brillo de la imagen, de manera que está presente la reflectividad intrínseca de las superficies para luego segmentar la imagen en regiones que correspondan a superficies uniformemente reflectivas. Página 38 de 77 (extraído de la tesis Sistema de Visión Artificial Para el reconocimiento y manipulación de objetos usando un brazo robot) . Además, si se conoce la orientación de una superficie en todos los puntos, se puede segmentar la imagen en regiones dentro de las cuales no hay cambios abruptos en la orientación y que entonces probablemente pertenecen a las superficies de un mismo objeto. Pero aún si se logra un segmentación correcta, el reconocimiento del objeto tridimensional aún es difícil porque tal objeto puede originar en la imagen regiones de formas (bidimensionales) muy variadas según su orientación. Además, sólo vemos un lado del objeto desde un punto de vista dado, y los objetos pueden ocultarse parcialmente entre sí, lo cual significa que el reconocimiento se debe basar en datos incompletos. 4.2.1 Forma a partir de sombreado En la vecindad inmediata de un punto P, la iluminación tiende a ser aproximadamente constante, excepto en el borde de una sombra. Entonces, si P está en una superficie uniformemente reflectiva, las variaciones del brillo (sombreado) en la vecindad de P, se deben principalmente a variación en la orientación de la superficie. Página 39 de 77 (extraído de la tesis Sistema de Visión Artificial Para el reconocimiento y manipulación de objetos usando un brazo robot). Las variaciones del brillo no determinan completamente la orientación de la superficie, pero sí la restringen, y si se conocen en ciertos puntos de una región esto puede permitir el determinar la orientación en el resto de la región (extraído de la tesis Sistema de Visión Artificial Para el reconocimiento y manipulación de objetos usando un brazo robot) 4.2.2 Forma a partir de textura Página 40 de 77 Si una superficie tiene una textura o trama visual uniforme, dará origen a una región de la imagen en la cual dicha trama no es uniforme, debido a efectos de la orientación de la superficie. La dirección de la superficie, en principio, se puede deducir a partir de mediciones locales de la anisotropía de la trama visual de la imagen. Una técnica relacionada con este principio consiste en iluminar la escena con un patrón o trama regular de luz y sombras (ejemplo: rejilla uniforme de huecos cuadrados). Las distorsiones de tal trama, como aparecen en la imagen, proporcionan información acerca de las orientaciones superficiales. Tal tipo de iluminación recibe el nombre de "estructurada". 4.2.3 Forma tridimensional a partir de forma bidimensional También se pueden obtener indicios acerca de las formas tridimensionales de las superficies de la escena a partir de las formas bidimensionales de los rasgos. Un ejemplo primitivo de este concepto, usando aristas lineales, demostró que las formas de las esquinas donde se unen las aristas dan información útil sobre cuales superficies de las que se encuentran en una de esas uniones pertenecen a un mismo objeto. Posteriormente se generalizó este trabajo basándose en que un borde en una imagen puede originarse por varios tipos de cambios abruptos en la escena, incluyendo cambios en la iluminación (bordes por sombra), ocultamiento parcial, o marcas en una misma superficie. Cuando las aristas se reúnen en un punto (vértice) no son posibles todas las combinaciones de esos casos, y cuando se consideran todas esas uniones en la imagen, se reduce mucho el numero de posibilidades. En principio es posible distinguir entre varios tipos de aristas analizando cuidadosamente las variaciones de brillo en su vecindad. Cuando superficies planas se encuentran en un vértice, las orientaciones espaciales de las superficies están restringidas, y esto da información útil acerca de la forma de poliedros. Las formas de los bordes o regiones en una imagen, también pueden dar información cuantitativa sobre la forma de la superficie si se hacen ciertas asumisiones respecto a los extremos. Por ejemplo, una curva en una imagen puede ser producida por muy diferentes curvas en el espacio, pero muchas veces se puede asumir que la curva real en el espacio es la que tiene la menor curvatura posible. Similarmente, una región en una imagen puede originarse por diversos trozos de superficie en el espacio, pero se puede asumir que el trozo real de superficie es el que tiene la forma más simple, o sea la más simétrica y compacta. 4.2.4 Detección de distancia y visión en estéreo Si disponemos de dos imágenes de una misma escena tomadas de dos posiciones diferentes conocidas, y si podemos identificar en ambas los dos puntos correspondientes a un mismo punto P de la escena, entonces se puede calcular por triangulación la posición del punto P en el espacio. La principal dificultad es el identificar los pares correspondientes de puntos de imagen. También se puede derivar la forma de la superficie a partir de múltiples imágenes tomadas desde una misma posición. pero bajo diferentes condiciones de iluminación. El sombreado en cada imagen impone restricciones en las orientaciones de las superficies en cada punto, y la intersección de esas restricciones determina la orientación sin ambigüedad. En esta técnica, conocida como "estéreo fotométrico" no hay problema en Página 41 de 77 identificar un par de puntos correspondientes, puesto que las imágenes están en perfecto registro. La información sobre la forma de las superficies estaría inmediatamente disponible si se pudiera medir directamente la distancia a cada punto superficial visible. Se han desarrollado varios tipos de sensores de distancia. Un método es iluminar una parte de la escena cada vez, por ejemplo con un plano de luz; la posición espacial de un punto iluminado puede quedar completamente determinado por su posición en la imagen, ya que debe quedar a lo largo de una dirección espacial dada (la dirección de la visión) y también sobre el plano de luz. Otro método consiste en iluminar la escena punto por punto, con un pulso de luz, y medir la distancia hasta el punto iluminado por medio del desplazamiento de fase o retardo entre el envío del pulso y el retorno del reflejo. 4.2.5 Reconocimiento de objetos tridimensionales En la imagen segmentada de una escena tridimensional las regiones representan parches de superficie. El reconocimiento de objetos tridimensionales a partir de una imagen bidimensional es difícil porque solamente se ve un lado de los objetos, aún ignorando la posible ocultación de un objeto por otro, y las formas de las partes visibles dependen de la orientación del objeto. Si se sabe de antemano qué posibles objetos pueden aparecer en la escena, una técnica sería almacenar descripciones de esos objetos como se verían desde varias decenas de puntos de vista, para hacer una comparación de formas, pero esto es computacionalmente costoso. Se pueden definir descripciones tridimensionales de objetos de varias maneras. Un objeto se puede determinar especificando las formas de sus superficies, las cuales se pueden aproximar por "parches" de varios tipos estándar, (Como en el caso bidimensional, las aproximaciones sucesivas se pueden organizar en un árbol). Un objeto también se puede aproximar por la unión de "cubos máximos" de varios tipos. Los cubos máximos se pueden organizar en una estructura de árbol ramificado de a 8 ramas ("octree"), definido subdividiendo recursivamente el espacio en octantes. Dado un conjunto de tales descripciones tridimensionales de objetos, estos se pueden reconocer en la imagen por un proceso de análisis de restricciones. Una región o borde en la imagen no puede ser proyección de cada posible borde o superficie de un objeto; sólo se puede originar de un subconjunto de los objetos posibles, y estos tienen que estar en un subconjunto de las posibles orientaciones espaciales. Si un conjunto de bordes o regiones es consistente, en este sentido, con la presencia de cierto objeto en cierta orientación, hay evidencia fuerte de que este objeto está presente en la escena 4.2.6 Ejemplo de Aplicación Real (Extraído de la tesis "Sistema de Visión Artificial Para el reconocimiento y manipulación de objetos usando un brazo robot") Proyecto en el cual un brazo robot permitirá seleccionar objetos (tornillos, tuercas, llaveros, etc.) que se encuentran en una mesa, independiente de la posición y orientación. Página 42 de 77 5 Seguidor de líneas 5.1 Introducción Un robot seguidor de línea se clasifica en el campo de la robótica móvil un grupo de la rama de robótica. La tarea fundamental de un robot móvil es el desplazamiento en un entorno conocido o desconocido, por tanto es necesario que posea tres funciones Página 43 de 77 fundamentales, la locomoción (nivel físico), la percepción (nivel sensorial) y la decisión (nivel de control). En esta prueba se valora la capacidad de un robot de realizar un recorrido por una pista con diversas rutas alternativas. Se trata de explotar la capacidad de seguimiento de caminos complejos, y de la capacidad de detección inequívoca de marcas para indicar rutas. La pista será una línea negra sobre fondo blanco, y suele medir entre 1.5 y 2.5 cm. Para tomar un camino correcto ante una bifurcación, habrá una marca paralela a la pista, separada por unos centímetros. El circuito utilizado con estos robots tendrá el número de curvas que se deseen. Fig.1. Ejemplo de circuito para seguidor http://mecatronica.files.wordpress.com/2008/03/p1010596.jpg 5.2 Ejemplos de robots con estas características 5.2.1 Robot velocista con visión Según los creadores del robot NV-BOT [1]. Desarrollan un robot en el que mezclan estas características de visión artificial con otro tipo de sensores, como son los sensores por infrarrojos, utilizando los CNY70. La principal función del robot es seguir una línea a través de una cámara de visión artificial en blanco y negro que nos permite conducir al robot a largo plazo, ya que obtenemos las coordenadas reales de la línea. Además de dos sensores de infrarrojos que no proporcionarán un control reactivo para no salirnos de la pista. Página 44 de 77 Fig.2 Robot NV-BOT [1] La forma de controlar al robot se divide en dos partes, una es la visión de la cámara y otra los infrarrojos, es decir, control a largo plazo y control a corto plazo respectivamente. La secuencia en el ciclo de la visión [1] es la siguiente: - Adquirir una imagen gris. - Realizar un filtro paso bajo de la imagen para eliminar el ruido producido por los focos de luz. - Calcular los bordes en la imagen. Usando una máscara para realzar los puntos más relevantes de la imagen. - Realizar un filtro paso alto de la imagen de bordes para eliminar el ruido producido por las perturbaciones en el suelo. - Para cada línea horizontal de la imagen de bordes encontrar los 4 puntos más relevantes. Esto divide en cinco segmentos la línea horizontal de la imagen original. - Para cada línea horizontal de la imagen encontrar los segmentos más oscuros. Con esto ya se puede decir que el robot ‘ve’ la pista. - Convertir la información obtenida en coordenadas reales 2D. Se utiliza un proceso de calibración previo a la competición en donde se calcula la correspondencia entre valores de píxel con valores reales en 2D. - Calcular el centro de la pista. - Calcular la dirección a la cual se quiere conducir al robot. A partir del centro de la pista se busca un punto al cual se pretende ir. Esto nos da una posición y una orientación. - En función de la dirección y orientación se calcula la velocidad lineal y la velocidad angular que el robot debe tener hasta el siguiente ciclo de control. La secuencia en el ciclo de los infrarrojos [1] es la siguiente: - Leer los sensores. - Si se activa alguno de los sensores, inhibe el control de visión y activa el control de infrarrojos. Página 45 de 77 - En función de los sensores modificar la velocidad lineal y angular. Dado que no se deben activar los dos a la vez el control lo que hace es mantener la velocidad lineal y variar la velocidad angular hacia el lado contrario del sensor activado. Un esquema más reducido sería el siguiente: La ventaja de usar una cámara junto con otros sensores es que puedes realizar un control a largo plazo, aún así también hay que tener en cuenta que para poder utilizar la cámara se deben tener microprocesadores más rápidos para así poder tener una respuesta más eficiente. 5.2.2 Control cinemático de robots autoguiados utilizando un sistema de visión artificial Para esta automatización de los robots para su auto guiado se implementa una realimentación y un control. Según los autores de [2], el control que se realiza es dinámico puesto que a velocidades bajas la influencia de la dinámica es pequeña. Para obtener la “postura” (posición + orientación) del vehículo, y poder realimentarla, hay que utilizar algún sistema de posicionamiento. Tenemos diferentes posibilidades para la realización de este control cinemático: Basado en curvas cinemáticas: En este tipo de control podemos utilizar curvas paramétricas suaves y para alcanzar la referencia basta con seguir la curva paramétrica. El principal inconveniente es que es un control en bucle abierto. Basado en aproximación lineal: Trabajamos con el modelo cinemático aproximado lineal entorno a un punto de funcionamiento. El inconveniente es que a medida que nos alejamos del punto de funcionamiento el resultado no es bueno. Basado en estabilidad de control no lineal: En este tipo de control, lo difícil es encontrar la acción de control no lineal que garantice la estabilidad del sistema. En [3] se realiza un control discreto adaptativo ajustando unos parámetros de control para que sea estable. Basado en liberalización por realimentación de estado: Consiste en realizar una liberalización por realimentación del estado del modelo cinemático no lineal para poder después aplicar un control lineal. Página 46 de 77 5.3 Sistema de posicionamiento del robot por visión En primer lugar se realiza el tratamiento de la imagen, para obtener de ella todo lo característico del entorno, es decir, las líneas, las curvas, los objetos… Para analizar la imagen seguimos los siguientes pasos: Filtramos la imagen en función del color que busquemos, por ejemplo, en un seguidor de líneas filtraríamos la imagen en función del color negro que sería el color de la línea. Realizamos un contraste máximo en la imagen. Hacemos un clustering o agrupación de los pixeles con valor negro, esta fase es muy importante, por lo tanto es muy importante tener un buen sistema de clustering. En el caso de seguimiento de una línea [2]: Fig. 3. Vista general del robot [2] Fig.4. Situación de la cámara del robot [2] Siendo la dirección de la línea yw, v la altura a la que esta la cámara y el ángulo de cabeceo constante. Al ser v y constantes, podemos obtener la siguiente expresión: [2] Estando los puntos de referencia a una distancia d de la línea: [2] Utilizando la siguiente ecuación: [2] Página 47 de 77 Despejando en ella las variables que nos darán la situación de nuestro posicionamiento, nos queda: Siendo h: [2] Después de realizar esta serie de cálculos geométricos, podemos determinar el posicionamiento que tendrá el robot a partir de las variables iniciales y dos puntos de la imagen para los que conocemos la línea en la que están. 5.4 Robot Pob-Bot Otro ejemplo de robot sería el diseñado por POB Tecnology [3] que utiliza la cámara de visión artificial POB-EYE además de los sensores de infrarrojos para realizar el seguimiento de la línea: La cámara de visión artificial le daría al robot una mayor autonomía al robot, siendo el dispositivo encargado del reconocimiento real de tiempo. Como vemos en la figura, se produciría una combinación del robot Pob-Bot, añadiéndole los elementos adecuados para convertirlo en un seguidor de línea, también podría ser utilizado como sistema de detección de bolas de color gracias a la cámara de visión artificial. Página 48 de 77 Fig.5. Robot seguidor de líneas POB-BOT [3] El seguidor de línea está compuesto por dos sensores de color, un sensor de distancia GP2D12 y la cámara de visión artificial. Este robot es capaz de seguir la línea de color negro y detenerse justo cuando tenga un obstáculo delante de ella. El programa utilizado para el robot se divide en dos partes, una de ella para seguir una línea de color negro y otro que además de seguir la línea se para cuando hay un obstáculo. La primera de las partes realiza lo siguiente: El robot sigue la línea de negro: Si los sensores no detectan color negro, el robot hacia delante. Si el sensor detecta el color negro la derecha, el robot gira a la derecha. Si el sensor detecta la izquierda el color negro, el robot gira a la izquierda. Si los sensores detectan el color desde el negro (todos los 2), se detiene el robot. Volver a la parte superior del programa. La segunda parte: Inicio de la subrutina. El robot sigue la línea de negro: Si el robot encuentra un obstáculo, se detiene el robot. Si el robot encuentra ningún obstáculo, el robot continúa. Página 49 de 77 Volver a la principal del programa. 5.5 Otros robots Otro robot seguidor de línea es el X-RUNNER creado por x-robotics que es un robot velocista sigue líneas dotado de visión artificial en tiempo real, capaz de anticiparse a las curvas frenando y adaptando la velocidad, además de posibilitar el derrape y vuelta a la trayectoria de seguimiento. Fig.6. Robot X-RUNNER http://www.x-robotics.com/ Página 50 de 77 6 CMUcam 6.1 Introducción CMUcam es un nuevo sensor de bajo costo y baja potencia para los robots móviles. El sistema de visión CMUcam se puede utilizar para hacer muchos tipos diferentes de montajes que requieran procesamiento de la visión en tiempo real. Debido a que la CMUcam utiliza un puerto serie para comunicaciones, puede ser directamente conectada con otros procesadores de baja potencia, tales como chips tipo PIC. Usando una CMUcam, es fácil hacer una cabeza de robot que gire para hacer el seguimiento de un objeto. También se puede construir un robot con ruedas que persiga a un objeto, o incluso persecuciones entre robots, seguimiento de línea, etc. Más adelante se mostrarán ejemplos del uso de la CMUcam. 6.2 Características Existen en la actualidad tres versiones de la CMUcam, todas ellas con características comunes y a la vez con características especiales, que por lo general son mejoras que se aportan en las nuevas versiones. 6.2.1 Tipos de CMUcam En la actualidad existen tres implementaciones de la CMUcam, las cuales se detallan a continuación. 6.2.1.1 CMUcam Original Imagen 1.2.1.1-1 CMUcam ORIGINAL (http://www.cs.cmu.edu/~cmucam/Pictures/camfrontal_small_edit01.jpg) Características específicas de la CMUcam: Velocidad de captación de fotogramas de 17 por segundo Seguimiento de la posición y el tamaño de un objeto o de colores brillantes Medir el RGB o YUV las estadísticas de una región de imagen Adquirir automáticamente la pista y el primer objeto que ve Seguimiento mediante un servo conectado directamente Página 51 de 77 Volcado de una imagen completa sobre el puerto de serie Volcado de un mapa de bits que muestra la forma del objeto de un seguimiento 6.2.1.2 CMUcam2 Imagen 1.2.1.2-1 CMUcam2 (http://www.cs.cmu.edu/~cmucam/cmucam2/images/cmucam2_edit02.jpg) Características específicas de la CMUcam: Velocidad de captación de fotogramas: 17 por segundo Seguimiento de la posición y el tamaño de un objeto o de colores brillantes Medir el RGB o YUV y generar estadísticas de una región de la imagen Adquirir automáticamente la pista y el primer objeto que ve Seguimiento mediante un servo conectado directamente Volcado de una imagen completa sobre el puerto de serie Volcado de un mapa de bits que muestra la forma del objeto de un seguimiento 6.2.1.3 CMUcam3 Imagen 1.2.1.3-1 CMUcam3 (http://www.cs.cmu.edu/~cmucam/cmucam3_banner.jpg) Características específicas de la CMUcam3: Fuente totalmente abierta y programable usando GCC Resolución CIF (352x288) sensor de color RGB Entorno de desarrollo de código abierto para Windows y Linux MMC / SD Slot Flash con FAT16 de ayuda al conductor Controlador de cuatro servo puerto La tasa de procesamiento de imagen de 26 fotogramas por segundo La luz de Lua-intérprete de lenguaje de peso para la creación rápida de prototipos Página 52 de 77 Software de compresión JPEG Manipulación básica de imágenes de la biblioteca Imagen arbitraria o recorte de la imagen y disminución de resolución Umbral y funciones de convolución RGB, YCrCb y el espacio de color HSV Emulación CMUcam2 Manchas de color definidas por el usuario Marco de diferenciación La media y la varianza de los datos captados Envío de imágenes RAW por puerto serie Generación de Histograma B / W de salida de vídeo analógico (PAL o NTSC) Buffer de imagen FIFO para pasar varios hi-res de procesamiento de imágenes Interfaz de red inalámbrica Mote (802.15.4) Tmote Sky / Conexión Telos CAM virtual para prototipos en el PC CMUcam3-Frame-Grabber para ver las imágenes en el PC 6.3 Implementación (modos de uso) Esquema de Sergio Se quiere hacer un robot con visión, ¿Qué posibilidades me aporta la CMUcam? Que tengo que hacer para empezar a trabajar con la CMUcam ¿Cómo funciona la CMUcam? ¿Qué hacen sus funciones principales? A continuación se presentará un ejemplo práctico 6.4 Ejemplos y aplicaciones PIC y Handyboard CMUcam Códigos de programación desarrollados por los alumnos de la universidad de CarnagieMellon para usar en sus robots. http://www-2.cs.cmu.edu/~illah/ROBOCODE/index.html Easybot de Seattle Robotics En esta demo el robot está capacitado para buscar el color rojo. Se determina el tamaño del objeto rojo que se ve en el momento de pasar delante de la cámara. Si el robot sabe el tamaño aproximado del objeto que está buscando puede utilizarlo para calcular el intervalo y realizar su seguimiento. http://www.seattlerobotics.com/video.htm Barney una robot que sigue una línea Página 53 de 77 Barney es un robot móvil diseñado por Anthony Rowe y Alok Ladsariya para la competición de MOBOT 2002 en la Universidad de Carnegie Mellon. El propósito de MOBOT es construir un robot autónomo alimentado seguidor de línea que puede tomar decisiones si la línea se divide. La competición se desarrolla al aire libre en un terreno inclinado y bastante desigual lo cual es un reto añadido. Se propone un enfoque integrado a todos que sería fácil de usar, barato y robusto. Se hace uso de una CMUcam como sensor principal y se desarrolla un software para controlar el tratamiento y el control motor. Barney llegó en primer lugar después de terminar el circuito en 1 minuto y 36 segundos. http://www.andrew.cmu.edu/user/agr/projects/barney/ El Proyecto de Seguridad de IRIS en la Universidad de Alabama en Huntsville Proyecto que describe un juego de tenis de mesa mediante un sistema de realidad aumentada diseñado por los estudiantes de RPI que utiliza CMUcam. http://www.cs.cmu.edu/~cmucam/Pictures/irisproject.zip Otros campos de aplicación y ejemplos de sistemas que usan CMUcam: Robótica (spoonBot) Vigilancia Sensor Networks Educación Los juguetes interactivos Reconocimiento y seguimiento de objetos Servo de control programable Serial MMC / SD de registro de datos flash Como muestra de las diferentes aplicaciones para las que se puede usar la CMUcam se presenta el siguiente video, con una recopilación de los ejemplos más relevantes desarrollados en la universidad de Carnagie Mellon. [CMUcam_video_2002.avi] http://www.cs.cmu.edu/~cmucam/Pictures/CMUcam_video_2002.avi 6.5 ¿Donde se puede conseguir una? La forma más fácil para obtener su propia CMUcam es ordenar como un kit o preensamblados de una de las empresas que han sido autorizados para vender CMUcams: Acroname - EE.UU. Robótica de Seattle - EE.UU. Lextronic – Francia Tiendas especializadas por paises: Robótica de Seattle (EE.UU.), seattlerobotics.com (CMUcam, CMUcam2, CMUcam3) Lextronic (Francia), lextronic.fr (CMUcam, CMUcam2, CMUcam3) Página 54 de 77 Acroname (EE.UU.), aroname.com (CMUcam, CMUcam2, CMUcam2 +) Conexión de Robótica (EE.UU.), roboticsconnection.com (CMUcam, CMUcam2) Parallax Inc. (EE.UU.), parallax.com (CMUcam) Robotshop (Canadá), www.robotshop.ca (CMUcam, CMUcam2, CMUcam3) Elektronikladen | ELMICRO (Alemania), elmicro.com (CMUcam2, CMUcam3) Robot Italia (Italia), www.robot-italy.com (CMUcam3) ROBOT ELECTRONICS (Inglaterra), www.robot-electronics.co.uk (CMUcam2, CMUcam2 +, CMUcam3 pronto) LAWICEL (Suecia), www.lawicel-shop.se/ (CMUcam3) Probyte (Finlandia), www.probyte.fi (CMUcam3) Caracol Instruments (República Checa), www.snailinstruments.com/ (CMUcam3 pronto) Robotronica (España), www.robotronica.com (CMUcam3 pronto) Los Robots Activo (Inglaterra), www.active-robots.com/ (CMUcam2, CMUcam3) Superrobotica (España), www.superrobotica.com (CMUcam3 pronto) SgBOTIC (Singapur), www.sgbotic.com (CMUcam2, CMUcam3) Antratek Electronics (Benelux), www.robotwinkel.nl (CMUcam, CMUcam3) Electrónica innovadoras (Indonesia), www.innovativeelectronics.com (CMUcam3) Megaton (Austria), www.megaton.at (CMUcam3) Roboter-teile.de (Alemania), www.roboter-teile.de (CMUcam3) Sander electrónico (Alemania) www.sander-electronics.de (CMUcam3) Bernhard Elektronik (Suiza), elmicro.com (CMUcam3) Robodacta (México), www.robodacta.com.mx (CMUCam3) RobotShop (EE.UU.), www.robotshop.com (CMUcam3) 6.6 ¿Cuánto puede costar? A continuación se muestra una tabla con la lista de precios de los diferentes dispositivos de visión artificial basados en CMUcam: Dispositivo Precio $ Precio € CMUcam1 ensamblada y probada CMUcam2 ensamblada y probada CMUcam3 ensamblada y probada 239.00 179.00 109.00 158.658 118.828 72.3513 Precios anunciados en la página web: 04/12/2009 6.7 http://www.seattlerobotics.com/ a fecha ¿Cómo empezar? 1.- Consultar las referencias web que se muestran a continuación 2.- Revisar la página de Software Página 55 de 77 3.- Revisar la página de descargas 4.- Asegurarse de comprobar la documentación más reciente para evitar daños en el hardware. Después de comprar y construir CMUcam, esta se puede probar con un compendio de interfaces JAVA, además de consultar hojas de características y manuales de usuario. Estas aplicaciones y manuales se encuentran disponibles para descarga en las páginas web indicadas a continuación: CMUcam1 http://www.cs.cmu.edu/~cmucam/downloads.html CMUcam2 http://www.cs.cmu.edu/~cmucam2/downloads.html CMUcam3 http://www.cmucam.org/wiki/Downloads En este momento ya estamos listos para construir nuestro propio robot con visión artificial. 6.8 Resumen El objetivo del proyecto es proporcionar a los CMUcam capacidades de visión sencilla de pequeños sistemas embebidos en la forma de un sensor inteligente. El CMUcam3 se extiende sobre esta idea de proporcionar una solución flexible y fácil de usar entorno de desarrollo de código abierto que complementa una plataforma de hardware de bajo costo. El CMUcam3 es un ARM7TDMI basado completamente programable integrado sensor de visión por computador. El procesador principal es la LPC2106 ON conectado a una cámara de sensor CMOS de Omnivision módulo. Custom de código en C puede ser desarrollado para la CMUcam3 utilizando un puerto de la cadena de herramientas GNU junto con un conjunto de bibliotecas de código abierto y programas de ejemplo. Ejecutables pueden ser probados usando el puerto serie sin necesidad de hardware externo. 6.9.- Visión Artificial empleando la CMUcam3 Esta parte del trabajo está enfocada a explicar cómo podemos realizar un proyecto con la CMUcam. ¿Por qué dotar a un robot de visión utilizando la CMUcam? A la hora de plantearnos que sistema utilizar para la implantación de visión en un robot, y nuestros conocimientos son bastante básicos en la materia, lo principal es encontrar abundante información y una comunidad donde podamos acudir a resolver todas nuestras y donde además encontremos diversidad de proyectos que nos puedan ayudar a establecer las bases de nuestro trabajo, pues bien, la CMUcam cuenta con un gran soporte atreves de su página web (http://www.cmucam.org). Página 56 de 77 Las características citadas en el apartado Hardware hacen de la CMUcam un elemento muy potente para desarrollar robots con visión, ya que para realizar un robot básico bastaría con tener dos servomotores, dos ruedas y la cámara (spoonBot), ( http://www.cmucam.org/wiki/spoonBot) La CMUcam3 cuenta con un puerto de comunicación serial, el cual puede ser configurado mediante hardware para poder comunicarse con un PC a los niveles de voltaje que marca la norma RS232 o comunicarse a niveles TTL con otro microcontrolador. La figura muestra como se debe hacer esta configuración que dependerá del estado del Jumper, por ejemplo si se desea programar la CMUcam3 o comunicarse con un PC el Jumper no se deberá mover, por lo contrario si lo que se desea es comunicarse con un micro-controlador a niveles TTL, el Jumper se deberá quitar, dejando de esta manera habilitado el puerto serie con niveles TTL. La figura también muestra los tres pines que se utilizan para la comunicación serial siendo estos el pin de transmisión (TX), el de recepción (RX) y tierra (GND). Esto nos puede permitir que la cámara forme parte de un sistema mucho mayor. Página 57 de 77 Características a tener en cuenta para desarrollar un trabajo con la CMUcam Las características principales de la CMUcam3 son: • Sensor RGB en color con una resolución de 352 x 288. • Ambientes de desarrollo para Windows y Linux. • Conector para tarjeta SD o MMS con soporte FAT 16 • Cuatro Puertos para controlar servos • Carga imágenes en memoria a 26 frames por segundo • Compresión por software en modo JPEG • Emulación de la CMUCAM2 • Puerto de comunicación serial Alimentación. La CMUcam se debe alimentar con una tensión comprendida entre los 6 y 15 voltios (DC) y le tienen que llegar al menos 150 mA. Además la cámara cuenta con un jumper para seleccionar la fuente de alimentación de los servomotores, que puede ser interna o empleando una fuente de energía externa. Como muestro en la figura. Página 58 de 77 Bus de la cámara. La CMUcam3 tiene un puerto destinado para la conexión de una cámara digital por la cual se le pasaran los datos que se requieren para el tratamiento de la imagen digital, las estradas de esta interfaz se detallan en la siguiente figura donde se describe a cada uno de los pines que lo conforman. Puerto para Servos. La CMUcam3 cuenta con un puerto para servos, mediante el cual puede controlar hasta cuatro servos además de tener la opción de elegir la fuente de alimentación interna de la tarjeta o utilizar una fuente externa para la alimentación de los servos. En la figura se muestra el puerto que posee la CMUcam3 para controlar los servos. Página 59 de 77 Puerto de expansión GPIO. La cámara además cuenta con este puerto de entradas y salidas de propósito general. Power Enable – Si se pone a nivel bajo desactiva la alimentación de la cámara Aux Power – Podemos obtener 3.3V del pin Cam reset – A través de este pin podemos resetear la tarjeta TX2 y RX2 – Para la comunicación serie en niveles TTL MOSI, MISO y SCK – Pines empleados para la tarjeta MMC GND – Tierra Página 60 de 77 Puerto analógico. Usando el módulo de la cámara OV6620, podemos obtener una señal de vídeo PAL desde el puerto analógico de la CMUcam3. Esta señal sincronizar con cualquier monitor PAL, pero no funcionará con un monitor estándar NTSC. Para utilizarlo, es necesario para mantener la cámara en su máxima velocidad de reproducción (por defecto) y poner la cámara en modo YCrCb para ver la imagen en un monitor. Botón ISP. El botón ISP nos permite elegir el modo en el que la tarjeta debe iniciarse. Cuando alimentamos a la tarjeta, y el botón ISP no es presionado, inicia automáticamente en el modo de ejecución, donde ejecutará el código previamente instalado. Por lo contrario, cuando se alimenta a tarjeta y a su vez se mantiene presionado el botón ISP, se entrará en el modo bootloader, esto quiere decir que la tarjeta esta lista para ser programada con un nuevo firmware. Software necesario para comenzar a trabajar Para poder trabajar con la CMUcam3 en Windows se necesita lo siguiente: 1. 2. 3. 4. 5. 6. Windows XP Instalar Cygwing Instalar el compilador GNU ARM GCC Instalar elLPC210x FLASH Utility Instalar CMUcam3 Frame Grab Utility Descargar la carpeta cc3 2. Instalación de Cygwin Para compilar se tiene que tener instalado el compilador ARM compiler. Para el caso de Windows se requerirá tener un emulador de Unix como Cygwin. Cygwin es una un emulador de sistema Unix, el cual conjunta una gran gama de herramientas cuyo objetivo es el de soportar software que se ejecuta en sistemas POSIX y poder utilizarlo en Windows mediante una recopilación de sus fuentes. Mediante Cygwin es posible ejecutar comandos que solo son reconocidos en sistemas Unix. Para nuestro objetivo se utiliza Cygwin para poder emplear el compilador de ARM y utilizar el comando make. Make es una herramienta que se emplea para controlar los procesos de construcción de software en sistemas Unix. Mediante el empleo de reglas de compilación que se encuentran descritas en un archivo llamado “makefile”. Página 61 de 77 Para instalar Cygwing se realizan los siguientes pasos: 1 – Descargar el instalador de Cygwing del sitio Web www.cygwin.com/setup.exe 2 – Ejecutaremos el programa 3 – Enseguida aparecerá una ventana que nos pregunta desde donde deseamos hacer la instalación, escogemos instalar desde Internet 4 – A continuación se elige el tipo de conexión 5 – Después se elige el lugar donde deseamos realizar la descarga. 6 – En la siguiente ventana nos piden las herramientas que deseamos instalar. Primeramente maximizamos la pantalla, después seleccionamos View, a continuación seleccionamos la herramienta de make, subversión y opensll por último seleccionamos siguiente. Página 62 de 77 . 3. Instalar el compilador GNU ARM GCC El instalador se puede bajar desde la pagina Web “www.cmucam.org” ó desde la página www.codesourcery.com/gnu_toolchains. Para su instalación basta con aceptar todas las configuraciones predefinidas 4. Instalar elLPC210x FLASH Utility Si se desea descargar un programa en la CMUcam3, se requiere la utilizad Philips LPC2000 Downloader para Windows y LPC21ISP para Linux, además de la comunicación serie con el ordenador. A continuación se muestran los pasos para poder utilizar esta utilidad: Bajar e instalar la utilidad LPC210x FLASH, la cual puede ser descargada desde la página de la CMUcam o desde la pagina de Philips: http://www.semiconductors.philips.com ó http://www.cmucam.org/wiki/Downloads B. Seleccionar el icono de “philips_flash_utility.zip” C. A continuación seleccionar el icono de Philips Flash installer. D. Cuando aparezca una ventana de bienvenida, dar siguiente a todas las configuraciones predeterminadas. 6. Descargar la carpeta cc3 Para poder desarrollar nuestros proyectos, requerimos el directorio cc3, al cual se le conoce como cc3 Source Tree. El directorio cc3 funciona muy parecido a un IDE (Integrated Development Environment), el cual contiene las herramientas necesarias para programar y administrar nuestros proyectos. Para que funcione correctamente el cc3 es necesario colocarlo en el directorio raíz de Windows como lo muestra la figura. Página 63 de 77 Como empezar un proyecto Para crear un proyecto en cc3, primero se copia alguno de los proyectos que ya vienen en el cc3, nos dirigimos al directorio cc3 y abrimos el subdirectorio projects a continuación copiamos el directorio hello-world y lo pegamos en la misma carpeta de projects pero le cambiamos el nombre por ejemplo “nuevo_proyecto”. Página 64 de 77 Lo que sigue es modificar el archivo llamado “makefile”, en el que modificamos el nombre del proyecto, cambiando “hello-world” por “nuevo_proyecto” de esta manera hemos creado un proyecto y ahora es cuestión de abrir el archivo main.c comenzar a programar. Una vez creado nuestro código fuente, para compilarlo empleamos el sistema cc3, necesitamos del comando make, un archivo incluido en nuestro proyecto llamado Makefile y Cygwin. Los pasos para compilar código fuente se mencionan a continuación: Página 65 de 77 Iniciar Cygwin dando doble clic en el icono de Cygwin. Nos dirigirnos al directorio de c: mediante el comando cd c:, después cambiarnos al directorio de nuevo_proyecto mediante el comando cd /cc3/projects/nuevo_proyecto (ver figura 3.17). A continuación invocamos make en el directorio de nuevo_proyecto, con lo que se compilará el proyecto y nos generará el archivo .hex para la CMUcam3 Para programar la CMUcam3 se necesita el LPC210x FLASH Ulitily, que nos permite descargar al dispositivo un nuevo firmware. A continuación detallo los pasos necesarios para programar a la CMUcam3. Conectar la CMUcam3 con el PC mediante el puerto serial. Ejecutar el LPC210x FLASH Utility Seleccionar el dispositivo LPC2106 y la frecuencia del cristal a 14745[Khz.]. Seleccionar el puerto por el que se comunicará velocidad de transmisión a 115200 baud la computadora y establecer Seleccionar la imagen del firmware que se desea descargar en la tarjeta Dar doble clic en Upload Flash Aparecerá una ventana que nos pedirá reiniciar la CMUcam3 Presionar el botón ISP de la CMUcam3 y mantenerlo así Encender la CMUcam3 mientras se mantiene presionado el botón ISP Después seleccionamos aceptar y la imagen comenzará a descargarse Página 66 de 77 la Proyecto Ejemplo #include <stdio.h> #include <stdlib.h> #include <math.h> #include <stdbool.h> #include <time.h> #include <cc3_ilp.h> #include <cc3.h> #include <cc3_color_track.h> #include <cc3_color_info.h> void simple_track_color (cc3_track_pkt_t * t_pkt); void simple_get_mean (cc3_color_info_pkt_t * s_pkt); int main (void) { // Declaracion de variables cc3_track_pkt_t t_pkt; cc3_color_info_pkt_t s_pkt; Página 67 de 77 uint32_t x_mid, y_mid; uint32_t threshold, x0, y0, x1, y1; int32_t tmp; // Configuraciones cc3_uart_init (0, CC3_UART_RATE_115200, CC3_UART_MODE_8N1, el puerto serie CC3_UART_BINMODE_TEXT); cc3_camera_init (); camara printf ("Arrancando...\n"); cc3_led_set_state (0, true); //inicio //inicializo la //Activo el Leds 0 cc3_gpio_set_mode (0, CC3_GPIO_MODE_SERVO); //Configuro el Servo en el puerto0 de Servos //Prueba de servo printf ("Calentando motor\n"); cc3_gpio_set_servo_position (0, 0); cc3_timer_wait_ms (300); cc3_gpio_set_servo_position (0, 90); cc3_timer_wait_ms (500); cc3_gpio_set_servo_position (0, 0); cc3_timer_wait_ms (500); cc3_gpio_set_servo_position (0, 170); cc3_timer_wait_ms (500); cc3_gpio_set_servo_position (0, 90); cc3_timer_wait_ms (500); printf ("Si el servo funciono pulsa el ISP"); while (cc3_button_get_state () == 0); que se pulse cc3_led_set_state (0, false); cc3_led_set_state (1, false); cc3_led_set_state (2, false); cc3_timer_wait_ms (1000); cc3_led_set_state (0, true); cc3_led_set_state (1, true); cc3_led_set_state (2, true); cc3_timer_wait_ms (1000); cc3_led_set_state (1, false); cc3_led_set_state (2, false); Página 68 de 77 //Espero hasta // configuraciones de la camara cc3_camera_init (); cc3_camera_set_auto_exposure (true); cc3_camera_set_auto_white_balance (true); cc3_camera_set_resolution (CC3_CAMERA_RESOLUTION_LOW); //Resolucion Baja cc3_led_set_state (0, false); printf ("Estabilizando imagen\n"); cc3_timer_wait_ms (2000); //Damos segundos para aclarar configurar balance y exposicion automaticamente cc3_camera_set_auto_exposure (false); cc3_camera_set_auto_white_balance (false); cc3_led_set_state (0, true); dos printf ("Coloca delante el color que quieras y pulsa el boton...\n"); while (cc3_button_get_state () == 0); printf ("Grabando Color\n"); // init pixbuf with width and height cc3_pixbuf_load (); imagen de la cámara //Graba la //Todo s los datos referentes a la imagen, se almacenan //en la estructura cc3_g_pixbuf_frame threshold = 30; //Margen de Error para elmacenar los datos RGB de la imagen // reduce a 1/2 el tamaño de la ventana para centrar la captura x0 = cc3_g_pixbuf_frame.x0 + cc3_g_pixbuf_frame.width / 4; x1 = cc3_g_pixbuf_frame.x1 - cc3_g_pixbuf_frame.width / 4; y0 = cc3_g_pixbuf_frame.y0 + cc3_g_pixbuf_frame.width / 4; y1 = cc3_g_pixbuf_frame.y1 - cc3_g_pixbuf_frame.width / 4; cc3_pixbuf_frame_set_roi (x0, y0, x1, y1); // llamamos a la funcion get mean para obtener los valores RGB de la imagen simple_get_mean (&s_pkt); // volvemos a poner ventana completa x0 = 0; x1 = cc3_g_pixbuf_frame.raw_width; y0 = 0; y1 = cc3_g_pixbuf_frame.raw_height; Página 69 de 77 cc3_pixbuf_frame_set_roi (x0, y0, x1, y1); region de interes en cc3_g_pixbuf_frame para ventanas virtuales //estableze una // Introducimos los parámetros del color //Para el canal Rojo (los valores deben estar comprendidos entre 0 y 255) pero limitamos la region entre 10 y 240 tmp = s_pkt.mean.channel[0] - threshold; //Sacamos el valor medio if (tmp < 16) tmp = 16; if (tmp > 240) tmp = 240; t_pkt.lower_bound.channel[0] = tmp; //El valor minimo de rojo sera 16 tmp = s_pkt.mean.channel[0] + threshold; if (tmp < 16) tmp = 16; if (tmp > 240) tmp = 240; t_pkt.upper_bound.channel[0] = tmp; //El valor maximo sera 240 //Seguimos con el mismo procedimiento con los demas canales Verde (1) y Azul (2) tmp = s_pkt.mean.channel[1] - threshold; if (tmp < 16) tmp = 16; if (tmp > 240) tmp = 240; t_pkt.lower_bound.channel[1] = tmp; tmp = s_pkt.mean.channel[1] + threshold; if (tmp < 16) tmp = 16; if (tmp > 240) tmp = 240; t_pkt.upper_bound.channel[1] = tmp; tmp = s_pkt.mean.channel[2] - threshold; if (tmp < 16) tmp = 16; if (tmp > 240) tmp = 240; t_pkt.lower_bound.channel[2] = tmp; tmp = s_pkt.mean.channel[2] + threshold; if (tmp < 16) tmp = 16; if (tmp > 240) tmp = 240; Página 70 de 77 t_pkt.upper_bound.channel[2] = tmp; printf ("Color Obtenido: min=[%d,%d,%d] max=[%d,%d,%d]\n", t_pkt.lower_bound.channel[0], t_pkt.lower_bound.channel[1], t_pkt.lower_bound.channel[2], t_pkt.upper_bound.channel[0], t_pkt.upper_bound.channel[1], t_pkt.upper_bound.channel[2]); // Load in your tracking parameters // t_pkt.lower_bound.channel[CC3_CHANNEL_RED] = 200; // t_pkt.upper_bound.channel[CC3_CHANNEL_RED] = 255; // t_pkt.lower_bound.channel[CC3_CHANNEL_GREEN] = 0; // t_pkt.upper_bound.channel[CC3_CHANNEL_GREEN] = 110; // t_pkt.lower_bound.channel[CC3_CHANNEL_BLUE] = 0; // t_pkt.upper_bound.channel[CC3_CHANNEL_BLUE] = 20; //Configuracion del color teminada printf ("Configuracion de la camara terminada\n"); t_pkt.noise_filter = 4; x_mid = cc3_g_pixbuf_frame.width / 2; los valores de tamaño de la imagen para centrar el objetivo y_mid = cc3_g_pixbuf_frame.height / 2; //Tomo la mitad de while (true) { uint8_t track_flag, posicion; simple_track_color (&t_pkt); track_flag = 0; posicion = 90; if (t_pkt.int_density > 10 && t_pkt.num_pixels > 100) { printf("centroid = %d,%d bounding box = %d,%d,%d,%d num pix= %d density = %d\n", t_pkt.centroid_x, t_pkt.centroid_y, t_pkt.x0, t_pkt.y0, t_pkt.x1, t_pkt.y1, t_pkt.num_pixels, t_pkt.int_density); if (t_pkt.centroid_x > (x_mid + 20)) //tengo que desplazarme a la derecha { track_flag = 1; posicion += 10; Página 71 de 77 //Desplazamiento rapido if (posicion < 170) cc3_gpio_set_servo_position (0, posicion); else posicion = 170; } else if (t_pkt.centroid_x > (x_mid + 5)) { track_flag = 1; posicion += 2; //Desplazamiento mas lento if (posicion < 170) cc3_gpio_set_servo_position (0, posicion); else posicion = 170; } if (t_pkt.centroid_x < (x_mid + 20)) //tengo que desplazarme a la izquierda { track_flag = 1; posicion -= 10; //Desplazamiento rapido if (posicion < 170) cc3_gpio_set_servo_position (0, posicion); else posicion = 170; } else if (t_pkt.centroid_x < (x_mid + 5)) { track_flag = 1; posicion -= 2; //Desplazamiento mas lento if (posicion < 170) cc3_gpio_set_servo_position (0, posicion); else posicion = 170; } } } return 0; } Página 72 de 77 void simple_track_color (cc3_track_pkt_t * t_pkt) { cc3_image_t img; img.channels = 3; img.width = cc3_g_pixbuf_frame.width; img.height = 1; // image will hold just 1 row for scanline processing img.pix = cc3_malloc_rows (1); if (img.pix == NULL) { return; } cc3_pixbuf_load (); if (cc3_track_color_scanline_start (t_pkt) != 0) { while (cc3_pixbuf_read_rows (img.pix, 1)) { // This does the HSV conversion // cc3_rgb2hsv_row(img.pix,img.width); cc3_track_color_scanline (&img, t_pkt); } } cc3_track_color_scanline_finish (t_pkt); free (img.pix); return; } void simple_get_mean (cc3_color_info_pkt_t * s_pkt) { cc3_image_t img; img.channels = 3; img.width = cc3_g_pixbuf_frame.width; img.height = 1; // image will hold just 1 row for scanline processing img.pix = malloc (3 * img.width); cc3_pixbuf_load (); if (cc3_color_info_scanline_start (s_pkt) != 0) { while (cc3_pixbuf_read_rows (img.pix, 1)) { cc3_color_info_scanline (&img, s_pkt); } cc3_color_info_scanline_finish (s_pkt); } free (img.pix); } Página 73 de 77 7.- Bibliografía www.depeca.uah.es ( ITTSE. ASIG: TRATAMIENTO DIGITAL DE IMÁGENES) www.depeca.uah.es (IT INDUSTRIAL.ASIG: INTELIGENCIA ARTIFICIAL). http://www.escet.urjc.es/~jjpantrigo/PFCs/PFCobjetosAbandonados.pdf universidad rey juan carlos http://www.it.uc3m.es/jvillena/irc/practicas/estudios/Vision.pdf por elizabeth perez http://www.cea-ifac.es/actividades/jornadas/XXV/documentos/19-abtsufilva.pdf jornadas de automática; ciudad real. COMPLEMENTARIA Para iniciarse en el tema, puede consultarse Machine Visión Portal, con noticias y una guía de productos, y también Machine Visión Online, que presenta una gran biblioteca de artículos técnicos y descripciones de aplicaciones industriales ordenadas por sectores. Las revistas especializadas aportan muchos datos de interés: The Journal of Electronic Imaging y Visión Systems Design e incluso Machine Visión Tech Group, de la Society of Manufacturing Engineers (SME), que cuenta con un activo foro de discusión e intercambio de información. Algunos departamentos universitarios, centrados en la investigación básica y aplicada e incluso a medida del cliente, apuestan fuerte por el tema, como el Centro de Visión por Computador (CVC, de la UAB), el Computational Imaging Lab (CILab, de la UPF) y el Grupo de Automática, Robótica y Visión Artificial (Escuela Politécnica Superior de la UA), todos ellos son amplias reseñas de sus objetivos, actividades y realizaciones. Muchas empresas ofrecen su gama de productos y aplicaciones, como DALSA Coreco, The Imaging Source Europe y The Computer Visión Industry. Y, entre las empresas españolas, DataPixel, expertos en visión 3D, óptica, electrónica e ingeniería de software, y DCM Sistemes, especializados en iluminadores para visión artificial. Sin olvidar la Association of European Machine Visión Companies (EMVA), que reúne las empresas y las asociaciones del sector. Revistas: International Journal of Computer Vision IEEE Transactions on Pattern Analysis and Machine Intelligence Computer Vision and Image Understanding Machine Vision and its Applications Image and Vision Computing Journal Journal of the Optical Society of America A Pattern Recognition Pattern Recognition Letters IEEE Transactions on Image Processing IEEE Transactions on Systems, Man and Cybernetics. ISRA VISION Página 74 de 77 http://www.isravision.com/likecms.php? site=index.html&dir=isra&israsyssess=871910a55d638e9877655d589e292643&nav=1 57&siteid=222&entryid= INSER ROBÓTICA http://www.inser-robotica.com/manipulado_Vision.htm PYSSA http://www.pyssa.com/es/vision.asp MATERIAL DIDÁCTICO Ingenierías nº 24. Universidad de La Rioja Técnicas y algoritmos básicos de Visión Artificial Tesis: Israel Vite Silva Reconstrucción Tridimensional de Objetos Mediante Técnicas Evolutivas Depeca http://193.146.57.132/depeca/docencia/alumnos.php?codigo=30831 ------------------------------------------------------------------------ [1] NV-BOT: Robot velocista basado en visión. http://www.depeca.uah.es/alcabot/alcabot2002/documentos/ponencias/vel039.pdf [2] Control Cinemático de Vehículos Autoguiados Utilizando un Sistema por Visión http://www.cea-ifac.es/actividades/jornadas/XXII/documentos/F_05_R.pdf [3] Robots seguidor de línea http://www.robot-advance.com/configurations/www.robot-advance.com/images/player/ pieces_jointes/99_44.pdf --------------------------------------------------------------------------------------------------Referencias bibliográficas y documentación consultada para el desarrollo de este apartado: CMUcam Página 75 de 77 http://www.cs.cmu.edu/~cmucam/ http://www.roboops.es/2009/09/26/comenzando-con-la-cmucam/#more-185 http://cmucam.org/wiki/Downloads http://cmucam.org/attachment/wiki/Documentation/CMUcam3_sdk_guide.pdf? format=raw http://www.cs.cmu.edu/~cmucam/Pictures/CMUcam_video_2002.avi Video reconocimiento de formas http://www.youtube.com/watch? v=1iwvL83Cumo&feature=PlayList&p=DF88BA1C22B59C21&index=0 http://www.youtube.com/user/prstud09#p/a/u/0/6TG_pDEhXME http://www.youtube.com/watch?v=w-D6oakzyVA&NR=1 Seguimiento de objetos mediante filtro de partículas http://www.youtube.com/watch?v=lWM0z6Z6zg&feature=PlayList&p=DF88BA1C22B59C21&index=1 Robot seguidor de líneas http://www.youtube.com/watch?v=37_RcAdMUr8&feature=related Información sobre el flitro-kalman* http://robotica.itam.mx/espanol/archivos/kalman_filter.pdf *[KALMAN-FILTER] El Filtro Kalman es una forma más inteligente de integrar los datos de medición en una estimación reconociendo, que las mediciones son ruidosas y que a veces deben ignorarse o que sólo tienen un efecto pequeño sobre la estimación del estado. Se suaviza los efectos del ruido en la variable de estado, se calcula mediante la incorporación de más información de datos fiables, que a partir de datos poco fiables. El usuario puede decir al filtro de Kalman cuanto ruido que hay en el sistema (incluyendo las mediciones, las entradas y el modelo) y se calcula una estimación de la posición teniendo en cuenta el ruido. Ello es menos probable que incorporar una mala medida si la confianza de la posición actual es alta. --------------------------------------------------------------------------------------------------Referencias web de las aplicaciones comentadas PIC y Handyboard CMUcam http://www-2.cs.cmu.edu/~illah/ROBOCODE/index.html Easybot de Seattle Robotics Página 76 de 77 http://www.seattlerobotics.com/video.htm Barney, un robot que sigue una línea http://www.andrew.cmu.edu/user/agr/projects/barney/ El Proyecto de Seguridad de IRIS en la Universidad de Alabama en Huntsville http://www.cs.cmu.edu/~cmucam/Pictures/irisproject.zip Página 77 de 77