Está en la página 1de 43

UNIVERSIDAD NACIONAL DE COLOMBIA

MANIPULADOR TIPO MOTOMAN CON RECONOCIMIENTO DE PATRONES EN IMÁGENES


MEDIANTE IMPLEMENTACION DE VISION ARTIFICIAL

OTTO WILMER CASTILLO SANTACRUZ

ANDRES MAURICIO CIFUENTES BERNAL

Tesis para optar al título de Ingeniero Mecatrónico

Director

FRANCISCO MELUK OROZCO

Ingeniero Electrónico M. Sc.

UNIVERSIDAD NACIONAL DE COLOMBIA

FACULTAD DE INGENIERIA

DEPARTAMENTO DE INGENIERIA MECANICA Y MECATRONICA

BOGOTÁ D.C.

2008
A lo largo de mi vida, pude comprobar que el ser
humano siempre necesitará de alguien a su lado

Infinitas gracias a Dios, a mi familia, a mis educadores,


a mis amigos, a mis compañeros y sobre todo, a Angela,
por ser ese alguien que decidió estar siempre a mi lado

Otto Wilmer Castillo Santacruz


A Dios por permitirme culminar de manera satisfactoria
este trabajo; a mis padres por apoyarme en mi camino
de manera incansable; a mis amigos por estar a mi lado
en todo momento y darme las fuerzas de seguir
adelante; al Ingeniero Francisco Meluk, pues gracias a
sus enseñanzas este sueño es hoy hecho una realidad.

En memoria de mi abuela, quien murió en los días en los


cuales termine esta tesis.

Andrés Mauricio Cifuentes Bernal


AGRADECIMIENTOS

Los autores de esta tesis expresan sus agradecimientos a:

Ing. Francisco Meluk, Ingeniero Electrónico y Director de la tesis, por sus valiosas
orientaciones y su desinteresada ayuda.

Ing. Jaime Castillo, Ingeniero Mecánico, por darnos una excelente introducción al mundo de
la Robótica
RESUMEN

El presente trabajo de grado tiene como objetivo construir un manipulador tipo MOTOMAN
equipado con un dispositivo de recolección de imágenes digitales (cámara digital) en un
ambiente de trabajo controlado con el propósito de tomar y procesar imágenes de su entorno
de trabajo para el reconocimiento de ciertos patrones y la realización de algunas acciones con
base en esto. Se empleó la arquitectura del manipulador MOTOMAN por ser adecuada para el
propósito definido y el procesamiento de imágenes fue realizado en MATLAB®. Se encontró
que el posicionamiento de la cámara como elemento terminal y el posterior procesamiento de
imágenes y reconocimiento de patrones funciona de manera adecuada y con cierta robustez a
cambios de luz en el ambiente, el movimiento del manipulador cumple con condiciones de
repetitividad bastante buenas. Así pues, los objetivos planteados para este trabajo se
cumplieron satisfactoriamente.
CONTENIDO

1. OBJETIVO GENERAL
2. DETERMINACION DEL PROBLEMA
3. EL MANIPULADOR YASUKAWA MOTOMAN L-3
4. CINEMÁTICA DEL MANIPULADOR
5. EL SERVOMOTOR
6. EL MICROCONTROLADOR PIC16F877A
6.1 ADDRESSABLE UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER
TRANSMITTER (USART)
6.1.1 GENERADOR DE LA TASA DE BAUDIOS DEL USART (BRG)
6.1.2 MODO ASINCRONO DEL USART
6.1.2.1 RECEPTOR ASINCRONO DEL USART
6.2 MPLAB
7. COMUNICACIÓN SERIAL ASINCRONA
7.1 EL ESTANDAR RS-232
7.2 EL MAX232
7.3 COMUNICACIÓN SERIAL DESDE MATLAB®
8. OBTENCION Y PROCESAMIENTO DE IMÁGENES DESDE MATLAB®
8.1 ADQUISICION DE LA IMAGEN DESDE MATLAB®
8.2 PROCESAMIENTO DE LA IMAGEN
8.3 CALCULO DE LOS MOMENTOS INVARIANTES
9. IMPLEMENTACION DE INTERFAZ DE USUARIO
10. CONCLUSIONES

BIBLIOGRAFIA
INDICE DE FIGURAS

1. Esquema del manipulador tipo MOTOMAN 4


2. Modelo a usar del manipulador MOTOMAN 7
3. Señal rectangular genérica para controlar un servomotor 8
4. Servomotor empleado en el modelo del MOTOMAN 9
5. Disposición de pines en el microcontrolador PIC16F877A 10
6. Registro de control y estatus de transmisión 11
7. Registro de control y estatus de recepción 12
8. Diagrama de bloques del receptor asíncrono del USART 16
9. Entorno de trabajo del MPLAB 17
10. Formato de trama generalizado para un dato en comunicación serial
asíncrona 21
11. Ejemplo de la transmisión del dato binario 10011010 21
12. Diagrama de pines del MAX232, vista superior 22
13. Conexión del PC y el microcontrolador por medio del MAX232 23
14. El conector DB9 23
15. Circuito de recepción de datos y control de servomotores 24
16. Previsualización de la vista mediante la cámara 27
17. Obtención de la imagen 28
18. Monocromatización 28
19. Filtrado de la imagen 28
20. Obtención de las formas en la imagen 29
21. Diseño de interfaz de usuario en MATLAB 31
22. Interfaz de usuario en modo manual 32
23. Interfaz de usuario en modo automático 33
1

