Está en la página 1de 0

1

INTERCEPTOR DE TRAYECTORIAS BASADO EN VISIN ARTIFICIAL















DAVID ALBERTO MARTINEZ MEJIA









PONTIFICA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERIA
CARRERA DE INGENIERIA ELECTRNICA
BOGOT D.C.
2005

2
INTERCEPTOR DE TRAYECTORIAS BASADO EN VISIN ARTIFICIAL





DAVID ALBERTO MARTINEZ MEJIA


Trabajo de grado para optar al titulo de Ingeniero Electrnico


Director
FREDY ORLANDO RUIZ
Ingeniero Electrnico










PONTIFICA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERIA
CARRERA DE INGENIERIA ELECTRNICA
BOGOT D.C.
2005
3
PONTIFICA UNIVERSIDAD JAVERIANA
FACULTAD DE INGENIERA
DEPARTAMENTO DE ELECTRNICA

RECTOR MAGNIFICO: R.P. GERARDO REMOLINA, S.J.
DECANO ACADMICO: Ing. FRANCISCO J. REBOLLEDO M.
DECANO DEL MEDIO UNIVERSITARIO: R.P. ANTONIO SARMIENTO, S.J.
DIRECTOR DE CARRERA: Ing. JUAN CARLOS GIRALDO
DIRECTOR DEL TRABAJO DE GRADO: Ing. FREDY ORLANDO RUIZ
4
ARTCULO 23 DE LA RESOLUCIN N 13 DE JUNIO DE 1946



La universidad no se hace responsable de los conceptos emitidos por sus alumnos en
sus trabajos
de grado. Slo velar porque no se publique nada contrario al dogma y la moral catlica
y porque
los trabajos no contengan ataques o polmicas puramente personales.
Antes bien, que se vea en ellos el anhelo de buscar la verdad y la justicia.
5




































A DIOS, POR DARME FUERZA PARA LLEGAR HASTA AQU
A MI MADRE, POR DARME APOYO PARA LLEGAR HASTA AQU
A MIS AMIGOS, POR ALEGRAR EL CAMINO HASTA AQU
A MIS PROFESORES, POR CONSTRUIR EL CAMINO HASTA AQU
A MI DIRECTOR, POR AYUDARME A ENCONTRAR EL FINAL MOSTRADO AQU.
6
AGRADECIMIENTOS

El autor expresa su agradecimiento a:

Santiago Castro, Juan Carlos Forero, Camilo Segura y Renan Quevedo quienes me
ayudaron enormemente en la solucin de numerosos e importantes detalles .

Mis compaeros de cubculo y de algunos cubculos aledaos quienes aportaron sus
valiosas herramientas y compaa.

Al personal del laboratorio y su gran colaboracin.

Al mantel de mi casa cuya personalidad y vida perdi en el proyecto.

A opencv y sus excitantes cualidades.

Al mejor director y profesor que actualmente tiene la carrera de ingeniera electrnica,
Fredy Orlando Ruiz. Muchas gracias por todo.





7
CONTENIDO
Pg.
INTRODUCCIN 1
1. MARCO TEORICO 4
1.1. Choques Elsticos 4
1.2. Rodadura 7
1.3. Regresin lineal 9
1.4. Motores a pasos 12
1.5. OpenCv 16
2. DESCRIPCIN GENERAL 17
2.1. Especificaciones 18
2.2. Herramientas de desarrollo 19
2.3. Entradas y salidas del sistema 19
2.4. Diagrama en bloques 19
2.5. Descripcin detallada 20
2.5.1. Subsistema Captura 20
2.5.2. Subsistema Estimacin 22
2.5.3. Subsistema Posicin 23
3. DESARROLLO 25
3.1. Captura 25
3.1.1. Adquisicin de Imgenes 25
3.1.2. Informacin del campo de juego 29
3.1.3. Deteccin de movimiento 34
3.1.4. Extraccin de posiciones 37
3.2. Estimacin 38
3.2.1. Trayectoria de disparo 38
8
3.2.2. Trayectorias de rebote 41
3.2.2.1. Interseccin 41
3.2.2.2. Proyeccin 45
3.2.2.3. Rebote 47
3.2.3. Ubicacin final 51
3.3. Enlace de los subsistemas captura y estimacin 53
3.3.1. Dentro del campo de juego 54
3.3.2. Implicaciones de un choque 55
3.3.3. Bola quieta 57
3.4. Posicin 58
3.4.1. Decisin y comunicacin 58
3.4.2. Motor 60
3.4.3. Recepcin 61
3.4.3.1. Configuracin USB y tareas de emulacin 62
3.4.3.2. Configuracin de registros para interrupciones y salidas 63
3.4.3.3. Verificacin de llegada, decodificacin y control de datos 63
3.4.3.4. Manejo de interrupciones y control de salidas 64
4. ANLISIS DE RESULTADOS 67
4.1. Intercepcin vs. Cuadros por segundo 67
4.2. Robustez a la orientacin de la mesa 71
4.3. Robustez a la no linealidad del modelo 73
5. CONCLUSIONES 75
6. ANEXOS 78
6.1. Descripcin de funciones y estructuras utilizadas de opencv 78
6.2. Emulacin del subsistema estimacin en Matlab CDROM
9
6.3. Emulacin del subsistema estimacin en visual C++ CDROM
6.4. Resultados del enlace entre los subsistemas captura y estimacin CDROM
6.5. Resultados finales CDROM
6.6. Cdigo fuente de los algoritmos desarrollados CDROM
6.7. Esquemticos y circuito impreso 87
7. BIBLIOGRAFA 88
10
LISTA DE TABLAS
Pg.
Tabla 1. Resultados para 30 cuadros por segundo 68
Tabla 2. Resultados para 15 cuadros por segundo 68
Tabla 3. Resultados para 5 cuadros por segundo 69
Tabla 4. Resultados para 30 cuadros por segundo, despus de solucin 70
Tabla 5. Resultados para 15 cuadros por segundo, despus de solucin 70
Tabla 6. Resultados para 5 cuadros por segundo, despus de solucin 71
Tabla 7. Resultados para la inclinacin 1 72
Tabla 8. Resultados para la inclinacin 2 72
Tabla 9. Resultados para la inclinacin 3 73
Tabla 10. Resultados para la inclinacin vertical hacia el borde del motor 74
Tabla 11. Resultados para la inclinacin vertical hacia el borde opuesto del
Motor 74
11
LISTA DE FIGURAS

Figura 1. Choques elsticos 4
Figura 2. Choques en 2 dimensiones 5
Figura 3. Modelo aplicado al proyecto 6
Figura 4. Modelo de rebotes 7
Figura 5. Descripcin de rodadura 7
Figura 6. Detalles de un motor bipolar 13
Figura 7. Seales cuadradas para un motor bipolar 13
Figura 8. Detalles de un motor unipolar 14
Figura 9. Seales cuadradas para un motor unipolar 14
Figura 10. Curvas de torque dinmico para un motor arbitrario 15
Figura 11. Detalles del campo de juego 17
Figura 12. Descripcin del proyecto 18
Figura 13. Diagrama en bloques 20
Figura 14. Diagrama de bloques del subsistema captura 21
Figura 15. Diagrama de flujo del bloque extraccin 22
Figura 16. Diagrama de bloques del subsistema estimacin 22
Figura 17. Diagrama de flujo del bloque trayectorias de rebote 23
Figura 18. Diagrama de bloques del subsistema posicin 24
Figura 19. Cmara utilizada 25
Figura 20. Opciones de control para la cmara 26
Figura 21. Visualizacin de la imagen de la cmara en el computador 29
Figura 22. Binarizacin de una imagen de fondo 30
Figura 23. Contornos y centros de los objetos 31
12
Figura 24. Bordes y sus respectivas lneas de borde 31
Figura 25. Pasos del algoritmo de ordenamiento de bordes 32
Figura 26. Resultados para diferentes bordes 32
Figura 27. Lnea de borde mas cercana y borde ms cercano 34
Figura 28. Ejemplo de substraccin de fondo 35
Figura 29. Extraccin del interceptor y binarizacin del fondo 36
Figura 30. Substraccin de fondo para una secuencia de imgenes 36
Figura 31. Solucin implementada para el problema de variacin de brillo 37
Figura 32. Extraccin de posiciones; binarizacin, contornos y centros 38
Figura 33. Posiciones de la bola con la trayectoria estimada; Matlab 39
Figura 34. Posiciones de la bola con la trayectoria estimada; Visual C++ 40
Figura 35.Trayectoria vertical 40
Figura 36. Trayectoria vertical con error 41
Figura 37. Intersecciones de la lnea de disparo con las 4 lneas de borde 42
Figura 38. Intersecciones seleccionadas a partir de la direccin de
Movimiento 43
Figura 39. Interseccin final 44
Figura 40. Campo de juego con ngulos agudos 45
Figura 41. Esquema vectorial para clculo de proyecciones 46
Figura 42. Resultados de una proyeccin en Matlab 46
Figura 43. Resultados de una proyeccin en Visual C++ 47
Figura 44. Modelo para clculo de rebotes 47
Figura 45. Punto rebote para una lnea de disparo arbitraria; Matlab 48
Figura 46. Punto rebote para una lnea de disparo arbitraria. Visual C++ 49
Figura 47. Trayectoria de rebote; Matlab 49
13
Figura 48. Trayectoria de rebote; Visual C++ 50
Figura 49. Problema de resolucin en lneas de borde verticales 50
Figura 50. Solucin al problema de resolucin 51
Figura 51. Nmero de rebotes excede un lmite; Matlab 51
Figura 52. Nmero de rebotes excede un lmite; Visual C++ 52
Figura 53. Intercepcin exitosa; Matlab 52
Figura 54. Intercepcin exitosa; Visual C++ 53
Figura 55. Problema de direccin 53
Figura 56. Problema: dentro del campo de juego. 55
Figura 57. Solucin al problema dentro del campo de juego 55
Figura 58. Trayectoria irregular despus de un rebote 56
Figura 59. Solucin al problema de choque 57
Figura 60. Problema cuando la bola se encuentra inmvil 57
Figura 61. Solucin al problema de bola quieta 58
Figura 62. Clculo de la distancia en pxeles entre
las posiciones del interceptor 58
Figura 63. Algoritmo de inferencia de direccin 59
Figura 64. Trama de 4 bytes para comunicacin serial 60
Figura 65. Tareas de ejecucin del microcontrolador 62
Figura 66. Diagrama de flujo del bloque verificacin de llegada 64
Figura 67. Seales del motor unipolar para conseguir un mayor torque 66
Figura 68. Estilos de disparo definidos para la realizacin de las pruebas 67
Figura 69. Inclinacin 1 del campo de juego 72
Figura 70. Inclinacin 2 del campo de juego 72
Figura 71. Inclinacin 3 del campo de juego 73
14

INTRODUCCIN

Desde hace algn tiempo, el uso de tcnicas de control basadas en visin, han
comenzado a incrementarse debido principalmente, al desarrollo de hardware que
permite los pesados procesamientos requeridos en el anlisis de imgenes. En [1] y en
[2] se presentan datos ms especficos de este argumento as como en [3] se presenta
una breve historia del desarrollo del control basado en visin.

Entre estos proyectos, muchos se enfocaron en el desarrollo de sistemas que realizaran
tareas de intercepcin debido principalmente a los deseos de emular comportamientos
humanos donde intervienen la interaccin continua con objetos dinmicos externos, por
ejemplo deportes como el ftbol, tenis y sus similares. En [4] se presenta una
descripcin detallada del diseo de un equipo de ftbol robtico, deporte el cual ha
recibido bastante acogida gracias a la creacin del torneo robocup. Igualmente, se han
construido diversos sistemas que busquen la intercepcin de bolas, siguiendo
caractersticas especificas como en [5] donde se utiliza control predictivo basado en
filtros de Kalman, o en [6] donde se presenta un proyecto de control basado en visin,
el cual busc emular un jugador de hockey de aire.


