You are on page 1of 29

UNIVERSIDAD CATOLICA DE SANTA MARIA

PROGRAMA PROFESIONAL DE INGENIERIA ELECTRONICA

PROCESAMIENTO DIGITAL DE SEALES


MARCO TEORICO

ROBOT SEGUIDOR DE OBJETOS BASADO EN EL


RECONOCIMIENTO DE FORMAS Y COLORES

NEIRA MENDOZA JOSE RENE


TAPIA CHIRE HUMBERTO ALONSO

AREQUIPA 2015

0
INTRODUCCIN

Las computadoras no "ven" las fotos ni los videos de la misma manera que las
personas. Cuando una persona observa una foto, puede por ejemplo reconocer a su
mejor amigo de pie delante de su casa .

Desde la perspectiva de una computadora, esa misma imagen no es ms que un


montn de datos que se pueden interpretar como formas e informacin acerca de
los valores del color.

Si bien una computadora no reaccionar como las personas cuando ven esa foto, es
posible entrenar a la computadora para que reconozca ciertos patrones de color y
formas. Por ejemplo, se puede entrenar a una computadora para que reconozca los
patrones comunes de formas y colores que componen la imagen digital de un rostro
por ejemplo.

Muchas de los objetos que tenemos en nuestro entorno son de forma geomtrica y
casi todos los objetos tienen un color caracterstico que nos permite a simple vista
diferenciarlos unos de otros , basados en esto es que se puede utilizar por ejemplo
la forma de un objeto y su color para lograr que un robot lo siga , si bien es cierto q
el robot no ve el objeto puede a travs de un algoritmo identificarlo en el conjunto
de datos que le llegan gracias a un sensor como por ejemplo una cmara de video.

Para lograr que el robot identifique un objeto y lo siga se hacen uso de muchos
algoritmos de procesamiento digital de imgenes.

Las aplicaciones de esto en realidad estn limitadas nicamente por la imaginacin.

1
INDICE

- Introduccin pag. 1

- Indice pag. 2

- Primer Captulo: Marco Terico pag. 3

- Reconocimiento De Patrones Para La Identificacion De Figuras Y


Colores pag. 3
- OPENCV pag. 4
- PYTHON pag. 5
- ARDUINO pag. 5

- Segundo Captulo: Diagrama de Bloques del Sistema.pag. 7

- Tercer Captulo: Diseo del Sistemapag. 8

- PREPARACION DE LAS HERRAMIENTAS DE SOFTWARE


NECESARIAS pag. 8
- PROCEDIMIENTO DE ELABORACIN DEL ALGORITMO pag 9

1. Capturar una imagen con una cmara. pag. 10


2. Decidir que objeto y de que color se desea detectar pag 11
3. Convertir la imagen a un formato adecuado para su
procesamiento. .. pag. 12
4. Crear la mscara de un color. pag. 13
5. Eliminar ruido de la mscara. pag. 13
6. Aplicar un desenfoque Gaussiano. pag. 13
7. Aplicar un canny edge a la mscara.. pag. 15
8. Detectar los contornos... pag. 17
9. Discriminar a los objetos por su tamao pag. 17
10. Aproximar cada contorno.. pag. 18
11. Encontrar el centro del objeto y obtener sus coordenadas pag 18
12. Mandar ordenes al robot. pag. 19

- PROGRAMA DE CONTROL DEL ROBOT CON ARDUINO: pag 20

- Cuarto Captulo: Pruebas. pag. 22

- Conclusiones pag. 25

- Bibliografa. pag. 26

- Anexos. pag. 27

2
PRIMER CAPTULO: MARCO TERICO

RECONOCIMIENTO DE PATRONES PARA LA IDENTIFICACION DE


FIGURAS Y COLORES

El reconocimiento de patrones es la ciencia que se ocupa de los procesos


sobre ingeniera, computacin y matemticas relacionados con objetos fsicos o
abstractos, con el propsito de extraer informacin que permita establecer
propiedades de entre conjuntos de dichos objetos.

El reconocimiento de patrones ,tambin llamado lectura de