MANIPULADOR TIPO MOTOMAN CON RECONOCIMIENTO DE PATRONES EN IMÁGENES


MEDIANTE IMPLEMENTACION DE VISION ARTIFICIAL

1. OBJETIVO GENERAL:

Implementar una aplicación de hardware y software en donde se puedan relacionar los


conocimientos de robótica y procesamiento de imágenes, con el fin de mejorar e
incrementar el análisis y el estudio de la unión de estos dos campos y su aplicación en
distintos escenarios

2. DETERMINACION DEL PROBLEMA

Se planteó en principio una necesidad de controlar el movimiento de un manipulador según


ciertos patrones que puedan presentarse en una imagen. Para la aplicación del proyecto se
redujo el problema a la identificación de números y algunas figuras geométricas. Dentro de la
interfaz de la aplicación se pueden encontrar dos tipos de organización de imágenes:
Ordenamiento y búsqueda. Los dos procesos emplean un algoritmo de comparación externo
también programado en MATLAB®

El diseño del robot fue planteado teniendo en cuenta la necesidad de tener una combinación
de tener alcances precisos y a la vez extensos dentro de cierto radio de trabajo. Algunos
diseños de manipuladores como el SCORBOT o el T3 no cumplen estos requisitos dentro de los
primeros tres grados de libertad. El STANFORD hubiera podido tenerse en cuenta, pero el
MOTOMAN, además de cumplir con este requisito, brinda la libertad de tener más de una
forma de análisis cinemático, de lo cual se dará explicación más adelante

En cuanto al material de construcción, se decidió usar el acrílico, ya que dentro de muchas de


las ventajas que ofrece este material, las más relevantes a la hora de su selección fueron su
densidad, su apariencia y la facilidad para obtener muchos tipos de formas que el usuario
requiera para algún fin específico. La facilidad de manejo de este material está presente tanto
en la elaboración de las piezas como en la modificación de algunos parámetros y en el
ensamble de las mismas
2

En un principio se pensó que sería necesario el uso de un dispositivo de adquisición de


imágenes de una gama demasiado alta, haciendo referencia a la gama como la calidad de la
imagen en tamaño. Una resolución de 320 x 240 pixeles fue suficiente para el trabajo con la
adquisición de imágenes desde MATLAB®, ya que el dispositivo no necesita de mucha distancia
para abarcar una imagen que se encuentre alrededor de 4 x 6 cm. Surgió el requerimiento de
que la conexión entre el dispositivo de adquisición y el computador sea por puerto USB debido
a la facilidad de acceso desde MATLAB®; este requerimiento fue fácil de satisfacer, ya que en la
actualidad muchas de las cámaras que se encuentran en el mercado son de conexión tipo USB

Debido a que el tamaño del manipulador y su peso, según el diseño, no iban a tener una
magnitud muy grande, para su movimiento se eligió implementar un tipo de servomotores de
gama baja. Las características de los servomotores empleados en la construcción del prototipo
son explicadas más adelante

Para completar el objetivo del proyecto fue necesario pensar también en el ambiente de
trabajo. Debido a que en el diseño propuesto no se implementaron la totalidad de los grados
de libertad según el diseño original (3 de posición y 3 de orientación) sino solo los grados de
libertad correspondientes a la posición fueron tomadas dos decisiones. La primera: Diseñar un
contrapeso en la parte final del brazo del manipulador para hacer juego con la cámara; esto
permitiría a la cámara tener una posición siempre horizontal con respecto a su plano de apoyo,
es decir, la cámara siempre estaría viendo hacia el frente. En la práctica se encontró que a
pesar de que el contrapeso trabajaba bien, no fue necesaria su implementación final debido a
que el sesgado de las imágenes durante su adquisición en posiciones un poco extremas no
afectaba en gran medida. Por lo anterior, la segunda decisión fue diseñar un ambiente de
trabajo de forma poligonal, esto con el fin de lograr que el sesgado de la imagen adquirida en
una posición extrema no fuera relevante a la hora de realizar la adquisición de la imagen. El
ambiente de trabajo del manipulador consiste en tres paneles pegados solo por sus extremos
para permitir un doblado leve, y cada panel compuesto a su vez por tres portaobjetivos en
donde van ubicadas las formas que se desean identificar

El desarrollo del proyecto en su totalidad se detalla paso a paso de ahora en adelante

3. EL MANIPULADOR YASUKAWA MOTOMAN L·3

El manipulador YASUKAWA MOTOMAN L-3 es un popular manipulador industrial con 5


articulaciones. A pesar de que el MOTOMAN no es una simple cadena cinemática abierta,
3

puede ser analizado como si lo fuera, el hecho que posea 5 articulaciones y este construido
con un esquema de barras paralelas implica que cada uno de los actuadores moverá dos o más
articulaciones, además el despeje de la cinemática inversa, podrá hacerse en más de un
camino cinemático, más adelante se mostrara el cálculo de la cinemática inversa empleada
para este proyecto, un manipulador tipo MOTOMAN es empleado para las labores de
movimiento y posicionamiento de la cámara, cabe aclarar que el modelamiento es basado en
el MOTOMAN L-3, pero de ninguna manera es el mismo manipulador.

4. CINEMÁTICA DEL MANIPULADOR

A pesar de que el manipulador tipo MOTOMAN es una combinación de arquitectura serial y


paralela, puede calcularse su movimiento como si fuese de arquitectura serial. Por esta misma
razón existen dos caminos para el cálculo de la cinemática del manipulador. Para un mayor
análisis se empleará la forma más extensa, de esta manera se conocerá la forma reducida de
realizar este cálculo

