Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DE HUAUCHINANGO
INGENIERÍA
MECATRÓNICA
P R E S E N T A :
J10312013
INGENIERÍA
MECATRÓNICA
P R E S E N T A :
J10312013
i
Abstract
In the actually it has the technology to manufacture robots that simulate human
behavior; so that they do their job properly is a need for proper interaction between
them and their environment, this interaction people perform through the senses; still
the sense of sight the most important, because with this sense we recognize ant locate
that are around us.
The present work describes the way in which it had been prepared an
approximation to the sense of sight through the artificial vision through the
implementation of a robot arm for the detection and recognition of colors or shapes
using MatLab and Arduino.
ii
Dedicatoria
iii
Agradecimientos
En primer lugar le agradezco a Dios, por estar conmigo en cada momento de mi vida
a pesar de mi alejamiento de toda religión, gracias por ponerme en el juego de este
mundo tan loco.
A mi madre y hermanas, aunque hace poco las conocí se han vuelto un gran
apoyo y felicidad en mi vida.
iv
Índice de contenido
Página
Resumen i
Abstract ii
Dedicatoria iii
Agradecimientos iv
Antecedentes xii
Capítulo I. Introducción
1.1 Problema a resolver 1
1.2 Justificación 1
1.3 Objetivo general 2
1.4 Objetivos específicos 2
1.5 Aportaciones del trabajo 2
1.6 Estructura del trabajo 3
v
2.4 Arduino 44
2.5 Comunicación entre MatLab y Arduino 48
2.6 Servomotor 51
69
Conclusiones
70
Recomendaciones
71
Referencias
Anexos
Anexo A: Imágenes de prueba 76
Anexo B: Función “ColorRGB” 79
Anexo C: Función “Propiedades” 80
Anexo D: Función “DeteccionForma” 81
Anexo E: Script “DeteccionFunciones” 82
Anexo F: Interfaz Gráfica de Usuario “ColoryForma” 86
Anexo G: Figuras de prueba 92
Anexo H: Interfaz Gráfica de Usuario en MatLab 94
vi
Índice de figuras
Página
vii
Figura 2.21 Imagen vectorial 23
Figura 2.22 Acercamiento de imagen vectorial 23
Figura 2.23 Imagen ráster 23
Figura 2.24 Acercamiento de imagen ráster 23
Figura 2.25 Imagen RGB 24
Figura 2.26 Imagen indexada 25
Figura 2.27 Imagen en escala de grises 25
Figura 2.28 Imagen binaria 26
Figura 2.29 Tipos de ruido en una imagen 28
Figura 2.30 Ejemplos de transformaciones aritmético-lógicas 29
Figura 2.31 Transformaciones geométricas 29
Figura 2.32 Aumento y reducción de contraste 30
Figura 2.33 Ecualizado del histograma de una imagen 31
Figura 2.34 Ejemplo de segmentación por umbral 33
Figura 2.35 Ejemplo de segmentación por contornos 33
Figura 2.36 Ejemplo de segmentación basada en regiones 33
Figura 2.37 Ejemplo de segmentación basada en el color 34
Figura 2.38 Ejemplo de segmentación basada en la textura 34
Figura 2.39 Ejemplo de segmentación basada en el movimiento 35
Figura 2.40 Ventana de comandos 38
Figura 2.41 Ventana historia de comandos 38
Figura 2.42 Ventana del área de trabajo 39
Figura 2.43 Ventana de carpeta actual 39
Figura 2.44 Representación de imagen RGB en MatLab 40
Figura 2.45 Imagen leída y mostrada en MatLab 42
Figura 2.46 Conversión de imagen RGB a intensidad de gris
y binaria 43
Figura 2.47 Tarjeta Arduino UNO 45
Figura 2.48 Entorno de desarrollo de Arduino 47
Figura 2.49 Estructura básica de un programa de Arduino 47
Figura 2.50 Comunicación MatLab-Arduino 50
Figura 2.51 Componentes internos de un servomotor 52
Figura 2.52 Duración del pulso y ángulo del eje de un servomotor 52
viii
Figura 3.1 Selección del tipo de reconocimiento 54
Figura 3.2 Enumeración de los objetos presentes en la imagen 55
Figura 3.3 Conteo de objetos de acuerdo al tipo de reconocimiento
Seleccionado 55
Figura 3.4 Diseño del brazo robótico 56
Figura 3.5 Brazo robótico terminado 57
Figura 3.6 Conexión de servomotores 58
Figura 3.7 Brazo robótico con cámara 58
Figura 3.8 Funcionamiento de la interfaz gráfica 60
Figura 3.9 Mensaje de error al no realizarse la comunicación
MatLab-Arduino 60
Figura 3.10 Opciones iniciales de la interfaz gráfica 61
Figura 3.11 Selección del adaptador de video 61
Figura 3.12 Selección del ID de la cámara 62
Figura 3.13 Selección del formato 62
Figura 3.14 Mensaje de error al no configurar correctamente
la cámara 62
Figura 3.15 Botón "Visualizar Video" habilitado 63
Figura 3.16 Opciones de control del brazo robot y de reconocimiento
habilitadas 64
Figura 3.17 Selección de tipo de reconocimiento 64
Figura 3.18 Resultados mostrados en la interfaz gráfica 65
Figura 3.19 Cambio de tipo de reconocimiento 66
Figura 3.20 Confirmación de terminar la interfaz gráfica 66
Figura 4.1 Brazo robótico integrado a una banda transportadora 68
Figura A.1 Círculo azul 76
Figura A.2 Círculo rojo 76
Figura A.3 Círculo verde 76
Figura A.4 Cuadrado azul 76
Figura A.5 Cuadrado rojo 76
Figura A.6 Cuadrado verde 76
Figura A.7 Estrella azul 77
Figura A.8 Estrella roja 77
ix
Figura A.9 Estrella verde 77
Figura A.10 Rombo azul 77
Figura A.11 Rombo rojo 77
Figura A.12 Rombo verde 77
Figura A.13 Triángulo azul 78
Figura A.14 Triángulo rojo 78
Figura A.15 Triángulo verde 78
Figura A.16 Algunas imágenes de prueba colocadas en una sola 78
Figura G.1 Círculo rojo 92
Figura G.2 Cuadrado rojo 92
Figura G.3 Estrella verde 92
Figura G.4 Rombo verde 93
Figura G.5 Triángulo azul 93
Figura H.1 Ejemplo de interfaz gráfica 94
Figura H.2 Comando guide 94
Figura H.3 Selección de nueva interfaz gráfica 95
Figura H.4 Cuadro de diálogo al iniciar nueva interfaz gráfica 95
Figura H.5 Ventana para crear nueva interfaz gráfica 96
Figura H.6 Opciones de la ventana para crear una interfaz gráfica 96
Figura H.7 Componentes para una interfaz gráfica 97
Figura H.8 Ventana Property Inspector 97
Figura H.9 Opción View Call 98
Figura H.10 Archivo “.m” 98
Figura H.11 Guardar valor de una variable 99
Figura H.12 Asignar valor de un componente a una variable 99
Figura H.13 Asignar valor de una variable a un componente 99
Figura H.14 Opción Blank GUI (Default) 100
Figura H.15 Componentes a utilizar 100
Figura H.16 Configuración del Push Button 101
Figura H.17 Presentación de la interfaz gráfica 101
Figura H.18 Archivo “.m” creado al guardar 101
Figura H.19 Opción para crear la función Callback 102
Figura H.20 Función Callback de un Push Button 102
x
Figura H.21 Función Callback de un Edit Text 102
Figura H.22 Propiedad “Tag” de un componente 102
Figura H.23 Código del primer Edit Text 103
Figura H.24 Código del segundo Edit Text 103
Figura H.25 Código del Push Button 103
Figura H.26 Botón para ejecutar la interfaz gráfica 104
Figura H.27 Interfaz gráfica de la suma de números 104
xi
Índice de tablas
Página
xii
Antecedentes
Durante los últimos años los robots han incursionado en la mayoría de las actividades
que realiza el ser humano, un robot es un manipulador multifuncional reprogramable
y diseñado para mover materiales, partes, herramientas o dispositivos especiales a
través de movimientos programados para la ejecución de una variedad de tareas [1].
El término robot hubiera quedado en desuso si no hubiera sido por los escritores
del género literario de la ciencia ficción. Muchos de ellos reutilizaron la palabra robot,
e incluso algunos mantuvieron el mensaje de la obra de Capek: la dominación de la
especie humana por seres hechos a su propia imagen. Entre los muchos escritores es
inevitable nombrar a Isaac Asimov (1920-1992) como el mayor impulsor de la palabra
robot, escribió diferentes novelas sobre el tema como por ejemplo: Los robots del
amanecer, El sol desnudo o Robots e imperio. Yo, Robot es una colección de relatos
escritos en 1950, en los que se enuncian por primera vez las tres famosas leyes de la
robótica:
1. Un robot no puede hacer daño a un ser humano o, por inanición, permitir que
un ser humano sufra daño.
xiii
2. Un robot debe obedecer las órdenes dadas por los seres humanos, excepto si
estas órdenes entrasen en conflicto con la Primera Ley.
3. Un robot debe proteger su propia existencia en la medida en que esta protección
no entre en conflicto con la Primera Ley o la Segunda Ley.
Mucho antes de que la palabra robot fuera utilizada por primera vez, el hombre
creaba máquinas y dispositivos capaces de imitar las funciones y movimientos de los
seres vivos. Los griegos ya utilizaban la palabra automato, de la que deriva la actual
autómata. Herón de Alejandría (400 a.c.) desarrolló uno de los primero autómatas con
carácter lúdico en su famoso teatro de autómatas, el cual se movía por medio de
dispositivos hidráulicos, poleas y palancas. Otro autómata famoso de Herón son los
Pájaros de Herón, un conjunto de aves que vuelan, gorjean y beben (Figura 1).
xiv
más antiguo que se conserva en la actualidad, y que formaba parte del reloj de la torre
de la catedral de Estrasburgo; al dar las horas, movía las alas y el pico.
Durante los siglos XVII y XVIII se desarrollaron los primeros autómatas con
algunas de las características modernas de los robots, fueron desarrollados en su gran
mayoría por artesanos del gremio de la relojería, y su funcionamiento principal era la
de entretener a la gente de la corte; se destacan en esta época el Pato de Vaucanson
(Figura 3), y los Muñecos de la Familia Droz, del relojero suizo Pierre Jaquet Droz
(1721-1790) y sus hijos Henri-Louis y Jaquet.
xv
A finales del siglo XVIII y XIX se desarrollaron invenciones mecánicas
utilizadas principalmente en la industria textil, entre las que se pueden destacar la
hiladora giratoria de Hargreaves, la hiladora mecánica de Cromptron, el telar de
Cartwright y el famoso telar de Jacquard (Figura 4). Jacquard fue el primero en
utilizar tarjetas perforadas como soporte de un programa de trabajo donde se definía
el tipo de tarea que se deseaba realizar; se puede decir que estas máquinas
constituyeron los primeros referentes de las máquinas de control numérico.
xvi
Figura 5 Telemanipuladores de Goertz [6].
xvii
Trenton, Nueva Jersey, en 1960 (Figura 7). Con esto se produjo un boom de la fábrica
del futuro, aunque en su primer intento el resultado y la viabilidad económica fueron
desastrosos.
En 1968, J.F. Engelberger visitó Japón y poco más tarde se firmaron acuerdos
con Kawasaki para la construcción de robots tipo Unimate. El crecimiento de la
robótica en Japón aventajó en breve a los Estados Unidos gracias a Nissan, que formó
la primera asociación robótica del mundo, la Asociación de Robótica Industrial de
Japón (JIRA) en 1972. Dos años más tarde se formó el Instituto de Robótica de
América (RIA), que en 1984 cambió su nombre por el de Asociación de Industrias
Robóticas, manteniendo las mismas siglas. Por su parte, Europa tuvo un despertar más
tardío y hasta 1973 se construyó el primer robot con accionamiento totalmente
eléctrico (Figura 8), a cargo de la firma sueca ASEA. En 1980 se fundó la Federación
Internacional de Robótica.
xviii
Figura 8 Robot de accionamiento eléctrico: ASEA IRb6 [6].
.
La evolución de los robots industriales ha sido vertiginosa. En poco más de 30
años, las investigaciones y desarrollos sobre robótica industrial han permitido que los
robots tomen fuerza en casi todas las áreas productivas. Hay 5 momentos relevantes
en el desarrollo de la robótica industrial:
Aunque siguen siendo los robots industriales los más utilizados en la industria
para el montaje, soldadura, etc., existen otro tipo de aplicaciones que han hecho
evolucionar en gran medida tanto la concepción de los robots como su morfología,
acercándolos cada vez más a la idea que en su momento presentó K. Capek.
xix
Actualmente una de las tendencias más importante en robótica es la de dotar a
los robots con los sentidos humanos para que puedan interactuar adecuadamente con
su entorno, siendo el sentido de la vista el que más importancia ha adquirido. El sentido
de la vista se implementa en robotica mediante el desarrollo de Sistemas de Visión
Artificial, cuyo propósito es el de programar un computador para que "entienda" una
escena o las características de una imagen [8].
xx
que puede existir al emplear estos sistemas es la extracción de la información a partir
de una imagen.
xxi
Capítulo I. Introducción
Desde hace muchos años se ha intentado imitar los sistemas de visión biológicos para
implementarlos en los robots, para que estos puedan interactuar con su entorno; es por
esto que en el presente proyecto el problema a resolver es construir un brazo robot que
detecte y reconozca formas o colores a través de una webcam (Figura 1.1).
1.2 Justificación
1
en la productividad. Los factores clave que han contribuido en el desarrollo actual de
la visión artificial son el crecimiento exponencial de la velocidad del procesador y la
capacidad de memoria.
El desarrollo de este proyecto tiene como alcance reconocer y detectar a través de una
webcam:
2
- Tres colores (Rojo, Verde y Azul).
3
Capítulo II. Marco Teórico
1. La luz entra a través del ojo por la córnea y llega a la pupila que se contrae o
expande según su intensidad. La pupila será más pequeña cuanta más luz haya
para evitar deslumbramientos y cuando haya poca luz aumentara su tamaño
para dejar entrar mayor cantidad de luz.
2. El cristalino del ojo será quien proyecte las imágenes enfocadas en la retina,
puede ampliarse o reducirse según lo cerca o lejos que esté el objeto observado.
4
3. La retina recibe la imagen invertida y los 125 millones de fotoreceptores que
se encuentran situados a lo largo de la superficie retiniana (Figura 2.2)
transforman esa información en impulsos nerviosos; los cuales se trasladan al
cerebro a través del nervio óptico. El cerebro es quien realmente ve las
imágenes, endereza la imagen invertida e interpreta la información de color,
tamaño, posición, etc.
El ojo humano solo ve una parte del espectro de toda la luz (Figura 2.3), este
rango de luz que podemos ver se denomina luz visible [14]. Nuestro sistema visual
interpreta las diferentes amplitudes y longitudes de onda de la luz, produciendo las
sensaciones que conocemos como brillo y color respectivamente.
5
El color es un atributo que percibimos de acuerdo a la cantidad de luz que
absorben o reflejan los objetos, los colores absorbidos desaparecen en el interior del
objeto y los reflejados llegan al ojo humano. Para le percepción de colores el ojo
humano tiene dos tipos de receptores: bastones y conos. Los bastones transmiten
diferentes intensidades de gris y los conos le permiten al cerebro percibir la tonalidad
de los colores, existen tres tipos de conos:
Figura 2.4 Colores primarios [16]. Figura 2.5 Colores secundarios [16].
6
- Luminancia. Cantidad de energía procedente de la fuente luminosa que
percibe un observador.
- Brillo. Es la luminosidad de un color.
Todo color posee una serie de propiedades que le hacen variar de aspecto y que
definen su apariencia final, estas propiedades son:
- Tono o matiz. Es la propiedad del color que se refiere al estado puro del
mismo, es la cualidad por la cual diferenciamos y damos su nombre al color.
- Saturación o intensidad. Representa la pureza o intensidad de un color
particular, la viveza o palidez del mismo.
- Valor o brillo. Se refiere a la luminosidad del color, la luminosidad puede
variar añadiendo negro o blanco en un tono.
7
Figura 2.6 Modelo RGB [17].
8
d) Modelo YCbCr. Se trata de una codificación no lineal del espacio RGB; el
parámetro Y indica la luminancia, los parámetros Cb y Cr indican el tono del
color: Cb ubica el color en una escala entre el azul y el amarillo, Cr indica la
ubicación del color entre el rojo y el verde (Figura 2.8).
9
Figura 2.9 Modelo HSI [17].
10
es similar al HSV pero refleja mejor la noción intuitiva de la saturación y
luminosidad como dos parámetros independientes; en HSL la componente de
la saturación va desde el completamente saturado hasta el gris equivalente,
mientras que en HSV, con V al máximo, va desde el color saturado hasta el
blanco, lo que no es intuitivo.
La visión artificial, también conocida como visión por computador o visión técnica es
un subcampo de la inteligencia artificial que tiene como finalidad la extracción de
información del mundo físico a partir de imágenes, utilizando para ello un computador.
11
pero en otros aún falta desarrollar la tecnología para tan siquiera igualarlo; en la Tabla
1.1 se muestra una comparativa entre la Visión Humana y la Visión Artificial [19].
Requerimiento de existencia
Detección de bordes Elevadas capacidades
de alto contraste en la
imagen
Imágenes Buena para diferencias
Valoración cualitativa
parcialmente ocultas
cuantificables
Interpretación de la
Muy desarrollada Capacidades limitadas
imagen
Sombras en la
Muy desarrollada Limitado sobre todo en
imagen
blanco y negro
12
2.2.1 Componentes de un sistema de visión artificial
2.2.1.1 Iluminación
13
Figura 2.13 Iluminación frontal [19].
14
c) Iluminación por campo oscuro (darkfield). La luz es emitida lateralmente
con un ángulo muy pequeño mediante un anillo en todas las direcciones,
rebotando en los defectos del objeto a analizar e incidiendo en la cámara
(Figura 2.15). No es recomendable en superficies con muy poca luz y se suele
utilizar cuando se desea resaltar incrustaciones y códigos alfanuméricos con
poco contraste en metales [19].
15
Figura 2.16 Iluminación a contra luz [19].
16
f) Iluminación difusa tipo domo. La luz es emitida dentro de un cúpula esférica
(Figura 2.18), resultando una luz difusa desde todas direcciones, eliminando
sombras y reflejos, suavizando texturas y minimizando la influencia de rayas,
polvo, relieves y curvaturas que pueda tener el objeto; su principal
inconveniente es que su implementación es costosa [19].
17
Figura 2.19 Iluminación por láser [19].
18
2.2.1.2 Cámara
Los sensores contenidos en una cámara son componentes sensibles a la luz que
modifican su señal eléctrica en función de la intensidad luminosa que perciben. La
tecnología más habitual en este tipo de sensores es el CCD (Charge Coupled Devices
o Dispositivos de Acoplamiento de Carga), en este tipo de sensores la señal eléctrica
que transmiten los elementos fotosensibles es función de la intensidad luminosa que
reciben, su espectro, y el tiempo de integración (tiempo durante el cual son sensibles
a la luz incidente). Otra tecnología son los sensores CMOS (Complementary Metal
Oxide Semiconductor), estos son de menor tamaño y precio en comparación con los
CCD; este tipo de sensores se adapta mejor al brillo existente en su entorno [24].
19
ventajas el costo y velocidad de cómputo, se suele utilizar en aplicaciones
donde se requiere el reconocimiento de formas y su color no es importante [26].
d) Cámaras de color. Aunque el proceso de las imágenes a color es más
complejo, este tipo de cámaras pueden proporcionar más información que las
cámaras monocromáticas.
e) Cámaras analógicas. La salida de estas cámaras se puede conectar
directamente a cualquier monitor y puede venir acompañada o no por otras
señales de sincronización.
f) Cámaras digitales. Las ventajas de estas cámaras respecto a las analógicas
estriba en su velocidad y calidad de imagen.
20
2.2.1.4 Actuadores externos
Esta etapa es la más sencilla, puesto que en esta se realiza con una cámara la obtención
de una imagen y su posterior digitalización. Las imágenes digitales son señales
discretas, que suelen tener origen en una señal continua, por ejemplo: una cámara
digital toma imágenes del mundo real que es continuo.
Una imagen digital puede definirse como una matriz bidimensional (x, y), en
la que cada par de coordenadas representa un elemento contenido en la imagen, los
21
elementos que componen a una imagen son llamados píxeles, cada uno de los cuales
tiene un valor (propiedad del punto que se representa) y una posición especifica. El
término píxel (Picture Element/Elemento de Imagen), se trata de la unidad mínima de
información de una imagen, la cual aparece como un punto en la pantalla o en una hoja
impresa; cada píxel se compone de tres registros de color: rojo, verde y azul; mediante
la combinación de estos el píxel adopta un color en particular [28].
22
Figura 2.21 Imagen vectorial [29] Figura 2.22 Acercamiento de imagen vectorial [29].
Figura 2.23 Imagen ráster [29]. Figura 2.24 Acercamiento de imagen ráster [29].
23
En el procesamiento digital de imágenes se manejan básicamente cuatro tipos
de imágenes, las cuales se describen a continuación:
- Cada píxel tiene un color en particular, dicho color está descrito por una
cantidad de rojo, una cantidad de verde y una cantidad de azul.
- Si cada uno de sus componentes tiene un rango de 0 a 255 esto da un total
de 2553=16 777 216 diferentes colores posibles dentro de una misma
imagen.
- Se le da también el nombre de imágenes de 24 bits ya que es el número
total de bits para representarlas.
24
- Cada píxel tiene un valor que no corresponde al color
directamente como en las RBG, sino que corresponde al índice
del color dentro del mapa de colores.
- Es conveniente que si alguna imagen tiene 256 valores o
menos, solo requerirá un byte por cada índice que se almacene.
25
4. Imágenes Binarias (Figura 2.28).
Existen diversos formatos en los que se almacena una imagen digital; entre las
más populares tenemos:
26
diversas plataformas, lo cual implica que lo reconocen todos los exportadores
gráficos para internet.
d) JPG o JPEG (Joint Photographic Experts Group/Grupo Asociado de Expertos
en Fotografía). Es un formato de archivo comprimible con posibilidades de
escalamiento para producir archivos reducidos; sin embargo de acuerdo con el
grado de compresión la calidad de imagen puede variar un poco a mucho.
e) PNG (Portable Network Graphics/ Gráfico de Red Portable). Desarrollado
como alternativa de patente gratuita a GIF, se utiliza para la compresión sin
pérdidas y visualización en Internet; es similar al JPG en el sentido de que
también permite la exhibición de imágenes de amplio colorido, pero su
compresión no reduce la calidad de imagen.
2.2.2.2 Preprocesamiento
Cuando se adquiere una imagen, por lo general tiene cierta cantidad de ruido debido
ya sea a deficiencias en la iluminación, a la óptica de la cámara, al medio de
transmisión, etc. Generalmente el ruido se manifiesta como píxeles aislados que toman
un nivel de color diferente al de sus vecinos; el ruido puede clasificarse en los
siguientes tipos [28]:
27
Figura 2.29 Tipos de ruido en una imagen: (a) Original, (b) Ruido Gaussiano, (c) Ruido Multiplicativo y (d)
Ruido Impulsional [28].
- Conjunción. Operación lógica AND entre los bits de dos imágenes; se usa
para borrar píxeles en una imagen.
- Disyunción. Operación lógica OR entre los bits de dos imágenes; se usa
para añadir pixeles a una imagen.
- Negación. Inversión de los bits que forman una imagen; se usa para
obtener el negativo de una imagen.
- Suma. Suma de los valores de los píxeles de dos imágenes.
- Resta. Resta de los valores de los píxeles de dos imágenes.
- Multiplicación. Multiplicación de los valores de los píxeles de una imagen
por los de otra; se usa para añadir textura a una imagen.
- División. División de los valores de los píxeles de una imagen entre los de
otra.
28
En la Figura 2.30 se pueden apreciar los resultados de transformaciones
aritmético-lógicas realizadas sobre las imágenes A y B.
Figura 2.31 Transformaciones geométricas: (a) Imagen original, (b) resultado de la primera traslación,
(c) resultado del giro y (d) resultado final después de la última traslación [27].
29
existentes para cada nivel de cuantificación. La transformación del histograma
se usa para: aclarar u oscurecer una imagen pero manteniendo la relación entre
los valores de cada nivel, mejorar el contraste de la imagen, reducir al máximo
el ruido, etc.
En la Figura 2.32 (a) se muestra una imagen en niveles de gris junto con
su histograma, el cual proporciona información sobre el número de píxeles que
hay para cada nivel de intensidad; en imágenes en color RGB se usan tres
histogramas, uno por cada componente de color.
Figura 2.32 Aumento y reducción de contraste: (a) Imagen original, (b) Disminución de
contraste y (c) Aumento de contraste [27].
30
- Ecualizado del histograma. Tiene como objetivo obtener un nuevo
histograma a partir del original, con una distribución uniforme de los
diferentes niveles de intensidad (Figura 2.33).
Figura 2.33 Ecualizado del histograma de una imagen: (a) Imagen original y (b) Ecualizado del
histograma [27].
2.2.2.3 Segmentación
Es el proceso que divide a una imagen en objetos que sean de nuestro interés con
respecto a una o más características (como por ejemplo el brillo o el color) con el fin
de facilitar un posterior análisis.
31
La segmentación debe verse como un proceso que a partir de una imagen,
produce otra en la que cada píxel tiene asociada una etiqueta distintiva del objeto al
que pertenece. Así, una vez segmentada una imagen, se podría formar una lista de
objetos consistentes en las agrupaciones de los píxeles que tengan la misma etiqueta
[11].
- Similitud. Los píxeles agrupados del objeto deben ser similares respecto a
algún criterio (nivel de gris, color, borde, textura, etc.).
- Conectividad. Los objetos corresponden a áreas de pixeles con conectividad,
las particiones corresponden con regiones continuas de píxeles.
- Discontinuidad. Los objetos tienen formas geométricas que definen
contornos, estos bordes delimitan unos objetos de otros.
- Textura. Es el conjunto de formas que se aprecia sobre una superficie y que la
dota de cierto grado de regularidad; definida de forma clásica es uno o más
patrones locales que se repiten de manera periódica.
- Contorno. El contorno en una imagen corresponde al mínimo conjunto de
pixeles que separan un objeto del fondo de la imagen.
Los diferentes objetos que aparecen en una imagen pueden ser localizados
atendiendo a aspectos como sus contornos o su textura; algunos de los tipos de
segmentaciones más comunes se describen a continuación:
32
binaria, de tal forma que los objetos de interés se etiqueten con un valor distinto
al de los píxeles del fondo (Figura 2.34).
33
4. Segmentación basada en el color. Dentro de esta segmentación se suele
convertir la imagen original a otro tipo de imagen requerida (RGB, indexada,
intensidad de grises o binaria), de acuerdo a lo que se requiera, para así
identificar diversas regiones dentro de una imagen de acuerdo a su color o
realizar posteriormente algún otro tipo de segmentación (Figura 2.37).
Figura 2.37 Ejemplo de segmentación basada en el color: Imagen a color RGB convertida a Binaria [27].
Figura 2.38 Ejemplo de segmentación basada en la textura: (a) Imagen original y (b) segmentación
basada en la textura [27].
34
estáticos; esta segmentación consiste en el estudio de la imagen resultante de
la resta de dos imágenes consecutivas de una secuencia animada (Figura 2.39).
Figura 2.39 Ejemplo de segmentación basada en el movimiento: entre las imágenes Raw y Lag se ha
producido un movimiento que se ve reflejado en la imagen Diff, que es la resta de las dos anteriores
[27].
Una vez que los objetos de interés contenidos en una imagen son aislados, el siguiente
paso es la obtención de características convenientes para describir cada objeto. Las
propiedades que deben tener estos descriptores son [21]:
35
- Se calculen en un tiempo aceptable, de manera que sean utilizables en
problemas de tiempo real.
- La descripción del objeto tiene que ser lo más completa posible y no presentar
ambigüedades.
36
2.2.2.4 Reconocimiento e interpretación
2.3 MatLab
Todas las operaciones que realiza MatLab se basan en una estructura de datos
matriciales; todas las funciones o comandos de MatLab se agrupan en las llamadas
toolbox, y abarcan diferentes campos, como son el análisis y adquisición de datos,
procesamiento de imágenes y de señales, análisis y diseño de sistemas de control,
comunicaciones, simulaciones en tiempo real y también herramientas para finanzas,
estadística, economía o lógica difusa [32].
37
Figura 2.40 Ventana de comandos.
38
Figura 2.42 Ventana del área de trabajo
39
describir infinidad de cosas de una manera altamente flexible y matemáticamente
eficiente [28].
40
El toolbox Image Acquisition resulta de suma utilidad para implementar
algoritmos de visión o adquisición de imágenes en tiempo real utilizando dispositivos
simples y de bajo costo tales como las webcams. Utilizando el comando imaqhwinfo
de este toolbox se obtiene la información del adaptador de video instalado, versión de
Matlab, Toolbox (nombre y versión).
>>preview(video)
>>imagen=getsnapshot(‘video’);
>> I=imread('C:\Users\User\Pictures\Photos\goku.png');
41
>>imshow(I)
Para realizar ciertas operaciones con una imagen es necesario convertirla a otro
tipo para que se facilite su procesamiento; los principales comandos usados en MatLab
para la conversión entre tipos de imágenes son:
43
function [Variables de retorno]=nombre-función (lista de argumentos)
Cuerpo de la función.
end
2.4 Arduino
44
Figura 2.47 Tarjeta Arduino UNO [36].
45
Gianluca Martino (responsable de la empresa fabricante de los prototipos de las placas)
[37].
La tarjeta Arduino puede alimentarse directamente a través del cable USB que
realiza la comunicación de la tarjeta con la PC o mediante una fuente de alimentación
externa, los límites de alimentación están entre los 5 y los 12V.
46
Figura 2.48 Entorno de desarrollo de Arduino.
47
Las funciones principales utilizadas en la programación de la tarjeta Arduino
se describen a continuación [37]:
Para conectar la tarjeta Arduino con MatLab se pueden seguir los siguientes pasos:
48
2. Descomprima el archivo en la carpeta deseada en el equipo, preferiblemente
en la carpeta Matlab, que está en “Mis Documentos”; de esta forma, los M-
files, quedan disponibles inmediatamente, en el directorio del entorno de
Matlab.
3. Desde el IDE Arduino, de acuerdo a lo que se necesite, abra alguno de los
archivos contenidos dentro de la carpeta “adiosrv”, que a su vez está dentro de
la carpeta “pde”, una de las que se descomprimió.
4. Cargue en la tarjeta, el programa que necesite, el cual contiene el código
necesario para que la tarjeta Arduino se comunique con Matlab.
5. Una vez cargado el programa en la tarjeta Arduino, es recomendable cerrar el
IDE ARDUINO, para que Matlab pueda acceder al puerto serial que se abre
cuando se conecta la tarjeta.
6. Abra MatLab y en la ventana “Current Directory” abra la carpeta que se
descomprimió, ahí debe estar el M-file “install_arduino”; ejecútelo para que se
instalen las funciones necesarias en MatLab para realizar la comunicación con
la tarjeta Arduino.
49
Figura 2.50 Comunicación MatLab-Arduino.
Si un pin ha sido configurado como salida, para colocar un estado alto “1” o
bajo “0” en dicha salida, se usa el comando: a.digitalWrite(13, 1) o a.digitalWrite(13,
0).
Las entradas análogas, son pines de la tarjeta Arduino, que pueden recibir
voltajes en un rango de 0 a 5 voltios; útiles cuando se requiere un sensor que represente
el valor de una variable análoga, como por ejemplo: la temperatura. Suministran un
50
valor entero entre 0 y 1023, proporcional al valor de voltaje de la entrada análoga. El
comando para leer es: a.analogRead(5), el cual muestra el valor presente en la entrada
análoga 5. Para asignar un valor análogo a un pin de salida, se sigue el siguiente
formato: a.analogWrite(3, 200), el primer argumento de la función, es el pin análogo
y el segundo argumento es un valor proporcional al voltaje de salida presente en ese
pin.
2.6 Servomotor
51
Figura 2.51 Componentes internos de un servomotor [39].
Figura 2.52 Duración del pulso y ángulo del eje de un servomotor [40].
52
Capítulo III. Marco Metodológico
La realización del trabajo se llevó a cabo mediante diseño experimental, debido a las
diversas variables que intervienen en el sistema para cumplir con su objetivo principal.
El desarrollo del proyecto se divide en las siguientes partes:
Como primer paso se realizó en MatLab una función llamada “ColorRGB” (Anexo
B), con la cual se detecta si el objeto presente en las imágenes de prueba utilizadas
(Anexo A) es de color Rojo, Verde o Azul; esta función recibe como entrada una
imagen a color y como salida nos da el color predominante detectado en el objeto
presente en la imagen.
53
presente en la imagen (círculo, cuadrado, estrella, rombo o triangulo), su área en
pixeles, el perímetro en pixeles y las coordenadas del centroide.
54
Figura 3.2 Enumeración de los objetos presentes en la imagen.
55
3.2 Diseño y elaboración del brazo robótico
El diseño del brazo robot se realizó en SolidWorks, en la Figura 3.4 se puede observar
el diseño elaborado.
56
Figura 3.5 Brazo robótico terminado.
Modelo: SRT4K3A
Torque: 3.8Kg a 4.8V, 4.3Kg a &V
Velocidad: 0.21s/60° a 4.8V, 0.17s/60° a 6V
Voltaje: 4.8V a 6V
57
Figura 3.6 Conexión de servomotores.
58
Tabla 3.2 Características de WebCam
Sensor de imagen: CMOS CIF
Resolución: Captura de foto: 0.3 megapíxeles
Captura de video: 0.1 megapíxeles
Campo de visión: 45°-60° diagonalmente
Gama de enfoque: 30cm~
Interfaz: USB ver. 1.1
Como última parte en el desarrollo del proyecto se elaboró una Interfaz Gráfica de
Usuario (GUI) en MatLab para manipular el brazo robot y realizar el reconocimiento
de forma o color utilizando una webcam (Anexo F).
59
Figura 3.8 Funcionamiento de la interfaz gráfica.
60
Figura 3.10 Opciones iniciales de la interfaz gráfica.
61
Figura 3.12 Selección del ID de la cámara.
62
Al haber finalizado correctamente la configuración de la cámara, el botón
“Visualizar Video” estará habilitado y se deshabilitará el botón de “Configurar
Cámara” (Figura 3.15).
63
Figura 3.16 Opciones de control del brazo robot y de reconocimiento habilitadas.
Para el control del brazo robot se utilizaron dos barras de desplazamiento, con
las cuales cada articulación se puede mover de 0° a 180°. Al seleccionar alguna de las
opciones de reconocimiento las otras se deshabilitan y se habilitan los botones de
“Cambiar Opción” y “Reconocer” (Figura 3.17).
64
Al presionar el botón “Reconocer” se muestran los resultados obtenidos de
acuerdo a la opción de reconocimiento seleccionada; al mismo tiempo sin importar el
tipo de reconocimiento elegido se mostraran el área, perímetro y centroide del objeto
presente en la imagen (Figura 3.18).
65
Figura 3.19 Cambio de tipo de reconocimiento.
66
Capítulo IV. Análisis de Resultados
Con las propiedades obtenidas de las imágenes de prueba y de las figuras de prueba se
realizaban las modificaciones necesarias en la función “DeteccionForma”, para que
el reconocimiento de las formas se realizara adecuadamente; la propiedad que se
utilizó para el reconocimiento de la forma del objeto contenido en una imagen
almacenada o captada por la webcam fue el Factor de Compacidad.
En la Tabla 4.1 se muestran las propiedades obtenidas de los objetos contenidos dentro
de las imágenes de prueba mediante la función “Propiedades”.
Tabla 4.1 Propiedades de los objetos contenidos dentro las imágenes de prueba.
67
4.2 Propiedades obtenidas de las figuras de prueba
Como parte final en el proyecto, el brazo robótico se integró con una banda
transportadora para realizar el reconocimiento de forma o color de los objetos
transportados en ella.
68
Conclusiones
69
Recomendaciones
70
Referencias
[2] Fuller, J.L. (1999), Robotics: Introduction, Programming, and Proyect, Prentice
Hall, Nueva Jersey.
[3] Dorf, R.C. (1988), International Encyclopedia of Robotics, John Wiley & Sons,
Nueva York,
[4] Kumar Saha, Subir (2010), Introducción a la robótica, Mc Graw Hill, México,
D.F.
[6] Ruiz de Garibay Pascual, Robótica: Estado del Arte, Recuperado el 12 de agosto
de 2014, de: https://www.academia.edu/913608/Robotica_Estado_del_arte.
[9] Girod Fortuño, Anton (2008), Sistema de localización relativa basada en visión
artificial, Universitat Rovira I Virgili, Recuperado el 15 de agosto de 2014, de:
http://deeea.urv.cat/public/PROPOSTES/pub/pdf/1295pub.pdf.
71
[10] Cárdenas Vera, Martín Fernando, Llerena Pizarro, Omar Rosendo (2012),
Automatización de un Sistema de Centrado de Componentes Utilizando Visión
Artificial, Universidad Politécnica Salesiana Sede Cuenca, Ecuador, Recuperado el 18
de agosto de 2014, de: http://dspace.ups.edu.ec/bitstream/123456789/1109/14/UPS-
CT002210.pdf.
[11] Veléz Serrano, José Francisco, Moreno Díaz, Ana Belén, Sánchez Calle, Ángel,
Sánchez Marín, José Luis Esteban (2003), Visión por Computador, Recuperado el 18
de agosto de 2014, de: http://www.escet.urjc.es/~visionc/VisionPorComputador.pdf.
[12] Fotonostra, Partes del ojo humano, Consultado el 20 de agosto de 2014, en:
http://www.fotonostra.com/digital/partesojo.htm.
72
[18] Modelo HSV, Recuperado el 2 de septiembre de 2014, de:
http://cindy2906.blogspot.mx/2013/02/modelo-hsv.html
[21] Ortega Marroquín, Pedro Ernesto, Pocasangre León, Emerson Francisco, Valle
Figueroa, Fernando Antonio (2004), Universidad Don Bosco, Sistema de inspección
basado en visión artificial aplicado a un proceso industrial, Recuperado el 4 de
septiembre de 2014, de:
http://rd.udb.edu.sv:8080/jspui/bitstream/123456789/270/1/034512_tesis.pdf.
[22] Benítez P., José C., Procesamiento de imágenes y visión artificial, Universidad
Tecnológica del Perú, Recuperado el 5 de septiembre de 2014, de:
http://es.slideshare.net/jcbp_peru/utp-pdiyvasap2-iluminacion-y-modos-de-color-
35136789.
73
[26] González Marcos, Ana, Martínez de Pisón Ascacíbar, Francisco Javier, Pernía
Espinoza, Alpha Verónica, Alba Elías, Fernando, Castejón Limas, Manuel, Ordieres
Meré, Joaquín, Vergara González, Eliseo (2006), Técnicas y algoritmos básicos de
Vision Artificial, Universidad de la Rioja, España.
[28] García Santillán, Iván Danilo (2008), Visión Artificial y Procesamiento Digital
de Imágenes usando MatLab, Pontifica Universidad Católica del Ecuador Sede Ibarra,
Ecuador, Recuperado el 8 de septiembre de 2014, de:
https://es.scribd.com/doc/226655280/Vision-Artificial-y-Procesamiento-Digital-de-
Imagenes-Usando-Matlab
[31] Vargas Baeza, Víctor (2010), Sistema de Visión Artificial para el Control de
Calidad en Piezas Cromadas, Instituto Politécnico Nacional, México, D.F.,
Recuperado el 9 de septiembre de 2014, de:
http://tesis.ipn.mx/bitstream/handle/123456789/7250/68.pdf?sequence=1.
74
[35] Arduino, Consultado el 13 de septiembre de 2014, en:
http://www.arduino.cc/es/pmwiki.php?n=.
75
Anexos
76
Figura A.7 Estrella azul. Figura A.8 Estrella roja.
77
Figura A.13 Triángulo azul. Figura A.14 Triángulo rojo.
78
Anexo B: Función “ColorRGB”
function ColorDetectado=ColorRGB(Imagen)
%Esta Función devuelve como resultado el color RGB de una imagen.
79
Anexo C: “Función Propiedades”
function [Area,Perimetro,Compacidad,imagengris,imagenbinaria]=Propiedades(imagen)
%Esta Función devuelve como resultado la conversión de una Imagen Original
%en Escala de Gris y Binaria; también proporciona el Área, Perímetro y
%Compacidad de objetos presentes en la imagen con un área mayor a 10000
%%Calculo de la Compacidad
Compacidad=(Perimetro^2)/(4*pi*Area)
end
end
80
Anexo D: Función “DeteccionForma”
function [FormaDetectada,Area,Perimetro,Centroide]=DeteccionForma(Imagen)
for m=1:length(propiedades)
%%Se almacenan en variables las propiedades área y perímetro del
%%elemento "m" en la imagen binaria
Perimetro=round(propiedades(m).Perimeter);
Area=round(propiedades(m).Area);
Centroide=propiedades(m).Centroid;
%%Calculo de la Compacidad
Compacidad=(Perimetro^2)/(4*pi*Area);
81
Anexo E: Script “DeteccionFunciones”
82
Figura=DeteccionForma(recorte);
if strcmp(Figura,'Es un Cuadrado')==1;
if strcmp(Color,'Rojo')==1;
CuadradoRojo=CuadradoRojo+1;
end
if strcmp(Color,'Azul')==1;
CuadradoAzul=CuadradoAzul+1;
end
if strcmp(Color,'Verde')==1;
CuadradoVerde=CuadradoVerde+1;
end
end
if strcmp(Figura,'Es un Rombo')==1;
if strcmp(Color,'Rojo')==1;
RomboRojo=RomboRojo+1;
end
if strcmp(Color,'Azul')==1;
RomboAzul=RomboAzul+1;
end
if strcmp(Color,'Verde')==1;
RomboVerde=RomboVerde+1;
end
end
if strcmp(Figura,'Es un Triangulo')==1;
if strcmp(Color,'Rojo')==1;
TrianguloRojo=TrianguloRojo+1;
end
if strcmp(Color,'Azul')==1;
TrianguloAzul=TrianguloAzul+1;
end
if strcmp(Color,'Verde')==1;
TrianguloVerde=TrianguloVerde+1;
end
end
TotalVerdes=CirculoVerde+CuadradoVerde+EstrellaVerde+RomboVerde+TrianguloVerde;
83
%%la cual MatLab nos dice cada propiedad, para esto se debe
%%tener instalado el toolbox text2speed
switch (Seleccion)
case 1
tts('La figura');
tts(num2str(m));
%tts('son');
tts(Figura);
%tts('El perímetro es');
%tts(num2str(Perimetro));
%tts('El area es');
%tts(num2str(Area));
case 2
tts('La figura');
tts(num2str(m));
%tts('son');
tts('Es de color');
tts(Color);
%tts('El perímetro es');
%tts(num2str(Perimetro));
%tts('El area es');
%tts(num2str(Area));
case 3
tts('La figura');
tts(num2str(m));
%tts('son');
tts(Figura);
tts('Es de color');
tts(Color);
%tts('El perímetro es');
%tts(num2str(Perimetro));
%tts('El area es');
%tts(num2str(Area));
end
end
84
close all;
end
%%Si no se selecciona alguna opción el programa manda un mensaje de %%error y termina
else
msgbox('Debe seleccionar una opción','Error');
close all;
end
85
Anexo F: Interfaz Gráfica de Usuario “ColoryForma”
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
global a;
try
a = arduino('COM3'); %Conexion al Puerto serial del Arduino
a.servoAttach(9); %Pin usado para conectar el Servo de la Articulacion 1
a.servoAttach(10); %Pin usado para conectar el Servo de la Articulacion 2
imagen=imread('itsh.jpg'); %Se muestra el Logo del ITSH en un Axes
axes(handles.AxesLogo)
imshow(imagen)
catch e
warndlg('Compruebe la conexion del Microcontrolador Arduino...', 'Error');
close all;
end
86
% UIWAIT makes ColoryForma wait for user response (see UIRESUME)
% uiwait(handles.FiguraPrincipal);
% --- Outputs from this function are returned to the command line.
function varargout = ColoryForma_OutputFcn(~, ~, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
IAHI=imaqhwinfo;
IA=(IAHI.InstalledAdaptors);
D=menu('Seleccione el Adaptador de video a utilizar...',IA);
if isempty(IA)||D==0
msgbox('Configure correctamente la Cámara...', 'Error');
return
end
IA=char(IA);
IA=IA(D,:);
IA(IA==' ')=[];
x=imaqhwinfo(IA);
try
DeviceID=menu('Seleccione ID de la Cámara...',x.DeviceIDs);
F=x.DeviceInfo(DeviceID).SupportedFormats;
nF=menu('Seleccione el FORMATO...',F);
Format=F{nF};
set(handles.BotonConfigurar,'enable','off');
catch e
warndlg('Configure correctamente la Cámara...', 'Error');
return
end
set(handles.BotonVisualizar, 'enable', 'on');
87
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global a;
ans=questdlg('¿Desea salir del programa?','Salir','Si','No','No');
if strcmp(ans,'No')
return;
end
delete (a);
clear,clc,close all;
88
set(handles.TextColor,'String',' ');
set(handles.text14,'Visible','off');
set(handles.TextArea,'Visible','off');
set(handles.TextArea,'String',' ');
set(handles.text16,'Visible','off');
set(handles.TextPerimetro,'Visible','off');
set(handles.TextPerimetro,'String',' ');
set(handles.text18,'Visible','off');
set(handles.text22,'Visible','off');
set(handles.text23,'Visible','off');
set(handles.TextCentroide,'Visible','off');
set(handles.TextCentroide,'String',' ');
case 2
set(handles.Color, 'enable', 'on');
set(handles.FormayColor, 'enable', 'on');
set(handles.text6,'Visible','off');
set(handles.TextForma,'String',' ');
set(handles.text14,'Visible','off');
set(handles.TextArea,'Visible','off');
set(handles.TextArea,'String',' ');
set(handles.text16,'Visible','off');
set(handles.TextPerimetro,'Visible','off');
set(handles.TextPerimetro,'String',' ');
set(handles.text18,'Visible','off');
set(handles.text22,'Visible','off');
set(handles.text23,'Visible','off');
set(handles.TextCentroide,'Visible','off');
set(handles.TextCentroide,'String',' ');
case 3
set(handles.Color, 'enable', 'on');
set(handles.Forma, 'enable', 'on');
set(handles.text6,'Visible','off');
set(handles.TextForma,'Visible','off');
set(handles.TextColor, 'Visible','off');
set(handles.text8,'Visible','off');
set(handles.TextForma,'String',' ');
set(handles.TextColor,'String',' ');
set(handles.text14,'Visible','off');
set(handles.TextArea,'Visible','off');
set(handles.TextArea,'String',' ');
set(handles.text16,'Visible','off');
set(handles.TextPerimetro,'Visible','off');
set(handles.TextPerimetro,'String',' ');
set(handles.text18,'Visible','off');
set(handles.text22,'Visible','off');
set(handles.text23,'Visible','off');
set(handles.TextCentroide,'Visible','off');
set(handles.TextCentroide,'String',' ');
end
89
set(handles.TextCentroide,'String',Centroide);
case 2
tts('La figura es');
tts(Forma);
set(handles.text6,'Visible','on');
set(handles.TextForma,'Visible','on');
set(handles.TextForma,'String',Forma);
set(handles.text14,'Visible','on');
set(handles.TextArea,'Visible','on');
set(handles.TextArea,'String',Area);
set(handles.text16,'Visible','on');
set(handles.TextPerimetro,'Visible','on');
set(handles.TextPerimetro,'String',Perimetro);
set(handles.text18,'Visible','on');
set(handles.TextCentroide,'Visible','on');
set(handles.text22,'Visible','on');
set(handles.text23,'Visible','on');
set(handles.TextCentroide,'String',Centroide);
case 3
tts('La figura es')
tts(Forma);
tts('Su color es')
tts(Color);
tts(handles.TextColor);
set(handles.text6,'Visible','on');
set(handles.TextForma,'Visible','on');
set(handles.TextColor,'Visible','on');
set(handles.text8,'Visible','on');
set(handles.TextForma,'String',Forma);
set(handles.TextColor,'String',Color);
set(handles.text14,'Visible','on');
set(handles.TextArea,'Visible','on');
set(handles.TextArea,'String',Area);
set(handles.text16,'Visible','on');
set(handles.TextPerimetro,'Visible','on');
set(handles.TextPerimetro,'String',Perimetro);
set(handles.text18,'Visible','on');
set(handles.text22,'Visible','on');
set(handles.text23,'Visible','on');
set(handles.TextCentroide,'Visible','on');
set(handles.TextCentroide,'String',Centroide);
end
90
function slider4_CreateFcn(hObject, eventdata, handles)
% hObject handle to SliderArticulacion2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
91
Anexo G: Figuras de prueba
92
Figura G.4 Rombo verde.
93
Anexo H: Interfaz Gráfica de Usuarios en MatLab
94
Figura H.3 Selección de nueva interfaz gráfica.
95
Figura H.5 Ventana para crear una interfaz gráfica.
Los componentes (Figura H.7) que se utilizan en una interfaz gráfica nos sirven
para que el usuario final realice determinadas acciones o se le muestre información.
96
Figura H.7 Componentes para una interfaz gráfica.
Cada componente posee propiedades (color, valor, posición, string, etc.), las
cuales permiten establecen las características del componente, cuando se da doble click
sobre un componente se abre la ventana “Property Inspector” (Figura H.8) que nos
permite tener un listado de las propiedades que tiene cada componente así como poder
modificar algunas propiedades.
97
subrutina que se ejecutará cuando se realice una determinada acción sobre el
componente que se haya seleccionado.
98
Una interfaz gráfica consta de dos archivos: ”.m” y ”.fig”; el primero es el que
contiene el código correspondiente a cada componente que haya en la interfaz gráfica,
y el segundo contiene los componentes gráficos. Cada vez que se agregue un nuevo
componente en la interfaz gráfica se genera automáticamente código en el archivo
“.m”.
Todos los valores de las propiedades de los componentes y los valores de las
variables del programa se almacenan en una estructura, los cuales son accedidos
mediante un único y mismo identificador para todos, este identificador es “handles”;
por ejemplo si dentro de una subrutina una operación dio como resultado una variable
“diego”, para poder utilizarla desde el programa principal u otra subrutina debemos
guardarla con las instrucciones que se muestran en la Figura H.11.
99
Figura H.14 Opción Blank GUI (Default).
100
Figura H.16 Configuración del Push Button.
101
5. Para comenzar a desarrollar el programa se debe de crear la función
“Callback“ de los componentes que responderán a una acción que realice el
usuario; esta función se crea al dar click derecho sobre el componente y
seleccionar la opción (Figura H.19).
102
6. Después de crear la función “Callback” se comienza a escribir el código para
que la interfaz gráfica que se desarrolla haga lo que deseamos de acuerdo a lo
que haga el usuario. Primeramente se escribe el código del primer “Edit Text”
como se muestra en la Figura H.23
103
números adecuadamente, esto se realiza seleccionando el botón mostrado en la
Figura H.26.
104