Escolar Documentos
Profissional Documentos
Cultura Documentos
Para la conexión con los Wiimotes es necesario un programa que cree las
conexiones Bluetooth. En Windows, el más utilizado es el BlueSoleil, que es un
programa comercial, pero en su versión de prueba permite transmitir 5 MB de
datos.
Se puede utilizar, en vez del BlueSoleil, cualquier programa que establezca las
conexiones Bluetooth, siguiendo unos pasos que diferirán poco de los explicados a
continuación para este programa.
Los pasos para dejar preparada la conexión PC-Wiimote a través de BlueSoleil son
los siguientes.
61
Anexo A. Puesta en marcha del sistema: Tutorial
Fig. 24: Captura de bocadillo de confirmación del reconocimiento del dispositivo Bluetooth
62
Anexo A. Puesta en marcha del sistema: Tutorial
63
Anexo A. Puesta en marcha del sistema: Tutorial
Fig. 29: Captura de la interfaz de Bluesoleil tras establecer la conexión con los
Wiimotes
64
Anexo A. Puesta en marcha del sistema: Tutorial
Material necesario:
Opción 1:
65
Anexo A. Puesta en marcha del sistema: Tutorial
Opción 2:
La luz infrarroja no es visible por el ojo humano, pero sí por cualquier cámara
fotográfica. Así que apuntando la cámara a la cabeza del LED se puede comprobar
su funcionamiento.
Para aumentar la visibilidad se pueden conectar en paralelo tantos LEDs como se
desee, teniendo cuidado de que no toquen extremos positivos con negativos (Fig.
33). De esta forma se aumenta su visibilidad.
Fig. 33: Puntero hecho con una pila AA y cuatro diodos en paralelo
66
Anexo A. Puesta en marcha del sistema: Tutorial
La biblioteca está escrita en lenguaje C#, lenguaje diseñado para la API .Net, pero
para el cual existen compiladores para distintos sistemas operativos. Con lo que
podemos decir que el proyecto es multiplataforma.
Si el programador prefiere utilizar la biblioteca sobre otro lenguaje .Net como C++,
bastará con establecer la referencia a las dlls de nuestro proyecto.
• OpenGl (Tao.OpenGL)
• WiimoteLib
• OpenCV
• AutoItX3Lib
INSTALACIÓN DE TAOOPENGL
• Tao.OpenGl.dll
• Tao.Platform.Windows.dll
La forma tradicional de obtener estos archivos es con la instalación de la “Tao
Framework”, disponible en su página web.
INSTALACIÓN DE WIIMOTELIB
67
Anexo A. Puesta en marcha del sistema: Tutorial
INSTALACIÓN DE OPENCV
INSTALACIÓN DE AUTOITX3LIB
68
ANEXO B:
PROGRAMA DE DEMOSTRACIÓN
DESCRIPCIÓN DE LA INTERFAZ
1 El mensaje “Visibles” aparece cuando las dos cámaras perciben por lo menos
un punto.
El mensaje “OK!” se muestra al concluir la calibración.
2 El botón “Calibración” activa el mecanismo de calibración para el método
simplificado. El usuario deberá marcar con un puntero la posición de sus
puntos (1,0,0), (0,0,0) y (0,0,1) por este orden.
3 El botón “R.A.N.S.A.C.” activa la calibración por el método R.A.N.S.A.C. Se
deben introducir 20 posiciones cualquiera, hasta ver el mensaje “OK!”.
El botón “6 puntos” activa la calibración por este método: capta 4 puntos
coplanares y muestra la relación homográfica calculada. Si el usuario la
70
Anexo B. Programa de prueba
considera correcta, debe pulsar “Seguir” para continuar y leer los otros dos
punto.
4 En este lugar se indica el punto que está a punto de leer el programa.
5 Indica que el punto se ha leído correctamente.
6 Controles para rotar los ejes y cambiar la perspectiva de la representación 3D.
7 Muestra las coordenadas 2D que captan los Wiimotes (del primer punto
captado).
8 Utilizado en la fase de depuración. Indicaba la posición del epipolo e’
necesario para obtener la matriz Fundamental por el método de los seis
puntos.
9 Se muestra “Leyendo gesto” cuando está activado el mecanismo de detección
de gestos. El la zona inferior del cuadro, cuando se reconoce un gesto aparece
su nombre. Los gestos se asocian al segundo punto captado.
10 Es la ventana de OpenGl. Muestra las proyecciones de ambas cámaras; tras la
calibración, la posición 3D de los puntos detectados, e indica con rectas los
segmentos de gestos detectados.
11 Mensaje sobre la conexión con los Wiimotes. Indica el número de Wiimotes
conectados.
12 Activa las funciones de escalado, traslación y rotación, para cambiar el
sistema de coordenadas.
71
ANEXO C:
GEOMETRÍA
73
Anexo C. Geometría
74
Anexo C. Geometría
Una de las propiedades del espacio proyectivo es aquella propiedad que tantas
veces hemos escuchado, pero cuyo enunciado nos hacía dudar:
En el espacio proyectivo, esta afirmación cobra significado, pues los puntos del
infinito reciben el mismo tratamiento que el resto de puntos.
Este lugar geométrico es el formado por los puntos llamados puntos impropios o
puntos del infinito. En el espacio afín son aquellos puntos en el infinito y en el
proyectivo es un plano o una recta, según sea el espacio proyectivo de tres o dos
dimensiones, respectivamente.
75
Anexo C. Geometría
wx
x
wy
y
wz
z
w
Y el 2D (Ecuación 2):
wx
x
wy
y
w
Ecuación 2: Transformación de coordenadas cartesianas a homogéneas en el espacio 2D
76
Anexo C. Geometría
Acabamos de ver que para representar las coordenadas del espacio proyectivo se
deben utilizar las coordenadas homogéneas.
Debemos tener en cuenta que vamos a operar con los espacios proyectivos del
plano o del espacio, según hablemos de proyecciones o de localización espacial,
respectivamente. En todo caso, tendrán una coordenada más que la tradicional
representación en coordenadas euclídeas.
Hay que tener en cuenta que la captación de puntos de nuestro sistema se hace
sobre un plano proyectivo. En la siguiente figura (Fig. 40) se interpreta la
representación de unas coordenadas desde los dos puntos de vista: espacio
proyectivo 2D y 3D:
77
Anexo C. Geometría
Anque parezca extraño, las rectas se definen con el mismo número de coordenadas
que los puntos [A11], y, como sucede con los puntos, si las coordenadas de dos
líneas son proporcionales, entonces representan la misma línea.
78
Anexo C. Geometría
C.1.6 HOMOGRAFÍA
Una matriz homografía o colineación H es la matriz 3x3 que establece una relación
lineal entre los puntos dos planos en el espacio proyectivo, de tal forma que
establece una relación uno a uno entre los puntos de uno y otro plano (Ecuación 3-
4 y Fig. 40). También se puede establecer una homografía entre los puntos de un
mismo plano captados desde diferentes posiciones.
Dados:
entonces
p'2 H12p1
1
H12 H21
79
Anexo C. Geometría
80
Anexo C. Geometría
81
Anexo C. Geometría
C.2.2 EPIPOLOS
Los epipolos corresponden a son los puntos e y e’ (Fig. 41) , en la que se aprecia
que son los puntos de intersección de la recta que une los centros ópticos del
sistema de visión sobre ambos planos de proyección.
• Correspondencias de puntos:
• Si x y x’ son correspondencias de un punto, x’Fx=0.
• Líneas epipolares:
• l’=Fx es la correspondiente línea epipolar de x.
• l= F T x’ es la correspondiente línea epipolar de x’.
• Epipolos:
• Fe=0.
• F T e’=0.
82
Anexo C. Geometría
Parámetros intrínsecos
Los intrínsecos son los que definen las propiedades de cada cámara o plano
proyectivo y serán siempre constantes para cada cámara. Los más importantes
son: la distancia focal f y el factor de escala. Además, existen más parámetros que
puede ser o no necesarios ser tenidos en cuenta, como la distorsión radial.
La matriz que recoge estos parámetros es:
f
0 ox
sx
f
Min 0 oy
sy
0 0 1
Ecuación 6: Matriz de parámetros internos
Parámetros extrínsecos
83
Anexo C. Geometría
Describamos la relación de las coordenadas de una cámara con las del mundo:
Xw Xw X
xh p11 p12 p13 p14 w
Y
y M M w P Yw p21 p22 p23 p24 Yw
h in ex Z Z Z
w w w p p p p w
1 1 31 32 33 34
1
Las coordenadas xh e yh son homogéneas, así que necesitarán ser divididas por
w para obtener las euclídeas.
84
ANEXO D:
MÉTODOS DE CALIBRACIÓN Y
LOCALIZACIÓN 3D
D.2 Localización 3D
D.2.1 Configuración 1: Posición libre de las cámaras
D.2.2 Configuración 2: Cámaras alineadas
Motivo
Al comenzar el proyecto, se marcó el objetivo de conseguir una localización
espacial lo más flexible posible. El sistema podía haberse limitado a conceptos de
trigonometría y de semejanza de triángulos para obtener las tres coordenadas a
partir de los datos obtenidos por dos cámaras alineadas, pero decidimos
adentrarnos en la Geometría Epipolar para poder aplicar sus conceptos y así
permitir al usuario situar las cámaras sin ninguna restricción de posición ni de
orientación.
Para el cálculo de la posición 3D con posiciones de cámaras no rígidas es necesario
un previo proceso de calibración para la estimación de los parámetros que
intervienen.
Proceso
Este proceso fue muy costoso, ya que requiere escribir mucho código repetitivo
para resolver los sistemas, es complicado corroborar la validez de los métodos
implementados utilizando datos ideales y los resultados obtenidos de los métodos
son matrices que encapsulan mucha información, pero es difícil comprobar la
validez de los resultados, ya que la idealidad de ellos no es posible con unas
cámaras tan poco precisas. Por ello, elegimos el único método encontrado que
tenía un paso intermedio comprobable: el “6-point algorithm” (Algoritmo de los 6
puntos), que se describe a continuación. Este método tiene la ventaja de que es
fácil de comprobar visualmente la validez de los cálculos del paso intermedio, pero
después comprobamos que el último paso, a pesar de ser correcto
matemáticamente, es poco tolerante en el escenario habitual ante pequeños
errores de medición.
La solución escogida fue la de aplicar el método R.A.N.S.A.C., que es el método
más utilizado para calibración de cámaras, ya que tiene la gran ventaja para
nuestro escenario de que dados un conjunto de parejas de puntos como entrada
del método, desestima aquellos cuya propiedades epipolares más difieren de las
del resto. Es considerado un método robusto.
De todas formas, para agilizar el desarrollo de las siguientes fases, fue desarrollado
el método trigonométrico, que es mucho más rápido de calibrar, más cómodo para
trabajar sin moverse del puesto de trabajo y requiere de menos esfuerzo de cálculo
por parte del ordenador.
86
Anexo D. Métodos de calibración y localización 3D
A continuación se explican los métodos aplicados. Cabe reseñar que los dos
métodos epipolares difieren en la manera de calcular la matriz fundamental, pero
una vez calculada, el método para calcular las matrices de cámara es común.
87
Anexo D. Métodos de calibración y localización 3D
III. Los puntos X5 y X 6 han de estar fuera del plano definido por X1 , X2 , X 3 y
X4 .
IV. F [e']x H
[A2]
88
Anexo D. Métodos de calibración y localización 3D
89
Anexo D. Métodos de calibración y localización 3D
x1 w ' x2
p1 y1 , p'2 w ' y2
1 w'
1
p'2 H12p1
90
Anexo D. Métodos de calibración y localización 3D
Con dos planos proyectivos, la recta epipolar es la recta que une los puntos focales
de dichos planos proyectivos. Los epipolos son las intersecciones de dicha recta con
cada plano proyectivo.
La proyección sobre uno de los planos proyectivos de todos los puntos del espacio
cuya proyección sobre el otro sea un mismo punto, forma una recta que pasa por
su epipolo.
91
Anexo D. Métodos de calibración y localización 3D
0 e 'z e 'y
[e ']x e ' 0 e 'x
e 'y e 'x 0
Ecuación 10: Matriz antisimétrica basada en el epipolo
La propiedad que cumple la matriz fundamental para cualquier punto del espacio
visible es la de que sus respectivas proyecciones x y x ' han de cumplir la igualdad
x TFx 0 , ya que por definición de la representación homogénea de rectas, un
T
punto x pertenece a una recta l si y sólo si x l 0.
92
Anexo D. Métodos de calibración y localización 3D
93
Anexo D. Métodos de calibración y localización 3D
94
Anexo D. Métodos de calibración y localización 3D
x a1 y a1 1 0 0 0 0 0 w a x a2
x yb1 1 0 0 0 0 0 w x
b1 b b2
x y c1 1 0 0 0 0
0 h11 w x
c1 c c2
x y d1 1 0 0 0 0 0 h12 w d x d2
d1
0 0 0 x a1 y a1 1 0 0 h13 w a y a2
0 0 0 xb1 yb1 1 0 0 h21 wb yb2
0 0 0 x c1 y c1 1 0 0 h22 w c y c2
0 0 0 x d1 y d1 1 0 0 h23 w d y d2
0 0 0 0 0 0 x a1 y a1 h31 w a 1
0 0 0 0 0 0 xb1 yb1 h32 wb 1
0 0 0 0 0 0 x c1 y c1 w 1
c
0 0 0 0 0 0 x d1 y d1 w 1
d
h31x a1 h32 y a1 w a 1
h31xb1 h32 yb1 wb 1
h31x c1 h32 y c1 w c 1
h31x d1 h32 y d1 w d 1
h31x a1 h32 y a1 1 w a
h31xb1 h32 yb1 1 wb
h31x c1 h32 y c1 1 w c
h31x d1 h32 y d1 1 w d
95
Anexo D. Métodos de calibración y localización 3D
h11x a1 h12 y a1 h13 h31x a1 h32 y a1 1 x a2
h21x a1 h22 y a1 h23 h31x a1 h32 y a1 1 y a2
h11xb1 h12 yb1 h13 h31xb1 h32 yb1 1 xb2
h21xb1 h22 yb1 h23 h31xb1 h32 yb1 1 yb2
h11x c1 h12 y c1 h13 h31x c1 h32 y c1 1 x c2
h21x c1 h22 y c1 h23 h31x c1 h32 y c1 1 y c2
h x h y h h x h y 1 x
11 d1 12 d1 13 31 d1 32 d1 d2
h21x d1 h22 y d1 h23 h31x d1 h32 y d1 1 y d2
h11x a1 h12 y a1 h13 h31x a1x a2 h32 y a1x a2 x a2
h21x a1 h22 y a1 h23 h31x a1y a2 h32 y a1y a2 y a2
h11xb1 h12 yb1 h13 h31xb1xb2 h32 yb1xb2 xb2
h21xb1 h22 yb1 h23 h31xb1yb2 h32 yb1yb2 yb2
h11x c1 h12 y c1 h13 h31x c1x c2 h32 y c1x c2 x c2
h21x c1 h22 y c1 h23 h31x c1y c2 h32 y c1y c2 y c2
h11x d1 h12 y d1 h13 h31x d1x d2 h32 y d1x d2 x d2
h21x d1 h22 y d1 h23 h31x d1y d2 h32 y d1y d2 y d2
96
Anexo D. Métodos de calibración y localización 3D
97
Anexo D. Métodos de calibración y localización 3D
El algoritmo es el siguiente:
[A14]
98
Anexo D. Métodos de calibración y localización 3D
Entero cvFindFundamentalMat (
Matriz2xN_Ptos CjtoProyecciones1,
Matriz2xN_Ptos CjtoProyecciones2,
Matriz3x3 MatrizFundamental,
Entero Método=RANSAC,
Real ErrorMáximo,
Real NivelDeConfianza,
Vector Rechazados=0);
ENTRADAS
99
Anexo D. Métodos de calibración y localización 3D
SALIDAS
100
Anexo D. Métodos de calibración y localización 3D
Cabe destacar que dadas dos proyecciones y las matrices de proyección de sus
respectivas cámaras es posible reconstruir la estructura 3D salvo por la escala.
Este hecho se comprende fácilmente ya que si se mueven las cámaras a través de
los respectivos rayos de proyección de forma proporcional a sus distancias iniciales
del punto, las propiedades geométricas se mantienen; con varios puntos, se
mantienen pero con un factor de escalado.
101
Anexo D. Métodos de calibración y localización 3D
D.2 LOCALIZACIÓN 3D
X X
a1 a2
b P Y , b P Y
1 1 2 2
w Z w Z
1 1 2 1
Ecuación 14: Relación matricial entre las coordenadas del mundo y las captadas por las
cámaras
102
Anexo D. Métodos de calibración y localización 3D
i
a1 Xp11 i
Yp12 i
Zp13 i
p14
b Xpi Ypi Zpi pi
1 21 22 23 24
i i i i
w1 Xp31 Yp32 Zp33 p34
Ecuación 15: Relación entre las coordenadas del mundo y las captadas por las cámaras
i i i i i i i i
X(xip31 p11 ) Y(xip32 p12 ) Z(xip33 p13 ) p14 xip34
i i i i i i i i
X(yip31 p21 ) Y(yip32 p22 ) Z(yip33 p23 ) p24 yip34
x p1 p1 x1p132 p112 1
x1p133 p13 1 1
1 31 11 p14 x1p34
X
1 1
y1p31 p21 y1p132 p122 y1p133 p123 p124 y1p134
Y 2
x2p231 p11
2
x2p232 p12
2
x2p233 p13
2
p14 x2p234
Z
y p2 p2 2 2
2 31 21 y2p232 p222 2
y2p33 p23 p2
24 y p
2 34
(A T A)1 A T AX (A T A)1 A TB
T 1 T
De esta forma podemos eliminar (A A) A A , ya que una matriz multiplicada por
su inversa es la matriz identidad (elemento neutro del producto de matrices).
De esta forma obtenemos:
X (A T A)1 A TB
Ecuación 17: Ecuación básica de la visión estéreo
103
Anexo D. Métodos de calibración y localización 3D
104
Anexo D. Métodos de calibración y localización 3D
f 0 0 0
K 0 f 0 0
0 0 1 0
105
Anexo D. Métodos de calibración y localización 3D
PARÁMETROS DE CALIBRACIÓN
RECONSTRUCCIÓN 3D
bf x1 Z y1 Z
Z X Y
x1 x2 f f
[A18]
106
ANEXO E:
ESTADO DEL ARTE
Concepto
Estimación de posición 3D basada en cuatro emisores con posición relativa fija
(Fig. 50):
Fig. 50: Patrón de cuatro LEDs del proyecto Wiimote Virtual Reality Desktop
Utiliza dos cámaras: una para localizar la cara del usuario y otra para el cursor
situado en la mano (Fig. 51):
Fig. 51: Posición de las cámaras en el proyecto Wiimote Virtual Reality Desktop
108
Anexo E. Estado del arte
109
Anexo E. Estado del arte
110
Anexo E. Estado del arte
WIIMOTE 3D LIBRARY
111
Anexo E. Estado del arte
112
Anexo E. Estado del arte
Este proyecto presenta una de las aplicaciones que teníamos en mente. Consiste
en un sistema inmersivo de modelado 3d. Para la detección de los punteros, utiliza
dos fragmentos de papel en los dedos (Fig. 56), para reflejar la “luz negra” (Fig.
57). [A5]
Fig. 56: Tangible 3d: Hand Gesture Interaction For Immersive 3d Modeling
113
Anexo E. Estado del arte
114
Anexo E. Estado del arte
RATONES 3D
El avance reside en su pieza central (Fig. 62), que permite movimientos en los tres
ejes.
115
Anexo E. Estado del arte
Las versiones previas de estos productos (Spaceball) tenían la pieza clave esférica
(Fig. 63). El la actualidad se consideran obsoletos comparados con los que
acabamos de exponer.
TANGIBLE 3D
116
ANEXO F:
DESCRIPCIÓN DE MATERIALES
F.1 Wiimotes
F.2 Cámara del Wiimote
F.3 Antena Bluetooth
F.4 Punteros de luz infrarroja
F.5 Trípode
F.1 WIIMOTES
118
Anexo F. Descripción de materiales
119
Anexo F. Descripción de materiales
120
Anexo F. Descripción de materiales
121
Anexo F. Descripción de materiales
F.5 TRÍPODE
122
ANEXO G:
RESTRICCIONES FÍSICAS
G.1 Montaje
G.2 Direccionalidad
G.3 Interferencias
G.4 Longitud de onda
G.4 Angular de las cámaras
G.1 MONTAJE
124
Anexo G. Restricciones físicas
G.2 DIRECCIONALIDAD
125
Anexo G. Restricciones físicas
G.3 INTERFERENCIAS
126
Anexo G. Restricciones físicas
Los resultados no fueron buenos: la luz directa del foco sí era detectada de cerca,
pero no lo era cuando ésta estaba reflejada. Esto se debe a que la longitud de onda
del foco era de 850 nm. mientras que la óptima de las cámaras de los Wiimotes es
de 940 nm.
Además, durante las pruebas, notamos ciertas molestias en los ojos que pueden
ser causadas por la incidencia directa de una luz potente que no activa la
contracción de las pupilas. Por nuestra salud, decidimos aparcar esta variante, pero
contemplarla como opción a tener en cuenta si se usara una luz más tenue o si se
añadiera una luz visible sincronizada con la infrarroja, para así contraer las pupilas.
127
Anexo G. Restricciones físicas
128
ANEXO H:
BIBLIOTECA
TIPOS:
MÉTODOS:
real CalculaDistanciaBasal
(Punto2D p(100)izq,p(100)dch,p(000)izq,p(000)dch)
real CalculaDistanciaFocal
(Punto2D p(000)izq, p(000)dch, p(001)izq, p(001)dch)
Punto3D Calcula3D
(Punto2D pA, pB; real DistanciaBasal, DistanciaFocal)
130
Anexo H. Biblioteca
TIPOS:
131
Anexo H. Biblioteca
MÉTODOS:
real CalculaDistanciaBasal
(Punto2D p(100)izq,p(100)dch,p(000)izq,p(000)dch)
real CalculaDistanciaFocal
(Punto2D p(000)izq, p(000)dch, p(001)izq, p(001)dch)
Punto3D Calcula3D
(Punto2D pA, pB; real DistanciaBasal, DistanciaFocal)
Calcula3D calcula la posición espacial del punto cuyas proyecciones son los datos
de entrada de la función.
132
Anexo H. Biblioteca
Esta clase contiene los atributos del sistema métodos y funciones auxiliares
referidos a la geometría epipolar.
ATRIBUTOS DE CLASE:
Matriz3x3 Homografía;
Matriz3x3 Fundamental;
Matriz3x4 Cámara1;
Matriz3x4 Cámara2;
Punto3D Origen;
133
Anexo H. Biblioteca
MÉTODOS:
Punto2D CalculaHomogéneo
(Punto2D p)
Punto2D Intersección
(Punto2D r1_a, r1_b, r2_a, r2_b)
CalculaCámaras
(Punto2D epipolo)
real CalculaÁngulo
(Punto3D r1_a, r1_b, r2_a, r2_b)
Punto3D ProductoVectorial
(Punto3D dir1, dir2)
Punto3D Normaliza
(Punto3D vector1)
Punto3D CalculaTraslación
(Punto2D pto_origen_a, pto_origen_b)
CalculaRotación
(Punto3D Dir1, Dir2)
Calibración
(Punto3D p(000),p(111))
Punto3D Calcula3D
(Punto2D Proy1, Proy2)
Punto3D Calcula3D2
(Punto2D Proy1, Proy2)
134
Anexo H. Biblioteca
MÉTODOS:
Punto2D CalculaHomogéneo
(Punto2D p)
Si el punto no forma parte del plano, es útil para el cálculo de los epipolos.
Punto2D Intersección
(Punto2D r1_a, r1_b, r2_a, r2_b)
Intersección calcula el punto 2D intersección de dos rectas del plano. Cada recta
la definimos por dos puntos que pertenezcan a ella.
Salida: Punto intersección de las rectas que definen los puntos de entrada.
CalculaCámaras
(Punto2D epipolo)
135
Anexo H. Biblioteca
real CalculaÁngulo
(Punto3D r1_a, r1_b, r2_a, r2_b)
Punto3D ProductoVectorial
(Punto3D dir1, dir2)
Punto3D Normaliza
(Punto3D vector1)
Punto3D CalculaTraslación
(Punto2D pto_origen_a, pto_origen_b)
Entrada: Las dos proyecciones del origen del sistema de referencia elegido por el
usuario.
136
Anexo H. Biblioteca
CalculaRotación
(Punto3D Dir1, Dir2)
Entrada: 2 vectores.
Calibración
(Punto3D p(000),p(111))
Punto3D Calcula3D
(Punto2D Proy1, Proy2)
Punto3D Calcula3D2
(Punto2D Proy1, Proy2)
137
Anexo H. Biblioteca
138
Anexo H. Biblioteca
MÉTODOS PÚBLICOS
EVENTOS PÚBLICOS
ArgsEventosGesto
( Gesto3D Gesto;
Punto3D PuntoInicial)
TIPOS PÚBLICOS
139
Anexo H. Biblioteca
140
Anexo H. Biblioteca
MÉTODOS PÚBLICOS
ComienzaGesto
(Punto3D PosiciónInicial)
ContinúaGesto
(Punto3D PosiciónActual)
Gesto TerminaGesto
()
141
Anexo H. Biblioteca
CLASE DIBUJAR
Para utilizarla es necesario haber instalado un wrapper de OpenGl (se explica cómo
en Anexo A.3).
Inicia
(real anguloX, anguloY,anguloZ)
DibujaPunto
(Punto2D Punto)
DibujaPunto
( Punto2D Punto;
real Grosor;
real Rojo;
real Verde;
real Azul)
DibujaPuntoInvertido
(Punto2D Punto)
Dibuja
(Punto3D Punto)
DibujaLínea
(Punto3D Punto1, Punto2)
DibujaLínea
(Punto2D Punto1, Punto2)
DibujaEjes
()
DibujaGuíasPunto
(Punto3D Punto)
142
Anexo H. Biblioteca
Inicia
(real anguloX, anguloY,anguloZ)
Inicia actualiza el punto de vista del sistema en función de los tres ángulos
introducidos.
DibujaPunto
(Punto2D Punto)
DibujaPunto
( Punto2D Punto;
real Grosor;
real Rojo;
real Verde;
real Azul)
DibujaPuntoInvertido
(Punto2D Punto)
143
Anexo H. Biblioteca
Dibuja
(Punto3D Punto)
DibujaLínea
(Punto3D Punto1, Punto2)
DibujaLínea dibuja la línea 3D que pasa por los puntos introducidos, sin cambiar
los parámetros de color y de tamaño.
DibujaLínea
(Punto2D Punto1, Punto2)
DibujaLínea dibuja la línea 2D sobre el plano Z=0 que pasa por los puntos
introducidos, sin cambiar los parámetros de color y de tamaño.
DibujaEjes
()
DibujaGuíasPunto
(Punto3D Punto)
DibujaEjes dibuja las tres rectas tangentes a los planos X=0, Y=0 y Z=0; y sus
respectivas proyecciones sobre los otros dos planos. La utilizamos para visualizar
mejor la localización espacial de los puntos de nuestro interés.
144
Anexo H. Biblioteca
La clase Mapeo es una breve y sencilla clase que escribimos para aprovechar la
potencia del reconocimiento de gestos. Por su utilidad, hemos decidido incluirla en
la biblioteca y no enterrarla como una clase propia del programa de demostración.
La función de esta clase es la de leer un archivo de configuración y ejecutar las
órdenes de acuerdo a los gestos que se reconozcan.
Las configuraciones que recogen las relaciones movimiento-cursor o gesto-evento se
encuentran en archivos *.xml, que son fácilmente editables siguiendo las
convenciones del lenguaje XML; y se puede cargar uno u otro, según convenga para
cada aplicación.
Ejecuta
(Gesto GestoReconocido, cadenaTxt NombreXml)
Ejecuta abre el archivo NombreXml.xml, busca el par cuyo campo Gesto sea igual
al reconocido, y envía el evento de teclado o la acción descrita.
145
ANEXO I:
FUNCIONES Y ATRIBUTOS
EXTERNOS UTILIZADOS
I.1 WiimoteLib
I.2 OpenGl
I.3 OpenCV
I.4 DotNetMatrix
J.4.1 GeneralMatrix
J.4.2 SingularValueDecomposition
J.4.3 LinearEquationSolver
I.5 AutoItLib
TIPOS:
clase WiimoteState:
entero indexID;
IRState IRstate;
evento WiimoteChangedEventHandler OnWiimoteChanged;
[..];
estructura IRState:
entero RawX1, RawX2;
entero RawY1, RawY2;
entero Size1, Size2;
booleano Found1, Found2;
real X1, X2;
real Y1, Y2; [..];
MÉTODOS:
clase Wiimote:
booleano Connect;
booleano Disconnect;
[..];
Delegado WiimoteChangedEventHandler
( object sender,
WiimoteChangedEventArgs args)
147
Anexo I. Funciones y atributos externos utilizados
booleano Connect
()
booleano Disconnect
()
booleano WiimoteChangedEventHandler
(object sender, WiimoteChangedEventArgs args)
EVENTOS
clase WiimoteState:
entero indexID;
IRState IRstate;
evento WiimoteChangedEventHandler OnWiimoteChanged;
[..];
estructura IRState:
entero RawX1, RawX2;
entero RawY1, RawY2;
entero Size1, Size2;
booleano Found1, Found2;
real X1, X2;
real Y1, Y2; [..];
entero indexID
148
Anexo I. Funciones y atributos externos utilizados
IRState IRstate
entero RawXi,RawYi
real Xi,Yi
booleano Foundi
149
Anexo I. Funciones y atributos externos utilizados
FUNCIONES
InitializeContexts();
Invalidate();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glColor3f(Red, Green, Blue);
glPointSize(Grosor);
glVertex3f(Punto.x, Punto.y, 0f);
glBegin(GL_POINTS);
glEnd();
glBegin(GL_LINES);
glEnd();
glFlush;
glRotatef(anguloX, 1.0f, 0.0f, 0.0f);
glRotatef(anguloY, 0.0f, 1.0f, 0.0f);
glRotatef(anguloZ, 0.0f, 0.0f, 1.0f);
150
Anexo I. Funciones y atributos externos utilizados
TIPOS
estructura CvMat
( entero cols;
IntPtr data;
entero hdr_refcount;
entero height;
IntPtr ptr;
IntPtr refcount;
entero rows;
entero step;
entero type;
entero width)
FUNCIONES
CvMat CvCreateMat
( entero rows;
entero cols;
entero type;)
151
Anexo I. Funciones y atributos externos utilizados
CvSetReal2D
( ref CvMat arr;
entero idx0;
entero idx1;
real value)
CvSetZero
( ref CvMat arr)
CvTranspose
( ref CvMat src;
ref CvMat dst)
CvSVD
( ref CvMat A;
ref CvMat W;
ref CvMat U;
ref CvMat V;
entero flags;)
CvReleaseMatrix
( ref CvMat mat)
152
Anexo I. Funciones y atributos externos utilizados
Entero CvFindFundamentalMat (
Matriz2xN_Ptos CjtoProyecciones1,
Matriz2xN_Ptos CjtoProyecciones2,
Matriz3x3 MatrizFundamental,
Entero Método=RANSAC,
Real ErrorMáximo,
Real NivelDeConfianza,
Vector Rechazados=0);
ENTRADAS
SALIDAS
153
Anexo I. Funciones y atributos externos utilizados
constructor GeneralMatrix
( entero m;
entero n)
SetElement
( entero i;
entero j;
real s)
real GetElement
( entero i;
entero j)
154
Anexo I. Funciones y atributos externos utilizados
ATRIBUTOS DE CLASE
SingularValueDecomposition:
matriz U;
matriz V;
vector s;
entero m;
entero n)
MÉTODOS DE CLASE
GeneralMatrix GetU
()
GeneralMatrix GetV
()
155
Anexo I. Funciones y atributos externos utilizados
FUNCIONES
booleano GaussianEliminator
( matriz a)
vector r;)
x y 10
Ejemplo de uso: queremos resolver el sistema sencillo:
2x y 14
1 1 10
Nuestra matriz ampliada a será la siguiente:
2 1 14
Tenemos dos incógnitas (x e y), con lo que r será un vector de longitud dos, con la
primera componente el valor de x que cumple las ecuaciones y con y en la
segunda.
ShowMatrix
( matriz a)
cadena Title;)
ShowSolution
( vector r;)
156
Anexo I. Funciones y atributos externos utilizados
FUNCIONES UTILIZADAS
Send
( cadena keys;
entero flag)
Su página web proporciona los códigos relacionados con cada tecla o combinación
de teclas.
157
ANEXO J:
GLOSARIO
159
Anexo J. Glosario
160
Anexo J. Glosario
[W23], [W24]
161