Control basado en visin consiste principalmente en utilizar como sensor diferentes
sistemas que puedan analizar en tiempo real, imgenes tomadas de las variables bajo
control y a partir de ellas decidir una accin que permita la dinmica deseada.
Dado que en las imgenes se puede encontrar gran cantidad de informacin espacial y
detalles intrnsecos de diversos objetos, este enfoque otorga una mayor robustez a
15
cualquier sistema de control y eventualmente podra simplificar enormemente el
modelamiento o los clculos realizados, dependiendo del tipo de anlisis que se tome.
Uno de estos, involucra inteligencia artificial para estimar el error y as mismo decidir
todas las acciones de control y el otro, desarrollado en el presente trabajo de grado,
utiliza modelamiento espacial para que a partir de la imagen se pueda realizar todo el
anlisis necesario.

El proyecto propuesto modifica la trayectoria que describe una esfera, al moverse sobre
un plano horizontal limitado llamado campo de juego. Esta trayectoria es truncada,
moviendo un obstculo interceptor, solo cuando la bola pretenda cruzar a una regin
determinada del campo de juego.

El proyecto esta compuesto por 4 subsistemas llamados planta, captura, estimacin y
posicin. El subsistema planta comprende todo lo relacionado con la dinmica de la
bola, es decir, las caractersticas intrnsecas del campo de juego como bordes y
superficie, detalles de la bola y todas las interacciones entre sta y el campo.

El subsistema captura recibe como entrada la dinmica de la bola y por medio de una
descripcin en imgenes del movimiento, entrega como salida la posicin cartesiana
actual de la bola en el campo de juego. Igualmente, este subsistema comprende todas las
especificaciones y descripciones de la cmara de video, la cual es de vital importancia
para el proyecto.

16
El subsistema estimacin, tiene como principal funcin estimar la trayectoria de la bola
segn los valores de posicin entregados por el subsistema captura y un modelo que se
tenga del campo de juego.

Por ltimo, el subsistema posicin tiene la tarea de posicionar al obstculo en la
posicin estimada por el subsistema estimacin, de tal manera que la bola sea
interceptada exitosamente.

En el capitulo 1 se presenta el marco terico relacionado con el trabajo de grado. En el
captulo 2 se describe general y detalladamente, el comportamiento del proyecto y cada
uno de los mdulos desarrollados. El capitulo 3 muestra el desarrollo de cada
subsistema con los problemas y resultados individuales de cada uno. En el capitulo 4 se
presentan las pruebas de desempeo del proyecto y en el capitulo 5 se expresan las
conclusiones encontradas.
17

1. MARCO TEORICO
1.1. Choques Elsticos
Se consideran dos objetos esfricos de masas distintas m
1
y m
2
, aproximndose uno al
otro a lo largo de la lnea que une sus centros, a velocidades distintas, como lo muestra
la figura 1. Se suponen movimientos de traslacin, sin rotacin ni vibracin.


Figura 1. Choques elsticos

Aplicando la conservacin de cantidad de movimiento, se tiene:

m
1
v
1ini
+ m
2
v
2ini
= m
1
v
1fin
+ m
2
v
2fin


Donde v
ini
y v
fin
son las velocidades inicial y final de cada objeto respectivamente.



Aplicando tambin la ley de la conservacin de la energa cintica:

m
1
v
1ini
2
/ 2 + m
2
v
2ini
2
/ 2 = m
1
v
1fin
2
/ 2 + m
2
v
2fin
2
/ 2

Estas dos ecuaciones, puedes ser re escritas de la forma:

m
1
(v
1ini
v
1fin
) = m
2
(v
2fin
v
2ini
)

m
1
(v
1ini
2
- v
1fin
2
) = m
2
(v
2fin
2
v
2ini
2
)

Dividiendo la segunda ecuacin por la primera, mientras se asegure que exista colisin,

se tiene que:
18

v
1ini
+ v
1fin
= v
2fin
+ v
2ini
v
1ini
v
2ini
= v
2fin
v
1ini


De esta ultima expresin se define

ini fin
fin fin
v v
v v
n
2 1
1 2

=

donde n representa el coeficiente de restitucin.


Extendiendo el anterior anlisis a dos dimensiones, permite estudiar la reflexin en las
direcciones de movimiento, despus del choque.
Para ello se considera que un objeto se acerca con una velocidad dada a otro cuerpo que
se encuentra inicialmente en reposo. Sin embargo, esta vez la aproximacin no es a lo
largo del eje que une sus centros, como lo muestra la figura 2.


Figura 2. Choques en dos dimensiones
La desviacin del choque se mide en funcin de la distancia entre los centros medida
perpendicularmente desde v
1ini
hasta el centro del objeto en reposo.

Aplicando las mismas leyes de conservacin y descomponiendo las velocidades en los
ejes coordenados, se tiene:

19
2 2 2 1 1 1 1 1
cos cos
fin fin ini x
v m v m v m P + = =
2 2 2 1 1 1
0 sen v m sen v m P
fin fin y
= =

2
2 2
2
1 1
2
1 1
2
1
2
1
2
1
fin final ini
v m v m v m + =

Ajustando este ltimo ejemplo al caso especifico del proyecto, donde uno de los objetos
se encuentra en reposo y adems es inmvil, se tiene:


Figura 3. Modelo aplicado al proyecto
2 1 1 1 1 1
cos cos
fin ini x
v m v m P = =

2 1 1 1 1 1
sen v m sen v m P
fin ini x
= =

cancelando las masas y reemplazando una ecuacin en la otra:

1
1
2
2
cos cos

sen sen
=
1 2
tan tan =
1 2
=

Esto permite establecer una sencilla regla de sustitucin, si se quiere hallar algn punto
de una trayectoria dada despus de un rebote. Teniendo en cuenta el sistema de
referencia de la figura 4 y la semejanza de tringulos presente en la geometra, se tiene:
Pntproy
x
Pproy
x
= Pnt
x
P
x
= 2(Drebote
x
Pproy
x
)

Con esto se pueden hacer los siguientes pasos para hallar las coordenadas del punto Pnt
20

Figura 4. Modelo de rebotes
Pnt
x
= P
x
+ 2(Drebote
x
Pproy
x
)

Pnt
y
= f
2
(pnt
x
)

Siendo f
2
una funcin lineal con la misma pendiente de f
1
pero que pasa por el punto P.

En el caso particular donde es igual a cero.

Pnt = P + 2(Drebote P)

Pnt = 2Drebote P

1.2. Rodadura
Para garantizar el cumplimiento del anterior anlisis basado en colisiones lineales, es
importante satisfacer todas las suposiciones que se tuvieron en cuenta al comenzar el
anlisis. Una de ellas, tiene que ver con la rotacin de los cuerpos en movimiento por lo
cual se estudiara con mas detalle.


Figura 5. Descripcin de rodadura
21
Segn la figura 5, los movimientos de traslacin y rotacin de la bola estn relacionados
por:
R s =

Por lo tanto la velocidad del centro de masa es:

Rw
dt
d
R
dt
ds
V
CM
= = =



Esta ltima se conoce de la condicin de rodadura la cual tambin puede expresarse en
funcin de las aceleraciones lineales.

R A
dt
dw
R
dt
dV
CM
CM
= = =

En resumen, en una bola movindose a una velocidad angular w, sus puntos de
superficie se mueven a una velocidad Rw respecto al centro de la bola y su punto de
apoyo se encuentra temporalmente en reposo.

Para ver las condiciones para lograr un movimiento sin rotacin y con deslizamiento, se
busca hallar el tiempo en el cual se presenta la condicin de rodadura, para una bola con
masa M y radio R, lanzada con una velocidad inicial dada v
o
, en deslizamiento[10].
Mientras la bola se desliza, la friccin cintica Mg
c
, acta oponindose a la velocidad
y por lo tanto la aceleracin del centro de masa esta dado por
g a
c
=
En cualquier instante de tiempo t, mientras se conserve el deslizamiento, la velocidad
del centro de masa es:
at v v =
0

El momento o torque, resultante respecto al centro de masas de la bola
MgR
c
=
22
La aceleracin y velocidades angulares son:

= = =
R
g
MR
MgR
l
c c

2
5
5 2
2
t
R
g
t w
c

= =

2
5

Para obtener el tiempo t
rod
donde se satisface la condicin de rodadura ( Rw v = ) y la
bola comienza a rotar, hacemos:
at v v =
0

rod c
gt v Rw =
0

rod c rod
c
gt v t
R
g
R

0
2
5

0
2
7
v gt
rod c
=
g
v
t
c
rod
7
2
0
=
Con esto ltimo se concluye que el tiempo que dura la bola movindose con
deslizamiento y sin rotacin, depende nicamente de la velocidad inicial con que se
lance la bola y el coeficiente de friccin cintico.

Si se quiere garantizar, que la condicin se mantenga por un tiempo prolongado, es
necesario disminuir el coeficiente de friccin y aumentar la velocidad inicial.

1.3. Regresin lineal
El anlisis de regresin tiene principalmente tres objetivos, prediccin, modelamiento y
caracterizacin, los cuales en diversas ocasiones, pueden estar completamente ligados.

La idea detrs de un anlisis de regresin, es encontrar una relacin funcional entre un
conjunto de datos dado, aproximando su comportamiento a una funcin predefinida con
parmetros variables y dentro de un intervalo definido. Dependiendo de esta funcin,
aparecen diferentes mtodos de regresin los cuales varan principalmente en
complejidad o error de aproximacin siendo estas dos variables inversamente
proporcionales. Cuando se obtiene la funcin que relaciona los datos, se puede aprender
23
mucho mas acerca del fenmeno que los produjo e inclusive se pueden llegar a dar
predicciones aproximadas de lo que pueda pasar en tiempos futuros.

Entre los muchos mtodos de regresin existentes, se escoge regresin lineal por su
fcil implementacin y menor costo computacional.

Suponiendo la existencia de un conjunto de datos X y Y, se asume una relacin
funcional entre ellos de la forma:
+ + = X Y
1 0

donde
0
y
1
son los parmetros del modelo y es el incremento por el cual cada
valor de Y puede desviarse de la lnea de regresin.
Se asume que este modelo se mantiene mientras se desarrolla el mtodo, pero son
necesarias etapas siguientes para saber si en verdad lo hace o no.
0
y
1
son desconocidos pero se mantienen fijos, lo cual permite hallar valores
estimados b
o
y b
1
de
0
y
1
a partir de los datos iniciales:
X b b Y
1 0

+ =
Para hallar los valores estimados, se utiliza el mtodo de mnimos cuadrados el cual
consiste en hallar los valores que hacen mnimo el error cuadrtico.

Adicionando al modelo lineal todo el conjunto de valores, se tiene que la suma de
cuadrados de las desviaciones es:
+ + =
i i
X Y
1 0
( )

= =
= =
n
i
n
i
i i i
X Y S
1 1
2
1 0
2

Se escogen los valores estimados b
o
y b
1
para los cuales, cuando se reemplacen por
0

y
1
produce el menor valor posible de S.
24
Diferenciando la suma de cuadrados por
0
y
1
e igualando el resultado a cero:
( )

=
=

n
i
i i
X Y
S
1
1 0
0
2

( ) 0
1
1 0
=

=
n
i
i i
X b b Y
( )

=
=

n
i
i i
X Y
S
1
1 0
1
2

( ) 0
1
1 0
=

=
n
i
i i i
X b b Y X
Despejando las ultimas ecuaciones, se tienen las ecuaciones normales.

= =
= +
n
i
i
n
i
i
Y X b n b
1 1
1 0


= = =
= +
n
i
i i
n
i
i
n
i
i
Y X X b X b
1 1
2
1
1
0

Donde:
( )( ) [ ]
( )
( )( )
( )

=
2 2
2
1
X X
Y Y X X
n X X
n Y X Y X
b
i
i i
i i
i i i i

Se define
( )( )

= Y Y X X S
i i XY

( )

=
2
X X S
i XX

( )

=
2
Y Y S
i XX

Con lo cual se obtiene:
XX XY
S S b =
1
X b Y b
1 0
= ( ) X X b Y Y + =
1


Una forma simple de mirar si el modelo obtenido es bueno o no, es mirando la
precisin relativa del parmetro b
1
.
( )

=
2

i i res
Y Y S
XX res m
S S S =
m b
S b t
1 1
=
25
Si este ltimo valor es lo suficientemente grande, se considera que el modelo es bueno.

Todo el anlisis descrito anteriormente, se puede expresar fcilmente en forma matricial
para una eficiente ejecucin de los clculos[12].

1.4. Motores a pasos
Un motor a pasos es un dispositivo, que por medio de excitaciones alternas a
tpicamente dos bobinas y un imn permanente, convierte pulsos elctricos en
movimientos rotacionales discretos.