Cinemática directa: El movimiento de un manipulador está basado en matrices de


trasformación de coordenadas. Cada elemento según su ubicación posee su propia matriz de
transformación y para llegar al elemento final se realiza una multiplicación de todas las
matrices de transformación que se encuentren en el elemento a analizar
4

Figura 1. Esquema del manipulador tipo MOTOMAN

Para el cálculo de la cinemática inversa se utilizo la metodología Denavit – Hartenberg (DH)


con la simbología de Craig. Según esto, la tabla DH del manipulador es la siguiente

Elemento ai-1(mm) i-1(º) di(mm) i(º)


d1 0 0 170 [1]
d3 0 90 0 [2]+180-[4]
d4 150 0 0 [4]
d5 10 0 0 180-[4]
FINAL 340 0 0 0

Tabla 1. Tabla DH del manipulador diseñado

La matriz de transformación para cada elemento siendo sus parámetros los anteriores
mostrados en la tabla sería la siguiente:
5

cos() -sen() 0 a
cos()*sen() cos()*cos() -sen() -sen()*d
sen()*sen() sen()*cos() cos() cos()*d
0 0 0 1
Tabla 2. Matriz de transformación

La matriz en fondo azul corresponde a la matriz de rotación. El vector de fondo verde


corresponde al vector de posición. De esta forma, como entrada teniendo un vector de 3
ángulos, obtenemos como salida la posición final del manipulador. Estos valores son calculados
mediante la función cinemDirMoto implementada en MATLAB®

X=cinemDirMoto(theta);

Cinemática inversa: Para simplificar el problema, en el cálculo se han reducido las coordenadas
x y y a una sola coordenada r de la siguiente forma:

De esta forma, se obtiene que:

Y finalmente se obtiene:

Para el cálculo correcto del arco tangente, se recomienda usar en MATLAB® la función atan2
de la siguiente forma:

theta=atan2(y,x);

x y y no necesariamente deben estar normalizados, pero deben ser reales y consistentes, es


decir, deben tener la misma unidad de medida

Según el análisis extenso con ángulos en radianes se tiene que:


6

Reemplazando

Mediante el comando solve de MATLAB®, pueden resolverse las ecuaciones de forma


inmediata. La forma propuesta de plantear las ecuaciones es la siguiente:

syms d1 d3 d4 d5 t2 t4 r z

[t2 t4]=solve('r=d3*cos(t2-t4+pi)+d4*cos(t2)+d5*cos(t4-
t2)','z=d1+d3*sin(t2-t4+pi)+d4*sin(t2)-d5*sin(t4-t2)','t2','t4');

Se obtienen así dos soluciones para cada ángulo en este caso. Cabe aclarar que las soluciones
deben implementarse en el mismo orden. El cálculo de la cinemática inversa para el
manipulador es realizado en el programa cinemInvMoto, implementado en MATLAB®

theta=cinemInvMoto(X);
7

Figura 2. Modelo a usar del manipulador MOTOMAN

5. EL SERVOMOTOR

Un servomotor es un motor que tiene un tipo de control interno, generalmente PID


(Proporcional, Integral, Derivativo) para controlar su posición, su funcionamiento generalizado
se describe a continuación:

Un servomotor tiene algunos circuitos de control por medio de los cuales puede procesar una
onda de entrada y dependiendo de ciertos parámetros como periodo y tiempo de la señal en
alto él mantiene una posición angular, el eje del servomotor normalmente es capaz de girar
unos 180°, aunque existen algunos que pueden girar cerca de los 210°, la cantidad de voltaje
que se le aplica la motor es proporcional a la distancia que el eje debe recorrer (ángulo
barrido), esto afecta la velocidad con la cual el servomotor responde dependiendo de la
diferencia entre la posición actual del motor y la deseada, si el ángulo a recorrer es pequeño,
se moverá más lentamente, aunque para la mayora de aplicaciones este cambio en la
velocidad puede despreciarse.
8

El funcionamiento practico del servomotor es muy sencillo, el servo viene con tres cables,
positivo, tierra y señal de referencia, normalmente son alimentados entre 4 y 6 voltios, y el
torque promedio es de 3.3 kg cm, para controlar el servo se le indica cual ángulo debe
moverse, medido desde cero, por medio de una onda rectangular como la que se muestra en
la figura 3

Figura 3. Señal rectangular genérica para controlar un servomotor

El tiempo en el cual la onda permanece en encendido (un 1 lógico) es el que controla el ángulo
del eje del servomotor, se comporta de manera lineal, siendo un mínimo típico para
servomotores un tiempo en 1 de 1.5 ms el requerido para un ángulo de 0° y 2.2 ms el tiempo
que referencia 180°, aunque esto puede variar dependiendo de las especificaciones mismas
del servo, el tiempo en apagado (cero lógico) no es tan crítico, solo debe cumplir con dos
condiciones, la primera que sea mayor al tiempo requerido por el motor para referenciar 180°,
la segunda que no sea excesivamente largo, para que el servomotor no piense que ya no le
llega señal de control, los tiempo estándar para el periodo de la onda suelen oscilar entre 10
ms a 30 ms.

Para el movimiento de la estructura del robot tipo MOTOMAN, se seleccionaron servomotores


