PFC – Resumen semana #6 y #7

Bueno, ya han pasado otras dos semanas, pero estas han sido mejores que las dos anteriores.  Por fin he conseguido calibrar los wiimotes.  Después de dar muchísimas vueltas, de probar el código de la calibración de mil maneras y de compararlo con otros códigos… no llegué a una conclusión clara de por qué no me funcionaba bien :S.

Así que inicié una búsqueda por google sobre el tema de la calibración de los wiimotes, y todo el rato me encontraba el mismo código de calibración, el creado por johnny lee, por lo tanto seguía igual, ya que tanto el cálculo de los puntos de calibración, como la posterior transformación de las coordenadas del punto que ve el wiimote no me funcionaban, ya había perdido suficiente tiempo con esto.  Buscaba pues una librería que se encargara únicamente de la calibración, y tuve la suerte de encontrar una.  Esta librería se compone de 5 o 6 funciones que se encargan tan solo de recoger los puntos de calibración vistos por el wiimote y devolver las coordenadas transformadas.

Después de hacer unos retoques en el código para implementar esta librería, compilé, y probé el programa…

¡Por fin!

El punto rojo que se ve en la zona izquierda de la pantalla es el LED infrarrojo visto por el wiimote.  En la zona superior derecha tenemos dos PictureBox.  La primera dibuja el polígono formado por los cuatro puntos que ve el wiimote en el momento de la calibración.  Y el segundo dibuja esos mismos puntos una vez han sido transformados.

Si os fijáis, en la imagen de la izquierda podemos ver como lo que ve el wiimote está “distorsionado” por lo que expliqué acerca de las perspectivas en la entrada anterior.  Lo que en el mundo real es un rectángulo (formado por cuatro marcas dibujadas en una plantilla), el wiimote lo ve como un trapecio, algo que no nos es útil a la hora de determinar coordenadas.  Sin embargo, en la imagen de la derecha, podemos observar esos mismos cuatro puntos, pero transformados, con lo cual estamos observando, ahora sí, un rectángulo.

He añadido una pequeña caja de selección, con el texto “Ver Calibrado”.  Si no pulso esa casilla, en la picturebox grande de la izquierda observo la coordenadas que recibe el wiimote, sin transformaciones, y por lo tanto distorsionada.  Si la pulso entonces activo la transformación de las coordenadas que recibe el wiimote, y por lo tanto puedo verlas por pantalla.  Hasta aquí todo bien, aunque tengo algunas dudas/problemas que tengo que resolver:

  • Dimensiones de la plantilla

La plantilla que utilizo es así:

Plantilla de calibración

Son cuatro folios pegados con celo, con estas cuatro marcas.  Las dos marcas del lado más largo están separadas 61 cm, y las dos marcas del lado más corto están separadas 34 cm.  Pues bien, al programa hay que decirle cuál es el tamaño de la plantilla de calibración

Si la plantilla está dibujada en una pantalla de ordenador, la dimensiones de esta plantilla no se le da en cm, sino en píxeles.  Por lo tanto en una configuración estándar las distancias que introduciríamos en el programa serían 1024 y 768.  Yo he usado estos datos para mi calibración, porque todavía no se muy bien como darle al ordenador los valores del tamaño de mi plantilla.

  • Area de calibración

En la primera imagen, en la que enseño parte del programa, podeis ver en las picturebox de la parte superior derecha, que el trapecio es más pequeño que el rectángulo transformado.  Esto quiere decir que las nuevas coordenadas máximas pasan a ser las que yo le he dado por programa (1024 y 768) y por lo tanto si el wiimote ve un objeto infrarrojo, previamente se podía observar aunque saliera de la zona del trapecio, ya que todo el cuadrado es el área que ve el wiimote.

Sin embargo ahora cuando el objeto sale mucho de la zona del trapecio, en la picturebox de la derecha, en la de las coordenadas transformadas, ya no se verá el objeto.  Si bien si seguiremos teniendo sus coordenadas, la verdad es que esto supone un problema.  El wiimote sigue teniendo un gran rango de visión, pero el rango que yo puedo reflejar por pantalla será menor, y dependiendo de lo pequeña que se vea la plantilla de calibración, mucho menor.

Además, si suponemos que, como mínimo, dos wiimotes ven el mismo punto infrarrojo, cada uno entregará unas coordenadas relativas a su posición, y no a la absoluta de la habitación donde se encuentren situados los wiimotes y el objeto.  Con lo cual habrá que convertir esas coordenadas; y si además las que recojo del wiimote pueden estar con números negativos, pues se complica más el asunto.

Así que veo una solución posible, un plan B:  Que la plantilla de calibrado no exista.  Esto quiere decir que, por ejemplo, imprimiría en una hoja en blanco una de esas marcas de calibración, pero una marca de calibración enorme.  Movería el punto infrarrojo a lo largo de la habitación para obtener los 4 puntos de calibración, que serían los 4 puntos que me permitieran “dibujar” el rectángulo más grande posible:

Sería algo así.  Tened en cuenta que la plantilla, es el suelo: marcaríamos los puntos con folios con esa señal, y después, en el momento de la calibración, pondríamos el punto infrarrojo encima de cada uno de esos puntos, tal y como si hiciéramos con la plantilla pequeña.  De esta forma el área de visionado que tendríamos, aun después de transformar las coordenadas sería el máximo posible, y solo perderíamos un poco de área de visión que supliríamos con los rangos de visión de los demás wiimotes.  Quizás se podrían mover un poco los cuatro puntos para que no utilizar los extremos del área de visionado del wiimote, de esta forma la posible pérdida de precisión cuando el objeto estuviera en dichas zonas sería menor.

Seguramente se me ocurrirá algún inconveniente más, pero vaya esto es todo por el momento.  También comentar acerca del punto infrarrojo.  Hasta ahora utilizaba uno de los montajes que hice, en concreto el primero que muestro ahí.  Y para alimentar el montaje usaba la fuente de alimentación, con un cable que cruzaba toda la habitación, y con un interruptor en medio para poder hacer los destellos necesarios para el proceso de calibración.  Uno al final se acostumbra, pero bueno decidí hacer un pequeño montaje para usar un apila de 9V y ahorrarme los cables (mi habitación parecía una jungla, ya lo parece, pero con tantas “lianas”, aún mas :p ).  Os enseño el montaje en fotos, y mañana o pasado pondré el esquema (muy simple):

Mi “as” en la manga xD

Punto infrarrojo en la plantilla de calibración

Sí, es una caja de plástico que contenía cartas :p.  La vi y supe que ahí iba a hacer mi montaje.  Tan solo tengo una pila de 9V, un pulsador de tipo boton, y un doble conmutador.  Cuando tengo que realizar la calibración, voy pulsando el botón de la parte superior para ir haciendo destellos infrarrojos en los puntos de calibración.  Pero cuando necesito que le punto esté accionado durante un rato, pues todo el conmutador que se ve en el lateral del a caja de cartas, y de esta forma está encendido de forma permanente, o por lo menos hasta que se acabe la pila.  La verdad es que es bastante más cómodo que lo anterior.

Y esto es todo por estas dos semanas.  Ahora me voy a poner a ver el punto infrarrojo con dos wiimotes, y a transformar las coordenadas relativas de cada uno de ellos, a las coordenadas absolutas de la habitación.  A ver cómo se me da eso ;).

¡Saludos!

Una respuesta

  1. Pingback: Proyecto electrónico – Escenario del programa “Atrapa un millón” #4 « El rincón del electrónico

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s