Existen dos tipos de motores a pasos los cuales difieren principalmente en la conexin
de las dos bobinas del estator. El motor a pasos unipolar forma cuatro bobinas
utilizando una divisin central en las bobinas iniciales, generando 5 o 6 hilos donde 4
de ellos permiten la excitacin individual de cada bobina y los restantes permiten la
conexin de la fuente elctrica. En el motor a pasos bipolar las dos bobinas iniciales
permanecen inalteradas lo que conduce a la existencia de nicamente 4 hilos, dos para
cada bobina.

Para generar movimiento, ambos motores dependen de la continua interaccin de los
polos permanentes del rotor y los polos generados por las bobinas del estator, los cuales
poseen separaciones tpicas entre polo y polo, para conseguir movimientos de un
cuarto de polo por cambio en la secuencia de excitacin..

26
Esto quiere decir que si el rotor posee 12 polos permanentes, necesitara de 48 cambios
en la secuencia para dar una vuelta completa, es decir, dar un giro de 360 grados en 48
pasos o realizar un movimiento de 7.5 grados por paso.

La entrada elctrica para un motor bipolar, es un secuencia de 4 pasos como lo muestra
la figura 6.

Figura 6. Detalles de un motor bipolar
Operando a una frecuencia fija, la seal de entrada al motor es una onda cuadrada
desfasada 90 como lo muestra la figura 7.

Figura 7. Seales cuadradas para un motor bipolar
Para un motor unipolar, la secuencia de pasos y las seales cuadradas se muestran en las
figuras 8 y 9.
27

Figura 8. Detalles de un motor unipolar

Figura 9. Seales cuadradas para un motor unipolar
Una desventaja importante del motor bipolar sobre el unipolar, es la necesidad de
invertir la seal de entrada en las bobinas para completar la secuencia de excitacin.
Esto implica un aumento de complejidad y costo en el diseo de manejadores.

Los pasos en ngulo tpicos para motores de paso estn entre 0.72 y 90 y su precisin
es no acumulativa, lo cual indica que el promedio se hace cero en una secuencia de
pasos que corresponda a 360 elctricos.
28

En cuanto al torque, resulta importante conocer tres tipo de torque que se presenta
cuando se trabaja con motores a paso. El torque de mantenimiento el cual consiste en el
torque requerido para rotar un paso completo cuando el motor esta parado, es decir a
cero pasos por segundo pero con seal de entrada. Como este torque es mayor que el
torque en movimiento suele ser de gran aplicacin para implementar frenos.
El torque residual, el cual consiste en un torque de sostenimiento cuando el motor se
encuentra des energizado. Esto se debe al flujo magntico del imn permanente del rotor
y la friccin de los rodamientos, el cual resulta ser, tpicamente, de un dcimo del
torque de mantenimiento. Esta caracterstica es til cuando se quiere mantener una
carga en una posicin dada, aun cuando el motor se encuentre sin energa.
El torque dinmico el cual se entiende como el torque de operacin, se describe por
medio de grficas como la figura 10 [13] .


Figura 10. Curvas de torque dinmico para un motor arbitrario
La curva rotulada como PULL IN, muestra con qu carga de torque puede el motor
iniciar y parar sin perdida de pasos con una tasa constante de pasos. La curva PULL
OUT, es el torque disponible cuando el motor es acelerado lentamente a la tasa de
29
operacin normal. La diferencia entre estas dos curvas, es la perdida de torque por causa
de acelerar la inercia del rotor.

1.5. OpenCv
OpenCV (Open source Computer Vision library) es un grupo de funciones en lenguaje
C y algunas clases en lenguaje C++, desarrolladas para implementar algunos de los ms
populares algoritmos de procesamiento de imgenes y visin artificial, con la
caracterstica adicional de ser de tipo open source, lo que indica que adems de ser
gratis, se puede modificar.

Fue creada principalmente por personal de Intel, miembros de algunas universidades
rusas e innumerables aportes de gente particular que han venido perfeccionando todo el
conjunto de funciones desde su versin inicial.

A su vez, OpenCV esta construida con el objetivo de alcanzar aplicaciones en tiempo
real para diferentes campos de la ciencia como interaccin humano-computador (HCI);
identificacin de objetos, segmentacin, reconocimiento, seguimiento, entendimiento de
movimiento y robtica mvil.

Como caracterstica adicional, vale la pena decir que la librera OpenCV, esta diseada
para que el tiempo de clculo y eficiencia sean significativamente aumentados sobre un
procesador con arquitectura INTEL.




30

2. DESCRIPCIN GENERAL
El proyecto propuesto modifica la trayectoria que describe una pequea bola, al
moverse sobre un plano horizontal limitado llamado campo de juego, ver figura 11.
Esta trayectoria es truncada, moviendo un obstculo interceptor, solo cuando la bola
pretenda cruzar a una regin determinada del campo de juego.

Figura 11. Detalles del campo de juego

La intercepcin se logra sin importar las condiciones de lanzamiento, esto es la
direccin y velocidad, pero teniendo en cuenta la naturaleza del campo de juego, como
lo son bordes, forma y superficie de contacto.
El sistema esta conformado por los elementos mostrados en la figura 12.
31
Figura 12. Descripcin del proyecto
La informacin de movimiento de la bola se obtiene por medio de una cmara de video
la cual se encuentra fija en la parte superior del campo de juego, capturando de manera
secuencial, imgenes de todo lo sucedido en el campo de juego.
Esta informacin es enviada a un computador, el cual se encarga de procesar a una tasa
de 30 cuadros por segundo, las imgenes tomadas y as determinar la direccin y
velocidad de la bola, haciendo uso de un modelo simple de su comportamiento
dinmico y de las caractersticas intrnsecas del campo de juego.

Una vez adquirida esta informacin, se estima cul ser la ubicacin final de la bola en
el momento en que vaya a cruzar la frontera que limita la regin prohibida. Esta
informacin se le entrega a un control de posicin que ubica el obstculo interceptor en
ese punto, evitando que la bola cruce a la regin prohibida.

2.1. Especificaciones
Desarrollando el sistema descrito anteriormente, se busca encontrar una alternativa que
cumpla principalmente con dos requisitos:

32
Alto grado de confiabilidad en el cumplimiento de tareas utilizando control
basado en visin.

Robustez tanto al cambio de modelo inicial como a las caractersticas intrnsecas
del campo de juego.

Versatilidad en la instalacin del equipo para realizacin de pruebas.

Bajo costo en los materiales utilizados teniendo en cuenta tanto equipo
electrnico como piezas mecnicas.

2.2. Herramientas de desarrollo
En el desarrollo del proyecto se utiliz Visual C++ debido a los requerimientos
explcitos del uso de la librera OpenCv y Matlab 7 por su facilidad en el diseo y
prueba de algoritmos, y su cmoda interfaz grfica que permite realizar dibujos
utilizando variables no enteras, con varias cifras significativas.

2.3. Entradas y salidas del sistema
La entrada de todo el sistema es la informacin visual del campo de juego, la cual
comprende el comportamiento dinmico de la bola y la variacin en la posicin del
interceptor.
La salida es una seal de voltaje que hace mover al interceptor de manera consecuente
con el movimiento de la bola


33
2.4. Diagrama en bloques

Figura 13. Diagrama en bloques
2.5. Descripcin detallada
2.5.1. Subsistema Captura
Este subsistema cuenta con los elementos mostrados en la figura 14. El bloque
adquisicin de imgenes est compuesto por una cmara de video tipo web DLV-B01
marca Delux, con conexin USB la cual esta constantemente filmando el campo de
juego. Sus imgenes son transferidas al computador a una tasa mxima de 30 cuadros
por segundo cuyo valor final depende de la capacidad de utilizacin del procesador y
memoria del sistema. Los procedimientos de captura permiten capturar una imagen,
asignarla a una estructura de datos y dejarla lista para su futuro procesamiento.


34

Figura 14. Diagrama de bloques del subsistema captura

El bloque Deteccin de movimiento, es un algoritmo que se encarga de encontrar los
objetos que se estn moviendo en el campo de juego aplicando un sencillo
procedimiento de extraccin de fondo.
El cuadro presente, es afectado por una mscara cuyo contenido debe coincidir
exactamente con el fondo de todas las imgenes. Esto permite obtener una imagen
cuyo contenido de informacin solo son los objetos que se estn moviendo.

En la figura 15 se muestra el bloque extraccin el cual recibe como entrada la imagen
afectada por el bloque anterior y obtiene los centroides de los objetos presentes en ella.
En dado caso de haber menos de dos objetos, se continua con la identificacin de
posiciones y se finaliza el algoritmo. Si llegasen a existir mas de 3 objetos en la imagen
de entrada, se reporta como un movimiento de fondo que permite realizar algn tipo de
calibracin.




35

Figura 15. Diagrama de flujo del bloque extraccin

2.5.2. Subsistema Estimacin
Este subsistema esta descrito por el diagrama mostrado en la figura 16, teniendo como
entrada la posicin actual de la bola y como salida la posicin en donde debe ubicarse el
interceptor.


Figura 16. Diagrama de bloques del subsistema estimacin


El bloque trayectoria de disparo, a partir de la posicin actual y algunas posiciones
pasadas de la bola, se encarga de estimar la funcin que describe la trayectoria de la
bola teniendo en cuenta un modelo lineal. Esta funcin, representada por la ecuacin de
una recta, es utilizada por el bloque trayectorias de rebote, el cual se encarga de
encontrar todos los posibles rebotes que podra dar la bola con la direccin actual de
movimiento.
36
Este proceso de encontrar rebotes, es mantenido por un ciclo que solo termina cuando
no son encontrados mas rebotes o cuando el nmero de rebotes excede un limite de 3
rebotes.

Para explicar el bloque trayectoria de rebotes, se presenta su diagrama de flujo en la
figura 17.


Figura 17. Diagrama de flujo del bloque trayectorias de rebote
.

2.5.3. Subsistema Posicin
El subsistema posicin, esta descrito por el diagrama de bloques de la figura 18 y se
encarga de recibir como entrada dos posiciones del interceptor (La que ve el subsistema
captura y la que calcula el subsistema estimacin) y realizar como salida un movimiento
en el interceptor.
37
Figura 18. Diagrama de bloques del subsistema posicin
Una vez se tiene la posicin donde debe ubicarse el interceptor, el bloque decisin la
compara con la posicin actual del mismo para encontrar un nmero de pasos
proporcional a su diferencia. Con esta informacin, el bloque Comunicacin la traduce
para enviarla por un puerto de comunicaciones serial virtual, emulado sobre USB, para
ser recibida por el bloque Actuador. Este est compuesto de un microcontrolador
Microchip 18F4550, un sencillo circuito manejador y un motor de pasos unipolar que se
mueve acorde con el nmero de pasos que enva el bloque Comunicacin.

38
3. DESARROLLO
3.1. Captura
3.1.1. Adquisicin de Imgenes
La primera fase de desarrollo del proyecto, fue encontrar la manera de tener lista una
imagen del campo de juego para su futuro procesamiento.
Para ello, se utilizaron diferentes funciones de opencv que en conjunto con la
versatilidad de la cmara de video USB, permitieron de forma sencilla adquirir
imgenes.

Figura 19. Cmara utilizada
La seleccin de la cmara no solo tuvo en cuenta el aspecto de comunicacin, sino que
tambin fue critico encontrar una cmara cuyas caractersticas pticas como el enfoque
y el balance de color blanco, fueran modificables de manera manual y no automtica
como la mayora de ellas. Igualmente, fue necesario que la cmara fuera compatible con
formato VFW para su correcta comunicacin con las funciones de captura de opencv.
La cmara DLV-B01, ver figura 19, no solo cumpli con estas caractersticas, sino que
tambin se encontr que se poda modificar manualmente la exposicin, la velocidad de
comunicacin USB, la frecuencia de corte para un filtro de ruido de lnea, y varias
caractersticas comunes de las imgenes como el brillo, el contraste, el tono, etc.
39
Esto permiti tener una imagen mucho ms ntida y limpia desde el principio, evitando
la utilizacin de filtros especiales en tiempo de procesamiento y as mismo aumentando
la velocidad de respuesta del sistema completo.