patrones, identificacin de figuras y reconocimiento de forma, consiste en el
reconocimiento de patrones de seales. Los patrones se obtienen a partir de los
procesos de segmentacin, extraccin de caractersticas y descripcin dnde cada
objeto queda representado por una coleccin de descriptores. El sistema de
reconocimiento debe asignar a cada objeto su categora o clase (conjunto de
entidades que comparten alguna caracterstica que las diferencia del resto). Para
poder reconocer los patrones se siguen los siguientes procesos:

1. Adquisicin de datos
2. Extraccin de caractersticas
3. Toma de decisiones

El punto esencial del reconocimiento de patrones es la clasificacin: se quiere


clasificar una seal dependiendo de sus caractersticas. Seales, caractersticas y
clases pueden ser de cualquiera forma, por ejemplo se puede clasificar imgenes
digitales de letras en las clases A a Z dependiendo de sus pxeles o se puede
clasificar ruidos de cantos de los pjaros en clases de rdenes aviares dependiendo
de las frecuencias.

Nosotros clasificaremos objetos en base a su color y forma geomtrica.

Imagen nro 1 Reconocimiento de patrones

3
OPENCV

OpenCV (Open Source Computer Vision Library) es una


librera de software de cdigo abierto que incluye cientos de
algoritmos de visin por computadora y de machine-
learning.
OpenCV fue construido para proporcionar una
infraestructura comn para aplicaciones de visin por
computador y para acelerar el uso de la percepcin de la
maquina en los productos comerciales.
Una de sus principales virtudes es ser de cdigo abierto lo que permite a cualquiera
utilizar y modificar su cdigo.
La biblioteca cuenta con ms de 2.500 algoritmos optimizados , que incluye un
amplio conjunto de clsico y algoritmos de visin por computador y aprendizaje
automtico con tecnologa de ltima generacin. Estos algoritmos se pueden utilizar
para detectar y reconocer rostros , identificar objetos , clasificar las acciones
humanas en videos, movimientos de cmara , objetos en movimiento, extraer
modelos 3D de objetos , producir nubes de puntos 3D de cmaras estreo , unir
imgenes para producir una alta resolucin de imagen de toda una escena ,
encontrar imgenes similares de una base de datos de imgenes, eliminar los ojos
rojos de las imgenes tomadas con flash, seguir los movimientos de los ojos ,
reconocer el paisaje y establecer marcadores para cubrirs de realidad aumentada
, etc. OpenCV tiene ms de 47 mil personas de usuario la comunidad y la estimacin
del nmero de descargas que superen 7.000.000 . La biblioteca se utiliza
ampliamente en las empresas , grupos de investigacin y por los organismos
gubernamentales .
Cuenta con interfaces de C ++ , C, Python , Java y MATLAB y es compatible con
Windows , Linux , Android y Mac OS .
OpenCV se inclina principalmente hacia las aplicaciones de visin en tiempo real y
se aprovecha de instrucciones MMX y SSE cuando estn disponibles . Se estn
desarrollando de forma activa en este momento interfaces con todas las funciones
CUDA y OpenCL.
OpenCV est escrita de forma nativa en C ++ y tiene una interfaz de plantilla que
funciona a la perfeccin con contenedores STL

4
PYTHON

Python es un lenguaje de programacin orientado a


objetos, interpretado, e interactivo . A menudo se
compara con Lisp, Tcl , Perl , Ruby , C # , Visual Basic,
Visual Fox Pro , Scheme o Java .

Python combina notablemente la potencia con una


sintaxis muy clara. Cuenta con mdulos , clases ,
excepciones , tipos de datos dinmicos de muy alto
nivel , y tipado dinmico .
Hay interfaces a muchas llamadas y bibliotecas del sistema , as como a varios
sistemas de ventanas .
Nuevos mdulos incorporados son fcilmente escritos en C o C ++ (u otros idiomas
, dependiendo de la aplicacin elegida) .
Python tambin se puede utilizar como un lenguaje de extensin para aplicaciones
escritas en otros idiomas que necesitan de scripting o de automatizacin de
interfaces fciles de usar .
Python es un lenguaje de programacin interpretado cuya filosofa hace hincapi en
una sintaxis que favorezca un cdigo legible.
Se trata de un lenguaje de programacin multiparadigma, ya que
soporta orientacin a objetos, programacin imperativa y, en menor
medida, programacin funcional. Es un lenguaje interpretado, usa tipado
dinmico y es multiplataforma.
Es administrado por la Python Software Foundation. Posee una licencia de cdigo
abierto, denominada Python Software Foundation License,1 que es compatible con
la Licencia pblica general de GNU a partir de la versin 2.1.1, e incompatible en
ciertas versiones anteriores.