marca Bluebird, la identificación de dichos motores muestra que el tiempo que referencia 0°
es aproximadamente 0.2 ms, y que el tiempo que referencia 180 grados es aproximadamente
2 ms, el torque especificado para esta clase de servos es de 4.4 kg·cm a un voltaje de 6 voltios.
Como detalle importante, la conexión de este servo requiere que las tierras sean comunes, es
decir, el micro controlador o la señal del computador con la cual se controla el servo debe
tener la tierra acoplada con la tierra del servomotor, además debe conectarse en el orden
correcto ya que una polarización inversa funde el servo. El servomotor utilizado se muestra en
la figura 4
9

Figura 4. Servomotor empleado en el modelo del MOTOMAN

6. EL MICROCONTROLADOR PIC16F877A

El PIC16F877A es un microcontrolador de la marca Microchip que cuenta con características de


rendimiento adecuadas para el control de los servomotores, posee 2 módulos de PWM
(modulación por ancho de pulso) los cuales son útiles para controlar el servomotor, además de
contar con un modulo de comunicación serial asincrónica USART, con el cual se pueden
transmitir y recibir datos desde el computador o desde otro microcontrolador que cuente con
este mismo modulo, el microcontrolador fue seleccionado por sus características de
rendimiento y repetitividad, además de que es fácilmente programable y de amplio uso a nivel
comercial.

El empaquetado del 877a es de 40 pines, cuenta con 4 puertos de salida, los módulos antes
mencionados y muchas más funcionalidades (para mayor información dirigirse a la hoja técnica
de los microcontroladores PIC16F877A, proporcionado en la página de Microchip®, o adjunto
en el CD de esta tesis), la figura 5 muestra la distribución de pines del PIC16F877A
10

Figura 5. Disposición de los pines en el microcontrolador PIC16F877A

Explicaremos de forma breve cómo funcionan los módulos empleados para el programa de
control de los servomotores del PIC16F877A, además de una corta explicación acerca del
código empleado.

6.1. Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART)

Este es uno de los dos módulos de entrada salida con los que cuenta el PIC16F877A, por medio
de este puede realizarse la comunicación serial asincrónica entre un PC y un microcontrolador,
o entre el microcontrolador y cualquier dispositivo que soporte esta característica, el USART
puede ser configurado como asíncrono (full dúplex) o como síncrono (half duplex), en esta
última configuración puede ser colocado como dispositivo maestro o esclavo, para nuestra
aplicación es seleccionado como asincrónico.

El bit de configuración SPEN (RCSTA <7>) y los bits TRISC<7:6> deben ser colocados en uno con
el fin de configurar los pines RC6/TX/CK y RC7/RX/DT como transmisor y receptor de la
comunicación serial respectivamente.
11

A continuación se explica el funcionamiento de los registros asociados a este modulo:

registro TXSTA: TRANSMIT STATUS AND CONTROL REGISTER (DIRECCION 98h)

Figura 6. Registro de control y estatus de transmisión

bit 7 CSRC:bit de selección de la fuente de reloj

Modo Asíncrono:

No importa

Modo Síncrono:

1 = Modo Maestro (pulso de reloj generado internamente en el


microcontrolador)

0 = Modo Esclavo (pulso de reloj generado en una fuente externa)

bit 6 TX9: Bit que habilita la transmisión de 9 bits

1 =Selecciona la transmisión de 9 bits

0 = Selecciona la transmisión de 8 bits

bit 5 TXEN: Bit que habilita la transmision

1 = Transmisión habilitada

0 = Transmisión deshabilitada

bit 4 SYNC: Modo de selección del USART

1 = Modo Síncrono

0 = Modo Asíncrono

bit 3 No implementado: Simplemente se lee como ‘0’


12

bit 2 BRGH: Bit de selección de velocidad de transmisión

Modo Asíncrono:

1 = Alta velocidad

0 = Baja Velocidad

Modo Síncrono:

No se usa en este modo.

bit 1 TRMT: Bit de cambio de estatus de transmisión

1 = TSR esta vacio

0 = TSR está lleno

bit 0 TX9D: 9º bit de transmisión de datos, puede ser usado como el bit de paridad

RCSTA: RECEIVE STATUS AND CONTROL REGISTER (DIRECCION 18h)

Figura 7. Registro de control y estatus de recepción

bit 7 SPEN: Bit de activación del Puerto serial

1 = Puerto serial Activado

0 = Puerto serial Desactivado

bit 6 RX9: Bit de activación del 9o bit de recepción

1 = Selecciona recepción de 9 bits

0 = Selecciona recepción de 8 bits


13

bit 5 SREN: bit de selección de recepción única

Modo Asíncrono:

No importa.

Modo Síncrono-Maestro :

1 = Activa recepción única

0 = Desactiva recepción única

Este bit es limpiado cuando la recepción termina.

Modo Síncrono-Esclavo:

No Importa.

bit 4 CREN:Bit de activación de recepción continua

Modo Asíncrono:

1 = Habilita recepción continua

0 = Deshabilita recepción continua

Modo Síncrono:

1 = Habilita la recepción continua hasta que el bit CREN es limpiado (CREN


sobrescribe SREN)

0 = Deshabilita la recepción continua

bit 3 ADDEN: Bit de activación de detección de dirección

Asynchronous mode 9-bit (RX9 = 1):

1 = Habilita la detección de dirección, habilita la interrupción y la carga del


buffer de recepción cuando RSR<8> está en uno

0 = Deshabilita la detección de dirección, todos los bits son recibidos y el 9º bit


puede ser utilizado como bit de paridad

bit 2 FERR: Bit de error de trama


14

1 = Error de trama (Puede ser actualizado leyendo el registro RCREG y


recibiendo el siguiente byte valido)

