Brazo Robotico Con Reconocimiento de Objetosa

64
SEMINARIO DE TITULACIÓN “PROCESAMIENTO DIGITAL DE SEÑALES” SISTEMA DE RECONOCIMIENTO DE OBJETOS MEDIANTE IMÁGENES APLICADO A UN BRAZO ROBÓTICO T E S I N A Que para obtener el título de: INGENIERO EN COMUNICACIONES Y ELECTRÓNICA Presenta: Luis Carlos Carrillo Tovar INGENIERO EN COMPUTACION Presenta: Gwendolyne Islas Cordero ASESORES: M. en C. ORLANDO BELTRÁN NAVARRO. M. en C. BRAULIO SANCHEZ ZAMORA México, D. F. Junio de 2009. INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACAN INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

description

Brazo robotico

Transcript of Brazo Robotico Con Reconocimiento de Objetosa

Page 1: Brazo Robotico Con Reconocimiento de Objetosa

SEMINARIO DE TITULACIÓN “PROCESAMIENTO DIGITAL DE SEÑALES”

SISTEMA DE RECONOCIMIENTO DE OBJETOS MEDIANTE IMÁGENES APLICADO A UN BRAZO

ROBÓTICO

T E S I N A

Que para obtener el título de:

INGENIERO EN COMUNICACIONES Y ELECTRÓNICA

Presenta:

Luis Carlos Carrillo Tovar

INGENIERO EN COMPUTACION

Presenta: Gwendolyne Islas Cordero

ASESORES:

M. en C. ORLANDO BELTRÁN NAVARRO. M. en C. BRAULIO SANCHEZ ZAMORA

México, D. F. Junio de 2009.

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA

UNIDAD CULHUACAN INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

Page 2: Brazo Robotico Con Reconocimiento de Objetosa

IPN ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA

UNIDAD CULHUACAN

TESINA QUE PARA OBTENER EL TITULO DE:

INGENIERO EN COMUNICACIONES Y ELECTRONICA Luis Carlos Carrillo Tovar

E INGENIERO EN COMPUTACION

Gwendolyne Islas Cordero NOMBRE DEL SEMINARIO: PROCESAMIENTO DIGITAL DE SEÑALES

NOMBRE DEL TEMA

“SISTEMA DE RECONOCIMIENTO DE OBJETOS MEDIANTE IMÁGENES APLICADO A UN BRAZO ROBÓTICO”

INTRODUCCION

Este trabajo muestra y da una posible solución a un problema que para todos en México es común “la separación de basura” y que en la vida cotidiana aun no se posee la educación necesaria para hacerlo de manera que el ambiente no se vea tan afectado como lo es ahora. Por ello la importancia de realizar un prototipo robótico capaz de ayudar en la separación de basura para su reciclaje y por tanto la reutilización de materiales. Este prototipo involucra conocimientos de software y electrónica que en conjunto crean un sistema autónomo capaz de entender e interpretar datos de un ambiente variable para hacer movimientos en un brazo robótico capaz de separar piezas con forma definida.

CAPITULADO

I. MARCO TEORICO II. SISTEMA PROPUESTO

III. DESARROLLO DEL SISTEMA

Fecha: México D.F. a junio de 2009 M. EN C. ORLANDO BELTRAN NAVARRO M. EN C. BRAULIO SANCHEZ ZAMORA COORDINADOR DEL SEMINARIO ASESOR

ING. IGNACION MONROY OSTRIA JEFE DEL DEPARTAMENTO DE I.C.E.

Page 3: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

2

Índice

Introducción General ............................................................................................................... 7Capítulo I Marco Teórico ...................................................................................................... 8

Introducción Procesamiento Imágenes ................................................................................ 8

Procesamiento de imágenes ............................................................................................. 9

Representación de una imagen digital .............................................................................. 9

Filtros para la eliminación de ruido en las imágenes .............................................................. 10

1. Filtro gaussiano .................................................................................................... 11

2. Filtro mediana (rango de vecindades) ....................................................................... 11

3. Filtro de suavizado direccional (preservación de bordes) ............................................ 11

4. Filtro de suavizado conservador ............................................................................... 12

5. Realce de contraste ................................................................................................. 12

6. Filtro paso bajo ....................................................................................................... 12

7. Filtro paso alto ....................................................................................................... 13

8. Filtro SUSAN (Smallest Univalue Segment Assimilationg Nucleus) ............................... 13

Operadores para la detección de bordes .............................................................................. 13

1. Operador de Roberts ............................................................................................... 15

2. Operador de Sobel .................................................................................................. 15

3. Operador de Prewitt ............................................................................................... 16

4. Operador Isotrópico ................................................................................................ 17

Introducción a la Transmisión de Datos .......................................................................... 18

Antecedente de Transmisión de datos ................................................................................. 19

Selección del puerto de comunicación. ............................................................................ 19

Principales conflictos con los dispositivos periféricos .............................................. 20

Page 4: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

3

Las Interrupciones (IRQ) .......................................................................................... 20

Direcciones de entrada/Salida .................................................................................. 21

Interfaces no compartidas ....................................................................................... 22

Los problemas para el usuario final .......................................................................... 22

Los diferentes tipos de cables .................................................................................. 22

Instalación y configuración de las tarjetas de expansión ............................................. 22

Conexión en caliente ............................................................................................... 22

Soluciones para la creación de un esquema de conexión ....................................... 22

Soporte Plug and Play .............................................................................................. 23

Conexión en caliente ............................................................................................... 23

Bajo Costo .............................................................................................................. 23

El USB ........................................................................................................................... 23

Motores ............................................................................................................................... 28

Motores de corriente continúa ......................................................................................... 28

Motores paso a paso ....................................................................................................... 30

Principio de funcionamiento ........................................................................................ 30

Secuencias para manejar motores paso a paso Bipolares ......................................... 33

Secuencias para manejar motores paso a paso Unipolares ....................................... 33

Servomotores .................................................................................................................. 36

Composición de un servomotor ................................................................................... 37

Control del Servomotor ................................................................................................ 38

Capítulo II Sistema Propuesto ............................................................................................ 40

Diagrama a bloques general ............................................................................................... 41

Capítulo III Desarrollo del sistema ...................................................................................... 42

Diagrama Detallado ............................................................................................................ 42

Obtención de información ............................................................................................... 42

Page 5: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

4

Purificación de Imagen .................................................................................................... 43

Identificación del Objeto .................................................................................................. 44

Envío de Datos a VS 2005 .............................................................................................. 45

Interface de Usuario ........................................................................................................ 46

Librería de Movimiento .................................................................................................... 47

Programa de Comunicación ............................................................................................ 48

Puerto USB ..................................................................................................................... 54

Comunicación con el Hardware ...................................................................................... 54

Procesamiento de la información en hardware ............................................................... 57

Conclusiones ................................................................................................................... 62

Bibliografía. ..................................................................................................................... 63

Page 6: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

5

Agradecimientos

Al Instituto Politécnico Nacional que durante mucho tiempo fue nuestro segundo hogar.

A la Escuela Superior de Ingeniería Mecánica y Eléctrica que forjo a los ingenieros que ahora somos.

A nuestros profesores que con sus conocimientos y experiencia nos dieron las herramientas necesarias para realizar este trabajo.

Gwendolyne

A mi padre y hermanos que me han apoyado y motivado en todo momento.

A Luis Carlos que con su cariño y motivación he logrado todo lo que me he propuesto.

Luis Carlos

A mis padres porque me dieron el mejor regalo que me pudieran dar “la educación”

A mis profesores que intervinieron a lo largo de mi vida y que cada uno dejo plasmado en mi ese amor al trabajo y a la educación.

A mi hermano que a lo largo de mi vida me ha acompañado y apoyado.

A todos los que en mi vida han influido, los que están y los que se han ido, a mi abuelita Hermenegilda que con sabiduría me ha impulso a seguir adelante donde quiera que este.

Y sobre todo a Gwendolyne que con su amor, motivación y apoyo me ha llevado a lograr cada una de mis metas teniendo en ella la compañera con la que compartiré mi vida.

Page 7: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

6

SISTEMA DE RECONOCIMIENTO DE OBJETOS MEDIANTE IMÁGENES APLICANDO A UN BRAZO ROBOTICO

Page 8: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

7

Introducción General

Este trabajo muestra y da una posible solución a un problema que para todos en México es común “la separación de basura” y que en la vida cotidiana aun no se posee la educación necesaria para hacerlo de manera que el ambiente no se vea tan afectado como lo es ahora.

La Subsecretaria de Fomento y Normatividad Ambiental menciona que actualmente en México se producen 94 mil 800 toneladas diarias de basura, de las cuales poco más del 40 por ciento se concentra en los estados de México, Jalisco, Veracruz y el Distrito Federal.

Asimismo, agregó, del total de residuos recolectados sólo dos terceras partes son depositadas en sitios controlados que cumplen con la Norma Oficial Mexicana 083 de la Semarnat.

Por ello la importancia de realizar un prototipo robótico capaz de ayudar en la separación de basura para su reciclaje y por tanto la reutilización de materiales.

Este prototipo involucra conocimientos de software y electrónica que en conjunto crean un sistema autónomo capaz de entender e interpretar datos de un ambiente variable para hacer movimientos en un brazo robótico capaz de separar piezas con forma definida.

En este caso la información de entrada se obtendrá de una cámara que posteriormente se analizara en software y se procesara, mandando el resultado del análisis a un dispositivo físico, el cual clasificara los objetos físicos que se le presentan.

Page 9: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

8

Capítulo I Marco Teórico

Introducción Procesamiento Imágenes

Para el prototipo que se propone involucra la creación de un software capaz de reconocer objetos físicos con formas definidas en un ambiente que continuamente cambia, esto hace que se tenga que analizar la información captada por un dispositivo físico a un sistema controlado el cual realizara el procesamiento de la información y con esto el envió de información a los demás dispositivos que se emplearan. Para la recolección de información será por medio de una cámara web, la que estará conectada a una PC y por tanto procesara la información. El proceso de la información será por medio de un programa en matlab y por ello la necesidad de explicar que es el procesamiento de imágenes y cuáles son los tipos de filtros que se pueden utilizar para el mejoramiento de la imagen. En el siguiente apartado se mencionan los tipos de filtros que se utilizan para mejorar las imágenes de entrada.

Page 10: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

9

