Sistema de localización relativa basada en visión...

53
Sistema de localización relativa basada en visión artificial TÍTULACIÓN: Ingeniería Técnica Industrial en Electrónica Industrial AUTOR: Anton Girod Fortuño DIRECTOR: Albert Oller Pujol Fecha: Junio del 2008

Transcript of Sistema de localización relativa basada en visión...

Sistema de localización relativa basada en visión

artificial

TÍTULACIÓN: Ingeniería Técnica Industrial en Electrónica Industrial

AUTOR: Anton Girod Fortuño

DIRECTOR: Albert Oller Pujol Fecha: Junio del 2008

Preámbulo Este proyecto final de carrera contiene información confidencial y se acoge a la NORMATIVA DE PROJECTES FI DE CARRERA (ETI-E, ETI-EI, EAEI), aprobada per la Junta del Centre 30/05/03. La empresa M-BOT Solutions S.L. de Tarragona con domicilio social en avenida Països Catalans, número 26 CP 43007,dispone de la información clasificada como confidencial que corresponde al código fuente del software presentado.

4

Sistema de localización relativa basada en visión

artificial 1. Índice General

5

Capítulos Página 1.ÍNDICE GENERAL 4 2. MEMORIA 7

2.1. Objeto del proyecto 9 2.2. Alcance 9 2.3. Antecedentes 9 2.4. Introducción 10

2.4.1 Robótica 10 2.4.2 Celebridades en el mundo de los robots 13 2.4.3 Visión Artificial en Robótica 14 2.4.4 Webcams 15

2.5 Problema a resolver 18 2.5.1 Descripción del problema 18 2.5.2 Método para solventar el problema 19 2.5.3 Modelos de color empleados 21 2.5.4 Modelo RGB 21 2.5.5 Modelo HLS 22 2.5.6 Paso de RGB a HLS 23 2.5.7 Formatos de color 24 2.6 Descripción informática 26 2.6.1 Flujo de control para tratar la imagen 26 2.6.2 Captura de la imagen 26 2.6.3 Filtros de color 27 2.6.4 Distinguir bloques 29 2.6.5 Reconocer balizas 30 2.6.6 Calcular la distancia respecto a una baliza 33 2.7. Resultados experimentales 34 2.7.1 Prueba 1 34 2.7.2 Prueba 2 38 2.7.3 Prueba 3 41 2.7.4 Prueba 4 44

3. CONCLUSIONES 48 4. LÍNEAS FUTURAS 51 5. BIBLIOGRAFIA 55 5.1 Libros consultados 56 5.2. Webs consultadas 56 6. ANEXOS 58 Anexo 1: Manual de usuario 60

7

Sistema de localización relativa basada en visión

artificial

2. Memoria

-Memoria- 2.1Objeto del proyecto Este proyecto tiene como finalidad principal la de conseguir orientar un robot móvil mediante una webcam común. Este proyecto se ha desarrollado en la empresa M-BOT Solutions S.L, que posee un robot móvil que requería de un software específico para hacer un control de posición del robot en el plano. Con este software el robot será capaz de determinar su posición exacta y poder desarrollar sus tareas con conocimiento de su posición. La webcam capta una escena de la que debe extraer una información relevante para posicionarse, esto es, unas columnas de unos colores determinados, y calcular su posición respecto a ellas, que serán sus puntos de referencia. De no verlas, el robot estará perdido. 2.2 Alcance El siguiente proyecto se asume la detección e identificación de columnas y la posición del robot respecto a ellas, dando como resultado el ángulo respecto al foco de la webcam y la distancia desde el foco hasta el centro de gravedad de la columna. 2.3 Antecedentes Actualmente el robot posee de un sensor de proximidad que detecta la presencia o no de objetos y devuelve la proximidad a ellas. Interesa un software que, acompañado de una webcam, otorgue al robot un sentido de la orientación de su lugar de trabajo

-Memoria-

- 10 -

2.4. Introducción 2.4.1 Robótica La palabra robot deriva de la literatura, ya que surge en la obra de teatro R.U.R., “Robots Universales de Rossum”, escrita por uno de los escritores en lengua checa más importantes del siglo XX, Karel Capek. Así pues, la palabra robot deriva del checo y en concreto de la palabra robota, que significa “trabajo sobre todos los siervos de la gleba”. Robot es la palabra checa más difundida en el mundo. Por otro lado, también se atribuye con frecuencia al escritor Isaac Asimos el término robótica previo un mundo en el que existían reglas de seguridad para que los robots no pudieran ser dañinos para los seres humanos. De estos dos referentes se han derivado muchas novelas y multitud de personajes de la ciencia ficción como Frankenstein, Robocop, R2D2, etc. La palabra “robot” nos seduce la idea de un ser mecánico, que imita y tiene la forma de un ser humano, y que incluso piensa como él. Esta idea la tenemos por culpa de la ciencia ficción, que nos lo describe como nosotros le imaginamos, pero la realidad esta muy alejada, ya que los robots actuales sólo hacen algunas pocas acciones predeterminadas de acuerdo con su programación. Existen multitud de definiciones sobre la palabra robot, tomamos por ejemplo la del instituto norte americano de robótica, un robot es:

-Manipulador multifuncional y reprogramable, diseñado para mover materiales, piezas, herramientas o dispositivos especiales, por medio de movimientos programados y variables que permiten realizar diferentes acciones.

Esta definición como vemos, esta muy enfocada a la industria, y es que, hasta hace bien poco, cuando alguien hablaba de robots se refería a robots industriales.

Figura 2.4.1.1 Robot Industrial Los robots industriales fueron evolucionando y tuvieron su apogeo durante los años 70 y 80. Gracias a ellos se dio lugar a unos procesos de producción mucho más eficientes y

-Memoria-

- 11 -

aportaron calidad a los productos. Estos robots suelen ser empleados en áreas repetitivas y pesadas, como pueden ser el soldado, el pintado o la carga de maquinaria. Más adelante, a finales de los años 70 y principios de los años 80, se fue abriendo una nueva línea de investigación que denominamos Robótica Autónoma. Estos robots, a diferencia de los anteriores, disponen de un grado de autonomía mucho más elevado porque no necesitan ser constantemente guiados y controlados por operadores humanos. Así, pueden reaccionar satisfactoriamente ante citaciones imprevistas, de este modo nos acercamos a la inteligencia artificial. Hoy en día los robots ya disponen de multitud de aplicaciones como pueden ser hacer exploraciones submarinas, volcánicas o exploraciones espaciales. Un ejemplo es el robot Sojourner., que exploró la superficie del planeta Marte.

Figura 2.4.1.2 Robot Sojourner

Los robots de hoy tienen multitud de aplicaciones, y, lo que hace unos años podía parecer de ciencia ficción, hoy en día ya es algo corriente. De esta forma tenemos robots que han explorado Marte, otros que hacen exploraciones submarinas etc.

Figura 2.4.1.3 Robot Aibo

-Memoria-

- 12 -

La robótica es el resultado de la integración de diversas tecnologías:

Sistemas de impulsión: Parte que se dedica a estudiar las fuentes de energía de las que se abastece el robot Sensórica: Los ingenieros estudian también la parte de los robots encargada de captar, traducir y convertir en señales eléctricas las diferentes magnitudes físicas que intervienen cuando el robot esta en funcionamiento para conseguir una acción dentro de un proceso. Sistemas de control: Los sistemas de control son típicos de robots industriales. Nos referimos al conjunto de elementos que actúan coordinadamente para conseguir una acción de gobierno en un proceso. Inteligencia Artificial: Es la parte que intenta convertir al robot en un ser pensante. Todavía estamos muy lejos para llegar a crear maquinas tan inteligentes como el ser humano. Visión Artificial: La visión artificial pretende que los robots puedan “ver” el mundo tal como lo vemos nosotros o los animales.