0 =No error de trama

bit 1 OERR: Bit de error de sobrescritura

1 = Error de sobrescritura (Puede ser limpiado limpiando el bit CREN)

0 = No error de sobrescritura

bit 0 RX9D: novena bit de recepción de datos (puede ser el bit de paridad pero debe ser
calculado por el usuario)

6.1.1. Generador de la tasa de baudios del USART (BRG)

El BRG es soportado en ambos modos Síncrono y asíncrono, por el microcontrolador


PIC16F877A. Es un generador de tasa de baudios dedicado de 8 bits. El registro SPBRG controla
en periodo de un temporizador de 8 bits de ejecución libre. En modo Asíncrono, el bit BRGH
(TXSTA<2>) también controla los baudios. En Modo Síncrono es simplemente ignorado, la
siguiente tabla la fórmula del cálculo de la tasa de baudios para diferentes modos del USART,
los cuales solo aplican para modo maestro en caso de ser síncrona la transmisión. Dada la tasa
de baudios deseada y la frecuencia del oscilador, el valor entero más cercano para el registro
SPBRG puede ser calculado usando la formula en la tabla 3. De esto el error también puede ser
determinado. Puede ser útil usar la tasa de baudios alta (BRGH = 1) para relojes lentos. Esto es
porque la ecuación FOSC/(16 (X + 1)) puede reducir el error en algunos casos.

Tabla 3. Fórmula del radio de baudios

Con X = el valor en SPBRG (0 a 255)

Escribir un nuevo valor en el registro SPBRG causa que el timer BRG sea reseteado, esto
asegura que el BRG no esperara por una sobre flujo antes de enviar el siguiente dato.
15

6.1.2. Modo Asíncrono del USART

Este fue el modo empleado para la comunicación del microcontrolador con MATLAB® en este
modo el USART usa el formato estándar de no retorno a cero (NRZ) (un bit inicio, 8 o 9 bits de
datos y uno de parada). El formato mas común de datos es de 8 bit. El transmisor y receptor
funcionan independientemente pero usan el mismo formato de datos y la misma tasa de
baudios. El generador de baudios produce un pulso, cualquiera x16 o x64 de la tasa de
muestreo,

Dependiendo del bit BRGH (TXSTA<2>). La paridad no es soportada por hardware pero puede
ser implementada por software. El modo asíncrono es parado durante periodos de sueño.

El modo asíncrono es seleccionado limpiando el bit SYNC (TXSTA<4>).

El modulo USART asíncrono consta de los siguientes elementos importantes:

• Generador de tasa de baudios

• Circuito de Muestreo

• Transmisor Asíncrono

• Receptor Asíncrono

6.1.2.1. Receptor Asíncrono del USART

El diagrama de bloques que muestra el funcionamiento del receptor asíncrono del USART es
mostrado en la figura 8
16

Figura 8. Diagrama de bloques del receptor asíncrono del USART

Los datos son recibidos en el pin RC7/RX/DT y conducidos al bloque de recuperación de datos.
El bloque de recuperación de datos es un conmutador de alta velocidad que opera
normalmente a 16 veces más velocidad que la tasa de transmisión de datos, sin embargo la
recepción serial asíncrona opera a la tasa de transmisión o la frecuencia FOSC.

Una vez el modo asíncrono es seleccionado, la recepción es habilitada colocando en uno el bit
CREN (RCSTA<4>).

Los datos recibidos son almacenados en el registro de recepción serial (RSR). Después de
detector el bit de parada, el dato recibido en el RSR es transferido al registro RCREG si esta
vacio. Si la transferencia es satisfactoria, la bandera RCIF (PIR1<5>) es colocada en 1. La
interrupción puede ser habilitada o deshabilitada por colocar en 1 o 0 respectivamente el bit
RCIE (PIE1<5>). El bit RCIF es un bit de solo lectura que es limpiado por hardware y es limpiado
cuando el registro RCREG ha sido leído y se encuentra vacio.

El bit de error de trama FERR (RCSTA<2>) es colocado en 1 si el bit de parada es leído como 0.
17

6.2. MPLAB

La programación del PIC16F877A fue elaborada en lenguaje c y se empleo el programa MPLAB,


un ambiente de desarrollo para microcontroladores de Microchip®, la versión empleada fue la
8.01.0.0 y se implemento la funcionalidad HI-TECH para poder usar el compilador de C/C++, el
entorno de trabajo es mostrado en la figura 9

Figura 9. Entorno de trabajo del MPLAB

En el microcontrolador se programó la generación de 3 ondas rectangulares, todas con un


periodo de 10 ms, el tiempo en el cual cada una de las ondas permanece en un 1 lógico es
controlado por un dato de recepción serial enviado desde el computador, dicho numero indica
cuanto tiempo debe permanecer la señal en uno, los datos son recibidos de manera serial, así,
el primer dato, es empleado para controlar el PWM del primer motor, el segundo dato,
controla el segundo y el tercer dato controla el tercer motor, el programa asume que el cuarto
dato se refiere de nuevo al primer motor, lo que hace que el código sea cíclico, a continuación
se muestra el código empleado en el microcontrolador PIC16F887A.

#include <pic.h>

bit flag_recepcion;

int motor, cont_t, cont_m1, cont_m2, cont_m3, aux1, registroct;


18

int temp_1, temp_2, temp_3;

float t_en_uno;