Procesamiento de imágenes En el procesamiento digital de imágenes se distinguen dos niveles principales de manera general: • Procesamiento de imágenes a bajo nivel

o Muy poco uso de conocimiento respecto al contenido de las imágenes. o Comúnmente se reconoce una secuencia de cuatro para el procesamiento a

bajo nivel: adquisición de la imagen, pre-procesamiento, segmentación de la imagen, descripción y clasificación de objetos.

• Entendimiento de imágenes a alto nivel

o Existe la capacidad de realizar toma de decisiones respecto al contenido de las imágenes.

El procesamiento de imágenes esta dado por un conjunto de operaciones llevadas a cabo sobre las imágenes a fin de realizar mediciones cuantitativas para poder describirlas; es decir, extraer ciertas características que permitan mejorar, perfeccionar o detallar la imagen. Una característica es un atributo usado para hacer decisiones respecto a objetos en la imagen. Algunos atributos son naturales y se definen mediante la apariencia visual de la imagen, en tanto otros, los artificiales, son el resultado de operaciones realizadas a la imagen. El poder realizar mediciones sobre las imágenes generalmente requiere que sus características estén bien definidas, los bordes bien delimitados y el color y brillo sean uniformes. El tipo de mediciones a realizar para cada característica específica es un factor importante para poder determinar los pasos apropiados para su procesamiento. Los procedimientos aplicados para el procesamiento de imágenes están orientados a las aplicaciones. Lo que puede ser adecuado para una aplicación puede no serlo para otra.

Representación de una imagen digital Una imagen f(x, y) está dada por sus coordenadas espaciales y su brillo, y es representada matemáticamente en una matriz, donde los índices de las filas y columnas indican un punto especifico de la imagen (figuras 1 y 2).

Figura 1 Índices en una matriz de pixeles

Page 11: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

10

Figura 2 Relación entre los elementos de una imagen y su correspondiente representación

de pixeles en una matriz.

Las herramientas para la adquisición de imágenes trasforman la imagen visual de un objeto físico y sus características intrínsecas en un conjunto de datos digitalizados, usados para procesarla. En el procesamiento digital de imágenes, existen diversas aplicaciones y problemas: Representación Transformación Modelado Restauración Reconstrucción Análisis Compresión de datos

En este trabajo se utilizan las herramientas de análisis y compresión de datos en las aplicaciones de filtros para la eliminación de ruido (restauración), detección de esquinas, bordes, líneas, y puntos (análisis), para la detección de características, por lo que es necesario describir su funcionamiento.

Filtros para la eliminación de ruido en las imágenes

Se define como ruido cualquier entidad en las imágenes, datos o resultados intermedios que no son interesantes para la computación que se pretende llevar a cabo. Para realizar el procesamiento en este sistema, se considera como ruido en las imágenes cualquier píxel ajeno al área de superficie blanca que pueda presentarse en la imagen. Hoy en día existe una gran cantidad de algoritmos para la restructuración y mejoramiento de imágenes. Para los fines de este documento solamente se hará mención de los filtros más relevantes considerados como factibles a aplicar en el procesamiento de las imágenes.

Page 12: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

11

Las técnicas de filtraje son trasformaciones de la imagen píxel a píxel, que no dependen solamente del nivel de gris de un determinado píxel, sino también del valor de los niveles de gris de los pixeles vecinos en la imagen original. El procesamiento de filtraje se realiza utilizando matrices denominadas mascaras, que son aplicadas sobre la imagen. La imagen resultante de la aplicación de un filtro es una nueva imagen. Los filtros sirven para suavizar o realizar detalles de la imagen, o inclusive minimizar efectos de ruido.

1. Filtro gaussiano Este filtro implementa mascaras que intentan imitar la forma de una gaussiana:

donde x, y son las coordenadas de la imagen y sigma una desviación estándar de la probabilidad de distribución asociada. La desviación estándar sigma es el único parámetro del filtro gaussiano y es proporcional al tamaño del área de los vecinos más cercanos en que opera este filtro. Los pixeles más lejanos del centro del operador tienen menor influencia y los pixeles mas allá de tres valores de sigma a partir del centro tienen una influencia insignificante. Este filtro tiene el inconveniente de que, además de remover el ruido, empaña la imagen ocasionando perdida de los detalles más finos. El filtro gaussiano es comúnmente utilizado en aplicaciones de detección de bordes y análisis de escala espacial.

2. Filtro mediana (rango de vecindades)

El objetivo del filtro mediana es reducir el empañamiento de los bordes. Este filtro reemplaza el píxel actualmente analizando en la imagen por la medida del brillo con respecto a los vecinos más cercanos. Este filtro tiene la ventaja de no ser afectado por pixeles individuales ruidosos. La eliminación de ruido obtenida con el filtro mediana es bastante buena, con la ventaja de no empañar demasiado los bordes. Las principales desventajas del filtro mediana son que su desempeño disminuye cuando el número de pixeles con ruido es mayor a la mitad del número total de pixeles en la vecindad y tiene el inconveniente frente a los filtros lineales de ser más lento.

3. Filtro de suavizado direccional (preservación de bordes)

La eliminación de ruido mediante suavizado distorsiona la información con respecto a los bordes. Para reducir el empañamiento de bordes al realizar el suavizado se puede usar un filtro de promediado direccional que se calcula en varias direcciones según la

ecuación:

Page 13: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

12

4. Filtro de suavizado conservador

Esta técnica de reducción del nivel de ruido emplea un algoritmo de filtración simple y rápida que sacrifica su poder de eliminación de ruido a cambio de preservación del detalle espacial de la frecuencia en una imagen, removiendo pixeles aislados con un valor muy alto o muy bajo. El procedimiento consiste en encontrar los valores máximo y mínimo de intensidad para cada uno de los pixeles que se encuentran alrededor del píxel a analizar (píxel central). Si la intensidad del píxel central cae dentro del rango de sus vecinos no se realiza cambio alguno, por el contrario, si la intensidad del píxel central es mayor que el valor máximo, el píxel central toma el valor del máximo. Si la intensidad del píxel central es menor que el valor mínimo, dicho valor es asignado al píxel central.

5. Realce de contraste

La técnica de realce de contraste tiene como objetivo mejorar la calidad de las imágenes bajo ciertos criterios subjetivos del ojo humano. Normalmente esta técnica es utilizada como una etapa de pre-procesamiento para sistemas de reconocimiento de patrones.

El contraste entre dos objetos se puede definir como la razón entre sus niveles de gris medios. La manipulación de contraste consiste en una transferencia radio métrica en cada píxel, con el objetivo de aumentar la discriminación visual entre los objetos presentes en la imagen. La operación es realizada punto a punto. Esta trasformación radio métrica se realiza con la ayuda de histogramas manipulados para obtener el realce deseado.

El histograma es una de las formas más comunes de representar la distribución de los niveles de gris de una imagen, y también la más utilizada en procesamiento de imágenes. El histograma provee la información de cuantos pixeles poseen un determinado nivel de gris en la imagen en un intervalo definido ente 0(negro) y 255(blanco) para una imagen de 8 bits, ofreciendo datos importantes como la intensidad media y la dispersión de los valores de niveles de gris, siendo esta ultima la medida de contraste de la imagen. Cuanto mayor es la dispersión a lo largo del eje que representa los niveles de gris, mayor es el contraste de la imagen.

6. Filtro paso bajo

El filtro paso bajo es un tipo de filtro de suavizado empleado para remover ruido de alta frecuencia espacial en una imagen digital. Este ruido es generalmente introducido en la imagen durante el proceso de conversión de analógico a digital como un efecto secundario de la conversión física de patrones de energía luminosa a patrones eléctricos.

La reducción del ruido mediante el filtro de paso bajo se lleva a cabo mediante una cancelación de las variaciones mas rápidas entre píxel y píxel. El ruido aparece de manera aleatoria a manera de puntos en la imagen, usualmente son valores bastante distintos a los vecinos mas cercanos.

Page 14: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

13

El efecto visual de un filtro paso bajo es el suavizado de la imagen y reducción del número de niveles de gris de la escena. Las altas frecuencias, que corresponden a las transiciones abruptas, son atenuadas. El suavizado tiende a minimizar ruidos y origina una imagen menos nítida, con niveles de gris mas difuminados.

7. Filtro paso alto

De manera general, el filtro paso alto opera de la misma manera que el filtro paso bajo, mediante el análisis de los valores de cada píxel y cambiando estos de acuerdo a los valores de los pixeles vecinos. El efecto en este filtro es, sin embargo, el opuesto. En vez de obtener un suavizado de la imagen, el filtro paso alto realza detalles de la imagen. Desafortunadamente, esto tiene también a enfatizar en muchas ocasiones el ruido existente en la imagen. Por ello, el uso de este filtro debe reservarse preferentemente a imágenes con muy poco ruido.

8. Filtro SUSAN (Smallest Univalue Segment Assimilationg Nucleus)

El algoritmo SUSAN para la eliminación de ruido preserva la estructura de la imagen alisando únicamente sobre los pixeles que se encuentran dentro de la región del píxel analizado (píxel central) tomento un excedente del promedio de los pixeles en la localidad que cae dentro del USAN (Univalue Segment Assimilating Nucleus), siendo este un núcleo circular de pixeles utilizado para el calculo matemático del nuevo valor del píxel central. Los pixeles que caen dentro del USAN obtienen valores con pesos similares, mientras que los pixeles que se encuentran fuera de esta región son asignados con valores prácticamente de cero.

Este filtro integra los mejores aspectos de los métodos de reducción de ruidos existentes incluyendo la preservación de bordes, arrojando, por consiguiente, resultados bastante aceptables.

Operadores para la detección de bordes

La detección de esquinas y líneas se basa en los operadores de detección de bordes, mismos que, mediante el calculo de primeras y segundad derivadas permiten determinar puntos de principal importancia para poder realizar las mediciones necesarias.

En el análisis de objetos dentro de las imágenes resulta esencial poder distinguir ente el objeto de interés y el resto de la imagen. Las técnicas utilizadas para determinar los objetos de interés son conocidas como técnicas de segmentación. Una de las más comunes es la segmentación mediante la detección de bordes.

Page 15: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

14

Figura 4 Aplicación de primera y segunda derivadas a una función

Existe una gran variedad de métodos para la detección de bordes, mismos que se basan en información con respecto a los límites de una imagen. Los métodos de detección de bordes utilizan para sus fines diversos operadores que marcan puntos de acuerdo a discontinuidades en los niveles de gris, los colores o las texturas.