-Memoria-

- 13 -

2.4.2 Celebridades en el mundo de los robots La robótica ha llegado a consolidarse en el mundo después de muchos años de esfuerzos y trabajo. Algunas personalidades han resultado de vital importancia: Charles Babbage: Matemático y estadístico británico, es considerado el padre de la informática. Para el 1834 diseñó una maquina analítica que, de haberse construido, hubiera sido el primer ordenador de la historia. Karel Capek: Narrador y autor dramático checo. Capek se inventó el termino “robot” que en checo significa “trabajo duro y autónomo” en su obra Rossum’s Universal Robots de 1921. En esta obra se presentaba a Rossum, un inglés que creaba obreros artificiales, tanto hombres como mujeres. Isaac Asimov: Científico y escritor norte americanote origen ruso. Se trasladó a los EEUU a los tres años. Como escritor destacó y cultivó el género de la ciencia-ficción. Su obra más importante para nosotros es Yo Robot donde establece las famosas leyes de la robótica, aplicables a cualquier robot real. Las leyes expuestas son las siguientes:

1ª Ley: Un robot no puede dañar a la humanidad, ni permitir que se le haga daño si lo puede evitar 2ª Ley: Un robot debe obedecer las órdenes dadas por los seres humanos, exceptuando el caso que infrinja la primera ley. 3ª Ley: Un robot debe proteger su existencia, siempre y cuándo esta protección no entre en conflicto con la primera y/o segunda ley.

Alan Turing: Este matemático es considerado el padre de los ordenadores y de la inteligencia artificial, una ciencia correlativa a la robótica. Mark Yim: Es un ingeniero creador de los “mobots” (robots modulares). Estos ingenieros están fabricando robots de un material modular capaz de cambiar la forma. Hiroaki Kitano: Este ingeniero japonés es uno de los principales promotores de la robótica japonesa y confundidor de una competición llamada Robocup, pensada para fomentar el desarrollo de la inteligencia artificial y la investigación robótica por medio de una competición futbolística. El objetivo de la competición es muy ambicioso, porque piensan construir robots capaces de derrotar al campeón del mundo de fútbol del 2050. Kevin Warwick: Es un profesor de cibernética de la universidad de Reading. Este hombre se ha implantado un microchip capaz de interactuar con los ordenadores de los laboratorios.

-Memoria-

- 14 -

2.4.3 Visión Artificial La visión artificial o por computador es una rama de la inteligencia artificial que tiene por objetivo analizar y proponer herramientas para el procesamiento de imágenes, reconocimiento de patrones (como pueden ser caras), reconstrucción de mapas 3D, etc. Además, es una ciencia que posee numerosas aplicaciones en el mundo real, como puede ser dentro de la medicina, la industria, la robótica, etc. La visión artificial surge en la década de los 60 con la idea básica de conectar una cámara de video a unos computadores. Esto implicó no sólo la captura de imágenes a través de la cámara sino también la comprensión de lo que estas imágenes representaban. Un resultado muy importante de este trabajo y que marcó el inicio de la visión artificial, fue un trabajo de Larry Roberts, el creador de ARPAnet. En 1961 creó un programa, el “mundo de micro-bloques”, en el que un robot podía “ver” una estructura de bloques sobre una mesa, analizar su contenido y reproducirla desde otra perspectiva, demostrando así que esa información visual que había sido mandada al ordenador por una cámara, había sido procesada adecuadamente por él. Sus herramientas están agrupadas por el procesamiento digital de imágenes y por el reconocimiento de patrones. Desde entonces la visión artificial ha ido evolucionando y hoy en día uno de los elementos sensoriales más atractivos para incrementar la autonomía en robótica, son los sistemas de visión. Estos proveen información relevante sobre el estado de los robots y de su entorno físico inmediato y es un sensor bastante barato en comparación con otros, por ejemplo sónares. La única dificultad que puede existir al emplear una cámara como sensor principal es la extracción de información a partir de una imagen. Ésta debería ser analizada para extraer información relevante, lo cual haría que fuera algo más complejo que el extraer información de otros tipos de sensores, como por ejemplo los sónares Sin embargo, la visión artificial tiene muchas más aplicaciones que la robótica móvil, en nuestra vida diaria tenemos aplicaciones de visión artificial casi en todos lados, cuándo el código de barras es leído por la computadora del supermercado, en los partidos de fútbol al ver una escena virtual, etc. En la industria, cuando se requiere una automatización del proceso que requiera visión humana la podemos sustituir por visión computerizada. Puede ser en casos como en controles de calidad para identificar elementos con defectos, etc.

Figura 2.4.3.1 Partido de la Robocup

-Memoria-

- 15 -

2.4.4 Webcams Entendemos como webcam, una cámara digital que permite capturar imágenes y transmitirlas a la computadora. Las cámaras web están formadas por:

- Lente - Sensor de imagen, que pueden ser CCD (charge coupled device) o CMOS

(complementary oxide semiconductor). Normalmente las cámaras CMOS son mas baratas que las CCD

- Una circuitería electrónica, encargada de leer del sensor y transmitirlo al PC. Figura 2.4.4.1 Sensor CCD Como sensor de imagen, no existe una tecnología superior a la otra. Tanto la tecnología CCD como la CMOS están formados por materiales semiconductores, concretamente de Metal-Óxido (MOS), y están estructurados en forma de matriz, con filas y columnas. Funcionan al acumular carga eléctrica en cada celda de esta matriz (el píxel), en proporción a la intensidad de la luz que incide sobre ella localmente. Así, esta relación de proporción hará que cuanta mayor intensidad de luz tengamos mayor carga acumulada. Sin embargo, cada tecnología tiene un modo de funcionamiento específico. Las cámaras CCD convierten la carga acumulada y entregan una señal analógica a su salida, que es digitalizada por el circuito interno de la webcam. Podríamos imaginarnos el sensor como un conjunto celdas, donde cada celda representa uno de los píxeles que nos mostrara la webcam por pantalla. Para hacer la lectura de la información de cada una de las celdas que componen la webcam, existen unos convertidores A/D que transforman la señal analógica en digital, y de allí estas señales se envían al PC que debe decodificarlas para posteriormente mostrarlas por pantalla. Las cámaras CMOS son distintas. La diferencia es que en esta ocasión la conversión A/D se realiza píxel a píxel en el mismo sensor, por lo que el circuito es más simple que el

-Memoria-

- 16 -

anterior. El modo para pasar convertir la señal en el mismo sensor esta basada en la amplificación de la señal por medio de los transistores que llevan cada una de las celdas del sensor. No podemos decir que un sensor sea mejor que el otro, ya que esto depende de varios parámetros que repasamos a continuación: Blooming: El blooming proviene del inglés bloom (florecer), y se refiere al fenómeno por el cuál cuando un píxel se satura (llega a su nivel máximo), se comienzan a saturar sus vecinos. Es propio de la tecnología CMOS. Rango Dinámico (RD): Cociente entre el nivel de saturación de los píxeles y el umbral por debajo del cual no captan señal. Las cámaras CCD superan a las CMOS en este aspecto en un factor de dos. Responsividad: Es el término que se refiere al nivel de señal que puede ofrecer sensor por unidad de energía incidente. Los sensores CMOS son superiores a los CCD en este aspecto, debido a que integra elementos amplificadores en las propias celdas de captación. Ruido: En este aspecto los sensores CMOS salen perdiendo. Esto es así porque la propia señal se convierte en las mismas celdas Respuesta uniforme: Idealmente se espera que un píxel sometido al mismo nivel de excitación de luz que sus vecinos no presente cambios apreciables respecto de ellos. En este aspecto la individualidad de cada píxel de un sensor CMOS los hace más sensibles a sufrir fallos, siendo mayor la uniformidad en CCD. No obstante mediante la adición de circuitos con realimentación se ha conseguido subsanar en gran medida este problema, aunque los CCD siguen ostentando una ligera ventaja. Velocidad: Si nos concentramos en la velocidad con la que se captura la imagen, veremos que los CMOS son bastante superiores a los CCD, debido a que muchas funciones, como la propia conversión analógico-digital son realizadas en el propio sensor. Si bien por el momento esta ventaja es ligera, se espera que aumente con el tiempo. Parámetros para escoger una webcam:

Tipo de conexión, es recomendable que se conecten por puerto USB, ya que las transferencias de información son a mayor velocidad y calidad que el puerto paralelo. También existe la conexión ethernet o inalámbrica, aunque estas ultimas se conocen como cámaras de red.

- Velocidad de captura, que hace referencia a la cantidad de imágenes captadas

por segundo. Normalmente se mide en fps, en inglés frames por segundo. Cuanta mayor velocidad de captura mayor fluidez tendremos.

Resolución, que se refiere a la cantidad de píxeles de las imágenes que nos proporciona la webcam. Muchas presentan este parámetro configurable para el usuario. Drivers, son importantes porque proporcionan el software que acompaña a la webcam. Es sumamente interesante que hayan opciones para ajustar la tonalidad de las imágenes, la saturación, la luminosidad etc.

-Memoria-

- 17 -

Figura 2.4.4.2 Webcam

-Memoria-

- 18 -

2.5 Problema a resolver En el capítulo anterior hemos explicado el contexto en el que se sitúa el proyecto. En este apartado vamos a definir el problema que se nos plantea y el método elegido para enfrentarlo. 2.5.1 Descripción del problema El objetivo principal de este proyecto es el de hacer un control de posición de un robot móvil en un ambiente mediante una webcam. Este robot es interactivo y todavía está en fase de desarrollo. Se pretende que su ambiente de trabajo sea en ambientes concurridos como ferias, restaurantes, etc. Se pretende que este robot sea una herramienta útil para los visitantes y que les pueda dar información útil, el robot detecta la presencia de una persona y se acerca a ella. Los visitantes interactúan con el robot por medio de una pantalla táctil que lleva incorporada y detecta los objetivos como las mismas personas o las paredes por medio de un sensor.

Imagen 2.5.1.1 Robot interactivo Sin embargo, el robot necesita de conocer sus coordenadas en el lugar donde se encuentre por medio de una webcam que llevará en su “cabeza”. La webcam por lo tanto será nuestro elemento sensorial para interactuar con el entorno. Debemos captar de la escena algún elemento representativo para tenerlo como punto de referencia y, en función de la posición del robot respecto a estos elementos establecer su posición.

-Memoria-

- 19 -

2.5.2 Método para solventar el problema Como elementos representativos, pensamos primero en colocar cartulinas de diferentes colores en los bordes del área de trabajo del robot. Según la disposición de estas y en función de otros aspectos como el tamaño podríamos ubicar el robot en el plano. Sin embargo esta opción quedó descartada porque la webcam no detectaba con precisión los bordes de las cartulinas Pensamos que unas balizas de forma cónica eran la mejor opción para este problema, por las siguientes razones:

1) Experimentalmente hemos comprobado que se detectan mejor los bordes de los elementos de forma redonda que los elementos con bordes rectos como cuadrados, etc.

2) Sea cual sea la posición del robot respecto a las balizas, éste las verá de la

misma manera, cosa que no pasa con cuadrados etc.

Figura 2.5.2.1 Ejemplo de baliza utilizada Para ubicar el robot en un área primero debemos definir el área de trabajo. Hemos elegido un área triangular y de dimensiones reducidas para hacer este proyecto porque el laboratorio donde trabajábamos así lo precisaba.

De esta forma ubicaremos tres balizas en cada una de las aristas del triangulo. Figura 2.5.2.2 Área de trabajo

-Memoria-

- 20 -

Primera Baliza Posición del robot

Segunda Baliza

Tercera Baliza Figura 2.5.2.3 Esquema de área Para posicionar el robot en el plano tendremos que reconocer las dos columnas, no basta con verlas, sino que además tenemos que saber cuáles son y medir la distancia que hay respecto a ellas. Esto es, si el robot es capaz de ver dos columnas y las sabe distinguir, podrá conocer su orientación en el plano. Además, si el robot es capaz de conocer la distancia a la que esta respecto a cada una de ellas podrá determinar su posición dentro del área de trabajo.

Imagen 2.5.2.4 Esquema de área

-Memoria-

- 21 -

2.5.3 Modelos de color empleados Una vez conocido el método que vamos a usar para solventar el problema y, antes de pasar a la descripción informática, presentamos los modelos de color que hemos utilizado en nuestro proyecto. El color en la robótica es una primitiva sumamente útil porque a partir de el podemos extraer información del entorno del robot. Los filtros dejan pasar la radiación correspondiente al color con que vemos el filtro. Un filtro verde deja pasar el verde (radiación amarilla y verde) y uno rojo absorbe todos menos el rojo y el naranja. Modelizar el color depende del espacio de color en el que nos basemos. Existen varios tipos de modelos pero nosotros trabajaremos en: -Modelo RGB -Modelo HLS De todas formas, cualquier modelo que utilicemos marca unos criterios para poder expresar un color informativamente. 2.5.4 Modelo RGB El modelo de color RGB es dependiente del dispositivo y suele ser usado por los Monitores de televisión y computadoras. Tiene tres colores primarios básicos: rojo (R), verde (G) y azul (B). A partir de la combinación de estos tres, podemos obtener los demás colores, por lo tanto, hablamos de un modelo aditivo de color. Por ejemplo, para obtener un magenta puro, debemos tener la máxima concentración de rojo y de azul a la vez. Un valor 0 en el valor de azul por ejemplo, indica que este color no interviene en la mezcla. Es muy frecuente que cada valor primario se codifique con un byte (de 0 a 255). Así pues, un rojo puro correspondería a las componentes (255, 0,0), y el magenta del que hablábamos a (255, 0,255).

Figura 2.5.4.1 Modelo RGB

-Memoria-

- 22 -

La representación geométrica de dicho espacio nos facilitará la interpretación del modelo. Se trata de un cubo euclídeo, donde las esquinas perpendiculares y no adyacentes son los tres colores primarios de la imagen, es decir R (rojo), G (verde) y B (azul), del inglés red, green y blue respectivamente. La escala de grises seria la diagonal que une a las esquinas negra y blanca respectivamente Tiene como ventajas principales que, por un lado, es un modo de color relativamente fácil de entender e implementar y que por otro, las computadoras y dispositivos usan para mostrar los colores por pantalla. 2.5.5 Modelo HLS El modelo HLS es ampliamente usado en el mundo de la robótica porque tiene mucha robustez frente a cambios de luz, que es de vital importancia cuando trabajamos en ambientes hostiles. El modelo de color HLS fue diseñado teniendo en mente el modo en que artistas y diseñadores graficos usan los términos “saturación” (la pureza del color), “tono” (el color en si mismo) e “intensidad” (el brillo del color) Se representa geométricamente como un doble cono. Se basa en coordenadas polares en 3-D, obteniéndose un espacio en forma de 2 conos unidos en la base. Conceptualmente, por lo tanto es un modelo distinto al del RGB, la primera componente de la que hablamos corresponde al color o matiz, que como vemos en el cono, seria la variable angular. La segunda corresponde a la saturación, o concentración de píxeles de del mismo color. Por último, la tercera variable es función de la luz que incide sobre el objeto. Figura 2.5.5.1 Modelo HLS Por lo tanto tenemos tres parámetros que determinan el color de un píxel