ARDUINO

Arduino es una plataforma de hardware libre, basada


en una placa con un microcontrolador y un entorno de
desarrollo, diseada para facilitar el uso de la
electrnica en proyectos multidisciplinares.
El hardware consiste en una placa con un
microcontrolador Atmel AVR y puertos
de entrada/salida.4 Los microcontroladores ms
usados son el Atmega168, Atmega328, Atmega1280,
y Atmega8 por su sencillez y bajo coste que permiten
el desarrollo de mltiples diseos. Por otro lado el software consiste en un entorno

5
de desarrollo que implementa el lenguaje de programacin Processing/Wiring y
el cargador de arranque que es ejecutado en la placa.

Arduino se puede utilizar para desarrollar objetos interactivos autnomos o puede


ser conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data.
Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo
integrado libre se puede descargar gratuitamente.
Arduino puede tomar informacin del entorno a travs de sus entradas analgicas y
digitales, puede controlar luces, motores y otros actuadores. El microcontrolador en
la placa Arduino se programa mediante el lenguaje de programacin Arduino
(basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los
proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un
ordenador.
Tambin cuenta con su propio software que se puede descargar de su pgina oficial
que ya incluye los drivers de todas las tarjetas disponibles lo que hace ms fcil la
carga de cdigos desde el computador.

6
SEGUNDO CAPTULO: DIAGRAMA DE BLOQUES DEL SISTEMA

ELIMINACION DE RUIDO
CONVERSION A
MASCARA DE COLOR Y DESENFOQUE
FORMATO HSV
GAUSSIANO

OBTENCION DE LA
IMAGEN

OBTENCION DE LAS APROXIMACION DE


DETECCION DE
COORDENADAS DEL CONTORNO E
CONTORNOS CON FILTRO
CENTRO DEL OBJETO IDENTIFICACION DE
CANNY EDGE
DETECTADO OBJETO

ENVIAR ORDENES A ACTIVACION DE


ROBOT BASADAS EN LAS MOTORES DE ACUERDO
COORDENADAS A LAS ORDENES

Diagrama de bloques Numero 1 Obtencin ,deteccin de objetos y control de robot

7
TERCER CAPTULO: DISEO DEL SISTEMA

En el diseo del sistema se tomaron en cuenta diversos aspectos para elegir las
herramientas adecuadas para lograr los objetivos del proyecto.
Uno de ellos era utilizar software y hardware de cdigo abierto, para ahorrar los
costes y proporcionar una idea replicable cuyas ventajas resultan ms que obvia al
utilizar software libre.
Por lo que decidimos utilizar Python como lenguaje de programacin para el
algoritmo en lugar de C y Matlab , y adems porque OpenCV la librera que
utilizaramos tiene algoritmos tanto para Python como para C por lo que combinan a
la perfeccin.

Otro aspecto fue la idea de ahorrar tiempo y concentrarse en lo ms importante: que


era lograr el reconocimiento de los objetos y no invertir mucho tiempo en el control
del robot ya que nuestro trabajo principal era elaborar el algoritmo de reconocimiento
de patrones para la identificacin de objetos ,asi que se decidi utilizar una gran
herramienta cuya popularidad est bien justificada debido a su facilidad de
desarrollo: Arduino, haciendo uso de Arduino y su placa de desarrollo se pudo reducir
considerablemente el tiempo de diseo del robot .y su programacin.

PREPARACION DE LAS HERRAMIENTAS DE SOFTWARE NECESARIAS

Se utilizo Python 2.7.4


OpenCV 2.4.10
Arduino IDE 1.6.4
Windows 8 de 32bits
Luego de instalar los paquetes necesario para programar y ejecutar cdigo escrito
en Python se procedi a Instalar la librera OpenCV asi como otros libreras de
Python; como Numpy que es una librera para computacin cientfica de Python y
que nos servira para poder usar vectores y operaciones matemticas complejas , y
la librera Pyserial que nos permitira hacer la comunicacin entre nuestra PC y la
placa Arduino a travs del puerto USB.
Adems se instal el IDE de Arduino para la programacin del robot.

8
PROCEDIMIENTO DE ELABORACIN DEL ALGORITMO
Pasos necesarios para el reconocimiento ,deteccin de figuras y control del robot:

1. Capturar una imagen con una cmara.


2. Decidir que objeto y de que color se desea detectar
3. Convertir la imagen a un formato adecuado para su procesamiento.
4. Crear la mscara de un color
5. Eliminar ruido de la mscara
6. Aplicar un desenfoque Gaussiano
7. Aplicar un canny edge a la mscara
8. Detectar los contornos
9. Discriminar a los objetos por su tamao
10. Aproximar cada contorno
11. Encontrar el centro del objeto y obtener sus coordenadas
12. Mandar ordenes al robot

9
PROCESO DE DISEO

1. CAPTURAR IMAGENES CON UNA CMARA.

Como es de suponer necesitamos una cmara de video para obtener imgenes del
entorno para poder procesarlas .Para esta tarea elegimos una cmara de resolucin
media de marca Micronics modelo w304 la cual satisface nuestras necesidades.
Esta cmara se conecta va USB a nuestro computador lo cual facilita la obtencin
de video a una buena calidad .

Imagen nro 2 Cmara Web Micronics

Inicio del algoritmo:

import serial
import time
import cv2
import numpy as np

ser=serial.Serial('COM3',9600,timeout=0)
captura=cv2.VideoCapture(1)

Con esta parte del algoritmo tenemos llamadas las libreras que utilizaremos y se
inici la captura de frames de la cmara de video; el numero 1 indica al programa
que debe utilizar la cmara externa y no la cmara de la laptop.
Adems se inicia el puerto serial COM3 que es donde se conecta nuestro Arduino
a 9600 baudios.

10
2. DECIDIR QUE OBJETO Y DE QUE COLOR SE DESEA DETECTAR

Por medio de una consola se pide al usuario que le diga al robot que figura debe
seguir y de qu color de esta manera el robot sabr que objeto buscar.
En base a estos dos datos se cre una pequea tabla con los valores respectivos
de los colores y del nmero de vrtices de los objetos, en este caso usaremos los
3 colores bsicos (rojo,azul y verde)y dos tipos de figuras cuadrados y tringulos.

print "INICIO DE PROGRAMA"


print "PRESIONA ESCAPE PARA TERMINAR"
print "QUE FIGURA QUIERES SEGUIR??"
tipofigura = raw_input()
print "DE QUE COLOR ES LA FIGURA"
colorfigura = raw_input()

if tipofigura == 'triangulo':
numerodevertices = 3

if tipofigura == 'cuadrado':
numerodevertices = 4

if colorfigura == 'azul':
#colores hsv(azules)
bajos=np.array([67,40,105],dtype=np.uint8)
altos=np.array([129,255,182],dtype=np.uint8)

if colorfigura == 'verde':
#colores hsv(verdes)
bajos = np.array([49,50,50],dtype=np.uint8)
altos = np.array([80, 255,
255],dtype=np.uint8)

if colorfigura == 'rojo':
#colores hsv(verdes)
bajos = np.array([0,20,20], dtype=np.uint8)

11
altos = np.array([20,255,255],
dtype=np.uint8)

Estos valores son cargados en unas variables dependiendo de la eleccion las cuales
sern utilizadas por el algoritmo luego para detectar los colores y las formas.

3. CONVERTIR LA IMAGEN A UN FORMATO ADECUADO PARA SU


PROCESAMIENTO.

Debido a que la deteccin del objeto est basado primero que nada en su color se
utiliz el formato HSV en lugar del RGB ya que es ms fcil analizar las imgenes
y sus colores de esta manera.
El modelo HSV (del ingls Hue, Saturation, Value Matiz, Saturacin, Valor),
tambin llamado HSB (Hue, Saturation, Brightness Matiz, Saturacin, Brillo),
define un modelo de color en trminos de sus componentes.
El modelo HSV fue creado en 1978 por Alvy Ray Smith. Se trata de una
transformacin no lineal del espacio de color RGB, y se puede usar en progresiones
de color.
Se inicia un bucle infinito de tipo while para que cada frame de la cmara sea
analizado y procesado de manera de poder identificar los colores y las formas.
while (1):
#captura imagen
_,imagen=captura.read()
#convertir a hsv
hsv=cv2.cvtColor(imagen,cv2.COLOR_BGR2HSV)

Cada imagen se guarda en una variable llamada imagen y se procesa y convierte


a hsv en cada ciclo del bucle while.

12
4. CREAR LA MSCARA DE UN COLOR

Basados en la eleccin del color en el paso 1 se aplica una mscara a la imagen de


manera que solo aquellos pixeles que estn en el rango de color que queremos sean
utilizados . Estos pixeles se muestran de un color y todos lo dems pixeles de color
negro asi, primeramente se logra seleccionar nicamente aquellos objetos que
cumplan con nuestra restriccin de color.
El rango de colores esta dado por los valores bajos y altos del color elegido en
RGB, por ejemplo para color azul el valor bajo sera un celeste y el alto un azul
metlico.

#mascara para detectar un color


mask=cv2.inRange(hsv,bajos,altos)

5. ELIMINAR RUIDO DE LA MSCARA:

Para que la deteccin sea mas efectiva se eliminaran aquellos grupos de pixeles
pequeos ya que se supone que si son muy pequeos no son objetos que deseemos
seguir .Para lograr esto se usa un filtro de OpenCV.

#filtro de pixeles pequeos


kernel=np.ones((6,6),np.uint8)

mask=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)

mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)

Con esto solo veremos los objetos grandes.

6. APLICAR UN DESENFOQUE GAUSSIANO

Para facilitar la deteccin de los contornos y de esta manera facilitar el trabajo al


filtro Canny Edge se realiza un filtro Gaussiano que permite suavizar los contornos
del objeto detectado.

13
El desenfoque gaussiano es un efecto de suavizado para mapas de bits generado
por software de edicin grfica.
El efecto es generado por medio de algoritmos matemticos. En esencia, el efecto
mezcla ligeramente los colores de los pxeles que estn vecinos el uno al otro en un
mapa de bits (imagen), lo que provoca que la imagen pierda algunos detalles
minsculos y, de esta forma, hace que la imagen se vea ms suave (aunque menos
ntida o clara) respecto a que los bordes presentes en la imagen se ven afectados.

Imagennro 3 Filtro Gaussiano a diferentes o

Puede ser representado en 2D como :

Donde es el valor mximo y representa la varianza (para cada variable y )

#Desenfoque Gaussiano
blur=cv2.GaussianBlur(mask,(5,5),0)

Informacin sacada de la documentacin de OPENCV:


http://docs.opencv.org/doc/tutorials/imgproc/gausian_med
ian_blur_bilateral_filter/gausian_median_blur_bilateral_
filter.html?highlight=gaussian