Al hablar de detección de bordes, el término sugiere que la aplicación de un algoritmo con este propósito dará como resultado un contorno. Sin embargo, el objetivo de un algoritmo de detección de bordes es obtener imágenes cuya salida muestre pixeles de mayor intensidad en los valores que detecten transiciones cercanas. Los bordes son encontrados en zonas de la imagen donde el nivel de intensidad fluctúa bruscamente. Cuento más rápido se produce el cambio de intensidad, el borde es más fuerte. Para poder detectar los bordes de los objetos debemos detectar aquellos puntos de borde que los forman. Así, un punto de borde puede ser visto como un punto en una imagen donde se produce una discontinuidad en el gradiente. Un buen proceso de detección de bordes facilita la elaboración de fronteras de objetos, con lo que el proceso de reconocimiento de objetos se simplifica.

El método más aceptado en la detección de bordes consiste en la aplicación de filtros de suavizado seguidos por filtros de derivadas. Estos últimos son los que sirven para detectar los cambios o transiciones en los niveles de gris en la imagen.

A fin de lograr la localización de los puntos en los que se produce la variación de intensidad, se emplean métodos basados en los operadores derivada. Básicamente se tienen dos posibilidades: aplicar la primera derivada (gradiente) o la segunda derivada (laplaciana). En el primer caso se buscara grandes picos y en el segundo, pasos de respuesta positiva a negativa o viceversa (cruces por cero).

Page 16: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

15

Algunos de los algoritmos de detección de bordes más comunes son los siguientes: • Técnicas basadas en el gradiente:

o Operador de Roberts o Operador de Sobel o Operador de Prewitt o Operador Isotropico (u operador de Frei-Chen)

• Operadores basados en cruces por cero: o Operador de Marr-Hildreth o Detector de Canny

Los operadores basados en el gradiente asumen que los bordes de una imagen son pixeles con un alto gradiente. Un rápido índice de cambio de intensidad en alguna dirección dada por el ángulo del vector gradiente puede observarse en los pixeles de los bordes. En la figura 5 se muestra un píxel de borde ideal con su correspondiente vector de gradiente. En el píxel, la intensidad cambia de 0 a 255 en dirección del gradiente. La magnitud del gradiente indica que tan marcado esta el borde. Si calculamos el gradiente en regiones uniformes obtendremos un vector de valor 0, lo que significa que no hay pixeles de borde. Un píxel de borde se describe mediante dos características importantes:

• Intensidad del borde, que es igual a la magnitud del gradiente. • Dirección del borde, que es igual al ángulo del gradiente.

El gradiente se estima por medio del uso de operadores. Algunos de estos operadores se describen a continuación.

1. Operador de Roberts

Es el operador de gradiente más simple. Utiliza diagonales para calcular el vector gradiente mediante las mascaras que se muestran en la figura 5.

Figura 5 Mascaras del Operador de Roberts

2. Operador de Sobel

El operador de Sobel es la magnitud del gradiente, calculado mediante:

Page 17: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

16

Donde las derivadas parciales son calculadas por:

Con la constante c=2

Figura 6 Etiquetado de pixeles para los operadores de Sobel y Prewitt

De igual manera que en el operador de Roberts, Sx y Sy pueden implementarse usando mascaras de convolución, tal como se muestra en la figura 7, para una distribución como la mostrada en la figura. Este operador pone un especial énfasis en pixeles cercanos al centro de la máscara. Es uno de los operadores mas comúnmente utilizados en la detección de bordes.

Figura 7 Mascaras del Operador Sobel

3. Operador de Prewitt

El operador de Prewitt, al igual que el de Sobel, expande la definición del gradiente en una mascara de 3 X 3 para ser mas inmune al ruido, utilizando la misma ecuación que Sobel, pero con una constante c=1 como se muestra en la figura 8.

A diferencia del operador de Sobel, este operador no otorga una importancia especial a pixeles cercanos al centro de la mascara.

Figura 8 Mascara del Operador de Prewitt

Page 18: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

17

4. Operador Isotrópico

El operador de Prewitt proporciona una buena detección para bordes verticales y horizontales, mientras que el operador de Sobel es mejor en la detección de bordes diagonales. El operador isotópico intenta llegar a un equilibrio entre ellos aplicando las mascaras mostradas en la figura 9.

Figura 9 Mascara del Operador Isotrópico

Page 19: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

18

Introducción a la Transmisión de Datos Una vez hecho el análisis de la información es necesario transmitir los datos al dispositivo físico de salida, por ello este capítulo trata de la importancia del puerto USB para enviar la información analizada de la PC y a los microcontroladores. También se describe los tipos de microcontroladores y los motores que se encuentran en el mercado actualmente.

Page 20: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

19

Antecedente de Transmisión de datos

Selección del puerto de comunicación. El USB surge a partir de las dificultades que representaban el costo, la configuración y la conexión de los dispositivos periféricos en una computadora personal.

USB Creo un nuevo método simplificado de conexión y configuración de dispositivos periféricos desde la perspectiva del usuario final, así como la reducción del costo mecánico.

Anteriormente, un equipo con herencia de los modelos fabricados por IBM, en los cuales los dispositivos eran mapeados dentro del espacio de memoria del CPU, se les asignaba una IRQ especifica y en algunos casos un DMA, muchos de estos IRQs y DMAs ya habían sido predefinidos a otros dispositivos lo cual generaba que estos no estuvieran disponibles así como numerosos conflictos.

Page 21: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

20

Principales conflictos con los dispositivos periféricos

Las Interrupciones (IRQ) Uno de los mayores problemas de resolver en una arquitectura IBM es la localización de una interrupción disponible. Esto es particularmente cierto en un dispositivo periférico que se conecta por medio del bus ISA o EISA.

La figura 1 muestra cada línea de IRQ y el dispositivo periférico que típicamente lo utiliza, muchas de estas líneas de IRQ son dedicadas a dispositivos en particular que con el paso del tiempo se fueron heredando mientras que otras líneas pueden ser usadas para diferentes dispositivos periféricos. Para un sistema que además tiene un bus PCI el problema se podría incrementar al tener que tener más líneas de IRQ especificas disponibles.

Page 22: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

21

LINEA IRQ

DISPOSITIVO

IRQ0 Timer del sistema (dedicado en la placa del sistema)

IRQ1 Teclado (dedicado en la placa del sistema)

IRQ2 Canal de cascada para el controlador de interrupciones esclavo (no disponible para dispositivos periféricos).

IRQ3 Mouse serial, modem, plotter, impresora serial, puerto de juegos, pluma, puerto infrarojo

IRQ4 Mouse serial, modem, plotter, impresora serial

IRQ5 Bus del Mouse, puerto paralelo, tarjeta de sonido, adaptador de red, unidad de cinta, puerto infrarrojo.

IRQ6 Unidad de floppy

IRQ7 Puerto paralelo

IRQ8 Alarma RTC (dedicado en la placa del sistema)

IRQ9 Adaptador de red, adaptador de video, unidad de cinta, puerto de juegos

IRQ10 Adaptador de red, Tarjeta de Sonido

IRQ11 Adaptador de red, controladora SCSI, controladora PCMCIA

IRQ12 Mouse PS/2, controladora PCMCIA

IRQ13 Errores del coprocesador matemático (dedicado en la placa del sistema)

IRQ14 Unidad de Disco Duro

IRQ15 Controladora SCSI, controladora PCMCIA

Tabla 1. Líneas de IRQ asignadas típicamente a dispositivos periféricos.

Direcciones de entrada/Salida Otro de los conflictos más comunes son las direcciones de entrada /salida ya que los dispositivos periféricos requieren de un bloque de direcciones para reportar su estado y la salida de sus datos.

Los periféricos de tipo ISA solo puede decodificar 10 de los 16 bits de líneas de direcciones lo cual produce un efecto en el cual la separación entre cada dispositivo provoca que un bloque de 1KB de datos sea desperdiciado

Page 23: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

22

Interfaces no compartidas Las interfaces de periféricos estándar (serie y paralelo) soportan un solo dispositivo conectado a la vez con esto la flexibilidad de este tipo de conexión queda minimizada. Esto lleva a la construcción de una tarjeta ISA o PCI con los respectivos problemas que ya se han descrito.

Los problemas para el usuario final Los usuarios finales sufren de diferentes problemas al intentar conectar esto dispositivos esto por lo siguientes casos:

Los diferentes tipos de cables Diferentes tipos de cables se ocupan en las PC desde los cables que lleva el mouse y el teclado hasta el cable de monitor e impresora, lo cual complica la conexión y detección del tipo del cable para el usuario final.

Instalación y configuración de las tarjetas de expansión La instalación y configuración puede llegar a ser complicada ya que requiere apagar el equipo y abrirlo para colocar la tarjeta en su respectiva conexión, en algunos casos configurar algunos jumpers y después de ello instalar el software que incluye el dispositivo el cual puede ser complicado y hasta en algunos casos frustrante. En algunos casos cuando se llegan a presentar conflictos entre diferentes tipos de hardware, podría no lograr ser configurado el dispositivo periférico.

Conexión en caliente Muchos de los dispositivos al ser conectados requieren el reinicio del sistema para poder ser usados por ello si encendemos nuestro equipo con el mouse desconectado e intentamos conectarlo este ya no funcionara hasta reiniciar nuevamente el equipo. De la misma forma desconectar el dispositivo periférico requiere que el equipo este apagado para evitar que este o el PC sea dañado. Además de ello algunos dispositivos llegan a comportarse distinto al ser conectado de un equipo a otro.

Soluciones para la creación de un esquema de conexión La nueva solución debe vencer las fallas percibidas y proveer nuevas capacidades como son:

• Un conector sencillo para cualquier dispositivo periférico.

• Posibilidad de conectar muchos dispositivos periféricos al mismo conector.

• Un método que disminuya los conflictos de recursos del sistema.

• Detección y configuración automática de los dispositivos periféricos.

• Una solución de bajo costo tanto para el sistema como para el periférico.

• Soporte para nuevos diseños de dispositivos periféricos.

• Soporte de hardware y software heredado.

• Bajo consumo de potencia.

Page 24: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

23

Soporte Plug and Play La configuración automática es crucial para satisfacer los requerimientos del usuario final. La nueva solución debería eliminar la necesidad de utilizar interruptores o jumpers para configurar el dispositivo y podría incluso eliminar la necesidad de instalar software cuando un nuevo dispositivo periférico es conectado. El usuario podría conectar el dispositivo periférico y estar listo inmediatamente para su uso.