void main(){

TRISA = 0b0000000;

TRISB = 0b00000000; //Configuracion de puerto B COMO SALIDA

TRISC = 0b10000000; //Configuracion de puerto C RC7(pin rx)


entrada,RC1,RC2 (pwm) como salidas

SPBRG = 129; //configura baud rate a 2400 para un xtal de 20MHz

BRGH=0; // SELECCION DE BAJA VELOCIDAD

SYNC=0; // seleccion de modo asíncrono

SPEN=1; // habilitacion del puerto serial

RX9=0; // OCHO BITS DE DATOS

CREN=1; // TRANSMISION CONTINUA

T0CS=0;//Cuenta ciclos internos

PSA=0; //Prescala TMR0

PS2=0;//PRESCALA 1:2

PS1=0;

PS0=0;

cont_t=0; //contar 10 ms

motor=1;

//RCIE=1; // HABILITA INTERRUPCION POR RECEPCION SERIAL ASINCRONICA

TMR0IE=1; //HABILITA LAS INTERRUPCIONES POR TMR0

GIE=1; // HABILITACION GLOBAL DE LAS INTERRUPCIONES

do{

if(RCIF==1){

TMR0=0;

// TMR0IE=1;
19

aux1=RCREG;

// PORTB=aux1;

// motor++;

if (motor==1){

cont_m1=aux1;

}//end if motor1

if (motor==2){

cont_m2=aux1;

}//end if motor2

if (motor==3){

motor=0;

cont_m3=aux1;

}//end if motor3

}//end flag_reception

}while(1);//end Dowhile

}//end main

void interrupt ISR (void){

TMR0=235;//16 veces mas rapido, 256*15/16, le sumo 5 porque

//es lo que se gasta en escribir tmr0, deberia ser 192

// pero como se gasta 11 ciclos en escribir entonces

//corro el tmr0 en 5 para que se desnorbe 10 ciclos antes

// asi entra en la interrupción cada 129 ciclos

if (TMR0IF==1){

TMR0IF=0;

cont_t++;

if (cont_t==1000){ // period de 10ms

cont_t=0; //reinicializo todo

RB7=1;
20

RB6=1;

RB5=1;

}//end if

if (cont_m1==cont_t){

RB7=0;

}//end if m1

if (cont_m2==cont_t){

RB6=0;

}//end if m2

if (cont_m3==cont_t){

RB5=0;

}//end if m3

}//end if TMR0IF

}//end interr

Tabla 4. Código empleado para programar el PIC16F877A

7. COMUNICACIÓN SERIAL ASÍNCRONA

La comunicación serial asíncrona es una manera de conectar y comunicar dos dispositivos


entre si, en ellas los bits de datos se transmiten "en serie" (uno detrás de otro) y cada
dispositivo que se encuentra involucrado en la comunicación cuenta con su propio reloj, es
absolutamente necesario especificar que la transmisión y la recepción de datos debes ser
realizadas a la misma velocidad, esto se logra empleando el mismo “Baudrate” en ambos
dispositivos.

Los datos que son transmitidos en esta clase de comunicación tienen la siguiente forma de
trama de datos:
21

Figura 10. Formato de trama generalizado para un dato en comunicación serial asíncrona

En este tipo de comunicación la trama comienza con un bit de inicio, luego son transmitidos
los bits de datos, enviando primero el bit más significativo y finalmente son transmitidos los
bits de parada.

El número de bits de datos y de bits de parada son parámetros configurables, así como el
criterio de paridad par o impar para la detección de errores. Sin embargo, las comunicaciones
seriales asíncronas emplean un bit de inicio, 8 bits de datos y un bit de parada sin paridad.

La transmisión de datos típica en una comunicación serial asincrónica es mostrada en la figura


11

Figura 11. Ejemplo de la transmisión del dato binario 10011010

7.1. El estándar RS 232

El puerto serie RS-232C es una forma comúnmente usada para realizar transmisiones de datos
entre ordenadores. El RS-232C es un estándar que constituye la tercera revisión de la antigua
norma RS-232, propuesta por la EIA (Asociación de Industrias Electrónicas), realizándose
posteriormente un versión internacional por el CCITT, conocida como V.24. Las diferencias
entre ambas son mínimas, por lo que a veces se habla indistintamente de V.24 y de RS-232C
(incluso sin el sufijo "C"), refiriéndose siempre al mismo estándar.
22

El RS-232C consiste en un conector tipo DB-25 de 25 pines, aunque es normal encontrar la


versión de 9 pines DB-9, mas barato e incluso más extendido para cierto tipo de periféricos. En
cualquier caso, los PCs no suelen emplear más de 9 pines en el conector DB-25. Las señales con
las que trabaja este puerto serie son digitales, de +12V (0 lógico) y -12V (1 lógico)

7.2 El MAX232

El max232 es un circuito integrado que incluye un generador de voltaje capacitivo para


alimentar circuitos TTL y convertir los niveles de voltaje del IEA 232 a voltajes TTL/CMOS
(aprox. 5 voltios) y viceversa. El diagrama de pines es mostrado en la figura 12

Figura 12. Diagrama de pines del MAX232, vista superior.

Para conectar un PC a un microcontrolador por el puerto serial se utilizan las señales Tx


(transmisión), Rx (Recepción) y GND (Tierra). El computador utiliza la norma RS232 descrita
anteriormente, por lo que los niveles de tensión de los pines están comprendidos entre +15 y -
15 voltios; debido a que los microcontroladores normalmente trabajan con niveles TTL (0-5v)
es necesario crear un circuito de adaptación de niveles de voltaje, con el propósito de no dañar
el microcontrolador y del correcto funcionamiento del mismo al momento de hacer la
comunicación, el circuito empleado para la comunicación serial asíncrona entre en
computador y el PIC16F877A se muestra en la figura 13, los condensadores empleados fueron
electrolíticos de 22 micro faradios.
23