14
7. APLICAR UN CANNY EDGE A LA MSCARA:

El detector de Canny Edge fue desarrollado por John F. Canny en 1986. Tambin
conocido por muchos como el detector ptimo , el algoritmo de Canny pretende
satisfacer tres criterios principales :
Baja tasa de error : Significa una buena deteccin de solo bordes existentes .
Buena localizacin : La distancia entre los pxeles del borde detectado y borde
verdadero es mnima.
Respuesta mnima : Slo una respuesta del detector al borde.

PASOS:
Filtrar cualquier ruido. El filtro de Gauss se usa para este propsito. Un ejemplo
de un kernel gaussiana de tamao = 5 que podra ser utilizado se muestra a
continuacin:

Encontrar el gradiente de intensidad de la imagen. Para ello, seguimos un


procedimiento anlogo al de Sobel:

Aplique un par de mscaras de convolucin (en direcciones x e y):

15
Encontrar la fuerza del gradiente y la direccin con:

La direccin se redondea a uno de los cuatro ngulos posibles (es decir, 0, 45, 90 o
135)
Se aplica no supresin mxima. Esto elimina los pxeles que no se consideran
parte de un borde. Por lo tanto, slo las lneas finas (bordes candidatos) se
mantendrn.
Histresis: El paso final. Canny hace uso de dos umbrales (superior e inferior):
Si un gradiente de pixel es mayor que el umbral superior, el pxel se acepta como un
borde.
Si un valor de gradiente pxel est por debajo del umbral inferior, entonces se
rechaza.
Si el gradiente de pxel es entre los dos umbrales, entonces ser aceptada slo si
est conectado a un pxel que est por encima del umbral superior.
Canny recomend un superior: relacin ms baja entre 2: 1 y 3: 1.