Conexión en caliente La nueva solución debe proveer un método para detectar que un nuevo periférico ha sido conectado y automáticamente instalar el software necesario para acceder al dispositivo.

Bajo Costo La nueva solución de comunicación debe proveer las características antes mencionadas pero no debería incrementar significativamente el costo del dispositivo periférico, ni el costo del sistema, por ejemplo un Mouse USB que es más caro que uno de tipo PS2 podría ser rechazado por el usuario final.

El USB El USB surge a partir de las dificultades que representaban el costo, la configuración y la conexión de los dispositivos periféricos en una computadora personal.

USB Creo un nuevo método simplificado de conexión y configuración de dispositivos periféricos desde la perspectiva del usuario fina, así como la reducción del costo mecánico.

El Universal Serial Bus(USB) es uno de los más comunes interfaces usadas en productos de consumo electrónico actualmente, incluyendo PC’s, cámaras, Dispositivos GPS, Reproductores de MP3, Modem, impresoras y escáneres por nombrar algunos.

El USB fue originalmente desarrollado por Compaq, Microsoft, Intel y Nec, y posteriormente por HP, Lucent y Philips. Estas compañías eventualmente formaron el foro de implementación de USB. Para organizar el desarrollo y publicación de las especificaciones de USB.

El USB es una interface serial de alta velocidad que puede también proveer energía al dispositivo conectado a este. Un bus USB soporta hasta 127 dispositivos (limitado por el ancho de del campo de direcciones que es de 7 bits- note que la dirección 0 no es usada y queda como propósito especial) conectando a través de 4 cables de hasta 3 o 5 metros de longitud. Muchos dispositivos USB pueden ser conectados al mismo bus por medio de Hubs o concentradores, los cuales pueden ser de 4, 8 o 16 puertos. Un dispositivo puede ser conectado en un hub el cual a su vez está conectado a otro hub, el máximo número de dispositivos en cascada es de 6. De acuerdo a la especificación la máxima distancia de un dispositivo con respecto a un equipo es de 13 metros usando 5 hubs. Para mayores distancias de comunicación es más recomendable otros métodos como por ejemplo el Ethernet.

Page 25: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

24

Las especificaciones del bus USB están dadas en dos versiones: la anterior versión, USB 1.1, que soporta 11Mbps y la más reciente versión, USB 2.0 que soporta hasta 480Mbps (Universal serial bus specification). Las especificaciones de USB definen tres velocidades de datos:

• Baja velocidad (low speed) – 1.5 Mb/sec

• Velocidad Completa( Full speed) – 12 Mb/sec

• Alta velocidad ( High speed) – 480 Mb/sec

La máxima energía disponible para dispositivos externos está limitada a 5v y 100 mA.

El USB es una interface de cuatro cables implementada usando un blindaje, en donde dos tipos de conectores son especificados y usados: Tipo A y Tipo B.

En la siguiente imagen puede notarse la distribución de su pines de entrada/salida.

Page 26: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

25

Asignación de pines del USB

Pin No. Nombre Color

1 +5.0 v Rojo

2 Datos - Blanco

3 Datos + Verde

4 Tierra Negro

Las especificaciones también definen un conector mini-B, principalmente usado en pequeños dispositivos electrónicos portátiles tales como las cámaras y otros dispositivos de mano. Este conector tiene un quinto pin llamado ID, este pin no es usado. La asignación y los colores del conector mini-B están dados de las siguientes formas.

Pin No. Nombre Color

1 +5.0v Rojo

2 Datos - Blanco

3 Datos + Verde

4 No usado -

5 Tierra Negro

La señales del USB son bifases , y las señales son enviadas desde la computadora usando la técnica de codificación de información NRZI (inversión de no retorno a cero). En esta técnica, los niveles de la señal son invertidos en cada cambio de estado de cero lógico y no cambiados para 1 logico. Un bit 0 es colocado después de seis unos consecutivos en el flujo de la información para hacer la información dinámica. Este método es llamado “Bit Stuffing” (rellenado de bits) porque un bit extra incrementa el flujo de datos.

Page 27: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

26

Datos en NRZI

Un paquete de información transmitido por el anfitrión es enviado a cada uno de los dispositivos conectados al bus, viajando hacia abajo a través de las conexiones de los concentradores. Todos los dispositivos reciben la señal pero solo uno de estos, el direccionado, acepta la información. De forma inversa, solo un dispositivo a la vez puede transmitir hacia el anfitrión, y la información viaja de subida a través de las conexiones de los concentradores hasta alcanzar el anfitrión.

Los dispositivos USB conectados al bus pueden ser dispositivos totalmente propios que requieren controladores propios, o estos podrían pertenecer a una clase de dispositivo. Las clases de dispositivos permiten a los mismos drivers ser usados para dispositivos que tienen similares funciones. Por ejemplo, una impresora tiene la clase de dispositivo 0x07, y muchas impresoras pueden usar el mismo tipo de clase.

Las clases de dispositivos más comunes se muestran en la tabla 8.3. La clase de dispositivo de interfaz humana (HID) es de nuestro particular interés, ya que es el que usaremos.

Clase Descripción Ejemplo

0x00 Reservado -

0x01 Dispositivo de audio USB Tarjeta de sonido

0x02 Dispositivo de comunicaciones USB Modem, Fax

0x03 Dispositivo de interfaz humana USB Teclado, Mouse

0x07 Dispositivo Impresora USB Impresora

0x08 Dispositivo de almacenamiento masivo

Memoria USB, Memoria Flash

0x09 Dispositivo concentrador USB Concentrador (HUB)

0x0B Dispositivo lector de tarjetas inteligentes

Lector de tarjetas

0x0E Dispositivo de video USB Webcam, Scanner

0xE0 Dispositivo Inalámbrico USB Bluetooth

Page 28: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

27

Comunicación en el USB

El sistema de conectividad del USB es centrada en el anfitrión, donde el anfitrión decide el uso del bus USB. Cada dispositivo en el bus tiene asignado una dirección única desde que se conecta al anfitrión y ningún dispositivo conectado al anfitrión puede introducir una señal al bus si este no se la ha pedido.

Cuando un nuevo dispositivo USB es conectado al bus, el anfitrión usa la dirección 0 para preguntar la información básica de el dispositivo. Entonces, el anfitrión le asigna una dirección única. Después el anfitrión pregunta para recibir información más avanzada acerca del dispositivo, como por ejemplo el nombre del fabricante, las capacidades del dispositivo, el Id del producto y después las transmisiones en el bus pueden iniciar.

Interface USB con un microcontrolador PIC18

Algunos de los microcontroladores PIC18 soportan la interface USB directamente. Por ejemplo, El PIC18F4550 contiene una interface USB compatible con Low-speed y Full-speed que permite la comunicación entre un PC y este microcontrolador.

En la figura se muestra una sección del USB que contiene el microcontrolador PIC18F4550. En el puerto C pin RC4 (pin 23) y RC5 (pin 24) son usados por la interface USB. RC4 es el pin Datos D-, y RC5 es el pin Datos +. Resistencias internas son provistas y podrían ser desactivadas (usando UPUEN=0) si se desea resistencias externas estas pueden ser colocadas. Para Full-speed las resistencias externas o internas podrían ser conectadas al pin Datos+, y para low-speed las resistencias podrían se conectadas a el pin Datos-.

Page 29: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

28

El modulo de operación del USB es configurado usando tres registros, y un total de veintidós registros son usados para manejar el estado actual de las transacciones. Además de la comunicación entre la PC y nuestro dispositivo también se requiere de la parte mecánica que soportara el peso de la estructura del robot. Para lograr realizar esta parte mecánica necesitamos entender los diferentes motores existentes para estas aplicaciones y así lograr encontrar el más adecuado

Motores Un motor eléctrico es un dispositivo que transforma energía eléctrica en energía mecánica por medio de interacciones electromagnéticas. Los motores de corriente alterna y los motores de corriente continua se basan en el mismo principio de funcionamiento, el cual establece que si un conductor por el cual circula una corriente eléctrica se encuentra dentro de la acción de un campo magnético, éste tiende a desplazarse perpendicularmente a las líneas de acción del campo magnético. El conductor tiende a funcionar como un electroimán debido a la corriente eléctrica que circula por el mismo adquiriendo de esta manera propiedades magnéticas, que provocan, debido a la interacción con los polos ubicados en el estator, el movimiento circular que se observa en el rotor del motor. Partiendo del hecho de que cuando pasa corriente eléctrica por un conductor se produce un campo magnético, además si lo ponemos dentro de la acción de un campo magnético potente, el producto de la interacción de ambos campos magnéticos hace que el conductor tienda a desplazarse produciendo así la energía mecánica. Dicha energía es comunicada al exterior mediante un dispositivo llamado flecha.

Motores de corriente continúa

El motor de corriente continua es una máquina que convierte la energía eléctrica en mecánica, principalmente mediante el movimiento rotatorio. En la actualidad existen nuevas aplicaciones con motores eléctricos que no producen movimiento rotatorio, sino que con algunas modificaciones, ejercen tracción sobre un riel. Estos motores se conocen como motores lineales.

Esta máquina de corriente continua es una de las más versátiles en la industria. Su fácil control de posición, par y velocidad la han convertido en una de las mejores opciones en aplicaciones de control y automatización de procesos. Pero con la llegada de la electrónica su uso ha disminuido en gran medida, pues los motores de corriente alterna, del tipo asíncrono, pueden ser controlados de igual forma a precios más accesibles para el consumidor medio de la industria. A pesar de esto los motores de corriente continua se siguen utilizando en muchas aplicaciones de potencia (trenes y tranvías) o de precisión (máquinas, micro motores, etc.)

La principal característica del motor de corriente continua es la posibilidad de regular la velocidad desde vacío a plena carga.

Page 30: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

29

Una máquina de corriente continua (generador o motor) se compone principalmente de dos partes, un estator que da soporte mecánico al aparato y tiene un hueco en el centro generalmente de forma cilíndrica. En el estator además se encuentran los polos, que pueden ser de imanes permanentes o devanados con hilo de cobre sobre núcleo de hierro. El rotor es generalmente de forma cilíndrica, también devanado y con núcleo, al que llega la corriente mediante dos escobillas.