Figura 20. Opciones de control para la cmara
Antes de iniciar el funcionamiento, estas opciones, mostradas en la figura 20, son
modificadas de forma tal que permitan un correcto funcionamiento de los algoritmos
posteriores.

Una vez instalada y configurada la cmara en el computador de trabajo, se
40
evaluaron dos diferentes maneras de obtener una imagen de la cmara como datos
manipulables en el computador con opencv: cvcam y highgui.
Cada una de ellas aunque consiguen el mismo objetivo, poseen una gran diferencia en la
forma de implementarse y en su interaccin con la configuracin de la cmara.

CvCam es un modulo de procesamiento de video para cmaras digitales el cual esta
implementado como una librera de vnculos dinmicos (DLL) para Windows y una
librera de objetos compartidos (SO) para Linux.
Para controlar el flujo de video y el procesamiento del mismo, cvcam inicialmente
ajusta una tasa de cuadros por segundo definida por el usuario, cuyo real valor depende
del tamao de la imagen a capturar y los recursos del computador en el momento de
hacer la captura. Seguido de esto, cvcam hace un llamado a una funcin definida por el
usuario, que se encarga del procesamiento de la imagen capturada. Adicionalmente
cvcam permite acceder fcilmente a las propiedades de la cmara tan solo utilizando las
funciones del mdulo, evitando engorrosas configuraciones de controladores.

Highgui es otro mdulo de opencv con las mismas caractersticas de cvcam pero con
muchas ms funciones que permiten, adems del control entrada y salida de video,
rutinas de interfase grfica para usuarios y manejo de grabacin y lectura de archivos
de imagen y video.
Las funciones para control de flujo de video de highgui, presentan una mayor
versatilidad que las de cvcam, debido a que brindan la posibilidad de adquirir una
imagen cuando el programador lo desee evitando la limitacin de llamados automticos
que dependen solo de la configuracin intrnseca de opencv. Sin embargo, actualmente
41
highgui no permite acceder a las caractersticas de configuracin de la cmara dejando
todo el control a sus controladores los cuales en general no son de fcil configuracin.

Debido a que highgui carece de las opciones necesarias para la modificacin de cuadros
por segundo y configuracin manual de las propiedades de la cmara, se selecciono el
mdulo cvcam para el desarrollo del subsistema captura.

Una vez seleccionado el mdulo de captura a utilizar y de implementar el
funcionamiento de las funciones, la imagen se obtuvo contenida en una clase especial
diseada por Intel llamada IplImage, la cual permite cualquier tipo de procesamiento
tanto por los dems mdulos de opencv como directamente por el programador.
La imagen es dividida en 3 canales o dimensiones (4 mximo), cada uno referido al
espacio de colores que se este utilizando. Tpicamente la imagen es creada en el espacio
BGR con un formato de enteros sin signo de 8 bits. Esto define el valor de cada pxel,
en cada canal, dentro de un intervalo de 0 a 255 siendo el primero negro y el segundo
blanco. Con esta informacin disponible, es posible utilizar los datos de la imagen tanto
para procesamiento como para visualizacin como lo muestra la figura 21.
42

Figura 21. Visualizacin de la imagen de la cmara en el computador
3.1.2. Informacin del campo de juego
Una vez definida la forma de capturar imgenes al computador, el paso siguiente para el
correcto funcionamiento de todos los algoritmos de deteccin y prediccin, es extraer
toda la informacin necesaria a partir de una imagen seleccionada del campo de juego,
antes de comenzar el procesamiento en tiempo real.

Debido a la robustez requerida del sistema, fue necesario determinar la ubicacin exacta
de los bordes junto con las ecuaciones y ngulos que caracterizan las lneas que los
unen, la posicin del interceptor y el borde en el cual se encuentra el interceptor.
Igualmente, para un correcto movimiento del motor, fue esencial encontrar hacia que
borde se encontraba el motor para definir una direccin de movimiento.

43
El primer paso consiste en binarizar la imagen con una funcin simple de umbral la cual
determina pxel a pxel si su valor esta por encima de una valor referencia para
reemplazar por un 255 un cero si no lo esta. Debido a que esta funcin recibe una
imagen con solo un canal como entrada, a la imagen capturada se le extrae el canal
correspondiente al espacio verde y se le entrega para su respectiva binarizacin.
Cuando los objetos a encontrar son blancos, el proceso de umbralizacin, adems de
binarizar la imagen, extrae los objetos que se desean encontrar ya que el valor de los
pxeles que describen los objetos siempre estn por encima del umbral determinado y
por ende se consigue una imagen binaria donde solo los objetos requeridos se
encuentran en ella..




Figura 22. Binarizacin de una imagen de fondo
Esta imagen binaria es entregada como entrada a una funcin de extraccin de
contornos, la cual utiliza 3 diferentes tipos de relaciones entre pxeles, para entregar en
un lugar de memoria definido por el usuario, todas las regiones donde existe una
conexin de pxeles en representacin poligonal[15]. Con esta informacin, son
extrados los cuadrados contenedores de cada contorno y por ltimo la coordenada
central de cada cuadrado, lo que a su vez corresponde al centro de cada objeto.

Adicionalmente, para reconocer cual de los objetos es el interceptor, se encuentra el
circulo contenedor de cada objeto y se selecciona el objeto cuyo crculo tiene el mayor
radio. Los resultados de ambos procedimientos pueden verse en las figuras 22 y 23.
44







Figura 23. Contornos y centros de los objetos
Despus de tener claramente identificados los bordes y el interceptor, es indispensable
almacenarlos de forma ordenada para que de esta manera cada pareja de bordes
represente una lnea de borde como lo muestra la figura 24.

Figura 24. Bordes y sus respectivas lneas de borde
Dado que la organizacin se debe conseguir independiente de la posicin de los puntos
de referencia, el algoritmo de ordenamiento encuentra el centro del campo de juego (el
espacio comprendido dentro de las lneas de borde) halla los vectores generados desde
este punto a todos los bordes, encuentra el ngulo de cada vector respecto al eje
45
coordenado de la imagen y por ltimo, ordena los ngulos en orden ascendente para
almacenar nuevamente los bordes siguiendo este orden.
La figura 25 muestra los pasos del algoritmo y la figura 26 muestra los resultados para
diferentes configuraciones de bordes.







Figura 25. Pasos del algoritmo de ordenamiento de bordes







Figura 26. Resultados para diferentes bordes
Con la anterior informacin, el paso siguiente es calcular los ngulos y las ecuaciones
que caracterizan cada lnea de borde respecto al eje coordenado de la imagen utilizando
formulas simples de geometra. Para los ngulos la ecuacin utilizada es :

=
0
0
arctan
x
y
.
46
y para las ecuaciones de recta, las formulas son:
p p
ax y b
x
y
a
b ax y
=
=
+ =
0
0

donde x
0
y y
0
son los valores de ancho y altura respectivamente, de la lnea de borde
respecto al eje coordenado y y
p,
x
p
son las coordenadas de uno de los bordes.

Dado que la funcin arco-tangente no discrimina los cuadrantes donde en verdad esta el
ngulo resultante, al calcular el ngulo se realiza una comparacin de signos en x
0
y y
0

para obtener el ngulo correcto.

Despus de realizar algunas pruebas a estos algoritmos, se encontr un problema
cuando las lneas de borde se encontraban alineadas al eje coordenado, es decir, cuando
algn valor x
0
era muy pequeo o cercano a cero.
Esto se intento corregir forzando un pequeo valor en lugar de cero para as evitar
divisiones por cero o inconvenientes similares, pero desafortunadamente se generaron
problemas de precisin en los clculos posteriores ya que los valores de pendiente
daban demasiado grandes. Finalmente se decidi marcar este evento con un valor
comodn para indicar un cambio de clculo en los futuros procesamientos.

La ultima etapa de extraccin de informacin, esta asociada a las regiones vecinas del
interceptor ya que es indispensable conocer cual es la lnea de borde en la cual se mueve
y adems identificar algn tipo de referencia que pueda indicar un sentido de
movimiento.

47
Dados los requerimientos de independencia a la inclinacin horizontal de la mesa es
intil definir una direccin como abajo, arriba izquierda o derecha. Sin embargo si se
tiene en cuenta alguna caracterstica intrnseca del actuador de movimiento es posible
encontrar algn sentido o direccin.

El motor que genera el movimiento de intercepcin, esta anclado a un carril especial
que le permite transformar el movimiento rotacional a traslacional. Dado que el motor
se encuentra fijo a uno de los lados del carril, si se determina su posicin se pueden
definir dos sentidos excluyentes de movimiento como alejndose del motor y
acercndose al motor. Para hacerlo, se deja el interceptor cerca del borde donde se
encuentra al motor y con un algoritmo de comparacin de distancias se puede encontrar
fcilmente cul es el borde ms cercano al interceptor. Los resultados pueden verse en
la figura 27.






Figura 27. Lnea de borde mas cercana y borde ms cercano
Este algoritmo tambin se utiliza para encontrar la lnea de borde ms cercana al
interceptor completando as la informacin requerida del campo de juego.



48
3.1.3. Deteccin de movimiento
Despus de realizar las etapas anteriores, el subsistema captura est listo para comenzar
el flujo de datos en tiempo real, detectando los objetos en movimiento y extrayendo sus
posiciones.
Como ya se explic anteriormente, la deteccin se consigue por medio de substraccin
de fondo lo que implica que los objetos a encontrar no se encuentren dentro del fondo y
que adems el fondo sea invariable para todas las imgenes, figura 28. Este ltimo
aspecto se consigue definiendo estrictamente las caractersticas del campo de juego y
mantenindolas invariantes a medida que pase el tiempo. Sin embargo, el primer
aspecto es un poco ms critico ya que uno de los objetos a encontrar, el interceptor, se
encuentra inevitablemente en la imagen que se toma como fondo.










Figura 28. Ejemplo de substraccin de fondo
La forma de superar este inconveniente, es desaparecer al interceptor de la imagen
seleccionada como fondo permitiendo que el proceso de substraccin no lo elimine
errneamente. Sin embargo, esto indica que la substraccin debe realizarse con
49
imgenes binarias principalmente para evitar complejos problemas de edicin a color.
Ver figura 29.

De esta manera, cuando se captura la imagen de fondo y se adquiere toda la
informacin necesaria del campo de juego, se crea una imagen binaria que contenga
todos los objetos de la imagen original, exceptuando al interceptor.






Figura 29. Extraccin del interceptor y binarizacin del fondo
Con esta imagen almacenada, se comienzan a adquirir las imgenes del movimiento,
una por una, se binariza aplicando la ya descrita funcin de umbral y por ltimo se le
resta el fondo almacenado, tal como lo muestra la figura 30.








Figura 30. Substraccin de fondo para una secuencia de imgenes
50
Despus de probar el algoritmo, se encontr que en algunas imgenes la substraccin no
se consegua completamente sino que eran dejadas pequeas porciones que ms
adelante eran procesadas errneamente. Debido a que la raz del problema venia de
variaciones estadsticas en el brillo de una imagen a otra, una de las soluciones era
modelar el brillo como una variable aleatoria con distribucin normal, acumular varias
imgenes y segn el modelo detectar cuales pxeles pertenecan o no al fondo[15]. Sin
embargo, por el elevado costo computacional se decidi optar por una solucin ms
simple la cual consisti en disminuir el rea observada de las imgenes y aumentar la
misma del fondo seleccionado, ver figura 31. Con esto, al realizar la resta de las
imgenes con el fondo, las porciones irregulares arrojaban valores negativos forzando
un cero en la imagen resultado.

_ =



_ =

Figura 31. Solucin implementada para el problema de variacin de brillo
3.1.4. Extraccin de posiciones
Con la imagen binarizada y afectada por la substraccin, se espera que en ella solo se
encuentren los objetos a los cuales se les desea encontrar los centros y con ello lograr
una ubicacin espacial en la imagen.

51
Siguiendo los mismos algoritmos de la seccin 3.1.2, esta imagen binaria es afectada
por un algoritmo de obtencin de contornos para que a partir de ellos se encuentren las
coordenadas de sus centros. Adicionalmente existe un proceso que cuenta el nmero de
objetos presentes en la imagen permitiendo validar el evento no esperado de hallar ms
de dos objetos. En dado caso de presentarse, el sistema completo se reinicia permitiendo
seleccionar una nueva imagen de fondo.