-Memoria-

- 23 -

Nivel de tono (H) Nivel de saturación (S) Nivel de luminancia (L) El tono se mide por el ángulo del cono. En función del ángulo tendremos distintos colores: -Rojo en torno a los 0º. -Amarillo en torno a los 60º. -Verde en torno a los 120º. -Cian en torno a los 180º. -Azul en torno a los 240º. -Magenta en torno a los 300º. Por otro lado, la luminosidad es medida en por la distancia en vertical al hexágono. Así, como mayor sea la luminosidad, más cerca del pico de la pirámide nos encontraremos. Finalmente, la saturación se variará desde el centro del cono hacia los límites del hexágono, a mayor proximidad a los limites, mayor saturación de color tendremos. La principal desventaja desde el punta de vista computacional es que no suele estar en el formato nativo en el que entregan los datos las tarjetas digitalizadoras de video, por lo que es necesario hacer una conversión, normalmente de RGB a HSL, que requiere cierto tiempo de cómputo. 2.5.6 Paso de RGB a HLS Como ya hemos venido comentando, el formato utilizado en los PC's para hacer una representación del color es el de RGB. Por lo tanto, necesitaremos cambiar de RGB HLS. . Para cambiar de RGB a HLS tendremos que hacer los siguientes cálculos:

L = 1/3(R+G+B) (1) S = 1 - (3/(R+G+B))*a; donde a es el mínimo entre R, G y B (2) H = cosˆ (-1) ((0.5*((R-G)+ (R-B))) / ((R-G) ˆ 2 + (R-B)*(G-B)) ˆ (0.5)) (3)

Si S = 0, H carece de significado. Si (B/I) > (G/I) entonces H = 360 - H puesto que H es un ángulo en grados normalizamos a 0,1 con H=H/360

Como se aprecia, estas operaciones son pesadas para la CPU y se tendrá que tener cuidado porque realizarlas supone un coste de tiempo importante. Más adelante, cuando se describe la descripción informática, describiremos el método que aplicamos para ahorrar el mayor tiempo posible en la conversión.

-Memoria-

- 24 -

Por otro lado, ya hemos visto que los dos modelos son muy distintos, y que tenemos que entenderlos para hacer un análisis crítico en las conversiones que se aplican. Veamos algunos ejemplos: -Rojo Puro RGB = (255, 0, 0). HLS = (0, 255, 128). Cuando pasamos de rojo puro en RGB a HLS, el resultado son tres componentes. La primera nos da 0, que representa el matiz. El resultado es 0 y es como esperábamos, pues el rojo se sitúa a los 0º del cono. La segunda componente se refiere a la saturación, que nos ha dado el valor máximo, es decir, 255. Este valor dice que el valor esta en su máxima pureza, ya que a mayor saturación, mayor concentración de píxeles del mismo color tendremos. Finalmente, vemos que la ultima componente nos ha dado un valor intermedio, es decir, 128. Para interpretar este valor nos fijamos en el cono del principio. Cuando los valores de esta componente son máximos nos situamos en los extremos del cono, el blanco y el negro respectivamente. Que el valor esté en la mitad significa que la luz que incide nos permite ver ese rojo en su máxima pureza. Otros ejemplos: -Verde Puro: RGB = (0, 255, 0). HLS = (80, 255, 128). - Azul Puro: RGB = (0, 0, 255). HLS = (160, 255, 128). - Magenta Puro: RGB = (255, 0, 255). HLS = (200, 255, 128). 2.5.7 Formatos de color El formato de color de una imagen se refiere a la posibilidad de tener diferentes opciones en la distribución de los bits por píxel para representar un color. Sea la forma que sea, cada una de estas posiciones se referirán siempre a rojo, verde y azul. 8bpp: El formato es de 8 bits por cada píxel que representemos. Estos modos son rápidos y sencillos, requieren poca memoria (al ser cada elemento de tipo byte).

16bppGrayScale: Formato de 16 bits por píxel en escala de grises.

16bppRGB555: Formato de 16 bits por píxel, 5 para cada uno de los colores primarios, el bit de mayor peso no tiene especificación.

-Memoria-

- 25 -

16bppRGB565: Formato de 16 bits por píxel, 5 para cada uno de los colores primarios, excepto el verde que dispone de 6 bits.

16bppARGB1555: Formato de 16 bits por píxel, 5 para cada uno de los colores. El bit de mayor peso corresponde a la variable alfa.

24bppRGB: En este formato disponemos de un byte por cada color primario.

32bppRGB: En este formato disponemos de un byte por cada píxel, más uno que no tiene aplicación.

pix32bppARGB: En este formato se dispone de 4 bytes, uno por la componente R, otro por la G, otro por la componente B y finalmente otro para la componente alfa.

48bppRGB: Formato de 48 bits por píxel.

64bppARG Formato de 64 bits por píxel.

64bppPARG Formato de 64 bis por píxel.

-Memoria-

- 26 -

2.6 Descripción informática 2.6.1 Flujo de control para tratar la imagen La webcam nos proporciona imágenes a intervalos de tiempo que sincroniza una interrupción que hacemos saltar cada cierto tiempo. En este periodo de tiempo tendremos que tratar la imagen y aplicar todos los filtros hasta reconocer las columnas, siempre con un tiempo inferior al periodo entre interrupciones para tratar de forma correcta la imagen. Para tratar la escena a la que nos enfrentamos tendremos que seguir diversas etapas hasta identificar las columnas que debemos encontrar. La captura de la imagen la hacemos directamente de la webcam, seguidamente recorreremos la imagen aplicando un filtro de color a todos los píxeles y quedándonos con aquellos que superen dicho filtro almacenándolos en dos vectores, uno para el rosa y otro para el azul, que usaremos como histogramas. La aplicación del histograma nos permitirá reconocer objetos del mismo color y, finalmente, si estos objetos son lo suficientemente próximos los reconoceremos como columnas. Esquema de tratamiento de imagen 2.6.2 Captura de la imagen Las imágenes digitales son “señales” discretas, que suelen tener origen, normalmente, en una “señal” continua. En el proceso de obtención de imágenes digitales con cámaras analógicas se distinguen dos etapas. La primera, conocida como captura, utiliza un dispositivo óptico, con el que obtiene información relativa a una escena. En nuestro caso, el dispositivo será la webcam. En la segunda etapa, que se conoce como digitalización, se transforma esta señal continua de vídeo, en la imagen digital, que es una señal discreta. Para captar la imagen hemos usado una webcam netway vmicro VC12U. Cabe señalar que el ritmo de captura es de 300ms, esto es, más de tres imágenes por segundo. En la imagen podemos ver una imagen captada por nuestra webcam.

FILTRO COLOR

CAPTURA IMAGEN

DISTINGUIR BLOQUES

IDENTIFICAR COLUMNAS

-Memoria-

- 27 -