También se construyen motores de CC con el rotor de imanes permanentes para aplicaciones especiales.

Los motores de corriente continua se clasifican según la forma como estén conectados, en:

• Motor serie • Motor compound • Motor shunt • Motor eléctrico sin escobillas

Además de los anteriores, existen otros tipos que son utilizados en electrónica:

• Motor paso a paso • Servomotor • motor sin núcleo

Page 31: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

30

Motores paso a paso

Los motores paso a paso son ideales para la construcción de mecanismos en donde se requieren movimientos muy precisos.

La característica principal de estos motores es el hecho de poder moverlos un paso a la vez por cada pulso que se le aplique. Este paso puede variar desde 90° hasta pequeños movimientos de tan solo 1.8°, es decir, que se necesitarán 4 pasos en el primer caso (90°) y 200 para el segundo caso (1.8°), para completar un giro completo de 360°.

Estos motores poseen la habilidad de poder quedar fijos en una posición o bien totalmente libres. Si una o más de sus bobinas están energizadas, el motor estará fijo en la posición correspondiente y por el contrario quedará completamente libre si no circula corriente por ninguna de sus bobinas.

Principio de funcionamiento Básicamente estos motores están constituidos normalmente por un rotor sobre el que van aplicados distintos imanes permanentes y por un cierto número de bobinas excitadoras bobinadas en su estator. Las bobinas son parte del estator y el rotor es un imán permanente. Toda la conmutación (o excitación de las bobinas) deber ser externamente manejada por un controlador.

Existen dos tipos de motores paso a paso de imán permanente:

• Bipolar: Estos tiene generalmente cuatro cables de salida (ver figura 1). Necesitan ciertos trucos para ser controlados, debido a que requieren del cambio de dirección del flujo de corriente a través de las bobinas en la secuencia apropiada

Page 32: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

31

para realizar un movimiento. En figura podemos apreciar un ejemplo de control de estos motores mediante el uso de un puente en H (H-Bridge). Como se aprecia, será necesario un H-Bridge por cada bobina del motor, es decir que para controlar un motor Paso a Paso de 4 cables (dos bobinas), necesitaremos usar dos H-Bridges iguales al de la figura . El circuito de la figura es a modo ilustrativo y no corresponde con exactitud a un H-Bridge. En general es recomendable el uso de H-Bridge integrados como son los casos del L293

Page 33: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

32

• Unipolar: Estos motores suelen tener 6 o 5 cables de salida, dependiendo de su conexionado interno (ver figura 2). Este tipo se caracteriza por ser más simple de controlar. En la figura 4 podemos apreciar un ejemplo de conexionado para controlar un motor paso a paso unipolar mediante el uso de un ULN2803, el cual es un arreglo de 8 transistores tipo Darlington capaces de manejar cargas de hasta 500mA. Las entradas de activación (Activa A, B , C y D) pueden ser directamente activadas por un microcontrolador.

Page 34: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

33

Secuencias para manejar motores paso a paso Bipolares

Como se dijo anteriormente, estos motores necesitan la inversión de la corriente que circula en sus bobinas en una secuencia determinada. Cada inversión de la polaridad provoca el movimiento del eje en un paso, cuyo sentido de giro está determinado por la secuencia seguida.

A continuación se puede ver la tabla con la secuencia necesaria para controlar motores paso a paso del tipo Bipolares:

PASO TERMINALES A B C D 1 +V -V +V -V 2 +V -V -V +V 3 -V +V -V +V 4 -V +V +V -V

Secuencias para manejar motores paso a paso Unipolares

Existen tres secuencias posibles para este tipo de motores, las cuales se detallan a continuación. Todas las secuencias comienzan nuevamente por el paso 1 una vez alcanzado el paso final (4 u 8). Para revertir el sentido de giro, simplemente se deben ejecutar las secuencias en modo inverso.

Secuencia Normal: Esta es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de retención.

PASO Bobina A Bobina B Bobina C Bobina D

1 ON ON OFF OFF

2 OFF ON ON OFF

Page 35: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

34

3 OFF OFF ON ON

4 ON OFF OFF ON

Secuencia del tipo wave drive: En esta secuencia se activa solo una bobina a la vez. En algunos motores esto brinda un funcionamiento más suave. La contrapartida es que al estar solo una bobina activada, el torque de paso y retención es menor.

PASO Bobina A Bobina B Bobina C Bobina D

1 ON OFF OFF OFF

2 OFF ON OFF OFF

3 OFF OFF ON OFF

4 OFF OFF OFF ON

Page 36: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

35

Secuencia del tipo medio paso: En esta secuencia se activan las bobinas de tal forma de brindar un movimiento igual a la mitad del paso real. Para ello se activan primero 2 bobinas y luego solo 1 y así sucesivamente. Como vemos en la tabla la secuencia completa consta de 8 movimientos en lugar de 4.

PASO Bobina A Bobina B Bobina C Bobina D

1 ON OFF OFF OFF

2 ON ON OFF OFF

3 OFF ON OFF OFF

4 OFF ON ON OFF

5 OFF OFF ON OFF

6 OFF OFF ON ON

7 OFF OFF OFF ON

8 ON OFF OFF ON

Page 37: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

36

Aunque el motor a pasos tiene muy buena precisión, este carece de un buen torque necesario para la función que se desea dentro de este proyecto.

Servomotores

Un servomotor es un dispositivo con un eje de rendimiento controlado ya que puede ser llevado a posiciones angulares específicas al enviar una señal codificada. Con tal de que exista una señal codificada en la línea de entrada, el servomotor mantendrá la posición angular del engranaje. Cuando la señal codificada cambia, la posición angular de los engranes cambia. En la práctica, se usan servos para posicionar elementos de control como palancas, pequeños ascensores y timones. También se usan en radio-control, marionetas y, por supuesto, en robots. Los Servos son sumamente útiles en robótica. Los motores son pequeños. Un servomotor posee internamente una circuitería de control y es sumamente potente para su tamaño (un mayor torque respecto a motores de pasos con dimensiones y características semejantes). Un servomotor normal o estándar como el HS-300 de Hitec proporciona un par de 3 kg*cm a 4.8 V, lo cual es bastante para su tamaño, sin consumir mucha energía. La corriente que requiere depende del tamaño del servomotor. Normalmente el fabricante indica cual es la corriente que consume. Eso no significa mucho si todos los servomotores van a estar moviéndose todo el tiempo. La corriente depende principalmente del par, y puede exceder un Amper si el servomotor está fijo.

Page 38: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

37

Composición de un servomotor

El motor del servomotor tiene algunos circuitos de control y un potenciómetro conectado al eje central del motor. En la figura superior se puede observar a la derecha. Este potenciómetro permite a la circuitería de control, supervisar el ángulo actual del servomotor. Si el eje está en el ángulo correcto, entonces el motor está apagado. Si el circuito observa que el ángulo no es correcto, el motor volverá a la dirección correcta, hasta llegar al ángulo que es correcto. El eje del servomotor es capaz de llegar alrededor de los 180 grados. Normalmente, en algunos llega a los 210 grados, pero varía según el fabricante.

Un servomotor normal se usa para controlar un movimiento angular de entre 0 y 180 grados. Un servomotor normal no es mecánicamente capaz de retornar a su lugar, si hay un mayor peso que el sugerido por las especificaciones del fabricante.

El voltaje aplicado al motor es proporcional a la distancia que éste necesita viajar. Así, si el eje necesita regresar una distancia grande, el motor regresará a toda velocidad. Si este necesita regresar sólo una pequeña cantidad, el motor girará a menor velocidad. A esto se le denomina control proporcional.

Page 39: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

38

Control del Servomotor

La modulación por anchura de pulso, PWM (Pulse Width Modulation), es una de los sistemas más empleados para el control de servos. Este sistema consiste en generar una onda cuadrada en la que se varía el tiempo que el pulso está a nivel alto, manteniendo el mismo período (normalmente), con el objetivo de modificar la posición del servomotor según se desee.

Para la generación de una onda PWM en un microcontrolador, lo más habitual es usar un timer y un comparador (interrupciones asociadas), de modo que el microcontrolador quede libre para realizar otras tareas, y la generación de la señal sea automática y más efectiva. El mecanismo consiste en programar el timer con el ancho del pulso (el período de la señal) y al comparador con el valor de duración del pulso a nivel alto. Cuando se produce una interrupción de overflow del timer, la subrutina de interrupción debe poner la señal PWM a nivel alto y cuando se produzca la interrupción del comparador, ésta debe poner la señal PWM a nivel bajo. En la actualidad, muchos microcontroladores, disponen de hardware específico para realizar esta tarea, eso sí, consumiendo los recursos antes mencionados (timer y comparador).

PWM para recorrer todo el rango de operación del servo

El sistema de control de un servo se limita a indicar en qué posición se debe situar. Esto se lleva a cabo mediante una serie de pulsos tal que la duración del pulso indica el ángulo de giro del motor. Cada servomotor tiene sus márgenes de operación, que se corresponden con el ancho del pulso máximo y mínimo que el servo entiende. Los valores más generales se corresponden con pulsos de entre 1 ms y 2 ms de anchura, que dejarían al motor en ambos extremos (0º y 180º). El valor 1.5 ms indicaría la posición central o neutra (90º), mientras que otros valores del pulso lo dejan en posiciones intermedias. Estos valores suelen ser los recomendados, sin embargo, es posible emplear pulsos menores de 1 ms o mayores de 2 ms, pudiéndose conseguir ángulos mayores de 180°. Si se sobrepasan los límites de movimiento del servo, éste comenzará a emitir un zumbido, indicando que se debe cambiar la longitud del pulso. El factor limitante es el tope del potenciómetro y los límites mecánicos constructivos.

El período entre pulso y pulso (tiempo de OFF) no es crítico, e incluso puede ser distinto entre uno y otro pulso. Se suelen emplear valores ~ 20 ms (entre 10 ms y 30 ms). Si el intervalo entre pulso y pulso es inferior al mínimo, puede interferir con la temporización interna del servo, causando un zumbido, y la vibración del eje de salida. Si es mayor que el máximo, entonces el servo pasará a estado dormido entre pulsos. Esto provoca que se mueva con intervalos pequeños.

Es importante destacar que para que un servo se mantenga en la misma posición durante un cierto tiempo, es necesario enviarle continuamente el pulso correspondiente. De este

Page 40: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

39