Figura 32. Extraccin de posiciones; binarizacin, contornos y centros
Igualmente, para seleccionar cul de los objetos es el interceptor o la bola, se comparan
los tamaos relativos de los objetos, garantizando siempre que la bola siempre sea ms
pequea que el interceptor. Los resultados de este proceso se aprecian en la figura 32.

3.2. Estimacin
Identificadas las posiciones tanto de la bola como del interceptor y teniendo
caracterizado todo el campo de juego, se da paso al siguiente subsistema del proyecto el
cual comienza hallando la trayectoria que seguir el movimiento de la bola, con base en
la informacin actual y pasada entregada por la cmara.
Todo el desarrollo del bloque estimacin se realiz primero en Matlab y luego se
implemento en visual C++, teniendo como fin lograr una emulacin que estuviera
controlada nicamente por clicks del mouse. Ambos resultados se pueden apreciar en
los anexos 6.2 y 6.3.

52
3.2.1. Trayectoria de disparo
Cada vez que el bloque captura tiene lista una posicin de la bola, esta se almacena en
forma de pila y se utiliza, junto con otras posiciones, como un grupo de datos para
calcular la recta que ms se les ajuste.

Teniendo en cuenta un bajo costo computacional para lograr procesamiento en tiempo
real, los datos son afectados por un sencillo algoritmo de regresin lineal por mnimos
cuadrados, que busca hallar los parmetros de la ecuacin de la recta:
b ax y + =
dados por las frmulas:
( )
n
x
x
n
y x
y x
a
2
2
~
~
~ ~
~ ~

=
n
x
a
n
y
b

=
~ ~

donde x
~
y y
~
representan el conjunto de datos que buscan ser ajustados a la recta y n el
nmero de datos.

Las figuras 33 y 34 muestran el conjunto de cinco posiciones tomadas y la trayectoria
estimada, en Matlab y Visual C++ respectivamente.

53

Figura 33. Posiciones de la bola con la trayectoria estimada; Matlab

Figura 34. Posiciones de la bola con la trayectoria estimada; Visual C++
Debido a que el modelo de regresin utiliza anlisis funcional, se presentan problemas
cuando la trayectoria busca generar una lnea recta que no se considera funcin para el
eje coordenado de la imagen, es decir, cuando se sigue una trayectoria completamente
vertical (ver figuras 35 y 36). En estos casos las trayectorias generadas son errneas y
dependen exclusivamente de los resultados obtenidos por las funciones internas de los
compiladores.
54

Figura 35. Trayectoria vertical

Figura 36. Trayectoria vertical con error
La solucin inmediata que se utiliz y permiti disminuir considerablemente el
problema, fue evitar la existencia de divisiones por cero y errores similares.

3.2.2. Trayectorias de Rebote
Estimada la trayectoria de disparo inicial, el objetivo ahora es encontrar el punto sobre
la lnea de borde del interceptor donde va a pasar la bola en caso que de seguir
movindose con la direccin calculada, es decir, se necesita detectar todos los puntos
donde la bola puede chocar con las lneas de borde y obtener las trayectorias que se
generan despus del contacto con estos puntos.
55

Todo este proceso, se consigue con la interaccin de cuatro algoritmos especializados
que se explican a continuacin.