Figura 13. Conexión del PC y el microcontrolador por medio del MAX232

Los pines empleados por el db9 del computador son mostrados en la figura 14

Figura 14. El conector DB9

7.3 Comunicación Serial desde MATLAB®

MATLAB® tiene la facilidad de realizar la comunicación serial con otro dispositivo mediante el
puerto serial. La inicialización del elemento comunicador se realiza de la siguiente forma:

s=serial('COM1','BaudRate',2400,'DataBits',8);

COM1 debe variar según la disponibilidad de los puertos. De ser necesario debe cambiarse a
COM2 u otro según la disponibilidad

Para el manejo de los motores, se ha creado un procedimiento en MATLAB® llamado


motores, el cual consiste en traducir un vector de ángulos a otro vector con los parámetros
24

requeridos para cada servomotor. Estos parámetros son enviados al microcontrolador e


interpretados según el programa establecido en el mismo

El circuito con el que se logra la recepción de los datos enviados por puerto serial y el control
de los servomotores es el que se muestra a continuación

Figura 15. Circuito de recepción de datos y control de servomotores


25

8. OBTENCION Y PROCESAMIENTO DE IMÁGENES DESDE MATLAB®

8.1. Adquisición de la Imagen mediante MATLAB®

En las últimas versiones de MATLAB® se encuentra incorporado un toolbox de adquisición de


imágenes. Este genera un ambiente nuevo en una ventana externa. Debido a que se diseño
una aplicación externa para controlar la totalidad del sistema no se emplea el toolbox de
adquisición de imágenes de MATLAB® sino una serie de comandos que facilitan la captura de
imágenes desde la ventana de comandos o desde un archivo de extensión .m de los cuales
algunos son los siguientes:

imaqhwinfo: Este comando nos indica el hardware disponible al cual MATLAB® tiene acceso.
Según los adaptadores que éste pueda emplear para ciertos dispositivos serán mostrados en la
ventana de comando

winvideo: Crea un objeto como entrada de video

preview: Nos permite previsualizar la entrada de video que esté conectada y que haya sido
anclada a MATLAB®

getsnapshot: Permite capturar una imagen desde el dispositivo externo

Un ejemplo de aplicación de estos comandos es el siguiente:

>> imaqhwinfo

ans =

InstalledAdaptors: {'coreco' 'winvideo'}

MATLABVersion: '7.6 (R2008a)'

ToolboxName: 'Image Acquisition Toolbox'

ToolboxVersion: '3.1 (R2008a)'

>> imaqhwinfo('winvideo')
26

ans =

AdaptorDllName: [1x88 char]

AdaptorDllVersion: '3.1 (R2008a)'

AdaptorName: 'winvideo'

DeviceIDs: {[1]}

DeviceInfo: [1x1 struct]

>> camara=videoinput('winvideo')

Summary of Video Input Object Using 'USB PC Camera'.

Acquisition Source(s): input1 is available.

Acquisition Parameters: 'input1' is the current selected source.

10 frames per trigger using the selected


source.

'RGB24_320x240' video data to be logged


upon START.

Grabbing first of every 1 frame(s).

Log data to 'memory' on trigger.

Trigger Parameters: 1 'immediate' trigger(s) on START.


27

Status: Waiting for START.

0 frames acquired since starting.

0 frames available for GETDATA.

>> preview(camara)

Con lo cual obtenemos lo siguiente:

Figura 16. Previsualización de la vista mediante la cámara

8.2. Procesamiento de la imagen

Una vez adquirida la imagen, se procede a su procesamiento. MATLAB® tiene incorporadas


muchas funciones que permiten procesar una imagen según los requerimientos que se quieran
obtener de esta. Entre estas funciones, bwlabel es una función que consiste en separar
formas cerradas que se encuentren en una imagen binaria
28

Figura 17. Obtención de la imagen

Figura 18. Monocromatización

Figura 19. Filtrado de la imagen


29

Figura 20. Obtención de las formas en la imagen

La obtención de estas imágenes separadas se realiza mediante la función findfigs,


implementada en MATLAB®. Se obtiene como resultado una matriz tridimensional con una
imagen diferente en cada capa

imágenes=findfigs(imagen);

h: umbral de límite para separar las imágenes

imagen: Imagen a color en formato RGB

8.3. Calculo de los momentos invariantes

Antes de entrar en detalle, se hará una breve descripción sobre la teoría del cálculo de
momentos en el ambiente discreto

Momentos centrales: Se definen por la sumatoria:

Donde p y q son índices que caracterizan una función como única, y las letras y son el
centroide de la función discreta; en este caso, una imagen

Momentos normalizados: Se definen como un cociente entre un momento central y el


momento central de orden 0,0
30

El objetivo del momento normalizado es realizar un ajuste de escala al momento central. De


esta forma, el momento calculado es invariante a la escala

Momentos invariantes: En el cálculo de los momentos invariantes se tienen en cuenta 6


ecuaciones, las cuales son las siguientes:

Para obtener invariancia ante la rotación, debe cambiarse  por . Los momentos invariantes
de una imagen se hallan mediante el comando mominvars

momento=mominvars(imagen);

Después de emplear el comando findfigs, con el resultado de esta función se puede utilizar
el comando mominvars