modo, si existe alguna fuerza que le obligue a abandonar esta posición, intentará resistirse. Si se deja de enviar pulsos (o el intervalo entre pulsos es mayor que el máximo) entonces el servo perderá fuerza y dejará de intentar mantener su posición, de modo que cualquier fuerza externa podría desplazarlo.

Tren de pulsos para control del servo

Page 41: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

40

Capítulo II Sistema Propuesto En México a partir de 1° de enero del 2004 la ley de residuos sólidos del Distrito Federal nos obliga a separar la basura de nuestros hogares sin embargo actualmente la población no posee la educación necesaria para llevar a cabo dicha ley así como también la infraestructura proporcionada por el gobierno no logra abarcar el cumplimiento de esta. Por lo tanto aun muchos residuos sólidos no son separados antes de su recolección, de esta forma el proceso de separación se realizan por medio de la intervención humana, en la separación de los residuos orgánicos e inorgánicos el criterio y sus manos es el único instrumento para realizar esta tarea, esto produce la exposición de las personas a residuos tóxicos que se desprenden y afecten en gran medida a las personas afectando su integridad física y deteriorando su salud.

Esta tesis propone un sistema electromecánico para identificar los residuos sólidos, separarlos y así obtener menor intervención de personas en el proceso.

Para el desarrollo del sistema se dividió en tres partes las cuales son:

• Visón por computadora • Interfaz de usuario • Hardware

Nos referimos a visión por computadora a la sección encargada de obtener imágenes por medio de una cámara Web, las cuales son procesadas mediante un algoritmo de purificación que está compuesto de varios filtros, obteniendo así una matriz de datos con valores más sencillos de procesar que la interfaz de usuario mostrara y generara la respuesta en hardware correspondiente.

Interfaz de Usuario es la sección que nos permite mostrar en forma amigable al operador las formas que el sistema encontró y por consiguiente la respuesta en hardware que se obtendrá. En ella se llevara a cabo la mayor parte de los procesos de comunicación entre las diferentes partes del sistema.

El Hardware es la respuesta física de la interpretación de los datos que se analizaron en las secciones anteriores y por tanto el responsable de realizar la tarea encomendada.

Page 42: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

41

Diagrama a bloques general

Empezaremos explicando cada una de las partes principales del sistema de manera general para posteriormente hacer la aclaración y referencia detallada del mismo.

Adquisición de Datos: Esta sección es la encargada de obtener imágenes de una cámara Web que es la información de un entorno que para nosotros es común, sin embargo al ser un ambiente en continuo cambio se debe trasformar la información en un lenguaje comprensible para la computadora es por esto que la información es analizada por medio de un programa de análisis hecho en Matlab que se comunicara con la interfaz de usuario y mostrara el panorama de lo que se está recibiendo como entrada de datos.

Interface de Usuario: En este bloque la información proporcionada por el programa de análisis hecho en Matlab se interfaz a con el manejador de datos Visual Studio 2005 para así mostrar lo que en un inicio la cámara Web obtuvo. Esta sección muestra los datos Obtenidos del programa anterior y manda los datos a la interfaz de salida que en este caso se hace por medio del puerto USB.

Interfaz de Salida: Nos referimos por interfaz de salida al puerto USB que es el medio encargado de hacer la interacción computadora – hardware. Esta interfaz es la encargada de interpretar los datos analizados a un lenguaje de bajo nivel que está programado en un micro controlador.

Dispositivo Físico de Salida: Esta sección es interpretada como las herramientas físicas que nos ayudan en la tarea de coordinar y controlar los movimientos del brazo robótico; esto es los circuitos que fueron creados con el propósito de dar movilidad y coordinación a la información captada de primer instancia.

Adquisición de Datos

Interface de Usuario

Dispositivo Físico de salida

Interface de salida

Page 43: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

42

Capítulo III Desarrollo del sistema

Diagrama Detallado

Es aquí donde detallaremos lo que anteriormente explicamos de manera general para así ver el funcionamiento del sistema de una forma más clara y apreciable para el lector.

Obtención de información Esto se logra por medio de una cámara Web con una resolución de 640 x 480 a una distancia de 1m con respecto a la superficie que contiene los objetos, cabe aclarar que esta superficie tiene que ser de un color sólido así como también que los objetos tienen que tener contraste con respecto a la superficie que los contiene, en este caso se aplico el color blanco para los objetos y una tabla de madera de color café como superficie de contraste.

Obtención de Información

Purificación de Imagen

Identificación de objeto

Envió Datos Visual Studio2005

Interface Usuario

Librería de Movimiento

Programa (Comunicación USB)

Puerto USB

Comunicación con el Hardware

Procesamiento de información (Hardware)

Respuesta de Hardware

Page 44: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

43

Las figuras son objetos geométricos (circulo, cuadrado, triangulo) de diferentes tamaños sin exceder un tamaño de 5cm de diámetro ya que por la distancia de captación de imágenes nos hace difícil exceder el tamaño así como también la fuerza y longitud del brazo hace que no excedamos estas características.

Como primer paso en el proceso de captación de formas se configuro la cámara con las características que se requieren (como formato, tamaño, etc.).

vid = videoinput('winvideo', 1, 'YUY2_640x480')

Se especifico la cantidad de frames que se captaran a razón de los segundos que se emplearan.

frames=10; set(vid,'FramesPerTrigger',frames) trigger=2; set(vid, 'TriggerRepeat', trigger);

Purificación de Imagen Este proceso se realiza puesto que el ambiente no siempre es el adecuado y se logra captar otros elementos ajenos a los objetos de estudio. En esta parte es cuando se toma la imagen captada de la cámara y la envía a un programa realizado en Matlab el cual en primer instancia convierte la imagen a escala de grises para poder normalizar la cantidad de luz que en muchos de los casos afecta la integridad de los objetos, posteriormente se hace un proceso de binarizacion lo cual nos genera una imagen más limpia.

I = rgb2gray(f); threshold = graythresh(I); bw = im2bw(I,threshold);

Page 45: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

44

Haciendo esto es posible hacer un negativo de la imagen para así tener solo dos colores sólidos, posteriormente se aplica un filtro el cual limpia la imagen de pequeños puntos esparcidos fuera de los elementos sólidos que se destacan.

Identificación del Objeto El siguiente paso es captar el centro de los objetos que se obtuvieron de la limpieza anterior para captar las esquinas del objeto y con esto saber de que figura geométrica se trata es necesario hacer una agrupación de los puntos de vecindad esto nos proporciona una mejor referencia de en qué posición se encuentra las esquinas del objeto y así poder relacionarlo con una figura geométrica especifica.

Lo primero que realizaremos será etiquetar las formas encontradas por medio de la función bwlabel la cual agrupara todas las formas encontradas mostrándonosla de un tono de gris diferente cada una.

Se=bwlabel(bw);

Quedando de la siguiente forma:

Ahora obtendremos el centroide de cada una de las formas por medio de función regionprops la cual determinara este dato.

Idealmente una figura como un triangulo solo debería tener 3 vértices pero al capturar la imagen se obtienen imperfecciones esto no permite determinar fácilmente estos vértices ya que podrían mostrarse mas.

Page 46: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

45

Para poder eliminar estas imperfecciones en los extremos se utilizo la técnica de dilatación de puntos la cual se encarga de agrupar los puntos cercanos a las superficies de color blanco.

mask2 = imdilate(mask,se);

Ahora recorremos todas las figuras y dependiendo de la cantidad de esquinas encontradas será la figura reconocida, así al mismo tiempo se va creando una matriz con los datos de cada figura conteniendo las coordenadas de la figura y su descripción.

Envío de Datos a VS 2005 En Matlab ya procesada la formación es convertida en un paquete de datos en forma de matriz la cual se ingresa a VS 2005 con el propósito de mostrar al usuario del sistema la información que se analizo y también interpretar los datos que se recolectaron para convertirlos en un lenguaje más compresible en el manejo del puerto USB y para que el

Page 47: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

46

dispositivo Hardware realice su tarea. Esto se realiza mediante las librerías de matlab específicas para visual studio 2005.

Esto es realizado por medio de las librerías de matlab builder NE, estas crean componentes basados en .NET o COM que permiten libremente desarrollar aplicaciones para equipos de escritorio o servidores WEB. El compilador crea componentes encriptados de las funciones creadas en matlab, así mismos crea una envoltura que permite el fácil entendimiento desde .NET. Solo se requiere referenciar estas librerías creadas como cualquier otra librería de .NET y estas funcionaran utilizando las MCR (matlab compiler runtime) de matlab las cuales pueden ser distribuidas dentro de la misma aplicación.

Interface de Usuario Es aquí en donde ya procesada la información el resultado es mostrado de forma tal que el usuario pueda entenderla y donde el observador supervisara que se hayan reconocido todas las formas expuestas en la tabla de trabajo.

Page 48: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

47

Librería de Movimiento Nos referimos como librería de movimiento a los movimientos que el brazo robótico puede realizar ya que siendo un agente externo y no teniendo comunicación de entrada al sistema lógico es de suma importancia tener esta información para lograr que se desplace a la dirección y distancia necesaria. Esta librería interpretara los datos ya analizados de coordenadas convirtiéndolas en unas entendible a la parte de hardware.

El primer paso es recibir las coordenadas en las que se encuentra el objeto que se quiere alcanzar, esto por medio de matlab. Una vez que tenemos estas coordenadas deberemos hacer un corrimiento ya que el robot se encuentra en el centro de la imagen así como la cámara pero en sentido inverso.

De esta forma haremos que el robot este en la coordenada (0,0). Seguido a esto deberemos convertir las coordenadas obtenidas a coordenadas polares con lo cual obtendremos el ángulo Ɵ con respecto a que se encuentra el objeto este será nuestro primer ángulo que transmitiremos al robot para el primer motor así lo posicionaremos observando el objeto.

Page 49: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

48

El vector r representa la distancia a la que se encuentra el objeto con respecto al robot, conociendo la distancia al objeto y la distancia del brazo y antebrazo del robot podemos determinar por medio del teorema del seno y cosenos los ángulos en los que el brazo deberá abrirse para posicionarse sobre el objeto

Teorema de los cosenos

Teorema del seno

De esta forma determinamos el ángulo α el cual nos dirá que tan alto se levantara el brazo para posicionarse sobre el objeto, seguido a esto el ángulo γ determina la apertura del ángulo del antebrazo con respecto al brazo para así quedar totalmente posicionado en el objeto.