Figura 2.6.2.1 Imagen baliza Cabe señalar que, cuando arrancamos el programa, lo primero que hacemos es crear una tabla con todos los valores posibles HLS en función de los valores RGB. Esto hace que, aunque en un principio cueste más arrancar el programa, luego sea mucho más rápido disponer de los valores HLS al no tener que calcularlos cada vez, 2.6.3 Filtro de color La webcam nos proporciona información del entorno en forma de imágenes y con ellas debemos extraer información suficiente para posicionar el robot en el plano donde se encuentre. Las imágenes vienen caracterizadas por muchos parámetros como son las formas (cuadrados, redondas…), los colores, etc., y nosotros nos basaremos en el color para extraer la información que necesitamos. Para evaluar una imagen cualquiera de las que nos proporciona la webcam deberemos recorrerla píxel por píxel y mirar que sean del color que estamos buscando. Cuando capturamos la imagen, esta se encuentra en formato RGB, ya que este es el formato que nos proporciona nuestra webcam y tal como la debemos leer de la pantalla. Por lo tanto, para cada píxel que evaluemos, tendremos que tener en cuenta tres componentes: roja, verde y azul. Al tener la imagen un formato de 24 bits por píxel, tendremos tres bytes a analizar por cada píxel que tengamos. Así pues, cuando recorremos la imagen que nos proporciona la webcam tendremos que tener en cuenta este dato. la imagen es de 640 x 480 píxeles pero en realidad recorremos 640 x 480 x 3 bytes. Al hacer el filtro, en las primeras implementaciones utilizábamos un filtro RGB, puesto que la imagen estaba en este formato. Sin embargo, después de hacer algunas pruebas nos dimos cuenta que este filtro no era nada robusto frente a cambios de luminosidad ya que los resultados variaban dependiendo de que utilizábamos la luz proveniente de los focos, de las ventanas según la hora del día, etc. Para ello, decidimos aplicar un filtro HLS, y después de varias pruebas experimentales, vimos que era mucho más robusto que el filtro RGB.

-Memoria-

- 28 -

El modelo HLS también tiene tres componentes como el RGB, pero en esta ocasión se refieren a matiz, luz y saturación. La principal ventaja es que, al tener una componente especifica para la luz, este factor hace que pueda ser mucho más robusto a los cambios de luz que el anterior. Sin embargo, presenta un problema, y es que ni las webcam ni los PC’s nos muestran los colores en este formato, por lo que es necesario hacer una conversión de cada color RGB a HLS. Además las operaciones que se hacen para pasar de RGB a HLS son muy pesadas para los PC’s y requieren cierto tiempo de cómputo que, si tenemos que hacer por cada byte que analicemos de la imagen, harán que nuestro programa se ralentice mucho. Por lo tanto tenemos un problema que solventar. La solución propuesta es hacer la conversión de RGB a HLS cuando arranquemos el programa, creando una tabla que contenga todos los valores HLS en función de todos los valores RGB posibles. Con esto, el tiempo para arrancar el programa será mayor pero después el tiempo de ejecución de captura y tratamiento de la imagen será mucho más rápido. De todas formas, nosotros nos podemos ahorrar la componente L, que es la que se refiere a la luminosidad, ya que no la tendremos en cuenta precisamente porque queremos que nuestro filtro no tenga en cuenta la luz. Decidimos que los datos de la tabla HLS fueran del tipo byte, primero porque la imagen que tratábamos también tenia las componentes de 8 bits, también porque pensamos que con 8 bits ya tenemos suficiente resolución para analizar los colores y después porque es mas rápido moverse en una tabla de tipo byte que en una de tipo int por ejemplo. Esto quiere decir que los valores de H o matiz van en realidad de 0 a 255 y los de saturación, con tal de facilitar la comprensión de 0 a 100.

Color Rango Normalizado Rango Programa

Rojo 0 0

Amarillo 60 42.5

Verde 120 85

Cian 180 127.5

Azul 240 170

Magenta 300 212.5

Cuadro 3.1. Rangos HLS en el programa Veamos algunos ejemplos más: -Rojo Puro: Valor RGB = (255, 0, 0) Valor H = 0

Valor S = 100 -Verde Puro: Valor RGB = (0, 255, 0) Valor H = 81

Valor S = 100 -Azul Puro: Valor RGB = (0, 0, 255)

-Memoria-

- 29 -

Valor H = 162 Valor S = 100

El filtro consiste en ir byte a byte de la imagen y comprobar que los valores están dentro de los rangos de matiz y saturación que tenemos prefijados, si están dentro de los rangos los almacenaremos en los vectores correspondientes al color que filtremos y los pintaremos en la pantalla auxiliar del programa, de no ser así, no almacenaremos nada y en la pantalla auxiliar pintaremos de color negro. Color Hmin Hmax Smin Smax

Azul 160 165 40 90

Magenta 240 247 40 90

Cuadro 3.2. Tabla de valores HLS en el programa Para obtener el color de un píxel tuvimos muchos problemas que Para hacer el filtro, el lenguaje de programación C# nos proporcionaba dos funciones: getpìxel (i,j) que devuelve el color del píxel en la posición i,j y setpixel(i,j,color), que pinta de color “color” en la posición i,j. Sin embargo, para tratar las imágenes que proporciona la webcam a gran velocidad estas funciones no son validas. Cada vez que es llamado setpixel (i,j, color) o getpixel(i,j) internamente se realiza una copia de la imagen a tratar y se vuelve a copiar a memoria, por lo que esa copia continua de cada píxel hace que el algoritmo sea muy lento. Solución al problema:

1) Se bloquea en memoria la imagen a tratar y la imagen que pintaremos.

2) Se crean dos punteros a memoria, uno para cada imagen, el cual iran recorriendo simultáneamente las dos matrices de píxeles.

3) Cuando hemos recorrido tres bytes, podemos entender que ya tenemos un píxel

y en ese momento aplicamos nuestro filtro de color 2.6.4 Distinguir bloques Haremos uso de los histogramas para reconocer los objetos que forman parte de la escena que capta nuestra webcam. Un histograma es una representación grafica de una variable en forma de barras. El valor que toman las variables se representa en el eje horizontal y en el eje vertical el número de veces que se repite. En nuestro caso, en el eje horizontal representaremos las coordenadas abscisas de la escena y en el eje vertical el número de píxeles del color que buscamos. De esta forma, obtendremos un grafico que nos permitirá ver que zonas de la escena tienen mayor concentración de píxeles de un mismo color.

-Memoria-

- 30 -

Figura 2.6.4.1

Una vez obtenido el histograma debemos marcar un umbral mínimo para reconocer los objetos que buscamos, es decir, que en una determinada coordenada x debe haber un mínimo número de concentración de píxeles para ser tomado en cuenta. Si este píxel y sus vecinos han pasado dicho umbral, tendremos en cuenta esta zona para después comprobar si se trata o no de una columna. Así pues, en nuestro programa tendremos dos histogramas, uno para el color azul y otro para el color rosa. Cuando tengamos los dos histogramas se buscara cuan próximos son estos objetos el uno del otro y, en caso de tener un objeto azul suficientemente próximo a uno rosa, se reconocerá como columna.

Figura 2.6.4.2

2.6.5 Reconocer Balizas Hemos visto que el robot debe ser capaz de identificar las balizas para orientarse en el plano. Primeramente, basta decir que se eligieron los colores azul y magenta para todas las balizas. El hecho de que sean de este color y no de otro se debe a que, experimentalmente, hemos comprobado que estos dos colores eran los que mejor captaba la webcam. Por otro lado, explicaremos el método que aplicamos para reconocer las balizas. Todas las balizas tienen azul y magenta en diferentes proporciones. Estas proporciones, estén donde estén respecto al robot se mantendrán.

-Memoria-

- 31 -

Figura 2.6.5.1 Balizas utilizadas Así pues, las proporciones entre magenta y azul nos permitirán reconocer las columnas.

RosaAzulBaliza = (4)

La primera idea fue la de aplicar el cociente de las dos áreas. Sin embargo, a la practica vimos que esta idea no daba los resultados esperados porque el magenta no se veía tan bien como esperábamos, quedando áreas

Figura 2.6.5.2 y 2.6.5.3 Imagen captada desde la webcam y su filtrada Como se aprecia en la figura, en ciertas ocasiones el área del rosa no queda perfectamente definida, por lo que el resultado del cociente entre las dos áreas puede llevar a errores que no nos interesan. Después, la siguiente idea que se aplicó fue comparar la mejor recta vista de las verticales de los objetos azul y rosa