imágenes=findfigs(imagen);

momentos=mominvars(imágenes);

El resultado es una matriz con los momentos invariantes de cada imagen en cada columna

La función mominvars implementada no maneja la totalidad de los parámetros. Debido a las


variaciones de uno de estos y además por simplicidad del problema, la función ha sido limitada
a tan solo 5 parámetros, los cuales han dado unos resultados muy buenos en la práctica
31

9. IMPLEMENTACION EN INTERFAZ DE USUARIO

La interfaz de usuario fue realizada con el fin de mostrar una aplicación en donde se vean
implícitos los conocimientos sobre Robótica y procesamiento de imágenes. La interfaz posee
dos modos de uso: Manual y automático. En todos los usos es posible configurar las
características de la cámara así como el umbral de filtro de formas de la imagen

Figura 21. Diseño de interfaz de usuario en MATLAB®

Al ejecutar la aplicación, se presentan los modos manual y automático de la siguiente forma:


32

Figura 22. Interfaz de usuario en modo manual

En el modo manual se encuentra implementada la cinemática directa e inversa del


manipulador. Se ha implementado la posibilidad de variar los ángulos del manipulador
independientemente o la posibilidad de variar las coordenadas de manera pausada o continua.
En la segunda forma, se ha implementado la posibilidad de leer un error de solución imaginaria
para la cinemática inversa, de esta forma no se corre el riesgo de que el manipulador llegue a
una posición incorrecta. Además, también se ha implementado una condición de parada
cuando la solución de la cinemática inversa sean ángulos negativos

Tanto en el panel de los motores como en el de los ejes se calcula la cinemática directa e
inversa con el fin de mantener actualizados los paneles de coordenadas

Las pruebas realizadas en el modo manual dieron como resultado que el manipulador obedece
a los parámetros establecidos por la cinemática directa y la cinemática inversa, ambas
implementadas en el programa. El manipulador corresponde de forma correcta a los cambios
dados tanto en el panel de los motores como en el panel de las coordenadas y esto lo realiza
de forma suave. Dentro del CD al que corresponde este documento se encuentra un video en
33

donde se observa la variación de estos parámetros y su correspondencia con el movimiento


del manipulador

Figura 23. Interfaz de usuario en modo automático

El modo automático está compuesto por dos módulos: Búsqueda y ordenamiento. En el


modulo de búsqueda está implementado un algoritmo que consiste en comparar las
posiciones recorridas con el elemento que se desea encontrar. Si el elemento es encontrado, la
búsqueda es detenida y se envía un mensaje, el cual es mostrado en la interfaz. En el modulo
de ordenamiento se ha implementado un algoritmo que consiste en guardar los momentos de
cada imagen mientras el manipulador recorre todas las posiciones. Los momentos calculados
son asociados a ciertas posiciones según se encuentren en el tablero de pruebas. Una vez
realice todas las capturas, son ordenadas las posiciones de forma ascendente según los objetos
que se hayan encontrado y el manipulador recorre las posiciones pero no de forma secuencial
sino como se haya establecido el orden de los elementos

Tanto en el modo manual como automático se ha implementado un algoritmo de


interpolación entre la posición inicial y al posición final, ya que la respuesta de los
servomotores al cambio de PWM instantáneo es de la misma forma
34

Además, en la interfaz de usuario se ha implementado una función de captura de imagen sin


importar la posición en la que se encuentre. Esta función esta implementada dentro de la
programación de la interfaz y produce un archivo foto.mat, el cual contiene la variable de la
imagen, los objetos detectados y el cálculo de los momentos de las imágenes obtenidas

Las pruebas realizadas en el modo automático revelaron lo siguiente:

 El manipulador corresponde a un movimiento suave, el cual está implementado en el


programa
 La adquisición de las imágenes de prueba corresponden a una base de datos
preestablecida e implementada en el programa

Se observa que la implementación conjunta del control del movimiento del robot y el
procesamiento de las imágenes, corresponden de manera simultánea en la totalidad del
sistema. Asimismo, también se encuentran en el CD unos videos correspondientes al manejo
del manipulador en modo automático
35

10. CONCLUSIONES

 La técnica de la aplicación de los momentos invariantes resulta útil en el


reconocimiento de patrones dentro de una imagen teniendo en cuenta que es
necesario separar cada objeto encontrado en una imagen antes de su procesamiento
 Para que la técnica de los momentos invariantes resulte aun más exacta se encontró
que es necesario normalizar de alguna forma los resultados obtenidos del cálculo de
estos momentos; esto con el fin de poder realizar una comparación más precisa
 El control de dispositivos externos mediante comunicación serial es eficiente, ya que
responde con tal rapidez que se ha considerado casi instantáneo en la transmisión y
recepción de datos
 La aplicación de la integración de sistemas de movimiento con sistemas de
reconocimiento puede desarrollarse dentro de muchos campos en donde sea
requerido el movimiento automático según los requerimientos que se desprendan de
los patrones de una imagen
36

BIBLIOGRAFIA

 J. CRAIG. INTRODUCTION TO ROBOTICS MECHANICS AND CONTROL. Prentice Hall.


2004
 R. GONZALEZ. DIGITAL IMAGE PROCESSING. Prentice Hall. 2008
 J. NEIRA. DESCRIPTORES DE FORMA (NOTAS DE CLASE). Universidad de Zaragoza. 2007
 THE MATHWORKS, INC. MATLAB® Help. 2008
 MICROCHIP®. PIC16F877A data sheet. 2003