Ya que tenemos estos tres ángulos ahora serán pasados a la parte de comunicación de USB que se encargara de enviarla al puerto.

Programa de Comunicación En esta sección se lleva a cabo la comunicación de la interfaz de usuario al exterior con el hardware mediante el protocolo de puerto USB. Esto es, una comunicación por medio de las API’s de nuestro sistema operativo Windows hacia el dispositivo USB que llevara a cabo la tarea. Convirtiendo la información de un lenguaje de alto nivel a otro de bajo nivel.

Page 50: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

49

La comunicación se divide en tres partes, una que encuentra y configura el dispositivo en el puerto USB, una que envía datos y una que transmite.

Inicio

Insertar dispositivo

Conectar a dispositivo

Existe dispositivo

Crear Buffer de Envió/Salida de

datos

Rellenar buffer Enviar Comando

Enviar Buffer Leer Buffer

Fin

No

Si

Enviar informacion Recibir Informacion

La primera parte que encuentra y configura el dispositivo se puede ver de la siguiente forma.

Page 51: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

50

Inicio

Crear un GUID

Obtener un Arreglo de disp.

con SetupDiGetClass

Devs

Es el ultimo elemento del

arreglo

Obtener detalles de la interfaz del

disp.

Reservar espacio de memoria para

la estructura

Obtener ruta

Crear archivo virtual

Obtener atributos del Disp.

VenderoId y ProductoId coinciden Cerrar archivo

No

Si

Crear archivo virtual solo lectura

Obtener su capacidades

guardar tamaño Buffer

Liberar apuntadores

Fin

Si

No

Page 52: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

51

Lo primero es crear un GUID (Global unique identifier) que nos servirá como identificador único para nuestra aplicación seguido de esto debemos obtener un arreglo (handle) con la información de cada uno de los dispositivos instalados en nuestra computadora esto lo hacemos por medio de la función SetupDiGetClassDevs esta requerira de nuestro GUID. Ahora recorreremos uno a uno todos los dispositivos de este arreglo para determinar si existe el dispositivo que estamos buscando, lo primero que realizamos al es crear un apuntador a una estructura del tipo SP_DEVICE_INTERFACE_DATA con la información de la interfaz del dispositivo procesado para posteriormente verificaremos que no haya sido el último elemento, en caso de no serlo procederemos a ejecutar el procedimiento SetupDiGetDeviceInterfaceDetail que nos dará un apuntador a una estructura del tipo SP_DEVICE_INTERFACE_DETAIL_DATA este lo deberemos ejecutar dos veces ya que la primera vez nos traerá el tamaño de la estructura y la segunda vez nos traerá la estructura como tal con los detalles de la interfaz del dispositivo apuntado, como la estructura cambia de forma dinámica es necesario reservar espacio en memoria para colocar dicha estructura, esto lo realizamos mediante funciones AllocHGlobal pasándole como parámetro el tamaño de la estructura. Una vez con esta estructura deberemos obtener de ella la ruta en la que se encuentra por medio de un apuntador a este el cual tendrá una estructura como esta \\?\hid#vid_0e0f&pid_0003 del cual podemos observa el tipo de dispositivo en este caso HID (Dispositivo de interfaz Humana) la cual es la que nos interés y su id de vendedor así como su Id de producto. Ahora sabiendo la ruta del dispositivo podremos comunicarnos con el creando un archivo que apunte a esa ruta, por medio de la función CreateFile esta creara un archivo virtual que al leer o guardar información en el realmente estará enviando la información al dispositivo de forma segura y cumpliendo las reglas de seguridad de nuestro sistema operativo, anteriormente apuntábamos a los diversos dispositivos por medio de sus direcciones de memoria lo que ocasionaba problemas con la seguridad de nuestro sistema operativo ya que de esta forma era fácil dañar o hacer mal uso de algún componente de nuestro equipo. Una vez que ya tenemos dicho archivo podemos pedirle sus atributos por medio de la función HidD_GetAttributes, entre los atributos podremos encontrar el Id del vendedor, id del producto y la versión, estos datos los utilizaremos para verificar que sea el dispositivo al que queremos conectarnos. Estos datos son únicos entre fabricantes y muestran información sobre el vendedor y producto, compararemos estos dos datos con los que nosotros tenemos, en caso de no ser el esperado cerraremos el archivo que utilizamos para identificarlo e intentaremos con el siguiente en la lista de dispositivos, en caso de ser el mismo dispositivo crearemos un archivo virtual de solo lectura para ese dispositivo el cual usaremos posteriormente para comunicarnos con él, además de ello debemos obtener sus capacidades por medio de la función HidP_GetCaps para ello debemos primero generar un apuntador que prepare la información por medio de la función HidD_GetPreparsedData y pasársela como parámetro, una vez obtenidas la capacidades utilizaremos la función HidP_GetValueCaps para llenar una estructura la cual contendrá dichas capacidades y de la cual extraeremos el tamaño de buffer que tiene este dispositivo y el cual nos servirá posteriormente. Ya que tengamos esta estructura es importante que libremos los apuntadores que hemos creado para poder liberar espacio en memoria que hemos ocupado.

Page 53: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

52

El envió de datos se hace de la siguiente forma:

Inicio

Llenar buffer con datos

Crear Buffer

Conectado

Llenar primer byte con Cero

Conectar a dispositivo

Escribir Buffer

Fin

Para el envió de datos primero deberemos llenar nuestro buffer que crearemos del tamaño que nos indican la capacidades del dispositivo, una vez llenado verificares que aun estemos conectados al dispositivo de lo contrario reintentaremos conectarnos con este. Una vez conectados llenaremos el primer byte con cero ya que esto es obligatorio y a continuación escribiremos el buffer en nuestro archivo virtual por medio de la función WriteFile, esta nos devolverá la cantidad de bytes que fueron escritos.

Page 54: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

53

La recepción de datos es de la siguiente forma:

Inicio

Enviar comando

Crear Buffer

Leer archivo virtual

Esperar objeto

Tiempo agotado Buffer llenado

Restablecer eventos

Fin

Para recibir datos desde nuestro dispositivo debemos previamente haberle enviado un comando que genere información, ya que este hará que nuestro dispositivo llene su buffer y lo coloque en la pila de transferencia para posteriormente nosotros crear primero un buffer del tamaño de las capacidades que nos indica, para posteriormente usar la función ReadFile la cual le indicara a nuestro dispositivo que puede transmitir los datos e

Page 55: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

54

inmediatamente regresa por lo cual nosotros debemos llamara a una función llamada WaitForSingleObject el cual servirá para esperar a que un objeto en este caso el buffer sea llenado o en caso contrario regrese un objeto de tipo TimeOut cuando el tiempo de espera haya terminado, una vez que se tienen los datos debemos restablecer todos los eventos del dispositivo para poder de esta forma llamarlos posteriormente y así ya tendremos nuestros datos dentro del buffer y pueden ser ocupados en su procesamiento.

Puerto USB Para el desarrollo del hardware tenemos que pensar primero en la interfaz de comunicación entre la PC y la electrónica que controla el actuador. En este punto analizamos los requerimientos para que nuestra interfaz cumpla con el propósito deseado, entre estos se encuentran:

• Ser un tipo de puerto comercial que aun exista en la mayor parte de los equipos actuales.

• Tener un tipo de conector que sea de fácil acceso, con una conexión y desconexión rápida.

• Tener la velocidad necesaria para llevar el flujos de datos de forma correcta

• Ser bidireccional y poseer mínimo 8 bits en cada dirección.

Por ello tomamos como el puerto indicado el USB ya que es un puerto que en la mayoría de los equipos actuales abunda así como también el tipo de conector hace fácil su conexión e instalación, USB maneja diferentes tipos de velocidades e inclusive en la velocidad más baja puede llevar a cabo correctamente el flujo de los datos ya que además posee como mínimo un acho de datos de 64 bits en la más baja velocidad.

Comunicación con el Hardware Para el desarrollo de una interfaz USB se requería un dispositivo electrónico que además de tener embebido el sistema USB fuera capaz de ser programado fácilmente. Por ello optamos por un microcontrolador de la compañía Microchip ya que cuenta con varios dispositivos que son capaces de ser programados para usos generales y/o específicos.

Entre la línea de microcontroladores que microchip tiene están la familia 16 y la familia 18 ambos con capacidades distintas. Los microcontroladores de la familia 16 para USB tienen la característica de poseer una memoria de tipo OTP la cual solo permite grabarlo una única ocasión y no poder modificar el código posteriormente, la familia 18 por el contrario posee una memoria de programa de tipo Flash la cual nos permite grabar el programa y cambiarlo posteriormente cuando sea necesario. Así como también la familia 16 solo permite utilizar el bus USB en modo de low speed USB 1.1 a lo cual la familia 18 también permite el modo Full speed y high speed así como la operación de la versión USB 2.0.

Page 56: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

55

Por estos motivos se opto por la utilización de un microcontrolador microchip de la familia 18 como es el PC18F4550 el cual puede ser programado en Ensamblador o en C++ según sea necesario.

Para llevar a cabo la tarea de programación de USB microchip proporciona unas librerías especificas que sirven como base al desarrollo del protocolo de USB las cuales permiten abarcar las diferentes clases de dispositivos USB (estas librerías se integran en un conjunto llamado MCHPFSUSB Framework v2.4 que puede ser descargado de la pagina del fabricante), para este caso utilizaremos la clase HID (dispositivo de interfaz humana) ya que para este dispositivo no se requiere transmitir datos continuamente sino que hay que esperar la respuesta de los demás componentes del sistema para atender un cambio en el actuador así como también hace menos complicado la realización del software que lo controlara.

El siguiente es el diagrama es el utilizado para la comunicación por USB:

Es importante notar que las terminales del puerto USB se conectan directamente con el PIC18F4550 por medio de los pines D+ en RC4 y D- en RC5.

Una vez que tenemos el circuito procederemos a la parte de software que programaremos dentro del microcontrolador, usando las librerías de microchip escritas en lenguaje C++, en ellas el archivo con el que inicia el sistema es el main.c el cual sirve para la inicialización del micro y contiene el bucle principal el cual se encuentra en la función main.

Page 57: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

56