-Memoria-

- 32 -

Figura 2.6.5.4 Baliza Sin embargo, otra vez vimos que daba bastantes errores al trasladarlo a la práctica porque, de nuevo, teníamos muchos problemas en ciertas ocasiones para captar de forma adecuada el color rosa. Finalmente, la solución adoptada es la de medir sólo variables referentes al color azul. La idea es la de medir la proporción entre el ancho y el alto del azul que veamos. Esta proporción es, como las demás, siempre constante y, tiene como ventaja que no hay que medir ninguna variable del magenta, aunque esta indirectamente relacionado con la proporción. Tras varias pruebas podemos verificar que el promedio de aciertos para identificar la baliza es muy alto.

Figura 2.6.5.5 Baliza, solución adoptada.

-Memoria-

- 33 -

2.6.6 Calcular la distancia y el ángulo respecto a una baliza Finalmente, en este punto vamos a describir el mecanismo adoptado para conocer la distancia y el ángulo de inclinación del foco respecto a la baliza. Empezamos con la distancia. Para calcular la distancia, como antes volvemos a aplicar una relación de proporciones. Para conocer la distancia de la webcam respecto a una baliza, tendremos en cuenta el número de píxeles que vemos en horizontal. A menor distancia, mayor número de píxeles veremos y, al revés, a menor distancia, mayor numero de píxeles. Hemos elegido esta variable porque experimentalmente hemos visto que es más sensible que elegir la variable vertical frente a cambios de posición relativa entre la cámara y la baliza. Esta componente horizontal es la mejor de las horizontales que se ven en toda la baliza, ya sea azul o rosa. Para hacer esta proporción, experimentalmente se puso una baliza a un metro en unas condiciones de luz perfectas para ver la baliza con gran precisión y se contaron el número de píxeles en horizontal que teníamos. Este numero lo mantendremos para hacer las proporciones para las demás distancias al foco. Por otro lado, para calcular el ángulo de inclinación del foco a la baliza medimos primero el número de píxeles que hay de desplazamiento respecto al centro de gravedad de la baliza al centro de la imagen. Este numero lo tenemos que pasar a longitud tal y como hacíamos antes. Este valor dividido por la distancia que obtenemos es la tangente entre el foco y el centro de masas de la baliza, o dicho de otro modo, el ángulo de desviación entre el foco y la baliza. Finalmente con todas estas variables podemos calcular la distancia entre el foco y el centro de masas de la baliza. Esto es, aplicamos el teorema de Pitágoras:

22 )()_tan( desviaciónfocociadisdistamcia += (5)

Figura 2.6.6.1 Cálculo del ángulo

-Memoria-

- 34 -

2.7 Resultados experimentales 2.7.1 Primera Prueba Esta primera prueba se ha realizado en el pasillo que da al laboratorio donde hay el laboratorio. Las condiciones de luz son bastante buenas

Columna 0 Real (cm) Medido (cm) % Error medido Identificación Columna

40 40,16 0,4 OK 50 49,15 1,7 OK 60 60.065 1,3333 OK 70 71 1,428571429 OK 80 81 1,25 OK 90 94 4,444444444 OK

100 106 6 OK 110 118 7,272727273 OK 120 126 5 OK 130 148 13,84615385 OK 140 146 4,285714286 OK 150 168 12 OK 160 196 22,5 OK 170 176 3,529411765 OK 180 206 14,44444444 OK 190 215 13,15789474 OK 200 226 13 OK 210 240 14,28571429 OK 220 243 10,45454545 OK

Columna 1 Real (cm) Medido (cm) % Error medido Identificación Columna

40 41 2,5 OK 50 50 0 OK 60 60.067 1,6667 OK 70 67 4,285714286 OK 80 75 6,25 OK 90 86 4,444444444 OK

100 93 7 OK 110 103 6,363636364 OK 120 110 8,333333333 OK 130 123 5,384615385 OK 140 135 3,571428571 OK 150 142 5,333333333 OK 160 148 7,5 OK 170 159 6,470588235 OK 180 183 1,666666667 OK 190 190 0 OK 200 197 1,5 OK

-Memoria-

- 35 -

210 211 0,476190476 OK 220 no detecta -

Columna 2 Real (cm) Medido(cm) % Error medido Identificación Columna

40 43 7,5 50 52 4 60 57 5 OK 70 67 4,285714286 OK 80 79 1,25 OK 90 87 3,333333333 OK

100 95 5 OK 110 130 18,18181818 OK 120 no detecta 130 no detecta 140 170 21,42857143 OK 150 152 1,333333333 OK 160 180 12,5 OK 170 160 5,882352941 OK 180 no detecta 190 no detecta 200 no detecta 210 no detecta 220 no detecta

De las anteriores datos, derivamos unas graficas que nos ayudan a interpretar el % de error en función de la lo lejos que estamos del objetivo.

Columna 0

0

5

10

15

20

25

40 60 80 100 120 140 160 180 200 220

Distancia en cm

%Er

ror

Figura 2.7.1.1 Grafico distancia-error columna 0

-Memoria-

- 36 -

Columna 1

0123456789

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.1.2 Grafico distancia-error columna 1

Columna 2

0

5

10

15

20

25

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.1.3 Grafico distancia-error columna 2 Tras esta primera prueba podemos sacar varias conclusiones:

- El programa hace muy bien la identificación de las columnas, ya que en ninguno de los casos que hemos probado nos ha dado una columna que no era.

-En contraposición con el punto anterior, comprobamos que la baliza dos tiene más problemas para ser detectada, esto es debido a que esta columna esta formada

-Memoria-

- 37 -

básicamente por magenta y como este color no es tan bien captado por el hardware, tiene más problemas para hacer la identificación de forma correcta. - El software realizado calcula bien las distancias hasta un metro y medio más o menos, ya que los errores que hay son casi siempre iguales o inferiores al 15%. Superado este umbral, el error se dispara. Esto es debido a que las balizas no son muy anchas y, al fallar un píxel cuando estamos a cierta distancia, el error se multiplica. Es de esperar pues que, con balizas el doble de anchas, el software calcule las distancias con una precisión del 15% hasta los 3 metros. - Comparando los tres gráficos distancia- % error, podemos decir que la columna que mejor comportamiento tiene es la 1, que se sitúa siempre con errores inferiores al 9%. De los mismos gráficos también deducimos que la columna 2 es la peor de todas para ser vista.

-Memoria-

- 38 -

2.7.2 Segunda Prueba En esta segunda prueba hemos realizado el experimento en una habitación totalmente cerrada y con la luz del techo encendida. Estos son los resultados:

Columna 0 Real (cm) Medido (cm) % Error medido Identificación Columna

40 38 5 OK 50 46 8 OK 60 56 6,666666667 OK 70 65 7,142857143 OK 80 78 2,5 OK 90 no

100 101 1 OK 110 113 2,727272727 OK 120 118 1,666666667 OK 130 128 1,538461538 OK 140 139 0,714285714 OK 150 153 2 OK 160 163 1,875 OK 170 182 7,058823529 OK 180 190 5,555555556 OK 190 197,6 4 OK 200 215 7,5 OK 210 217 3,333333333 OK 220 no

Columna 1

Real (cm) Medido (cm) % Error medido Identificación Columna

40 41 2,5 OK 50 49,812 0,376 OK 60 57,144 4,76 OK 70 67,1789 4,030142857 OK 80 78,76 1,55 OK 90 86,854 3,495555556 OK

100 97,48 2,52 OK 110 105,7846 3,832181818 OK 120 116,06678 3,277683333 OK 130 127,005 2,303846154 OK 140 139,375 0,446428571 OK 150 143 4,666666667 OK 160 155 3,125 OK 170 169,047 0,560588235 OK 180 175,282 2,621111111 OK 190 190,0196 0,010315789 OK 200 197,256 1,372 OK 210 206,84 1,504761905 OK 220 215,34 2,118181818 OK

-Memoria-

- 39 -

Columna 2 Real (cm) Medido(cm) % Error medido Identificación Columna

40 no OK 50 47,037 5,926 OK 60 57,049 4,918333333 OK 70 64 8,571428571 OK 80 75 6,25 OK 90 85,207 5,325555556 OK

100 93 7 OK 110 121 10 OK 120 115 4,166666667 OK 130 145 11,53846154 OK 140 150 213 42 OK 160 170 no 180 316 75,55555556 OK 190 no 200 no 210 no 220 no

Columna 0

01

23

45

67

89

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.2.1 Grafico distancia-error columna 0

-Memoria-

- 40 -

Columna 1

00,5

11,5

22,5

33,5

44,5

5

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.2.2 Grafico distancia-error columna 1

Columna 1

0

4

8

12

16

20

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.2.3 Grafico distancia-error columna 2 Como vimos en la anterior prueba, el software nos identifica bien las columnas siempre. La columna 1 vuelve a ser la que mejor comportamiento muestra en su relación distancia-error, además de ser muy estable ya que siempre es inferior al 5%. La columna 0 en esta ocasión tiene un comportamiento muy similar, sólo que se mueve en errores algo superiores que en la 1. Finalmente volvemos a observar como tiene más problemas para detectar la columna 2 que las otras.

-Memoria-

- 41 -

2.7.3 Tercera Prueba La tercera prueba la he realizado en otro pasillo, en este caso de mi propia casa. Todas las puertas y ventanas estaban completamente cerradas, por lo que no entraba nada de luz natural y sólo teníamos la luz del techo prendida. Los resultados los mostramos a continuación:

Columna 0 Real (cm) Medido(cm) % Error Identificación Columna

40 41,00 2,5 OK 50 48,09 3,82 OK 60 60,07 0,116666667 OK 70 69,38 0,885714286 OK 80 81,13 1,4125 OK 90 88,04 2,177777778 OK

100 98,04 1,96 OK 110 105,04 4,509090909 OK 120 125,06 4,216666667 OK 130 139,19 7,069230769 OK 140 148,06 5,757142857 OK 150 161,03 7,353333333 OK 160 169,06 5,6625 OK 170 175,85 3,441176471 OK 180 206,13 14,51666667 OK 190 215,83 13,59473684 OK 200 237,05 18,525 OK 210 250,00 19,04761905 OK 220 296,00 34,54545455 OK

Columna 1

Real (cm) Medido(cm) % Error Identificación Columna 40 42,09 5,225 OK 50 48 3,76 OK 60 60 0,45 OK 70 69,36 0,914285714 OK 80 79,45 0,6875 OK 90 95,45 6,055555556 OK

100 98,48 1,52 OK 110 113,46 3,145454545 OK 120 125,48 4,566666667 OK 130 128,43 1,207692308 OK 140 139,46 0,385714286 OK 150 150,51 0,34 OK 160 169,46 5,9125 OK 170 175,45 3,205882353 OK 180 186,43 3,572222222 OK 190 190,44 0,231578947 OK 200 215,41 7,705 OK 210 215,06 2,40952381 OK

-Memoria-

- 42 -

220 226,06 2,754545455 OK

Columna 2 Real (cm) Medido(cm) % Error Identificación Columna

40 no detecta - - 50 54 8,2 OK 60 65,12 8,533333333 OK 70 78,44 12,05714286 OK 80 86,67 8,3375 OK 90 102,06 13,4 OK

100 no detecta - - 110 no detecta - - 120 135,86 13,21666667 OK 130 147,33 13,33076923 OK 140 170,86 22,04285714 OK 150 210,45 40,3 OK 160 no detecta - - 170 no detecta - - 180 316,77 75,98333333 OK 190 345,88 82,04210526 OK 200 no detecta - - 210 no detecta - - 220 no detecta - -

Columna 0

0

5

10

15

20

25

30

35

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.3.1 Grafico distancia-error columna 0

-Memoria-

- 43 -

Columna 1

0

1

2

3

4

5

6

7

8

9

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.3.2. Grafico distancia-error columna 1

Columna 2

0

20

40

60

80

100

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.3.3 Grafico distancia-error columna 2 De la tercera prueba podemos apreciar el buen comportamiento que ha habido en relación a error-distancia respecto a las columnas 0 y 1. De la columna 2 podemos ver que el error incrementa rápidamente, a los 70 cm ya tenemos un error del 12%, para después, a los 110 cm ni siquiera detectar la columna. Vemos que el error máximo medido es del 82%, Podríamos decir que el ambiente elegido nos es algo más desfavorable que los anteriores.

-Memoria-

- 44 -

2.7.4 Cuarta Prueba La cuarta prueba, a diferencia de todas las anteriores, la hemos realizado en una habitación donde entraba la luz del día. Las ventanas estaban abiertas y la luz se distribuía de forma uniforme por toda la habitación. Con esta prueba veremos si nuestro programa es asequible también en ambientes cerrados donde la luz no es artificial. Los resultados obtenidos los mostramos en la siguiente tabla:

Columna 0 Real (cm) Medido (cm) % Error Identificación Columna

40 46,00 15 OK 50 51,48 2,96 OK 60 57,07 4,883333333 mal 70 69,38 0,885714286 OK 80 77,02 3,725 OK 90 90,01 0,011111111 OK

100 101,65 1,65 OK 110 109,58 0,381818182 OK 120 121,26 1,05 OK 130 135,65 4,346153846 OK 140 139,15 0,607142857 OK 150 153,48 2,32 OK 160 163,61 2,25625 OK 170 197,14 15,96470588 OK 180 182,45 1,361111111 OK 190 197,59 3,994736842 OK 200 202,48 1,24 OK 210 265,94 26,63809524 OK 220 276,87 25,85 OK

Columna 1

Real (cm) Medido (cm) % Error Identificación Columna40 44,01 10,025 OK 50 52 4,76 OK 60 65 8,9 OK 70 73,95 5,642857143 OK 80 85,56 6,95 OK 90 92,19 2,433333333 OK

100 101,77 1,77 OK 110 107,07 2,663636364 OK 120 115 4,166666667 OK 130 125 3,846153846 OK 140 131,33 6,192857143 OK 150 153 2 OK 160 158 1,25 OK 170 190 11,76470588 OK 180 175,87 2,294444444 OK 190 no detecta - OK 200 215,98 7,99 OK

-Memoria-

- 45 -

210 229,32 9,2 OK 220 no detecta - OK

Columna 2 Real (cm) Medido (cm) % Error Identificación Columna

40 38 5 - 50 53 6,1 OK 60 69,23 15,38333333 OK 70 75,87 8,385714286 OK 80 83 3,75 OK 90 97,68 8,533333333 OK

100 121,83 21,83 - 110 no detecta - - 120 135,87 13,225 OK 130 147,24 13,26153846 OK 140 142,22 1,585714286 OK 150 170,85 13,9 OK 160 190,89 19,30625 OK 170 no detecta - - 180 220,78 22,65555556 OK 190 215,13 13,22631579 OK 200 no detecta - - 210 no detecta - - 220 no detecta - -

Columna 0

0

5

10

15

20

25

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.4.1 Grafico distancia-error columna 0

-Memoria-

- 46 -

Columna 1

0123456789

101112

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.4.2 Grafico distancia-error columna 1

Columna 2

0

5

10

15

20

25

40 60 80 100 120 140 160 180 200 220

Distancia (cm)

% E

rror

Figura 2.7.4.3 Grafico distancia-error columna 2 Esta cuarta prueba era interesante porque la luz que incidía sobre nuestras balizas era natural, distinta a las demás pruebas. Se aprecia que los resultados en general siguen siendo buenos. Podemos apreciar que el comportamiento distancia – error se hace estable en las tres columnas, y que, en esta ocasión, la que mejor comportamiento tiene es la columna 0. Apreciamos también que, de todas las pruebas realizadas, es en la que mejor se adapta la columna 2.

-Memoria-

- 48 -

Sistema de localización relativa basada en visión artificial

3. Conclusiones

-Memoria-

- 49 -

3. Conclusiones El objetivo principal de este proyecto era el de detectar hacer un control de posición con una webcam. En el presente proyecto se ha implementado un software de procesamiento de imágenes, compuesto esencialmente por filtros de color, reconocimiento de objetos y cálculos de distancias y ángulos respecto a los objetos detectados. Este procesado está directamente relacionado con la visión artificial porque sirve a una maquina para interpretar el contenido de las imágenes que le llegan. El software implementado tiene un buen comportamiento en general. Se ha comprobado que el cálculo de distancias falla cuando nos alejamos a distancias superiores a los 2 metros de las balizas. Esto es debido a que el ancho de las columnas no permite que la webcam pueda ver bien las columnas a cierta distancia. Por otro lado, este software solo se ha probado en ambientes no concurridos y en los que, en la escena captada por la webcam, quedaba de forma muy exaltada las columnas, por lo que no se ha probado en ambientes concurridos de gente.

-Memoria-

- 51 -

Sistema de localización relativa basada en visión artificial

4. Líneas futuras

-Memoria-

- 53 -

4. Líneas futuras

Para el futuro seria muy recomendable probar este software con balizas de dimensiones superiores y comprobar que, si las dimensiones se multiplican por un factor n, el calculo de distancias y ángulos se hace bien una distancia n veces superior a la que ahora consideramos como umbral. Es decir, que si conseguimos una baliza el doble de grande que la que usamos, esperamos medir las distancias de las columnas una distancia el doble de la que ahora es la buena. Además, también seria recomendable implementar algoritmos nuevos para la detección de las columnas. Por otro lado, este software puede tener otras aplicaciones aparte de orientar el robot. Una de estas aplicaciones podría ser la de utilizar las balizas para que el robot las siguiera a cierta distancia, esto es, un elemento guía para el robot. En la industria, muchas veces se requieren de robots que transporten cargas por la fábrica. Estos robots muchas veces siguen caminos que ya están predeterminados, pero puede ser que, en ciertas ocasiones, se precise cambiar el rumbo del robot para llevar la carga a otro lado. El sistema que proponemos podría ser usado para este tipo de aplicación.

Figura 4.1 y 4.2 El robot sigue el dispositivo que lleva la chica Un claro ejemplo de la aplicación que proponemos para nuestro software lo vemos en las figuras 4.1 y 4.2. La chica de la figura lleva un dispositivo que emite infrarrojos, estos son captados por el robot de la figura y la sigue. El robot como vemos lleva equipaje. La misma aplicación podría tener nuestro software. El sensor de infrarrojos del robot sería sustituido por una webcam, y la chica, en lugar de llevar un dispositivo que emitiera infrarrojos podría ir con un palo de los colores de las balizas.

-Memoria-

- 55 -

Sistema de localización relativa basada en visión artificial

5. Bibliografía

-Memoria-

- 56 -

5: Bibliografía 5.1 Libros consultados [1] Visión Por Computador Arturo de la Escalera Edit: Prenitence Hall [2] Enciclopedia de Microsoft Visual C# Fco. Javier Ceballos Edit: Edit:

Ra Ma [2] Fundamentos de Informatica Grafica David Escudero Edit: Ceysa [3] Tratamiento digital de imagenes Alberto Domingo Ajenjo

Edit: Anaya [4] Robots mobiles Frédéric Giamarchi Edit Paraninfo 5.2 Webs consultadas [5] http://webdeearde.com/blogs/mifulapirus/category/vision-artificial/

[6] http://robotica.es/ [7] http://celtico-celtico.blogspot.com/

-Anexos-

58

Sistema de localización relativa basada en visión artificial

6. Anexos

-Anexos-

60

Anexo 1 Manual de usuario En este apartado describimos, a nivel de usuario, como funciona el programa que se ha realizado. El software se ha diseñado para que sea fácil de usar y que sus resultados sean fáciles de interpretar para el usuario que maneja el programa.

Figura A1.1 Se tienen dos ventanas, una de 640x480 píxeles que muestra la imagen directamente desde la webcam. En la parte superior izquierda se tiene una ventana de 320x240 píxeles que es el resultado del filtro que aplicamos a la imagen real. La imagen filtrada se muestra con un zoom x 2 para que pueda caber y pueda ser fácil de entender para el usuario.

Figura A1.2 y A1.3 Botones del programa Debajo de la ventana “filtrada” tenemos varios botones. Uno, Start , para arrancar el programa. Este botón cambia automáticamente a Stop una vez hemos arrancado el programa y congela el programa en su estado actual. Device, es un botón que sirve para elegir la webcam en caso de tener más de una conectada al Pc. Después, también vemos un botón para salir del programa: Sortida.

-Anexos-

61

Debajo tenemos información que nos da el programa en relación a los objetivos que buscamos. En caso de tener columnas el programa mostrará: - Su posición en la pantalla en píxeles.

-La distancia que hay entre la centro de la imagen y el foco en cm. (distancia al focus), y la desviación en cm entre el centro de la imagen y el centro de masas de la baliza/s -La distancia entre el foco de la webcam y el centro de masas de la baliza/s -El ángulo de desviación entre el foco y el centro de masas de la baliza/s.

Figura A1.4 Resultados del programa En caso de no ver ningún objetivo, el programa nos lo marca.

Figura A1.5 Resultados del programa De esta forma, podemos decir que tenemos un programa en el que los resultados son sumamente fáciles de interpretar. Además, para ponerlo en marcha no necesitamos del robot para que funcione, nos basta con una webcam para poder arrancar la aplicación. En el ejemplo de la imagen A1.1 podíamos ver un ejemplo de aplicación del software. Se aprecia de la imagen original que tenemos dos balizas situadas a cierta distancia del foco. Las dos están separadas y como vemos, son distintas. Bien, el programa reconoce

-De qué balizas se tratan (en la parte izquierda se muestra de la pantalla de resultados se muestra precisamente la columna situada más a la izquierda).

-Anexos-

62

-Nos determina para cada baliza su posición en la pantalla en píxeles. Por ejemplo, para la baliza situada más a la derecha de la imagen nos informa del primer punto de la baliza (extremo izquierdo), el segundo punto (extremo derecho), y del punto del centro (centro de masas de la columna)

P1 = 358 P2 = 492 Cx = 425

- En la siguiente nos determina a que altura del foco está cada baliza, y su desviación respecto al centro de masas. Resultados de 70cm y 7.35cm de desviación hacia el centro de masas de la columna derecha.

- En la siguiente tenemos la distancia real al objetivo. Este resultado es, en

realidad, la hipotenusa de los catetos que forman los datos anteriores.

- Finalmente obtenemos el ángulo de desviación hacia el objetivo, es decir, el ángulo que debería mover la cabeza del robot para ver de lleno a la columna.

Figura A1.6 En este segundo ejemplo vemos la columna que estaba situada a la izquierda en la imagen anterior. Vemos que en el primer recuadro, el programa nos la sigue identificando igual (columna 1 en ambos casos). Los demás resultados sí han cambiado al variar la posición relativa entre la columna y la webcam.