#Difuminado Canny edge


edges=cv2.Canny(mask,1,2)

Imagen nro 4 Imagen con un filtro Canny Edge aplicado


Informacin sacada de la documentacin de OPENCV:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/ca
nny_detector/canny_detector.html?highlight=canny

16
8. DETECTAR LOS DIFERENTES CONTORNOS:

#Deteccion de contornos
contours,hier=cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APP
ROX_SIMPLE)
areas=[cv2.contourArea(c) for c in contours]

Contours es una lista que contiene otras listas, cada una de las cuales contiene
todas las coordenadas de los puntos de cada contorno
Hier guarda la jerarqua de los contornos. La jerarqua ayuda a establecer qu
contornos pertenecen a un mismo objeto, cules son ms importantes, etc.
cv2.findContours recibe 3 parmetros. El primero es la mscara dnde hay que
buscar los contornos. El segundo es el mtodo para establecer la jerarqua. El tercer
parmetro es el algoritmo utilizado para reducir el nmero de puntos del contorno.
En la segunda lnea calculamos el rea con un bucle que va iterando entre las listas
de puntos de contours y guarda su rea en una lista.

Imagen nro 5 Deteccion de contornos

9. DISCRIMINAR A LOS OBJETOS POR SU TAMAO

Solo aquellos objetos de mas de 500 pixeles deben ser tomados en cuenta

#buscamos solo figuras grandes


i=0
17
for extension in reas
if extension >500:
actual=contours[i]

10. APROXIMAR CADA CONTORNO

approx=cv2.approxPolyDP(actual,0.05*cv2.arcLength(a
ctual,True),True)
if len(approx)== numerodevertices :

cv2.drawContours(imagen,[actual],0,(0,0,255),2)

Ahora llega la parte de determinar si el objeto del color que ha detectado tiene
tambin la forma que queremos para lo cual se calcula el nmero de vrtices por
medio de una aproximacin y si coincide con el nmero de vrtices de la forma que
elegimos le dibuja un contorno .
En este momento ya se logr detectar el objeto que desebamos seguir.

11. ENCONTRAR EL CENTRO DEL OBJETO Y OBTENER SUS COORDENADAS

Y como el objetivo desde el principio fue seguirlo , se hace uso de la funcin


moments la cual entre otras cosas nos da el rea del objeto y las coordenadas de
su centro , lo cual nos permitir utilizar un eje de coordenadas para indicarle al robot
en que lugar respecto a su cmara se encuentra el objeto que desea seguir

moments=cv2.moments(mask)
area = moments['m00']
x = int(moments['m10']/moments['m00'])
y = int(moments['m01']/moments['m00'])

cv2.rectangle(imagen,(x,y),(x+2,y+2),(0,0,255),2)

18
Imagen nro 6 Objeto detectado y centro marcado

12. MANDAR ORDENES AL ROBOT

Como ya tenemos las coordenadas del centro del objeto ya podemos ordenarle a
nuestro robot hacia dnde dirigirse.
Estas rdenes se las damos a travs del puerto serial.
Se dividi al plano de visin del robot en 3 partes de aproximadamente el mismo
tamao , en este caso de 200 pixeles cada uno para hacer los 600 pixeles de ancho
que tiene la imagen.
Dependiendo de la ubicacin del centro del objeto ,con respecto a las 3 divisiones
se mandan las ordenes derecha, izquierda o de frente.

if (area>1000000):

if (x>400):
print"derecha x=",x,"y=",y
ser.write("i")

elif (0<x<200):
print"izquierda x=",x,"y=",y
ser.write("d")

elif (200<x<400):
print"de frente x=",x,"y=",y
ser.write("f")

else:
ser.write("m")
print"detente"

19
PROGRAMA DE CONTROL DEL ROBOT CON ARDUINO:

Se utilizo un Arduino Uno y un puente H basado en el CI LM298

Imagen nro 7 Vista frontal de un Arduino Uno