void main(void) { InitializeSystem(); //Inicializa las funciones del micro while(1) { // Checar el estado del bus y el servicio de interrupciones del USB. USBDeviceTasks(); // Tareas de una aplicacion especifica. // Codigo relacionado a la aplicacion puede ser agregado aqui, o en la función ProcessIO() . ProcessIO(); } } En la función main podemos ver la inicialización del sistema por medio de la llamada a función InitializeSystem() posteriormente entramos al bucle principal que se encargara de llevar las tareas periódicamente, en este bucle encontramos la llamada a función USBDeviceTasks() la cual se encarga de revisar cada vez que se ejecuta el estado del bus y con ellos las interrupciones generadas por el USB , posteriormente podemos colocar nuestras funciones dependiendo de nuestro programa o colocarlo dentro de la función ProcessIO() y será ejecutado cada determinado tiempo.

En ProcessIO() primero debemos de revisar el estado en el que se encuentra es bus para después dependiendo de este saber que operación realizamos, en caso de que el bus este sin actividad revisaremos el estado de la trasnmision HID en caso de no estar ocupada tomaremos el buffer llamado PacketFromPc y lo llenaremos con los datos que llegaron a el bus e inmediatamente limpiaremos el buffer PackeToPC que es el que lleva los datos a la pc. Una vez que terminemos esta tarea esperaremos a siguiente ciclo para asi estar en estado de ocupado y poder tomar los datos que llegaron de la PC y procesarlos por medio de su elemento Command el cual nos indica el comando que la PC transmitió al USB. Lenaremos el buffer PacketToPC con los datos que solicito la PC y revisaremos si el bus no está ocupado en caso de no estar, transmitiremos la información a la PC.

void ProcessIO(void) { unsigned char i;

if(BootState == Idle) //Revisa el estado actual del bus USB { if(!mHIDRxIsBusy()) //Recibimos algun comando? { HIDRxReport((char *)&PacketFromPC, 64); BootState = NotIdle; for(i = 0; i < TotalPacketSize; i++) //Preparar el siguiente paquete que podria ser enviado, iniciando con 0x00. PacketToPC.Contents[i] = 0; //Coloca el arreglo a enviar a cero } } else //(BootState en caso de no estar ocupado)

Page 58: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

57

{ switch(PacketFromPC.Command) // checar que commndo se envio { case COMANDO1: { //Preparamos el paquete de respuesta, con los datos que el PC solicito PacketToPC.Command = COMANDO1; //Respondemos con la misma peticion ……… //verificamos si el bus esta ocupado en caso contrario transmitimos el packete if(!mHIDTxIsBusy()) { HIDTxReport((char *)&PacketToPC, 64); BootState = Idle; } } break; case COMANDO2:

{ } break; …… ……. …………

} }

Con este sencillo procedimiento podemos llevar a cabo la mayor parte de las tareas de USB que se requieren en el sistema pero una cosa que no debemos olvidar es llenar la estructura de constantes llamada USB_DEV_DSC device_dsc que pertenece a las variables de rom con los valores de IdVendor y IdProduct ya que idVendor especifica el numero único de la empresa que lo fabrica y idProduct identifica el numero de producto al que se refiere, estos dos valores nos servirán en la parte de software de la PC para encontrar nuestro dispositivo.

Procesamiento de la información en hardware Una vez que el microcontrolador para USB tiene los datos de la actividad que se tiene que realizar deberá de dárselos a un dispositivo que sea capaz de procesarlo continuamente. El microcontrolador encargado del USB ya no puede ser capaz de operar estas instrucciones ya que este se encuentra muy saturado procesando la información correspondiente a USB, lo que provocaría demoras en la comunicación o demoras en la respuesta. Para ello destinamos un microcontrolador de propósito general capaz de atender a los requerimientos del actuador. Utilizamos un microcontrolador PIC18F4520 que es un microcontrolador de propósito general y a que además cuenta con un amplio conjunto de capacidades e interrupciones. En este punto decidimos el tipo de motores que el actuador ocuparía ya que de estos depende el funcionamiento y la fuerza del actuador para realizar alguna tarea. Tomamos en cuenta los siguientes aspectos para encontrar el motor más adecuado:

• Gran torque

• Poco consumo de energía

Page 59: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

58

• Gran resistencia a la inercia y/o gravedad

• Fácil operación.

De los dos tipos de motores con mayores cualidades apegadas a estas características se encuentran los motores a pasos y los servomotores.

A lo cual encontramos los servomotores como los motores indicados y tomamos un servomotor especifico el Futaba S3003 ya que este posee las siguientes características:

Sistema de control:

+control de ancho de pulso en 1520usec Neutral

Corriente de drenado (4.8V):

7.2mA/detenido

Pulso requerido:

3-5 Volts Pico a Pico en Onda cuadrada

Corriente de drenado (6.0V):

8mA/idle

Voltaje de operación:

4.8-6.0 Volts Dirección: Sentido del reloj/Pulso viajando a 1520-1900usec

Rango de temperatura:

-20 a +60 °C Tipo de Motor: 3 Polos de Ferrita

Velocidad (4.8V):

0.23sec/60 grados sin carga

Potenciómetro de manejo:

Manejo indirecto

Velocidad (6.0V):

0.19sec/60 grados sin carga

Tipo de chasis: Plástico

Torque (4.8V): 44 oz/in. (3.2kg.cm) Tipo de maquinaria:

Maquinaria de nylon

Torque (6.0V): 56.8 oz/in. (4.1kg.cm) Longitud del cable:

12"

Angulo de operación:

45 grados. Viajando el pulso en un sentido a 400usec

Dimensiones: 1.6" x 0.8"x 1.4" (41 x 20 x 36mm)

360° Modificable:

Si Peso: 1.3oz. (37.2g)

Con lo cual reduce la cantidad de circuitos de potencia y aumenta el torque que es de 3.2 Kg como mínimo.

Page 60: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

59

Para controlar estos motores con el microcontrolador se utilizo el siguiente circuito:

En este circuito tenemos un teclado que nos permitirá mover el actuador en diferentes posiciones de forma manual en caso de que sucediera algún incidente no previsto así como también tenemos los 3 servomotores conectados al puerto RE de nuestro microcontrolador. Para mover los servomotores en diferentes posiciones necesitamos primero generar una señal de tipo PWM en este caso de aproximadamente 11 ms, para generar este ancho de pulso primero creamos una interrupción de baja prioridad que se encargue de crear una salida en alto cada 11ms en cada uno de los servomotores. Después crearemos una interrupción para cada uno de los diferentes motores que sea quien se encargue de poner en su estado bajo la salida hacia cada motor dependiendo de la posición en la que lo queremos. El código en este punto fue creado con ensamblador ya que se necesitaba mayor velocidad de reacción lo cual lenguaje c++ no nos puede dar. Primero en la función MAIN inicializaremos los timmers y los puertos así como también activaremos las interrupciones. ; *********** Initialization de los puertos ******************* MAIN: BSF RCON,IPEN CLRF TRISE CLRF PORTE MOVLW 0X0A MOVWF ADCON1 CLRF T0CON CLRF T1CON CLRF T3CON

Page 61: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

60

; **************** Inicialización de los timmers con un valor inicial ****** MOVLW 0X94 MOVWF TMR0H MOVLW 0X95 MOVWF TMR0L MOVLW 0XEB MOVWF VALT1H MOVWF TMR1H MOVLW 0X7E MOVWF VALT1L MOVWF TMR1L MOVLW 0XFD MOVWF TMR3H MOVWF VALT2H MOVLW 0X12 MOVWF VALT2L MOVWF TMR3L BCF INTCON,TMR0IF BSF INTCON,TMR0IE BCF PIR1,TMR1IF BSF PIE1,TMR1IE BCF PIR2,TMR3IF BSF PIE2,TMR3IE ;************ Inicializacion de las interrupciones ********************** MOVLW 0X0 MOVWF IPR2 MOVWF IPR1 MOVWF INTCON2 BCF INTCON2,TMR0IP BSF IPR1,TMR1IP BSF IPR2,TMR3IP BSF T0CON,TMR0ON BSF T1CON,TMR1ON BSF T3CON,TMR3ON BSF INTCON,GIE BSF INTCON,PEIE BSF PORTE,RE0 BSF PORTE,RE1 Después de esto deberemos atender a cada una de las interrupciones y reprogramar el nuevo tiempo de la siguiente interrupción para seguir posicionado cada uno de los motres en su lugar correcto. ORG 0X08 ; VECTOR DE INTERRUPCIONES DE ALTA PRIORIDAD BTFSS PIR2,TMR3IF GOTO INTTMR1 GOTO INTTMR3 RETFIE ORG 0X18 ;VECTOR DE INTERRUPCIONES DE BAJA PRIORIDAD CALL INTTMR0 RETFIE

Page 62: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

61

En esta grafica podemos notar el pwm para cada motor uno en su valor más alto y el otro en su valor mas pequeño.

Page 63: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

62

Conclusiones

Este sistema nos permitió explorar nuevas aéreas en lo que es la conjunción de nuestras carreras. Ya que involucra la parte de computación al realizar detección de formas así como interfaces de usuario e interfaces del sistema operativo con el mundo exterior. En la parte electrónica la realización de un firmware que se encargue de las comunicaciones USB y entre microcontroladores y motores nos permitió aplicar los conocimientos adquiridos durante la carrera y posteriores a ella. Este trabajo nos permitió aplicar los conocimientos adquiridos en las carreras Ing. En Computación e Ingeniería en Comunicaciones y Electrónica. Probablemente algunas partes sean más difíciles de entender pero permite quedar abierto a posteriores investigaciones, ya que este abre nuevas puertas a la comunicación entre hardware y software así como la creación de nuevos dispositivos firmware para futuras aplicaciones, resolviendo las partes más difíciles de la comunicación dejándolo en términos más fáciles y que requieren menor tiempo para su desarrollo e implementación.

Page 64: Brazo Robotico Con Reconocimiento de Objetosa

Luis Carlos Carrillo Tovar y Gwendolyne Islas Cordero

63

Bibliografía. Universal Serial Bus Specification Revison 2.0, Compaq Hewlett-Packard Intel Lucent Microsoft NEC Philips, April 27, 2000. Advanced PIC Microcontroller projects in C Dogan Ibrahim, Editorial Newnes, 2008 www.semarnat.gob.mx Comunicado de prensa Núm. 007/08 México, D.F Enero 24, 2008. Digital Image Processing using Matlab Rafael C. Gonzalez, Richard E. Woods, Steven L. Eddins Editorial Pearson Prentice Hall 2004