3.2.2.1. Interseccin
Dada una trayectoria de entrada, definida por los parmetros a y b de la ecuacin de una
recta, se calculan todas las intersecciones existentes entre ella y cada una de las 4 lneas
de borde definidas tambin por parmetros similares. Se tiene entonces que las
coordenadas de la interseccin estn dadas por:
2 1
1 2
`
a a
b b
x

=
1 1
` ` b x a y + =
Donde los subndices indican las diferentes rectas utilizadas.

Figura 37. Intersecciones de la lnea de disparo con las 4 lneas de borde
56
Con las cuatro intersecciones existentes, se debe seleccionar cual de ellas es coherente
con el movimiento que esta siguiendo la bola. Una primera seleccin se consigue
determinando cuales se encuentran a la izquierda o derecha de la posicin mas reciente
de la bola, dependiendo si el movimiento tiende hacia la izquierda o derecha son
descartadas la que no coincidan con l. Esto pretende filtrar los puntos interseccin que
se encuentren detrs del movimiento de la bola los cuales son claramente incorrectos.

Figura 38. Intersecciones seleccionadas a partir de la direccin de movimiento
La seleccin final de la interseccin correcta, se consigue encontrando aquella que se
encuentre dentro de las lneas de borde como se muestra en la figura 39. Esta
comparacin requiere encontrar un cuadrado contenedor del campo de juego, calculado
a partir de sus bordes y alineado al eje coordenado de la imagen.

Las figuras 37, 38 y 39, muestran el desarrollo del algoritmo para un ejemplo arbitrario
en matlab.
57

Figura 39. Interseccin final
Evaluando el comportamiento de este algoritmo, se encontraron principalmente dos
problemas en su funcionamiento. Uno se presenta cuando el campo de juego es
modelado con ngulos agudos como se observa en la figura 40. En este caso el
cuadrado contenedor abre la posibilidad de un error y son detectados varios puntos de
interseccin. Sin embargo, para el funcionamiento del proyecto, este aspecto no
presenta mayores inconvenientes ya que la mesa de juego esta diseada sin este tipo de
particularidad.
58

Figura 40. Campo de juego con ngulos agudos
El otro problema, estuvo asociado a los valores extremos de los parmetros de las
lneas de bordes (aquellas en posicin vertical), cuando el campo de juego se encontraba
alineado al eje coordenado de la imagen. Este se solucion fcilmente, gracias a la
previa marcacin de este evento con una variable comodn. En caso de presentarse, se
omiten los pasos anteriores y se calcula la interseccin con la coordenada x de la lnea
de borde evaluada en la ecuacin de la trayectoria de disparo.

3.2.2.2. Proyeccin
Siguiendo el esquema vectorial mostrado en la figura 41, se aplican las siguientes
ecuaciones en este algoritmo para encontrar las coordenadas del punto proyeccin R
sobre la recta f.
59

Figura 41. Esquema vectorial para clculo de proyecciones
( ) ( ) u C P C m


=
( ) u C m r

=
r C R


=
Donde C es el vector de un punto referencia dentro de la recta f, P el vector del punto a
proyectar, R el vector del punto proyeccin y u un vector especial que hace al vector
C u, un vector unitario.

En las figuras 42 y 43 se presentan los resultados para un caso arbitrario en matlab y
visual C++ respectivamente.

Figura 42. Resultados de una proyeccin en Matlab
60

Figura 43. Resultados de una proyeccin en Visual C++
Al implementar este algoritmo en visual C++, fue necesario implementar funciones de
redondeo y conversiones a nmeros enteros para evitar errores acumulativos en el
momento de pasar de un nmero flotante a uno entero.

3.2.2.3. Rebote
Acorde con la figura 44, se tiene un punto P sobre la recta de disparo g
1
, al cual se le
desea calcular un punto Pnt ubicado en la recta de rebote g
2
.

Figura 44. Modelo para calculo de rebotes
61
Aunque se desconocen los parmetros de la recta g
2
, con la caracterstica angular del
rebote mecnico y la proyeccin del punto P, es posible encontrar las coordenadas del
punto deseado por medio de las ecuaciones descritas en la seccin 1.1:
Pnt
x
= P
x
+ 2(Drebote
x
Pproy
x
)

Pnt
y
= f
2
(pnt
x
).
Pproy
x
Es la coordenada x de la proyeccin del punto P sobre la recta f
1
, obtenida por el
algoritmo proyeccin.
Drebote
x
Es la coordenada x del punto C o el punto interseccin, conseguida despus
de aplicar el algoritmo interseccin.
Y por ultimo, f
2
es la recta descrita por la misma pendiente de f
1
y que pasa por el punto
P.

Figura 45. Punto rebote para una lnea de disparo arbitraria; Matlab
62

Figura 46. Punto rebote para una lnea de disparo arbitraria. Visual C++
Una vez obtenido el punto Pnt y utilizando el punto C, se pueden obtener fcilmente
los parmetros de la recta g
2
, la cual permite bosquejar la trayectoria final de la bola.
Todos estos resultados se presentan en las figuras 45, 46, 47 y 48 para diferentes
trayectorias de disparos arbitrarias.

Figura 47. Trayectoria de rebote; Matlab
63

Figura 48. Trayectoria de rebote; Visual C++
Tal como en las pasadas secciones, se tuvo en cuenta la variable comodn para validar
posibles errores de clculo cuando se tienen lneas de borde verticales, producto de la
alineacin al eje coordenado. Sin embargo, aunque esto no ocasion problemas, fue
necesario adicionarle una verificacin de ngulo para detectar las lneas de borde que
pudieran ser consideradas como verticales. Cuando esto suceda, el algoritmo perda
resolucin y calculaba errneamente las rectas de rebote, como lo muestra la figura 49

Figura 49. Problema de resolucin en lneas de borde verticales
Para solucionarlo, se implement el mismo algoritmo pero trabajando con las
coordenadas y de los puntos y no con las coordenadas x como anteriormente se
encuentra explicado. El resultado se presenta en la figura 50.
64

Figura 50. Solucin al problema de resolucin
3.2.3. Ubicacin final
Una vez se tienen los algoritmos que permiten obtener la trayectoria despus de un
rebote, se implementa un ciclo que pretenda hallar todos los posibles rebotes mientras
no ocurra alguno de los dos siguientes eventos:
El nmero de rebotes calculados excede un nmero limite: En este caso, se termina el
calculo de rebotes y se asume que la trayectoria de disparo es demasiado inclinada para
que la bola llegue al interceptor despus de todos los rebotes. Se reporta una ubicacin
final igual a cero para indicar a los dems subsistemas. Las figuras 51 y 52 muestran
este evento para dos disparos arbitrarios

Figura 51. Nmero de rebotes excede un lmite; Matlab
65

Figura 52. Nmero de rebotes excede un lmite; Visual C++
La ltima interseccin calculada esta localizada en la lnea de borde del interceptor:
Esta vez el algoritmo encuentra la ubicacin final esperada, cumpliendo el objetivo del
subsistema estimacin, tal como se presenta en las figuras 53 y 54.

Figura 53. Intercepcin exitosa; Matlab

Figura 54. Intercepcin exitosa; Visual C++
66
Evaluando el funcionamiento de la emulacin final, se encontr un problema
relacionado con la forma en que el algoritmo decide hacia que direccin, izquierda o
derecha, se est desplazando la bola.
En la figura 55 se muestra este problema donde inicialmente los 5 puntos de trayectoria
indican un movimiento hacia la derecha pero despus de incluir uno mas en una
posicin especifica, la trayectoria cambia de direccin de movimiento.






Figura 55. Problema de direccin
Inicialmente se propuso un algoritmo que detectaba la direccin de movimiento de todas
las parejas de puntos consecutivos y despus obtena el promedio de los resultados,
asumiendo la direccin del grupo como la direccin de la mayora de puntos. Sin
embargo, despus de observar algunos casos donde esto no se cumpla, se decidi optar
por un mecanismo mucho mas sencillo, donde la estrategia de decisin se resume en
restar las coordenadas x del punto mas reciente y el menos reciente, y decidir Izquierda
si el resultado da negativo o Derecha en caso contrario.

3.3. Enlace de los subsistemas captura y estimacin
Luego de garantizar el correcto funcionamiento de la emulacin controlada del sistema
estimacin, la tarea siguiente es conseguir que el subsistema captura sea quien
67
entregue las posiciones al subsistema estimacin y no los sucesivos cliks del mouse en
la emulacin ya realizada.

Este resultado se puede apreciar en el anexo 6.4, donde se pueden observar varios
lanzamientos de la bola sobre el campo de juego; y los respectivos clculos hechos por
el subsistema estimacin. Ineludiblemente, aunque se observa un correcto
funcionamiento tanto en captura como en estimacin, tambin se detectan graves
problemas que pueden llegar a perjudicar seriamente el funcionamiento del subsistema
posicin, debido principalmente a la alta variabilidad de las posiciones estimadas y a su
clculo en momentos inoportunos.

En las secciones listadas a continuacin, se definen cada uno de los problemas
anteriormente sugeridos y se presenta su respectiva solucin.

3.3.1. Dentro del campo de juego
Cuando el subsistema captura encuentra la posicin de la bola dentro de la imagen
actual, inmediatamente esta posicin es entregada al subsistema estimacin para su
posterior anlisis. Sin embargo, hay regiones de la imagen donde la bola puede
encontrarse y no se necesita del anlisis del bloque estimacin como lo muestra la figura
56. Por lo tanto, es necesario verificar si la bola se encuentra dentro del campo de juego
y despus permitir el procesamiento del bloque estimacin.
68

Figura 56. Problema: dentro del campo de juego
Con el conjunto de algoritmos hasta ahora realizados y teniendo en cuenta sus
respectivas limitaciones, es fcil verificar si las proyecciones de la bola, sobre cada
lnea de borde, se encuentran dentro del cuadrado contenedor descrito en la seccin
3.2.2.1. Cuando esto ocurre, se puede inferir inmediatamente que la bola est
efectivamente dentro del campo de juego. Para una mayor descripcin de esta solucin,
se presenta la figura 57, donde se observan las proyecciones mencionadas junto con el
resultado final.

Figura 57. Solucin al problema dentro del campo de juego

3.3.2. Implicaciones de un choque
Cada vez que la bola se acerca y se aleja a un borde, antes y despus de un rebote, el
conjunto de puntos almacenados forman una trayectoria irregular, mostrada en la figura
58, que produce una radical variacin del punto final estimado, sobre la lnea de borde
del interceptor.
69







Figura 58. Trayectoria irregular despus de un rebote
Dado que se requiere que el punto de arribo estimado se mantenga antes y despus del
choque para evitar movimientos bruscos del interceptor, se verifica si la bola se
encuentra cerca de cualquier lnea de borde y se realizan las siguientes tareas:

Evitar el funcionamiento del bloque estimacin.
Reemplazar todas las posiciones almacenadas por la posicin actual.
Entregar la posicin del interceptor que se calcul antes de entrar al choque.

En la figura 59, se puede observar la bola instantes despus de un choque sin la
trayectoria irregular de puntos, mostrando una notoria mejora en el algoritmo.

Figura 59. Solucin al problema de choque
70
Sin embargo, el problema se sigue presentando nicamente cuando los disparos son
rpidos debido a que no se adquieren cuadros consecutivos por la cmara.

3.3.3. Bola quieta
Debido a las variaciones de brillo cuando se captura cada imagen, se generan pequeas
diferencias en las distintas posiciones de la bola cuando sta se encuentra quieta dentro
del campo.

Figura 60. Problema cuando la bola se encuentra inmvil
Esto impide mantener control sobre el bloque estimacin en el momento de estimar la
trayectoria de disparo y por ende sobre todos los dems clculos. Sin embargo, si se
implementa una medida de velocidad diferenciando las coordenadas pasadas y actual de
la bola, es posible deshabilitar el bloque estimacin para fluctuaciones pequeas en la
posicin de la bola, por ejemplo de un pxel por cuadro.

En la figura 60 y 61 se presenta el problema y el resultado de la solucin implementada,
la cual condujo a la desaparicin completa del problema. Ntese la ausencia de puntos
de trayectoria y por ende la posicin esttica de la bola.
71

Figura 61. Solucin al problema de bola quieta
3.4. Posicin
3.4.1. Decisin y comunicacin
La ultima fase de desarrollo del proyecto, comienza comparando la posicin vista del
interceptor por la cmara y la posicin estimada del interceptor, despus de analizar el
movimiento de la bola.

Inicialmente se calcula la distancia en pxeles que las separa, considerando cada
posicin como un vector referido al eje coordenado de la imagen, restndolos y hallando
la magnitud del vector resultado (ver figura 62). Seguido de esto, esta informacin se
convierte a nmero de pasos por medio de una sencilla regla de tres, para que pueda
ser entendida por el motor.

Figura 62. Clculo de la distancia en pxeles entre las posiciones del interceptor
72
Con el nmero de pasos requeridos para conseguir el movimiento esperado, ahora se
necesita encontrar la direccin en la cual debe moverse el motor, la cual, gracias a la
informacin obtenida por el subsistema captura, se puede conseguir elaborando un
algoritmo que encuentre la direccin de movimiento teniendo en cuenta la inclinacin
de la lnea de borde del interceptor, las dos posiciones del interceptor y el borde
marcado como aquel en donde se encuentra el motor.

La figura 63 describe completamente el algoritmo propuesto, donde dependiendo de la
las coordenadas x de la posicin vista (anterior) y calculada (actual), y la posicin
relativa del borde del motor, se decide cual de las dos posibles direcciones es correcta.

Figura 63. Algoritmo de inferencia de direccin
Al evaluar su funcionamiento, nuevamente se presento el problema relacionado a las
inclinaciones netamente verticales de la lnea de borde del interceptor, el cual se
73
corrigi rpidamente validando la igualdad de las coordenadas x y trabajando solo con
las coordenadas y.

Una vez se obtiene toda la informacin necesaria para mover correctamente al motor, se
construye una trama de 4 bytes ordenada en un vector de caracteres como lo muestra la
figura 64.

Figura 64. Trama de 4 bytes para comunicacin serial
Dado que cada byte es enviado de forma serial a travs de un puerto COM del
computador, la informacin de pasos es previamente convertida a cdigo ASCII, justo
despus de pasar el nmero de pasos a sistema hexadecimal para su fcil conversin.

Antes de ser enviada la palabra, fue necesario verificar la existencia de algunos valores
que ocasionaban problemas a la hora de recibirlos. Cuando el nmero de pasos
calculado era cero, se opto por forzar un numero de pasos igual a 1 al igual que cuando
el nmero de pasos exceda la longitud de la mesa en pasos.

3.4.2. Motor
El motor utilizado para conseguir el movimiento, es un motor a pasos unipolar de 6
hilos.

74
Para lograr la transformacin de movimiento rotacional a traslacional, el motor es
acoplado a un sistema de piones que permite el movimiento de una pequea bandeja la
cual se encuentra sujetada a una banda dentada.

La velocidad del interceptor, el cual esta adherido de la bandeja ya mencionada,
depende de la frecuencia de las seales que alimentan al motor, el sistema de piones en
el acople y por ltimo de las caractersticas intrnsecas del motor.

3.4.3. Recepcin
El ultimo bloque del subsistema posicin, Actuador, debe encargarse de recibir la
informacin enviada por el computador, extraer tanto la direccin como el nmero de
pasos de la codificacin ASCII y hexadecimal, y por ltimo conseguir que el motor se
mueva acorde con la informacin enviada.

Todo esto es posible gracias a la utilizacin de un microcontrolador el cual se encarga
de ejecutar las siguientes tareas, mostradas claramente en el diagrama de flujo de la
figura 65.
75

Figura 65. Tareas de ejecucin del microcontrolador

3.4.3.1. Configuracin USB y tareas de emulacin
Para lograr emulacin RS232 utilizando USB, el microcontrolador debe ser configurado
para tener las cuatro entradas necesarias del puerto, y para enviar la informacin
requerida por el sistema operativo, en este caso Windows, para una satisfactoria
configuracin como un puerto serial COM.

76
Adicionalmente, una vez es establecida la comunicacin, el microcontrolador debe
ejecutar rutinas especializadas que busquen controlar el flujo de datos y la eventual
desconexin del puerto.

Todo esto fue desarrollado previamente por especialistas de Microchip y dejado para su
libre utilizacin como un firmware titulado RS232 emulation demo[17].

3.4.3.2. Configuracin de registros para interrupciones y salidas
Debido a que el microcontrolador debe garantizar el suministro de un nmero de pasos
especifico, se implementa un contador de frecuencia variable cuyas interrupciones
permiten la generacin de las 4 seales cuadradas que manejaban los devanados del
motor.

Para generar la base de tiempos que controla la velocidad de avance del motor se usa un
contador disponible en el microcontrolador. Este contador genera una interrupcin
cuando iguala un nmero de conteos definido por el programador. Esto permite
flexibilidad en la seleccin de la velocidad de avance del motor[18].

3.4.3.3. Verificacin de llegada, decodificacin y control de datos
Mientras esta activa la comunicacin entre el computador y el microcontrolador, este
ltimo debe reconocer la llegada de un dato para poder dar inicio a los pasos de
decodificacin.
77

Figura 66. Diagrama de flujo del bloque verificacin de llegada
Los tres primeros bytes, son procesados por un algoritmo que se encarga de extraer el
nmero hexadecimal del cdigo ASCII y obtener un valor decimal acorde con el
nmero obtenido.

Seguido de esto, se da inicio al conteo de pasos, se actualiza la direccin de
movimientos y se verifica si el nmero de interrupciones ha igualado el nmero de
pasos enviado, para parar el contador. Para un mayor entendimiento de todo este
procedimiento, ver el diagrama de flujo mostrado en la figura 66.




78
3.4.3.4. Manejo de interrupciones y control de salidas
Cada vez que el contador genera una interrupcin, no solo se aumenta una variable con
el fin de mantener el nmero de interrupciones realizadas, sino que adems se activan
las salidas teniendo en cuenta la secuencia necesaria para el movimiento del motor.

Debido a que se quieren generar cuatro seales como lo muestra la figura 9, descrita en
la seccin 1.4, cada salida del microcontrolador es mantenida en alto hasta que aparece
una nueva interrupcin. Cuando esto sucede todas las salidas se ponen en bajo y se
activa la siguiente salida dependiendo de la direccin recibida.

Una vez se obtienen las seales de control para el motor, estas son entregadas como
entrada a un pequeo circuito manejador el cual se encarga de suministrar la corriente
necesaria para realizar un movimiento.

Evaluando el comportamiento del ltimo subsistema del proyecto, se observa que la
velocidad del motor no es suficiente para permitir una cantidad considerable de disparos
interceptados. Para solucionarlo, se reemplaza el motor por un motor a pasos bipolar
con mayor torque. Sin embargo, debido a que este ltimo posee ms pasos por vuelta,
resulta moverse con menor velocidad.

El problema finalmente se reduce aumentando el torque del motor unipolar inicial,
cambiando su forma de manejo descrita en la seccin 1.4. Las seales de control fueron
reemplazadas por las mostradas en la figura 67, con el fin de prender dos bobinas al
mismo tiempo y por ende aumentar el torque de manejo.

79

Figura 67. Seales del motor unipolar para conseguir un mayor torque


80
4. ANLISIS DE RESULTADOS
Para evaluar el resultado final del proyecto, se realizan diversas pruebas dirigidas cada
una a evaluar aspectos clave del proyecto, con el fin de conocer el porcentaje de
intercepciones exitosas para un determinado nmero de lanzamientos de la bola.
Los resultados obtenidos permiten encontrar las variables criticas en el desempeo del
sistema y por ende los temas a enfatizar para futuros proyectos y desarrollos.

Es importante recalcar que todos los disparos se realizan con una velocidad tal que no
superan la velocidad mxima del motor de 21.06 cm/s

4.1. Intercepcin vs. Cuadros por segundo
La primera prueba consiste en medir el nmero de intercepciones exitosas para 50
lanzamientos, en 3 diferentes tasas de captura de la cmara y con los 6 diferentes
disparos mostrados en la figura 68. Los resultados se muestran en las tablas 1, 2 y 3.

Figura 68. Estilos de disparos definidos para la realizacin de las pruebas
81
El nmero de la izquierda indica la tasa configurada mientras que el de la derecha
muestra la tasa real obtenida.
30 26 cuadros por segundo.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 49 98
2 26 52
3 42 82
4 19 38
5 48 96
6 38 76
Tabla 1. Resultados para 30 cuadros por segundo
15 13 cuadros por segundo.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 44 88
2 27 54
3 43 86
4 26 52
5 39 78
6 39 78
Tabla 2. Resultados para 15 cuadros por segundo
5 3 cuadros por segundo.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 31 62
2 10 20
82
3 24 48
4 14 28
5 24 48
6 36 72
Tabla 3. Resultados para 5 cuadros por segundo.

Se encontr que los bajos resultados obtenidos en los lanzamientos tipo 2 y tipo 4, se
deban a 2 problemas cuya explicacin y solucin se presenta a continuacin:
Al asignar la direccin de movimiento del motor, no se tuvo en cuenta la
posibilidad de igualdad entre las posiciones vista y calculada del interceptor y la
posicin relativa del borde del motor (seccin 3.4.1. figura 63). Se incluy esta
posibilidad en el momento de hacer la seleccin.

La distorsin radial de los lentes de la cmara, ocasionaban una diferencia entre
la posicin observada del interceptor (con la cual se hacen los clculos) , y la
posicin real de la base del mismo (con la cual en realidad se intercepta). El
problema se solucion fcilmente, disminuyendo la altura del interceptor.

Los resultados de los lanzamientos tipo 3 y 6, permitieron encontrar un problema de
inestabilidad en el momento de posicionar el interceptor en el punto deseado. El proceso
de restar las dos posiciones del interceptor (calculada y observada) y hacer una
conversin a pasos, describe el comportamiento de un controlador proporcional el cual
es altamente sensible al valor de ganancia. Para quitar la inestabilidad se propuso
disminuir la ganancia o el valor de conversin de pxeles a pasos.

83
Despus de implementar las anteriores soluciones, se repitieron los lanzamientos
iniciales cuyos resultados se muestran a continuacin.

30 26 cuadros por segundo.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 49 98
2 49 98
3 50 100
4 49 98
5 48 96
6 47 94
Tabla 4. Resultados para 30 cuadros por segundo, despus de solucin
15 13 cuadros por segundo.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 46 92
2 49 98
3 49 98
4 47 94
5 42 84
6 47 94
Tabla 5. Resultados para 15 cuadros por segundo, despus de solucin
5 3 cuadros por segundo.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 30 60
84
2 18 36
3 26 52
4 25 50
5 24 48
6 31 62
Tabla 6. Resultados para 5 cuadros por segundo, despus de solucin

Cuando la tasa de captura es alta, el algoritmo de estimacin entrega mltiples
posiciones las cuales permiten conseguir un alto grado de correccin en el momento de
posicionar el interceptor. Cuando se reducen los cuadros por segundo capturados,
adems de disminuir la velocidad de reaccin del interceptor, frecuentemente son
ignorados aquellos momentos cuando la bola choca con un borde, generando el
problema descrito en la seccin 3.3.2.

4.2. Robustez a la orientacin de la mesa
Utilizando una tasa de captura de 30 cuadros por segundo y los estilos de rebote 1 y 2,
se realiza la siguiente prueba que consiste en modificar en 3 diferentes formas, la
orientacin de la mesa respecto a la posicin de la cmara. Estas ubicaciones son
mostradas en las figuras 69,70 y 71, junto con los resultados obtenidos en las tablas 7, 8
y 9.





85
Inclinacin 1:

Figura 69. Inclinacin 1 del campo de juego
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 49 98
2 48 96
Tabla 7. Resultados para la inclinacin 1
Inclinacin 2

Figura 70. Inclinacin 2 del campo de juego
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 48 96
2 50 100
86
Tabla 8. Resultados para la inclinacin 2
Inclinacin 3

Figura 71. Inclinacin 3 del campo de juego
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 50 100
2 49 98
Tabla 9. Resultados para la inclinacin 3
Mientras los disparos no excedan la velocidad lmite del motor, el comportamiento
del sistema es ptimo y permite no solo rotaciones de la mesa sino tambin
modificaciones en el tamao del campo de juego. Esto ltimo implica ajustar
algunos umbrales de control debido al incremento de la distancia entre la cmara y
el campo de juego y por ende la disminucin de brillo y tamao de los objetos a
observar.

4.3. Robustez a la no linealidad del modelo
Inicialmente se propuso un modelo de choques lineal que permitiera resultados
medianamente alejados de lo calculado, con el fin de poner en evidencia las mltiples
ventajas del control basado en visin.
87
Esta prueba consiste en aumentar la no linealidad del fenmeno de choques para medir,
con el nmero de intercepciones realizadas, qu tan robusto es el sistema ante respuestas
desviadas de los estimados realizados y que tan indispensable es el modelo de choques
frente al desempeo global.

Para conseguir los resultados de las tablas 10 y 11, se forzaron dos inclinaciones
verticales del campo de juego, cada una de 3 grados tendiendo hacia los bordes
laterales. Se utiliz la misma tasa de captura y los mismos estilos de rebote de la seccin
anterior.

Inclinacin vertical hacia el borde del motor.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 47 94
2 50 100
Tabla 10. Resultados para la inclinacin vertical hacia el borde del motor
Inclinacin vertical hacia el borde opuesto del motor.
Estilo de Disparo Nmero de Intercepciones Porcentaje de xito
1 48 96
2 44 88
Tabla 11. Resultados para la inclinacin vertical hacia el borde opuesto del motor
Mientras la velocidad de captura sea alta, el sistema es capaz de corregir variaciones del
modelo siempre y cuando estas no conduzcan a cambios drsticos en la direccin de
movimiento del motor. Esto ultimo se comprob en los lanzamientos donde se obtuvo
un porcentaje de xito de 88%, debido a que se forzaron disparos con alto nivel de
rotacin y vibracin.
88
5. CONCLUSIONES
El control basado en visin es una forma que permite obtener excelentes resultados a la
hora de realizar diversas tareas automticas debido a su considerable robustez en el
momento de analizar la informacin de entrada y decidir una accin de control. Debido
a que todo el anlisis se hace teniendo en cuenta las imgenes del proceso a controlar, la
implementacin de este tipo de sistemas se reduce a la correcta ubicacin de una cmara
y en algunos casos a una estable iluminacin lo que representa una gran ventaja frente a
sistemas con sensores convencionales mucho ms intrusivos que el enfoque de una
cmara. Sin embargo, es importante recalcar su gran limitante en cuanto a precisin y
por ende su ideal entorno es en la ejecucin de tareas de movimiento complejo que
involucren reconocimiento de caractersticas visuales de gran escala y no de detalles
minuciosos.

Utilizar la estrategia de control basado en visin y adicionar adems los conceptos
bsicos de la visin humana donde despus de cada imagen adquirida se repite
redundantemente el procesamiento para emulacin y calculo del mundo exterior,
generan un sistema capaz de soportar variaciones, no solo en las caractersticas
intrnsecas del entorno, sino tambin al modelo inicial del proceso hacindolo
comparable con las estrategias que involucran controladores adaptables o inteligencia
artificial. Se encontr adems que el sistema presenta un buen funcionamiento mientras
los ojos del sistema no alteren considerablemente la realidad, tal como sucede en la
visin natural si se encuentran distorsiones pticas severas causadas por enfermedades
oculares.

89
El desarrollo de tareas automticas donde se busca emular comportamientos humanos
que involucran la continua interaccin con un objeto dinmico externo, se puede
conseguir fcilmente con la arquitectura propuesta en el presente trabajo de grado,
debido no solo a las considerables ventajas del control basado en visin y la visin
artificial, sino tambin a los innumerables costos que se reducen y la elevada
versatilidad conseguida al utilizar un computador personal con especificaciones tcnicas
convencionales, una econmica cmara web y una circuito electrnico simple basada en
los ya mundialmente reconocidos microcontroladores. Estas caractersticas tambin
dejan claro un camino de desarrollo para futuros proyectos en tratamiento digital de
imgenes donde habitualmente se requieren tarjetas de procesamiento independientes y
costosas cmaras ya sean anlogas o digitales.

Las libreras de Opencv como herramienta de tratamiento y manejo de imgenes son
muy tiles debido a su fcil implementacin, su considerable versatilidad la cual
permite abrir, crear, visualizar y modificar archivos tanto de imagen y video, el reducido
costo computacional de cada una de sus funciones y su importante caracterstica de ser
un cdigo tipo opensource, lo que significa la ausencia de algn costo asociado y una
enorme comunidad de apoyo y soporte tcnico.

Los algoritmos desarrollados como mecanismo de estimacin, representaron al final
unos resultados con porcentaje de xito superiores al 90% debido a que sus diseos
incluyeron todas las posibles orientaciones de la mesa e inclinaciones de los bordes
que muchas de ellas nunca se presentaron en el comportamiento final del proyecto. Esto
aument considerablemente la robustez del sistema y por ende un xito superior al 90%
en el cumplimiento del objetivo principal.
90

La velocidad del actuador en el momento de ejecutar tareas con estrategias de control
embebidas en visin artificial, se hace crtica e indispensable para sacarle mximo
provecho al buen funcionamiento de los bloques de reconocimiento y decisin. Aunque
los motores a pasos no poseen una velocidad comparable con la de los motores de
corriente continua, su fcil manejo y en ocasiones menor tamao, los hace ms
convenientes para el desarrollo de tareas como la desarrollada en el presente trabajo de
grado.

91
6. ANEXOS
6.1. Descripcin de funciones y estructuras utilizadas de opencv
IplImage: Estructura utilizada para el manejo de imgenes cuyo origen se
remonta a la librera de procesamiento de imgenes de intel, IPL. A continuacin
se presentan solo las propiedades que utiliza opencv.
typedef struct _IplImage
{
int nSize; Tamao de la estructura.
int nChannels; Numero de canales, asociados al espacio de colores.
int depth; Formato en bits para el valor de los pxeles.
int origin; Indicador para el origen de la imagen.
int width; Ancho de la imagen en pxeles.
int height; Altura de la imagen en pxeles.
struct _IplROI *roi; Apuntador que indica la regin de la imagen a procesar
int imageSize; Tamao de la imagen en bytes.
char *imageData; Apuntador a los datos de la imagen.
int widthStep; Tamao de la fila de imagen alineada en bytes
char *imageDataOrigin; Apuntador para el origen de los datos de la imagen.
}
IplImage;
CvPoint: Estructura con coordenadas x y para un punto bidimensional.
typedef struct CvPoint
{
int x; Coordenada x del punto
int y; Coordenada y del punto
92
}
CvPoint;
CvPoint2D32f: Estructura con coordenadas x y con formato no entero para un
punto bidimensional.
typedef struct CvPoint2D32f
{
float x; Coordenada x del punto.
float y; Coordenada y del punto.
}
CvPoint2D32f;
CvScalar: Contenedor de 4 nmeros para edicin de un pxel en una imagen con
canal singular o mltiple.
typedef struct CvScalar
{
double val[4];
}
CvScalar;
CvSize: Tamao de un rectangulo.
typedef struct CvSize
{
int width; Ancho del rectngulo.
int height; Altura del rectngulo.
}
CvSize;
93
CvRect: Estructura con la informacin bsica de un rectngulo alineado con el
eje coordenado de la imagen.
typedef struct CvRect
{
int x; Coordenada x de las esquinas mas a la izquierda.
int y; Coordenada y de la esquina superior o inferior.
int width; Ancho del rectngulo.
int height; Altura del rectngulo
}
CvRect;
CvMat: Estructura para el manejo de matrices. En la estructura mostrada a
continuacin se omitieron algunos miembros de la estructura para su fcil
comprensin.
typedef struct CvMat
{
int type; Indicador para el formato de los elementos de la matriz.
int step; Longitud completa de fila en bytes.
int* refcount; Contador de datos de referencia.
int rows; Numero de filas.
int cols; Numero de columnas.
}
CvMat;
CvMemStorage: Estructura utilizada para almacenar datos de crecimiento
dinmico como secuencias, contornos, grficos, subdivisiones etc. Est
94
organizada como una lista de bloques de igual tamao siendo el ltimo el inicio
de la lista y el primero el de trabajo actual.
typedef struct CvMemStorage
{
struct CvMemBlock* bottom; Primer bloque de memoria asignado.
struct CvMemBlock* top; Bloque actual de trabajo.
struct CvMemStorage* parent; Apuntador que indica la fuente de bloques nuevos.
int block_size; Tamao del bloque.
int free_space; Espacio libre en bytes del bloque actual
}
CvMemStorage;
CvSeq: Estructura bsica de secuencias, utilizada para representar el crecimiento
de vectores, pilas y consultas.
typedef struct CvSeq
{
int flags; Banderas de control.
int header_size; Tamao del encabezado de secuencia.
struct CvSeq* h_prev; Secuencia anterior.
struct CvSeq* h_next; Secuencia siguiente.
struct CvSeq* v_prev; Segunda secuencia anterior
struct CvSeq* v_next; Segunda secuencia siguiente
int total; Numero total de elementos.
int elem_size; Tamao del elemento de secuencia en bytes.
char* block_max; Mximo limite del ultimo bloque.
char* ptr; Apuntador de escritura actual.
95
int delta_elems; Granularidad de la secuencia.
CvMemStorage* storage; Donde es almacenada la secuencia
CvSeqBlock* free_blocks; Bloques libres de la lista.
CvSeqBlock* first; Apuntador al primer bloque de la secuencia
}
CvSeq;

cvCreateImage ( CvSize size, int depth, int channels ): Genera un apuntador
tipo IplImage con el tamao indicado en size, el formato en depth y el numero
de canales en channels.
cvCreateMat ( int rows, int cols, int type ): Genera un apuntador tipo CvMat
con las filas, columnas y formato indicados en rows, cols, y type
respectivamente.
cvPoint ( int x, int y ): Genera una estructura tipo CvPoint con las coordenadas
definidas en x y y.
cvNamedWindow( const char* name, int flags ): Crea una ventana la cual
puede ser usada como contenedora de imgenes y barras de arrastre. Todas las
ventanas son referenciadas por el nombre definido en el parmetro name. Flags
es un parmetro de control para el tamao de la ventana creada.
cvCreateTrackbar( const char* trackbar_name, const char* window_name,
int* value, int count, CvTrackbarCallback on_change ): Crea una barra de
arrastre en la ventana definida en window_name, con mxima posicin count y
nombre trackbar_name. Los parmetros de entrada value y on_change,
representan el valor de la posicin de la barra y la funcin a ejecutar cada vez
que un usuario utilice la barra.
96
cvShowImage( const char* name, const CvArr* image ): Visualiza la imagen
definida en el arreglo de entrada image, en la ventana definida en el parmetro
name.
cvDestroyWindow( const char* name ): Destruye la ventana con el nombre
especificado en el parmetro name.
cvCopy ( const CvArr* src, CvArr* dst, const CvArr* mask=NULL ):
Copia la imagen o matriz src, en dst teniendo en cuenta la mascara definida en la
imagen o matriz mask.
cvSplit(CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3)
Divide un arreglo multicanal definido en src, en los cuatro arreglos de canal
singular dst0 dst3. La extraccin se hace siempre y cuando el canal en cuestin
sea no nulo.
cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL,
int iterations=1 ): Erosiona la imagen entrante src, usando un elemento
estructural que determina la forma de la vecindad de un pxel donde se calcula
un mnimo[15]. El resultado es puesto en la imagen dst.
cvDilate ( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL,
int iterations=1 ): Distorsiona la imagen entrante src, usando un elemento
estructural que determina la forma de la vecindad de un pxel donde se calcula
un mximo[15]. El resultado es puesto en la imagen dst.
cvSub ( CvArr* src1, CvArr* src2, CvArr* dst, CvArr* mask=NULL ):
Calcula la diferencia por elemento entre dos arreglos, siempre y cuando estn
dentro de la mascara. Todos los arreglos deben ser del mismo tipo exceptuando
la mascara.
97
cvSum ( const CvArr* arr ): Suma todos los elementos del arreglo entrante,
por cada canal y el resultado lo entrega en una estructura tipo CvScalar.
cvMul ( CvArr* src1, const CvArr* src2, CvArr* dst, double scale=1 ):
Calcula la multiplicacin por elemento de los arreglos src1 y src2, dejando el
resultado en el arreglo dst. La multiplicacin puede incluir un factor de escala
indicado en la variable scale.
cvAvg ( const CvArr* arr, const CvArr* mask=NULL ): Calcula el promedio
de los elementos del arreglo de entrada, independiente para cada canal siempre y
cuando el elemento se encuentre dentro de la mascara. El resultado se entrega
como una estructura tipo CvScalar.
cvGetReal1D ( const CvArr* arr, int idx0 ): Retorna el valor de un elemento
particular indicado en idx0, que se encuentra en el arreglo arr.
cvSetReal1D ( CvArr* arr, int idx0, double value ): Asigna el valor puesto en
value, en el elemento idx0 del arreglo arr.
cvGetDimSize( const CvArr* arr, int index ): Retorna el numero de columnas
o filas si el arreglo es una matriz o el tamao de ancho o altura si el arreglo es
una imagen.
cvThreshold (const CvArr* src, CvArr* dst, double threshold, double
max_value, int threshold_type ): Umbraliza el arreglo de entrada de canal
singular src, teniendo en cuenta el tipo de umbralizacin indicado en el
parmetro thereshold_ type. Para una umbralizacin de tipo binaria, la funcin
recorre todos los pxeles de la imagen y si estos son mayores que la variable
thereshold, su valor se reemplaza por el indicado en el parmetro max_value. De
lo contrario reemplaza el valor por un cero. El arreglo resultado, es puesto en el
parmetro de salida dst.
98
cvFindContours ( CvArr* image, CvMemStorage* storage, CvSeq**
first_contour, int header_size=sizeof(CvContour), int
mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE,
CvPoint offset=cvPoint(0,0) ): Encuentra los contornos de la imagen de entrada
image la cual es de canal singular y binaria. La informacin es almacenada en el
parmetro storage y el primer contorno exterior es referenciado en el apuntador
first_contour. La funcin puede devolver los contornos encontrados con orden
jerrquico segn como estn contenidos y tambin permite seleccionar el tipo
de representacin de los contornos, con el parmetro method[15].
cvBoundingRect ( CvArr* points, int update=0 ): Calcula el cuadrado
contenedor de los puntos existentes en el arreglo de entrada points y lo entrega
en una estructura tipo CvRect. Update es un parmetro de control para los
diferentes tipos de arreglos.
cvMinEnclosingCircle(CvArr*points,CvPoint2D32f* center, float* radius ):
Calcula de forma iterativa el mnimo circulo circunscrito para los puntos
existentes en el arreglo de entrada points. Center y radius son parmetros de
salida que indican el centro y el radio del circulo hallado.
cvDrawContours ( CvArr *img, CvSeq* contour, CvScalar external_color,
CvScalar hole_color, int max_level, int thickness=1, int line_type=8 ):
Dibuja los contornos referenciados en el apuntador contour con la posibilidad de
modificar el color, el ancho y el tipo de lnea a dibujar. Si el parmetro thickness
es menor que cero, se rellenan todos los contornos con el color definido en
external_color. El parmetro max_level, indica el numero de niveles de jerarqua
o contenencia que se desean dibujar.
99
cvLine ( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int
thickness=1, int line_type=8, int shift=0 ): Dibuja un segmento de lnea entre
los puntos pt1 y pt2, en la imagen indicada en img. Son modificables el color, el
ancho y el tipo de lnea a dibujar.
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int
thickness=1, int line_type=8, int shift=0 ): Dibuja un circulo sencillo o con
relleno con el punto central y radio definidos en center y radius. Se puede
modificar el color, el ancho y el tipo de lnea a dibujar.
cvcamGetCamerasCount( ): Es el primer procedimiento de llamado para todo
programa basado en cvcam ya que inicia toda la librera. Retorna el numero de
cmaras encontradas en el sistema operativo.
cvcamSetProperty( int camera, cont char* property, void *value ): Ajusta el
valor de la propiedad definida en el parmetro property, con el valor definido en
value. El parmetro camera define la cmara a la cual se le esta haciendo el
ajuste.
cvcamGetProperty(int camera, const char* property, void* value):
Procedimiento para leer una propiedad definida en el parmetro property, de la
cmara indicada con el parmetro camera. Value es el parmetro de salida donde
se guarda el valor de la propiedad leda.
cvcamInit( ): Esta funcin hace activa las propiedades ajustadas por la funcin
cvcamSetProperty. Antes de llamarla, es necesario ejecutar las funciones
cvcamGetCamerasCount y cvcamSetProperty.
cvcamStart( ): Comienza el flujo de video para todas las cmaras habilitadas.
Retorna un 0 si el inicio es exitoso 1 en caso contrario.
cvcamStop( ): Para el flujo de video.
100
cvcamExit( ): Libera todos los recursos utilizados por cvcam.
cvReleaseMemStorage( CvMemStorage** storage ): Libera todos los bloques
de memoria utilizados por el apuntador storage y lo borra.
cvWaitKey( int delay=0 ): Espera un evento de pulsado de alguna tecla del
teclado. Si el parmetro de entrada es menor o igual a cero, se espera
indefinidamente. En caso contrario se espera un numero de milisegundos
definido en l. La funcin retorna el cdigo de la tecla presionada.
6.7. Esquemtico y circuito impreso

101
BIBLIOGRAFIA
[1] ADAMS, JARRET, Artificial vision is bringing robots out of the dark ages. Red
Herring,08-2000

[2] PICCARDI MASSIMO, JAN TONY. Recent Advances in Computer Vision,
American Institue Of Physics. Febrero-marzo 2003

[3] MCGARRY, E. JOHN. An Outlook for Machine Vision, Automatic Image
Association, Cognex Corporation, Modular Vision Systems Division

[4] VELOSO MANUELA, BOWLING MICHAEL, Motion Control in Dynamic
Multi-Robot Environments Computer Science Department. Carnegie Mellon
University. Pittsburgh, PA 15213-3890

[5] C. H. MESSOM, G. SEN GUPTA, LIM YUEN SIONG, S. DEMIDENKO,
Improving Predictive Control of a Mobile Robot: Application of Image
Processing and Kalman Filtering, IMTC 2003 Instrumentation and
Measurement, Technology Conference, USA, 20-22 May 2003

[6] BISHOP, BRADLEY E. , SPONG, MARK W. Vision-based control of an Air
Hockey Playing Robot, IEEE Control Systems. Junio 1999. pp 23

[7] SAEDAN, MANA; H. ANG JR. MARCELO, 3D Vision-Based Control On An
Industrial Robot IASTED Nov 19 22, florida, USA. pp 152

102
[8] COWAN, NOAH J. Geometric Visual Servoing. Technical Report, Department
of Mechanical Engineering. Johns Hopkins University. Agosto 16 2004

[9] EZIO. MALIS, Visual servoing invariant to changes in camera intrinsic
parameters, Int. Conf. on Computer Vision, Vancouver, Canada, July 2001, vol.
1, pp. 704.

[10] TIPLER A. PAUL. Fisica, Editorial Reverte, Tomo 1 pag 204-207, 249-251.
ISBN 84-291-4366-1

[11] FORSYTH DAVID A., PONCE JEAN, Computer Vision a Modern Approach
Prentice Hall, Upper Saddle River, New jersey. Captulos 1,2 y 3 ISBN 0-13-
085198-1

[12] DRAPER N. R.; Smith H. Applied Regression Analysis Second Edition, Jhon
Wiley & Sons, Capitulo 1 y 2. Canad 1981. ISBN 0-471-02995-5

[13] THOMPSON AIRPAX MECHATRONICS. Stepper Motor Technology,
Thompson Airpax Mechatronics - Product selection and engineering guide,
USA.
[14] LAGANIRE ROBERT, Programming computer vision applications: A step-
by-step guide to the use of the Intel OpenCV library and the Microsoft
DirectShow technology, VIVA lab, University of Ottawa. Marzo 28 de 2003,
http://www.site.uottawa.ca/~laganier/tutorial/opencv+directshow/cvision.htm

103
[15] INTEL CORPORATION, Open Source Computer Vision Library Reference
Manual Intel Corporation, USA

[16] JEROM LANDRE, programming with intel ipp (integrated performance
primitives) and intel opencv (open computer vision) under gnu linux a beginner's
tutorial, Universite de Bourgogne, Institut Universitaire de Technologie,
Laboratoire Electronique, Informatique et Images. Francia Julio 2003

[17] ROJVANIT, RAWIN; Migrating applications to USB from RS-232 UART with
minimal impact on pc software, Application note 956, Microchip inc. 2004

[18] MICROCHIP, PIC18F2550/4455/4550 Data Sheet, 28/40/44-Pin High-
Performance, Enhanced Flash USB Microcontrollers with nanoWatt
Technology. Microchip. 2004

[19] SULUH, ANTHONY; MUNDHRA, KESHAV; MCBEATH, MICHAEL;
SUGAR, THOMAS; Spatial Interception for Mobile Robots, Mechanical and
Aerospace Engineering, Psychology, Arizona State University Tempe, AZ
85283.

[20] MICROCHIP, PICDEM FS USB demonstration board users guide.
Microchip. 2004.

[21] PETITGRAND DANIEL, Application Note AN-9 Stepper Motor Control, ADB
I/O, Mayo 23, 1998.