#define LED 13
#define M1A 11
#define M1B 10
#define M2A 6
#define M2B 5

int mssg=0;

void setup()

{pinMode(LED,OUTPUT);
pinMode(M1A,OUTPUT);
pinMode(M1B,OUTPUT);
pinMode(M2A,OUTPUT);
pinMode(M2B,OUTPUT);

Serial.begin(9600);

void loop()
{
if(Serial.available()>0)
{mssg=Serial.read();

if(mssg=='b'){

digitalWrite(LED,HIGH);
analogWrite(M1A,0);
analogWrite(M1B,0);
analogWrite(M2A,180);
analogWrite(M2B,0);

20
if(mssg=='f'){

digitalWrite(LED,HIGH);
analogWrite(M1A,180);
analogWrite(M1B,0);
analogWrite(M2A,180);
analogWrite(M2B,0);

else if(mssg=='r')
{

digitalWrite(LED,HIGH);
analogWrite(M1A,0);
analogWrite(M1B,180);
analogWrite(M2A,0);
analogWrite(M2B,180);

}
else if(mssg=='d')
{

digitalWrite(LED,HIGH);
analogWrite(M1A,180);
analogWrite(M1B,0);
analogWrite(M2A,0);
analogWrite(M2B,0);
}
else if(mssg=='i')
{
digitalWrite(LED,HIGH);
analogWrite(M1A,0);
analogWrite(M1B,0);
analogWrite(M2A,180);
analogWrite(M2B,0);

}
else if (mssg=='p')
{
digitalWrite(13,HIGH);
analogWrite(M1A,0);
analogWrite(M1B,0);
analogWrite(M2A,0);
analogWrite(M2B,0);

21
CUARTO CAPTULO: PRUEBAS

Se realizaron pruebas haciendo uso de 3 tipos de figuras de diferentes colores y


formas geomtricas.

Las figuras utilizadas fueron las siguientes:

Las pruebas se realizaron en un ambiente bien iluminado sin exceso de luz y con
fondo variable.

Los objetos fueron colocados a aproximadamente dos metros de distancia del robot
.

22
Se pudo comprobar que algunos colores eran ms fciles de detectar debido a las
variaciones en la intensidad del color debido al reflejo de la luz en su superficie y la
sombra.

23
Se tuvo que controlar la velocidad de los motores del robot con PWM para que su
movimiento fuera ms preciso y evitar de esta forma que el robot pierda el foco en
el objeto.
En la mayora de las pruebas el resultado fue satisfactorio. Aunque a veces el hecho
de utilizar cables para la transferencia de informacin limitaba el movimiento del
robot y produca movimientos inesperados.
Este problema podra solucionarse haciendo uso de transmisin inalmbrica de
datos.

24
CONCLUSIONES

- La deteccin de figuras u objetos requiere un proceso de filtrado y adaptacin


de la imagen ,dicho proceso puede ser llevado a cabo haciendo uso de
herramientas como el filtro Gaussiano por ejemplo.
- La librera OpenCV ofrece una poderosa herramienta en el procesamiento digital
de imgenes y su utilizacin es relativamente sencilla.
- Uno de los factores clave al momento de procesar la informacin es el tiempo y
la carga de procesamiento.Se necesita un procesador medianamente potente
para ejecutar el algoritmo del proyecto asi como una cantidad adecuada de
memoria ram.
- Concentrarse en los aspectos importantes del proyecto permite ahorrar tiempo y
organizar mejor los recursos.
- Es buena idea utilizar herramientas que se adapten a las necesidades y
requerimientos del proyecto y no adaptarnos a las herramientas.
- Existen un sinfn de aplicaciones para la deteccin de patrones en imgenes
como la deteccin de rostros o la identificacin de objetos para su clasificacin.

25
BIBLIOGRAFA

Python para todos Ral Gonzlez Duque

https://www.arduino.cc/ Pagina oficial del proyecto Arduino

http://docs.opencv.org/modules/refman.html Referencia de la API de


OpenCV

https://es.wikipedia.org/wiki/Modelo_de_color_HSV Articulo en
Wikipedia sobre el modelo de color HSV

26
ANEXOS

Se adjuntan imgenes del robot:

Vista frontal

Vista Lateral

27
Vista inferior

Vista superior

28

You might also like