PFC

PFC – Ha llegado el dia

Se que hace muchos días que no escribo ninguna nueva entrada, y se que voy empezando temas y los dejo sin terminar jeje. Pero hoy casi cerrare uno de esos temas. Mi PFC.

La verdad es que ha sido un verano atareado, pero todo llega a su fin. Hoy, por fin, presento mi PFC en la URV. Ha costado, pero si todo sale bien, hoy será mi ultimo dia de carrera universitaria. Se ha hecho muy largo este proyecto, pero el resultado ha sido satisfactorio. Mas tarde explicare que tal ha ido la presentación y colgare unos enlaces para que quien lo quiera pueda leer la memoria del proyecto.

¡Un saludo!


PFC – Soporte Wiimote #2

Después de unos cuantos días dándole vueltas al tema del soporte del wiimote, he llegado a varias conclusiones:

  • Tal como los tenía planteados, me hubieran consumido mucho tiempo.
  • Tenía bastantes problemas para medir los dos ángulos de inclinación que me interesaban saber del mando.
  • Además, la idea era que el soporte estuviera colocado en el techo, pero techos hay de todos los tipos: falso techo, pladur o incluso puede no haber techo, o sea, que esté a muchos metros de altura.

Así que después de pensarlo bien, voy a cambiar el techo por el suelo.  Con esto eliminaré todos los problemas que estaban surgiendo en el tema de la sujeción del soporte del wiimote al techo.  Una vez que he hecho este cambio las posibilidades se multiplican, puesto que la gran mayoría de personas que han tenido que usar soportes para un wiimote lo han hecho desde el suelo y no desde el techo.  He visto algunas personas que han utilizado un soporte para micrófono:

Soporte para wiimote

Yo tenía una pinza para micrófono igual que esta, y al usarla me he dado cuenta de que encaja perfectamente en las dos ranuras que hay a ambos lados del wiimote, con lo cual ofrece una muy buena sujeción.  Ahora lo que me falta es conseguir cuatro trípodes para micrófonos, y modificarlos para que la parte telescópica del mismo alcance un poco más de altura y así poder llegar a una altura máxima de 2,5 o 3 metros.

Soporte para microfono

 

Después, con respecto al tema de la medición de los dos ángulos, he visto ahora mismo una fórmula en un documento que pulula por internet, en el que puedo hallar el ángulo que el wiimote forma con respecto al suelo.  Con lo cual haré un pequeñito programa para que me indique dicho ángulo y que el usuario pueda utilizarlo en el momento de la colocación de los mandos en los soportes.  Para el otro ángulo, el que forma con la horizontal (con la pared) habré de buscar otro método ya que ese ángulo no lo da directamente el wiimote.

Esto es todo lo nuevo acerca de los soportes de los mandos.  Espero solucionar todo esto cuanto antes para empezar a hacer pruebas y mediciones y poder continuar también con la redacción de la memoria.

¡Saludos!


PFC – Soporte Wiimote

Bueno pues ya tengo diseñado el soporte que fabricaré para poder aguantar y dirigir los wiimotes en los ángulos correctos.  Será más o menos así:

Tengo la intención de hacerlo de aluminio, de 1 o 2 mm de grosor, eso dependerá.  Consta de 3 piezas, por así decirlo:

  • La primera sería en la que va enfundado el wiimote.  Esta pieza tendrá dos cilindros que saldrán hacia el exterior.  Todavía está por ver cómo haré estas piezas cilíndricas, pero la idea es que sean lo más cilíndricas posibles para que se puedan unir bien con la 2ª pieza.
  • La segunda pieza se une con la 1ª para que ambas giren sobre el eje de unión, que sería las dos piezas cilíndricas de la 1ª pieza.  La parte trasera de esta pieza va abierta para permitir que el usuario pueda subir y bajar el wiimote.  Todavía no está dibujado en las imágenes anteriores, pero en la parte posterior tengo la intención de poner varios topes en los que posar la parte trasera del wiimote, de forma y manera que cada uno de esos topes indiquen un ángulo de giro.
  • La tercera pieza va unida a la 2ª y es la que unirá el wiimote con el techo.  En la pate superior habrá un montaje con dos cilindros de nylon (esa es la intención).  Dentro de esos cilindros va un cojinete pequeño para permitir que el conjunto gire sobre si mismo y así poder modificar el ángulo que forma el wiimote con la horizontal.  Todavía está por ver como aguantaré todo el soporte al techo, pero tengo alguna idea al respecto.

Eso es todo con respecto al soporte.  Supongo que aún perfilaré algún aspecto más del diseño, pero voy a intentar tener uno construido para dentro de 2 semanas máximo.

¡Saludos!

 

29/3/2012 – EDITADO:

Comentar que el diseño ha variado bastante, debido a varias causas.  Las planchas de aluminio que tenía no dispone de las medidas suficientes, y tampoco he podido tener acceso a una herramienta que me permita doblar dichas planchas de forma adecuada.  Por lo tanto he cambiado el diseño, aunque el concepto básico sigue igual.  Estoy cerca de montar un soporte, en cuanto lo tenga pondré las fotos.

Saludos!


PFC – Recta final

¡Hola a todos!  ¿Cuánto tiempo desde mi última entrada eh xD?  Para vuestra información todavía sigo vivo.  Se que me queda un post pendiente sobre el robot seguidor de lineas del año pasado, cumpliré con ella, aunque espero que no se me junte con las entradas que iré haciendo del robot de este año.  Pero eso otro día.

Ahora comentar sobre mi PFC, el cual aún tengo que entregar.  Estoy inmerso en la redacción de la memoria del mismo, llevo más de la mitad, y estoy a la espera de ir recibiendo las correcciones de mi director de PFC.  La redacción marcha bien; lo que me preocupa más es el conjunto de pruebas que tengo que realizar.  Tengo que hacer bastantes pruebas con cuatro wiimotes colocados en una habitación, para comprobar la calidad de mi programa de seguimiento, y para ello tengo que diseñar un soporte para los wiimotes.  Este soporte tendrá que permitir al usuario girar el wimote tanto por el ángulo vertical como por el horizontal y es lo que me está llevando un tiempo.

Tengo una idea aproximada del soporte, pero tengo que hacer un diseño previo para ver si es viable.  No solo tiene que girar, sino que tiene que tener algún tipo de marca o de escala que muestre los grados de giro para que el usuario pueda colocar el wiimote en la posición deseada.

En cuanto haya conseguido hacer uno pondré una foto y me lanzaré a hacer las pruebas que necesito.

¡A ver si acabo ya xD!

Saludoos.


PFC – Estado actual del proyecto

Ha pasado algún tiempo desde la última vez que hablé del proyecto.  Han pasado varias cosas.  La primera es que se ha vuelto a retrasar la entrega del proyecto.  Resultó que la presentación de diciembre solo era para los que tenían el PFC como única asignatura, y ese no era mi caso.  Por lo tanto nos vamos a la siguiente que es para mayo.

El programa está acabado, en cuanto al objetivo del proyecto:  Puedo localizar un objeto infrarrojo en una sala mediante varios wiimotes.  El programa está actualizado ahora ya para poder utilizar los datos adquiridos de hasta 7 wiimotes.  Faltan algunos retoques en el programa, pero son de tipo estético.  No pensaba añadir muchas más funcionalidades al programa si no es que veo que tengo tiempo suficiente para implementarlas.  Pero la idea es no alargar más el asunto; el programa está bien como está.

Lo único que podría cambiar mi parecer al respecto sería que en el momento de hacer el conjunto de pruebas en distintas salas, con varios wiimotes, observara el el algoritmo que tengo para obtener las coordenadas del objeto no funciona bien bajo algunas condiciones, o tuviera que retocar alguna cosa del mismo.  En ese caso si que modificaría lo necesario para poder hacer que el programa funcionara bien en salas de hasta un tamaño determinado.

Y con la memoria tengo que ponerme ya.  YA xD.  Ahora que he terminado con algún examen que tenía voy a ver si comienzo ya con ella y avanzo en mi proyecto.

Además he empezado varios proyectos electrónicos a los que voy dedicando algunas horas y de los que posiblemente hablaré aquí.  Recuerdo además que tengo alguna entrada pendiente del tema del taller de robótica y del robot sigue lineas, también me pondré con ellas, como mínimo para acabar lo que comencé :).

Esto es todo amigos, un saludo.


PFC – It’s aliive!!!

 

… Sí, eso es, ¡ESTÁ VIVOOO!  Esta semana he hecho unos cuantos cambios, gracias a los cuales hoy he podido hacer un gran avance.  He traducido a código algunas de las cosas de las cuales hablé con mi tutor la semana pasada, muchas de las cuales tienen que ver con las pestañas que nos indican la información de cada wiimote, aquí está una captura del estado actual de las mismas:

Nueva ventana de información de cada wiimote

El tema de la calibración ha cambiado sustancialmente. Hay 8 cajas de texto en las que hay que introducir las coordenadas de cada uno de los cuatro puntos de calibración.  Dichas coordenadas son referentes a la habitación, en metros, y teniendo presente que el punto de origen (0,0) de la habitación es la esquina superior izquierda de la misma.  En la siguiente imagen se puede ver un poco más claramente:

¿No os encantan los bordes de las hojas de mi nueva libreta? A mi si :3

He hecho lo siguiente:

  • He tomado las medidas de mi habitación, en metros
  • He posicionado un wiimote a una altura y grados con respecto a la vertical y la horizontal determinados
  • He colocado mi plantilla de calibración y he medido a que posición se encontraban cada uno de los cuatro puntos de calibración de la plantilla, obteniendo así cuatro pares de coordenadas, todas ellas en metros

De esta forma tengo  las coordenadas absolutas de cada uno de los cinco elementos que hay arriba, de tal forma que, teniendo las coordenadas de los cuatro puntos de calibración (en metros) puedo ahora hacer un cambio de base directo entre las coordenadas del wiimote y las coordenadas absolutas de la habitación.

No se puede observar, pero cuando se rellenan todas las cajas de texto, aparece en medio de la plantilla en miniatura el botón “Calibrar”, de forma y manera que solo cuando hemos rellenado todos los datos, aunque sea con ceros, sea posible la calibración.

También he añadido dos botones adicionales en la parte superior de la ventana.  Sirven para cargar y guardar los datos de calibración del wiimote al que pertenece la pestaña en la que nos encontremos.  Por el momento tengo montado el asunto de la siguiente forma:

  • Cuando se han rellenado todos los datos y una vez que hemos pulsado el botón “Calibrar” y hemos terminado la calibración, pulsamos el botón “Guardar datos” y nos guardará un archivo que tendrá el siguiente nombre: “calibration_data_”número de wiimote”.dat”.  De tal forma que si calibramos 4 wiimotes, habrá cuatro archivos.
  • Si queremos cargar los datos de calibración que hayamos guardado, pulsamos el botón “Cargar datos” y nos cargará los datos de calibración del wiimote correspondiente a la pestaña activa.  De tal forma que si las condiciones de la instalación no han variado, podemos usar los datos de calibración anteriores.  (Esto lo he acabado de implementar después de haber estado media hora introduciendo los pares de coordenadas a mano @_@ )

De momento el tema del cargado y guardado de datos se queda así.  Si veo que puedo hacerlo de otra forma, con un solo archivo, pues lo haré, pero no voy a perder demasiado tiempo en esto.

Una vez he hecho todos estos cambios y he corregido algunos errores, he podido observar como en efecto funciona, o sea, que, de momento, con un solo mando soy capaz de ver un objeto infrarrojo y además indicar la posición X e Y relativas a la habitación, o sea, casi casi el objetivo de mi proyecto.  Como sabéis tengo un sistema de dibujado del área que teóricamente ve el wiimote, con colorines y tal:  pues bien, he podido comprobar como en cuanto saco el objeto infrarrojo de esos límites, el mando no ve el objeto, lo que quiere decir que las medidas teóricas se corresponden casi al 100% con la realidad, algo que me es encanta, ya que quiere decir que el sistema de dibujado es fiel a la realidad y que por lo tanto es útil.  (Me falta hacer el tema del redibujado de las áreas de visión una vez calibrado cada wiimote)

Con lo cual ahora lo que me falta es probar con dos wiimotes en posiciones distintas.  Voy a probar a poner un wiimote más a la izquierda del que tengo colocado, y lo voy a colocar de tal forma que entre ambos wiimotes compartan una cuarta parte de su área de visión, y haré comprobaciones con la media de la coordenadas que entreguen ambos mandos.  Dependiendo de como salga la prueba podré implementar un pequeño código que determine que coordenadas se utilizarán cuando me lleguen 7 pares de coordenadas, o sea, cuando el programa funcione a un 100% de capacidad.

Luego tan solo quedará trastear un poco con todo el programa para ver si encuentro algún que otro bug (ya he visto alguno ¬¬) y pasar a documentar bien las pruebas para poderlas usar en la memoria del proyecto y poder así entregar unos resultados definitivos de mi proyecto.  Así que a ver como se me dan estás dos semanas :D

 

¡Saludos!


PFC – Resumen semana #9 + Bonus

Hola de nuevo!

Ayer me reuní de nuevo con mi tutor de PFC.  Desde el verano (durante el desfallecimiento de nuestro robot sigue-lineas) no habíamos vuelto a coincidir, pese a que más o menos estaba enterado del estado del proyecto.  Pues bien, pensaba que lo que había hecho hasta el momento no estuviera del todo bien, pero bueno al final resultó que hasta el momento le convence el estado del proyecto.

Hemos hablado de lo que falta por terminar del proyecto y de algún concepto que había que tener un poco más claro (si hubiera habido alguien contando palabras, hubiera llenado una hoja con la palabra “calibración” xD).  En resumidas cuentas falta lo siguiente:

  • Ser capaz de obtener las coordenadas del objeto que ve el wiimote, no relativas a la posición del wiimote, sino a la sala, algo que sobre el papel tengo más o menos planteado, pero que falta llevarlo a la práctica.
  • Para realizar lo anterior hay que hacer algunos cambios en el método de la calibración de los mandos.  Además creo que voy a dejar de usar la palabra calibración porque la comparación entre la palabra y lo que intentamos definir con la misma se asemeja a la de las churras y las merinas xD.
  • También, aunque yo doy los datos de cómo estarán colocados los wiimotes, esto son datos teóricos, que puede que no sean 100% reales una vez que se hayan colocado los mandos.  Por lo tanto una vez que estén los mandos colocados y se haga la transformación de coordenadas, se realizaría un re-dibujado de las áreas de visión de los wiimotes, habiendo entonces dos posibles representaciones: la teórica y la real.
  • Comenzar a hacer ya la memoria.  Plantear los capítulos que habrá que hacer y comenzar a hacerlos para poderlos revisar con tiempo.
  • Currar, mucho xD, porque tengo dos meses y medio para acabar el proyecto.
En cuanto a nuevas mejoras hechas durante la semana, han sido pocas, la verdad:
  • Varios retoques en el sistema de representación gráfica de los wiimotes.  He añadido un poco de color al círculo que representa el wiimote para que, visualmente, se pueda saber que área de visión corresponde con qué wiimote.
  • Corregir algunos bugs (errores) que surgían dadas según qué circunstancias cuando trabajas sobre el sistema de representación gráfica de los wiimotes.
  • He añadido una pestaña nueva al programa en la cual, de un vistazo, se pueden ver todos los datos importantes de todos los wiimotes de un vistazo.  Ya pondré alguna captura, pero no tiene mucho misterio.
  • He añadido la posibilidad de guardar y cargar los datos que posibilitan la transformación de las coordenadas del wiimote (a.k.a. calibración), aunque solamente están hechas las funciones; hace falta implementarlas en el programa.
  • También estoy añadiendo los menús del programa, quizás con opciones para cargar y guardar los datos de la transformación de coordenadas junto con alguna otra opción más.
Así que esta es la situación.  Digamos que veo bien el asunto, bastante mejor que hace 3 semanas, y mucho mejor que hace 1, una vez conversado sobre el tema con el tutor, pese a que aun tengo trabajo que hacer.   Pero ya no hay más, hay que acabar para diciembre y a eso vamos.
Nos vemos!

PFC – Pantallazo de la semana #8

Hola!

Esta semana ya empieza el curso de nuevo, y… ¡¡se me olvidó matricularme de las asignaturas de la uni!!  Yo no se que ha pasado esta vez, pero desde que llegó el mail de la matriculación de este año, allá por Julio (o Junio, ya no me acuerdo), no se me ha vuelto a pasar por la mente el hecho de que DEBO matricularme de las asignaturas.  Así que después de pasar la fase ¡OMG, OMG, OMG!, pasé a tranquilizarme (no mucho) y a buscar los mensajes de la uni en el correo y ver la página web, a ver si había más fechas para matricular.  Recordaba que sí, pero no estaba seguro.

Duré poco buscando en la página web, veía mucha letra y pocas nueces xD, los nervios debieron cegarme porque la página está bien hecha (contraejemplo: Renfe, para cuando queráis una tarde del terror entrad en su página web y buscad, lo que sea, buff que traumas comprando billetes :@).   Así que llamé a la uni, y entre eso e ir recuperando la visión después del “kernel panic” inicial, ya vi que a partir de mañana (¿hoy xD?) hay otra periodo de matriculación, fiuf xD

Así que nada, peripecias de estudiante… trabajador claro, porque si no hubiera sido por estar ocupado este verano, pues me hubiera acordado de matricularme…. cof, bueno, pues eso, que a ver si consigo matricularme que aun no está todo dicho :p.

Y de paso, dejo una captura de pantalla de algunos avances que estoy haciendo con el proyecto.  A finales de esta semana ya daré más detalles de las cosas que he añadido con respecto a la anterior actualización, y también sobre el estado del proyecto en general, ya que tengo que hablar con mi tutor de PFC que, por supuesto, estará leyendo esto :):

 

Colores, colores everywhere!! (Y más cosas eeh, pero no se ven :p)

 

Y esto es todo, ¡saludos!

 

P.D: Por cierto, cuando estaba documentándome para comenzar el PFC, hace meses, encontré un proyecto de unos japoneses que habían conseguido hacer algo muy parecido a lo que pretendo conseguir con mi PFC.  Pues resulta que en el PDF en el que explicaban muy brevemente el proyecto, tenían sus mails, así que pensando que igual podían resolverme algunas dudas decidí escribirles un mail.  ¡¡Y uno de ellos ha respondido!!, eso si, con un inglés muy japonés, pero entendible al fin y al cabo.  Así que igual con alguna explicación que pueda conseguir de ellos puede que resuelva algunas dudas que tengo sobre algunas cosas que me faltan por hacer.  Además es majo el hombre, está contento de que le haga preguntas jeje.


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!


PFC – Resumen semana #4 y #5

Como cuesta actualizar esto.  Bueno hago un pequeño resumen de estas dos semanas.  Estas dos semanas han estado llenas de problemas.  Para empezar mi relación odio/odio con Windows.  Después de solucionar este asunto, volví de nuevo a ponerme manos a la obra.

Estaba con el tema del dibujado del área de visión de cada wiimote, pero no acabé de solucionar este problema.  El tema del dibujado es bastante problematico cuando tienes que dibujar capas.  Dibujas todo, y luego cuando el usuario cambia algún dato como alguno de los ángulos o la altura del mando, tiene que volver a redibujarse en base a los nuevos datos de entrada, pero al mismo tiempo borrar lo que había antes.  Y esto lo hacía bien, pero al cambiar luego el código para poder dibujar el área del wiimote diera igual el valor del ángulo alfa, me encontré con problemas que de momento no logré resolver.

Es por ello que decidí cambiar de tarea, lo he dejado aparcado para un tiempo más conveniente.  Me puse directamente con el código de la calibración de los wiimotes.  Para explicar esto de la calibración usaré una imagen que encontré en otro blog y me sirve para explicar brevemente el asunto.

Vision distorsionada de un wiimote. 1

El tema son las perspectivas.  Si os fijáis, cuando el wiimote, en la mayoría de los casos, nunca verá de frente el área donde se encuentra nuestro objeto.  De tal forma que siempre lo verá en perspectiva.  Necesitamos crear un código, en el que marcamos cuatro puntos de calibración.  De forma secuencial, iremos iluminando un led infrarrojo en cada uno de esos puntos de calibración para decirle al programa cuáles son los márgenes del área que queremos visionar.  Una vez hecho esto, tenemos que tener presente que lo que ha visto el wiimote no es un cuadrado, tal y como nosotros le hemos marcado, sino un trapecio, por estar viendo todo en perspectiva.

Es por ello que hay que utilizar una serie de cálculos matemáticos para transformar la perspectiva de la imagen obtenida.  Así obtenemos un cuadrado.  Podemos decir que cada uno de los puntos que existen en el trapecio, tiene un equivalente en el cuadrado, asi que convirtiendo las coordenadas x e y del punto infrarrojo cada vez que el wiimote lo vea, estaremos corrigiendo el problema de la perspectiva. Esto se conoce como Homografía. Quizás con esta imagen se vea mejor.

Matriz de homografía. 2

Pues bien, estos cálculos ya están hechos en el código fuente que compartió Johnny Lee, por lo tanto solo hay que aplicarlos.  El caso es que he tenido problemas, y no por los cálculos, sino por la versión del Visual Studio.  Resulta que en la versión 2005 si accedes a un control desde un hilo distinto al que se creó todo funciona bien.  En cambio en la versión 2008 pues el programa da error.  Hasta que encontré que el fallo se debía a esto, pues tarde varios días, más de los que yo quería.

El caso es que ya lo he resuelto.  Encontré dos formas de solucionarlo, una elegante y otra no.  De momento uso la no elegante, más adelante ya veré como puedo implementar la forma elegante.  Ahora seguiré con el tema del código de calibración y coordenadas.  Claro el mando ve el objeto, y para ese objeto tiene unas coordenadas x e y.  Pero dichas coordenadas son relativas al wiimote.  Lo que tengo que hacer es transformar dicha coordenadas relativas a unas absolutas, que me indiquen las coordenadas x e y del objeto respecto de la sala y no del wiimote.  A ver qué consigo :P

Saludos!

P.D: A ver si logro perder menos tiempos con estos problemas… y despertarme más temprano tambien xD

Fuente imágenes: [1] y [2]


PFC – Resumen semana #3

Una semana más.  Esta semana ha sido de dura lucha la verdad.  Durante esta semana he estado intentando cambiar una parte importante del programa.  He sudado tinta y aun no lo he conseguido del todo, no digo más.  Hablo acerca de ello.

Existe una zona en el programa en la que se indica donde están colocados los wiimotes en la sala, y los ángulos de inclinación con respecto al suelo y la pared.  Es esta zona negra:

Captura pantalla principal programa

Dicha zona representa la habitación o sala en la que queremos posicionar el objeto.  Previamente le damos las medidas y el programa calcula el tamaño que ha de tener dicha zona negra.  En concreto esta sala de pruebas tiene 5 metros tanto de largo como de ancho y unos 3 de altura.

Pues bien, clicamos el botón “Editar distribución” y entramos en la fase de edición.  Ahora cuando pulsamos con el botón izquierdo del ratón sobre dicha zona negra (una PictureBox), se nos dibuja un circulo blanco que nos indica que hemos colocado un wiimote, y haríamos así para todos los wiimotes que tuvieramos en la sala.  Después de eso volvemos a clicar el botón “Editar distribución” para pasar a la fase de visualización.

En esta fase, si clicamos con el botón izquierdo en el circulo recién dibujado, se nos mostrará en la zona derecha el panel del que hablé en la entrada anterior.  Dicho panel nos servirá para darle las condiciones físicas de posición: La altura a la que está del suelo y los ángulos con respecto a la vertical y la horizontal.

Mientras vamos introduciendo los datos, en el PictureBox se nos va dibujando en azul un cuadrado, que nos muestra el área de visualización que tiene el wiimote que hemos colocado.  En la siguiente imagen se ve mejor:

Vision de un wiimote colocado a 90º respecto de la horizontal

Pues bien, esto es más o menos ya lo tenía realizado y funcionaba a la perfección.  El problema es las funciones que calculan el área azul, están pensadas solo para funcionar cuando el wiimote está colocado a 90º con respecto de la horizontal.  Lo hice así para poder comenzar con algo, para poder comprobar si funcionaban bien los cálculos que yo había previsto.  Además las fórmulas para calcular el área cuando el wiimote está a 90º son más sencillas, mientras que cuando cambia el ángulo, la cosa se complica mucho más, y por lo tanto lo dejé para más adelante.  Para ahora xD.

Tenía que hacer cambios en el programa, algunos sustanciales, para que pudiera representar los distintos ángulos, no solo cuando el wiimote está colocado a 90º.  Así que lo primero fue pensar en ver las fórmulas necesarias para calcular los cuatro puntos del polígono dado un angulo.  La verdad es que esto lo abandoné rápidamente porque la verdad es que era bastante complicado.  De hecho es todo tema de trigonometría, pero claro, por diferentes razones vi que el código se me iba a complicar, sobre todo cuando uno de esos puntos se sale de la zona negra o visible.

Así que pensé en otro acercamiento que me iba a ahorrar un poco de código.  Lo que pensé fue en rotar cada uno de los puntos del polígono con respecto al centro del circulo blanco.  Estuve buscando por internet para ver si alguien había hecho alguna función para hacer esto, y efectivamente lo encontré, y además en varias páginas distintas de ayuda.  Con lo cual intenté implementarlo en lo que yo ya tenía hecho.

Aquí vino lo complicado.  Tuve que hacer bastantes cambios en las funciones de dibujado, porque de la nueva forma, cada vez que introduzco los grados, tengo que calcular el area a 90º, para después rotarla hasta dejarla en los grados que ha indicado el usuario.  Bueno pues he tenido ahí 3 o 4 días de lucha buena, y alguno que otro de desesperación xD.  Tenía previsto tener esto listo en 3 días y al final llevo una semana y aún estoy retocando código, pero más o menos ya lo tengo dominado.  Ahora puedo hacer lo que veis:

Vision de un wiimote colocado a un ángulo distinto de 90º respecto de la horizontal

Ahora cuando le indico unos grados distintos a 90º con respecto de la horizontal, se ve reflejado en la zona negra.  Ya solo me queda retocar algunas cosas, eso cuando hay solo un wiimote.  Cuando coloco dos o más, aparecen otros problemas, pero bueno iré solucionándolos esta semana.  Y si lo soluciono rápido podré por fin ponerme con el tema de la calibración de wiimotes que se me está retrasando y tengo que entrar en este tema ya mismo.  La semana que viene otro poco más ;)

 


PFC – Resumen semana #2

Aquí llega un nuevo informe :p.  Bueno esta semana ha sido un poco movida, sobretodo a partir del viernes, pero bueno he podido avanzar faena.  Esto es lo que he conseguido esta semana:

 

  • Hay una zona en el programa en la que puedo ver y modificar los datos acerca de la colocación de cada wiimote en la sala.  La altura, y dos ángulos de inclinación horizontal y vertical, para saber hacia donde está apuntando el mando y calcular el área de visión de cada wiimote.  Me gustan las buenas UI (User interface o Interfaz de usuario), que sean amigables para el usuario y sobretodo que no sea difícil utilizarlas; es por esto que estos días me he centrado en mejorar esta parte del programa, ya que antes estaba puesta un poco para probar.  Os enseño una captura de la parte que digo:
Cada mando tiene un apartado igual a este en el que, como he dicho, se pueden modificar los datos de localización del wiimote en el espacio:  A la altura a la que se encuentra con respecto del suelo, y los dos ángulos que nos indican hacia donde está apuntando el wiimote, por así decirlo.
Cabe decir que el diseño no es definitivo, pero ya se acerca bastante a lo que tengo en mente.  La idea es la siguiente:
  • Los tres datos se pueden introducir vía caja de texto o mediante el control asociado que hay al lado de cada caja de texto.
  • Para la altura tengo un control tipo “trackbar” el cual permitirá dar la altura por separado de cada wiimote, y cuyos límites vendrán dados por la altura de la sala, y por la altura a la que esté colocada la semi-esfera sensora que enseñé en la anterior entrada.
  • Para los grados tengo un control rotatorio, un control tipo knob.  De tal forma que al hacer click en alguna parte de la circunferencia automáticamente seleccionamos los grados, como si fuera el control del volumen de un altavoz.  Cada uno tiene unas limitaciones físicas distintas porque los grados alfa está pensados para ir de 0 a 180 y de 0 a -180, o sea la circunferencia completa pero con signo.  Y el otro, el de los grados beta, está pensado para ir de 90 a -90.  Si introducimos un número en la caja de texto, el control gira automáticamente a la posición que le hayamos dado, y si supera los rangos que he dicho, pues no nos hace caso y pone el valor tope por defecto: Si introducimos 270º nos pondrá 180.  Y si ponemos un número en la caja y pulsamos la tecla –  una y otra vez, nos va cambiando el signo del número.
El tema de los controladores knob ha requerido un poco de trabajo extra.  No sabía como hacerlos y no quería invertir demasiado tiempo creando yo unos controles que no existen en el Visual Studio.  Así que pensé que alguien los habría hecho.  Y efectivamente, encontré una librería con el código fuente y una página web con unas breves explicaciones de cómo funcionaba el código.  Así que cogí dicha librería y decidí modificar el código fuente para que se adecuara completamente a lo que yo necesitaba, y las volvía compilar.  La verdad es que el resultado me gusta, queda muy bien.
  • Ya que esta semana ha sido un poco movida, he decido hacer tareas que sean menos pesadas y profundas y me sirvan igualmente para avanzar.  Por eso he estado revisando la nomenclatura de todo el código que llevo escrito, pasando todo a inglés, menos los comentarios, para que todo el código esté escrito de la misma forma y no haya partes en español, otras en inglés y demás.
  • Estoy implementando un control de entrada de datos de usuario.  Esto es que cada vez que el usuario escriba un número de algún dato, alguna altura, algún grado o lo que sea, el programa controle que el usuario escribe números y no letras, lo que podría provocar errores.
  • También estoy realizando una buena lista de tareas.  Tengo una lista de tareas hecha a mano, que es la que voy usando para ver qué es lo próximo en lo que tengo que ponerme, y las tengo categorizadas por prioridades, de forma que según el tiempo y las ganas y energías que tenga, pues puedo ponerme con alguna tarea más dura e importante, o con alguna otra que pueda hacer y sea un poco más tranquila.  Después todo esto lo tengo bien hecho con un software para gestión de proyectos. No uso todas las funciones del programa, pero tengo todas las tareas que tengo que hacer con la duración prevista, con la prioridad de cada tarea y separadas por tarea de tipo Hardware o Software.  Va bien tener todas las tareas para, de un vistazo, ver como va avanzando el proyecto.
Y esto es todo.  El próximo resumen semanal se retrasará un poco más, porque quiero hacerlo coincidir en fin de semana y no a mitad como ahora.  Lo próximo en lo que me voy a centrar es en revisar el código de la calibración de los mandos y alguna otra parte importante del código.
Saludos a todos!

PFC – Resumen semana #1

Bueno poca cosa esta semana, comprobar que todo funcionara igual que cuando lo dejé la última vez y ponerme a diseñar la matriz de leds infrarrojos. El mando es capaz de ver un led infrarrojo, el problema es que dependiendo de la distancia y el ángulo en el que se encuentra el led, puede estar relativamente cerca del wiimote y este no lo ve, con lo cual era un problema importante ya que reducía bastante el rango de visión efectivo del wiimote.

Por lo tanto pensé en hacer una matriz de leds, o sea, no solo un led, sino varios juntos y en distintos ángulos, de forma y manera que el wiimote ve el conjunto de leds como un solo punto de luz, y como hay varios leds apuntando a varias direcciones. He hecho dos posibles modelos de esta idea, ahora con las fotos lo veréis mejor:

Como veis no tiene ningún misterio. Simplemente comentar que he hecho dos modelos por la siguiente razón: Hay uno de los modelos que tiene los LED’s incrustados en una pelota de tenis de mesa cortada por la mitad. Pensé que distribuyendo los LED’s alrededor de una superficie esférica iba a conseguir una mejor recepción por parte del wiimote. Este modelo todavía debo comprobarlo

Pero luego pensé en hacer la inversa, esto es crear la matriz de LED’s, doblándolos para cambiar el ángulo de cada uno de los LED’s y entonces la semiesfera resultante de la pelota de tenis de mesa, ponerla encima de los LED’s. De esta forma perdería potencia, porque estaría tapando la luz de los LED’s con un objeto, pero pensé que haciendo esto conseguiría un efecto difuminador, y el wiimote vería todos los LED’s como uno solo.

El caso es que al final, el primer modelo de los dos que veis, funciona bien sin la pelota de tenis de mesa encima, o sea que el wiimote en lugar de ver muchos LED’s, al estar tan cercanos entre sí, solo ve un punto infrarrojo, con lo cual desestimé el poner la pelota de tenis de mesa encima ya que así no perderé luminosidad.

Y eso es todo por ahora. Mañana me pondré a hacer cambios en el programa, ya tengo varias cosas que estaban un poco cogidas con pinzas, pero que ahora podré refinar mejor. Y estoy también con la escritura del código para calibrar los wiimotes, a ver si lo vuelvo a plantear ya que esto es bastante esencial para el proyecto.

Y aunque son muy sencillos, incluyo los esquemas de los dos circuitos que he enseñado y con eso hasta otro día :D



PFC – Volvemos al trabajo

Una vez acabado Junio vuelvo a ponerme con mi proyecto de final de carrera.  Alguna semana de vacaciones habrá de aquí a septiembre claro :p, pero la idea es darle un empujón importante al proyecto durante el verano, para poder centrarme a partir del próximo curso en memorias y retoques finales.  Ya he hecho una lista con tareas que tengo que llevar a cabo, tanto en la parte de software como la de hardware, para así tener una ruta que seguir.

La idea es hacer una entrada cada semana para poder ir explicando los avances que voy logrando (mi director de proyecto lo agradecerá), y dependiendo de como avance el proyecto iré colgando algunas fotos o quizás algún video.  Tengo pensado ya un lugar en el que poder hacer pruebas de forma cómoda para así ir pudiendo probar si lo hecho funciona o no sirve para nada.

De todas formas tengo algún que otro proyecto menor para este verano, así que quizás también hable de ello aquí.  Y por supuesto tengo que hablar aun más sobre nuestro olvidado robot, así que cuando quiera desconectar un poco del PFC (no mucho xD) seguiré escribiendo sobre estos otros temas.

Nos vemos!


PFC – No puede ser

Bueno, pues ya es definitivo:  No podré presentar el proyecto en Junio.  Después de semana santa vi que no iba a poder llegar a hacer todo lo que tengo que hacer, así que había que sacrificar algo, y he preferido que fuera el proyecto.  Las razones son varias:  Tengo que aprobar TCII, y creo que si apreto un poco es posible que lo consiga y hay que avanzar con el robot sigue-lineas, y durante estas cuatro semanas próximas debo meter tiempo en ello porque también mis compañeros dependen de ello.

Todo esto es tiempo, que no tendría si fuera a tope con el proyecto.  Y además, al ser un proyecto que escogí porque me gustaba, prefiero dedicarle tiempo de calidad para que quede un proyecto bien hecho donde no se noten las prisas.  Además con estos meses de margen que consiga podré ampliarlo y mejorarlo en algunos aspectos que había tenido que recortar por la falta de tiempo.

Así que nada, no tengo fecha ahora mismo, pero lo que es seguro es que la entrega del proyecto no pasará de Diciembre.  Antes de que vuelva a escribir sobre el estado del proyecto pasarán algunas semanas, ya que me estoy centrando más en el robot sigue-lineas, sí, de ese robot del que todavía tengo que hablar.  Si no he dicho nada todavía es porque prefiero esperar un poco a enseñar todas las ideas que tenemos para el robot.  Ya sabéis, estas cosas del espionaje industrial y todo eso :)


PFC – Semana santa entre código

Ya ha pasado bastante tiempo desde la última entrada acerca de mi proyecto, aunque eso no quiere decir que haya estado sin hacer nada.  Desde entonces he avanzado bastante en el proyecto, como mínimo he vislumbrado la meta, a donde tengo que llegar con el proyecto, algo importante para poder centrar esfuerzos y ahorrar recursos.

El problema es que no es tan fácil llegar a la meta, y mucho menos hacerlo en el tiempo previsto, a finales de la primera quincena de Junio.  Aunque las ganas de no tener que volver a pagar el año que viene la matrícula del PFC me empujarán a hacer el máximo esfuerzo por terminarlo a tiempo ;).

Voy a describir como está ahora mismo el proyecto:

  • El programa se está haciendo escalable hasta 7 wiimotes, que es el máximo número de los mismos que permite conectar simultáneamente la tecnología bluetooth.  Pese a ello, las pruebas que hago con el programa están ideadas suponiendo el uso de 4 wiimotes en una habitación de dimensiones no demasiado grandes, algo así como 50 m², y siempre con formas ortogonales, esto es, cuadradas o rectangulares, así que iros olvidando de usar esto en algún laberinto :p.
  • Cada uno de esos wiimotes estará colocado en un ángulo con la vertical y otro con la horizontal.  Sabiendo estos ángulos, la altura de la sala, y que el wiimote empieza a tener visibilidad nula cuando un objeto está a unos 6 metros de distancia (de forma perpendicular al visor), podemos calcular las distancias y las áreas de visibilidad de cada uno de los wiimotes, lo que nos permitirá dibujar dichas áreas en el programa, para que el usuario sepa cuál sería la colocación óptima de los mandos en dicha sala, y así obtener la máxima visibilidad posible.
  • Todo esto saldrá dibujado en una zona del programa, en la que también veremos el punto infrarrojo correspondiente con el objeto moviéndose por la sala.  Podremos mostrar qué wiimotes están viendo el punto infrarrojo.
El problema está en que estoy encontrándome dificultades en conseguir esto.  Más allá de los ángulos, las distancias y el cálculo trigonométrico en sí, la dificultad la estoy encontrando en la programación de todo esto.
En la zona del programa donde yo dibujo solo se acepta una única capa, esto quiere decir que si yo dibujo las áreas de visibilidad de cada wiimote y encima dibujo el punto infrarrojo, como este irá cambiando de situación, cada vez tendré que dibujar tanto las capas como la posición del wiimote.
Además todavía no estoy consiguiendo ver el punto infrarrojo de la forma que yo quiero (explicar el tema es complejo, así que lo dejo así jaja)  así que esta semana estoy aquí programando, intentando solucionar estos problemas de la forma más rápida y eficaz posible.  Si lo consiguiera para antes de que se terminara Abril, las posibilidades de acabar el proyecto en Junio serían bastante elevadas, así que esperemos que pueda hacer avances interesantes.
Próximamente hablare de nuestro robot sigue-lineas, que no me he olvidado de el :).
Un saludo!

PFC – Viendo los primeros resultados

Ya han pasado unos días desde la ultima vez que escribí por aquí. Y durante estos días pocas cosas han pasado, eso sin contar las “maravillosas” notas de TCII, gracias a los “maravillosos” cambios introducidos este año para “facilitarnos” las cosas. Use discernimiento el lector.

En otro orden de cosas en estos últimos días no había avanzado nada con el proyecto. Tenia hecho el programa que me permitiría observar una fuente de luz infrarroja con el wiimote, pero era un desastre. Daba un error de compilación que no sabia solucionar y era muy lioso, porque cuando te tienes que basar en el trabajo de otros, el “cortaypega” y el comprender lo que se hace no van unidos de la mano. Por eso hoy he empezado de nuevo, desechando el trabajo hecho hasta ahora y buscando un poco mas de información.

Pues bien ya he conseguido el objetivo. Hoy, en un par de horas, he conseguido lo que en dos semanas no he sido capaz. Pese a que hay partes del código que no comprendo todavía, ya veo en líneas generales por donde van los tiros, por lo tanto el animo ha subido bastante.

La idea ahora es perfilar un poco este primer programa para poder comenzar Y-A las pruebas que tengo que hacer con los mandos. Dejo un par de capturas del entorno de trabajo y de lo conseguido.

20110322-011745.jpg

Montaje rudimentario para las horas de biblioteca

20110322-011910.jpg

Captura del programa en el que se puede observar el led infrarrojo visto por el wiimote


PFC – Código, código, más código y nuevos planteamientos

Como ocurre en todo buen proyecto, ya voy con las fechas al cuello, lo que quiere decir que me estoy retrasando :S.  Pero bueno, a ver si puedo (debo xD) apretar el pedal un poco más.  Como dice el título estoy lleno de código hasta las orejas.  Básicamente lo que estoy haciendo ahora mismo es programar el código que servirá para visualizar un punto infrarrojo con un wiimote.

Me estoy basando completamente en el trabajo hecho en su día por Brain Peek, posteriormente publicado en el libro Coding4fun.  En  el capítulo 9 de dicho libro se encuentra el ejemplo de como realizar una WhiteBoard con un Wiimote, el cual me está sirviendo para comprender los pasos que hay que seguir para recibir y entender la información que el Wiimote envía vía Bluetooth.  También aspectos sobre la calibración del mando.

Todavía no tengo el ejemplo terminado, pero espero para esta semana poder ver por la pantalla del ordenador, lo que un Wiimote ve cuando encuentra una luz infrarroja en su rango de visión.  Por otra parte he estado leyendo el PFC que en su día desarrollo Ricardo Bonache (del cual ya he hablado en otras ocasiones), en concreto la parte que tiene que ver con qué hacer con los datos que ven dos Wiimotes.

Para comprenderlo, un ejemplo: es como si dos personas (dos wiimotes) se colocaran en dos posiciones distintas y se dispusieran a ver el mismo objeto (punto infrarrojo) sin que haya comunicación directa entre ambos, siendo otra persona (el ordenador) la que interprete lo que le dicen ambas personas y nos diga a nosotros donde está el punto infrarrojo.

Lo primero que podemos pensar es que lo ideal sería coger lo que nos dice cada una de ellas y sobre las coordenadas que nos dijera cada uno posicionar el objeto.  Claro, cogemos los datos, hacemos la media, y esa es la situación aproximada del objeto.  ¿Pero que pasa si la visibilidad de uno de los dos es mucho peor que la del otro?  Si la diferencia de información que entregan ambas personas es muy grande, dar la media como dato sería erroneo.  En ese caso entonces, te quedarías con lo que te dice la persona que tenga mejor visibilidad.

Sin embargo podría pasar lo siguiente:  Imagina que uno de los dos, el de mejor visibilidad, ve un objeto en la posición 50,50, y el otro en la posición 40,40.  Hemos dicho que nos quedamos con el de mejor visibilidad, entonces cogemos el dato de 50,50.  Ahora imagina que ocurre lo siguiente, alguien o algo tapa el campo de visión de uno de las dos personas; para luego dejarlo libre, y pasar a tapar el de la otra persona, y así sucesivamente.  Claro, ahora iríamos cogiendo únicamente los datos de la persona que realmente puede ver, pero ¿qué pasaría? Pues que nuestro objeto iría bailando entre las dos posiciones de forma intermitente.  Si las dos posiciones son cercanas, nuestro objeto aparecerá estático en la pantalla, pero imagina que hay una gran diferencia entre los datos recibidos; entonces el objeto parecería estar saltando entre dos posiciones muy distintas, cuando la realidad es que no se mueve, todo es un efecto producido por lo que ven ambas personas.

Esto quiere decir que cuando se preste atención a los datos que recibimos de los wiimotes, tenemos que tener en cuenta muchas cosas, entre ellas: qué áreas puede ver cada wiimote, cuando dos wiimotes o más pueden ver partes de una misma área a la vez para poder posicionar mejor el punto infrarrojo, qué calidad de visión tiene cada wiimote en cada momento para discernir si hacer la media de los datos entregará un dato preciso o por el contrario hay que eliminar una de las muestras para obtener una medición más exacta, o determinar qué hacer cuando algún wiimote en el que estamos confiando pierde por completo la visibilidad y tenemos que apoyarnos en lo que ve uno solo.

Pensando en esto y también en la entrada en la que hablé de como posicionar los wiimotes en la sala, he pensado en las siguientes dos posibilidades:

  • Wiimotes en la parte superior de las paredes laterales

Como se puede ver en la primera imagen, tenemos 4 wiimotes en una sala, y se puede ver el rango de visión que tiene cada uno de ellos.  Pues bien hay situaciones en las que los rangos de dos wiimotes coinciden en una misma zona, y por lo tanto obtendríamos un mejor posicionamiento de un objeto.  Incluso en la zona media de la superficie, los 4 wiimotes podrían compartir zona de visión.  Sin embargo, dependiendo de las dimensiones de la sala, o la distancia a la que pudiera un wiimote ver un punto infrarrojo, podría haber muchas zonas ciegas, en las que perderíamos por completo la posición del objeto.  Las lineas discontinuas que se observan, nos indican que dependiendo de la profundidad de visión que tenga cada uno de los wiimotes, se podría reducir o no la cantidad de zonas ciegas en la sala.

  • Wiimotes en el techo

Otra posibilidad sería la de colocar 4 wiimotes en el techo.  También en este caso tendríamos zonas de visión compartida tanto por 2, como por 4 wiimotes.  Parecería que con este sistema no tendríamos zonas ciegas en nuestra superficie, pero este dependería de la altura a la que estuvieran colocados los wiimotes.

Tan solo son dos ejemplos que se me ocurrieron de cara a cuando tenga que hacer pruebas.  En una próxima entrada tengo pensado hablar acerca de algunas consideraciones a la hora de escribir el programa si se quieren usar más de 2 wiimotes, tal y como sería nuestro caso.


PFC – Visual C#

Bueno pues aquí sigo avanzando con mi proyecto en las sombras.  Como dije ya estoy metido en el lío.  Estoy leyéndome el libro “Visual C# 2008 in 24 hours” para ir cogiéndole el truco al lenguaje C#.  Por el momento, al ser un lenguaje orientado a objetos, y habiendo trabajando con Delphi, veo que no me va a costar demasiado adaptarme a él.  El libro está bastante bien, porque va presentando el entorno de trabajo y el lenguaje a la vez, con ejercicios, agrupándolo todo en temas que deberían durarte 1 hora, y hay 24, de ahí el título.  O sea que en un día de locura Red Bull ( o sucedáneo) tendrías que ser ya todo un “expertise” del tema (mentira gorda xD).

Hoy he empezado a alternar el aprendizaje de C# con pruebas de la librería WiimoteLib y el programa WiimoteBoard.  Ya he encargado el cargamento de pilas doble A que iré necesitando, y además unas tapas con pilas recargables por USB para cuando los Wiimotes estén cerca del ordenador y los pueda alimentar por ahí.  Pedí unos leds infrarrojos especiales por eBay (en previsión de que tardaran mucho en llegar los que pedí en la Uni) e hice bien, pues llegaron la semana pasada y hoy ya he podido disfutar la sensación de fundir uno de ellos por darle demasiado a la rosca de la fuente de alimentación jaja; prometo cuidar los cuatro restantes.

Espero que a mitad de la semana que viene, ya pueda haber empezado a hacer un pequeño programita que me muestre la posición de un led infrarrojo en una superficie usando un wiimote.


PFC – Planificación Febrero

Una vez presentado el proyecto, hay que ponerse en marcha de inmediato porque sinooo…

Sí, todos pensamos "oh-Dios-mio-tenia-que-haber-empezado-antes" una semana antes de entregar algo

Así que hay que tener una pequeña planificación.  Todavía no se muy bien el alcance de mi proyecto, o sea que no se muy bien como se va a ir desarrollando todo el tema, así que, para comenzar, he decidido planificar este mes de Febrero.  Es un mes un poco “light”, por decirlo de alguna manera, porque es más de leer documentación y probar cosas para ver un poco como enfocar el proyecto.  Por ello este mes me he propuesto las siguientes tareas:

  • Aprendizaje básico del lenguaje de programación C# (leído “ce sharp”, para quienes lo desconozcan).
  • Análisis de la librería WiimoteLib y del código fuente del programa WiimoteBoard.
  • Creación de un pequeño programa que haga uso de la librería anterior, y me sirva para conocer el funcionamiento del Wiimote de forma interna.

Esto es todo, que no es poco :'(.  Habrá que ponerse las pilas, porque ya tengo también planificación para el mes de Marzo, y no sería recomendable empezar a retrasar fechas teniendo en cuenta mi intención de presentar el proyecto en Junio.  En la próxima entrada hablaré de lo que he estado haciendo hasta ahora en cuanto al aprendizaje de C#.

¡Un saludo!

 


PFC – Detector de posición mediante wiimote

Aquí presento (por fin :p) el que es mi PFC.  El mismo consiste en, mediante varios mandos de Wii, detectar la posición de uno o varios leds infrarrojos en un plano o superficie.  Puede parecer algo raro que se utilice el mando de Wii, ya que este quizás pueda verse más asociado a la detección de movimientos que al uso del puntero, sin embargo, su mayor grandeza reside en este último.

El mando de wii tiene en su zona frontal una cámara monocroma con un silicio diseñado especialmente para el procesado de las imágenes obtenidas por la misma.  Capta todo tipo de objetos brillantes (luz), pero se le añade una ventana infrarroja enfrente de la misma para que tan solo capte las fuentes de luz infrarrojas, que son las que están posicionadas en la barra sensora de la Wii, y son las que permiten a la consola conocer a donde se está apuntando con el mando.

 

Camara monocroma Wiimote (sin ventana IR) – Wiibrew.org

 

Pues bien, la cámara, con su ventana infrarroja, puede ver hasta 4 focos de luz infrarroja, y conocer su posición en un plano XY.  Esto es lo que sucede con la barra sensora de la Wii, pero a la inversa:  El mando ve unos puntos infrarrojos fijos, que unidos al movimiento del mando, entregue unos datos a la consola, que son, ni más ni menos que las posiciones X e Y de los leds que forman la barra sensora en el plano donde está situada la televisión.  Una vez la consola interpreta los datos, un puntero se mueve por la pantalla.

 

Pues se puede aprovechar esta tecnología al revés de como se concibió, esto es, invirtiendo los papeles de los actores:  Esta vez el elemento fijo será el Wiimote, y los elementos móviles serán las luces o puntos de luz infrarroja.  Interpretando los datos X e Y que el mando entrega, podremos entonces situar en un plano dichos puntos.  Estos es lo que pensé Johnny Lee, quién se hizo famoso por los avances que consiguió con el mando de Wii.

Sin duda es necesario tener una mente tremendamente ingeniosa para poder sacar tanto de, aparentemente, tan poca cosa, y él la tiene; no en vano con los años ha sido una de las cabezas pensantes que ayudó a que Kinect viera la luz.

Muchos otros se han basado en el trabajo de Johnny Lee para probar o intentar crear algo nuevo o útil con ello.  En concreto, en el año 2009 hubo un PFC propuesto en la URV en el que se proponía la creación de una pizarra electrónica aplicando todos estos conocimientos.  Ricardo Bonache fue el que se encargó de llevar a cabo dicho PFC, cuyo resultado podéis ver aquí.

 

Pues bien, yo me basaré en todo lo que se ha comentado anteriormente para sacar adelante mi PFC.  Se ha querido dar una vuelta de tuerca más a todo el tema del posicionamiento de objetos con el wiimote, de tal manera que con este PFC se pretende usar esta tecnología para poder, por ejemplo, posicionar un objeto, como pudiera ser un robot, en un espacio entre 50 y 100 m2:

 

No, no vamos a poder contar con R2-D2 en la realidad :'( ... pero en el blog sí! o/

Un ejemplo de como posicionar los wiimotes para la detección del robot

 

Si bien puede parecer lo mismo que posicionar un punto infrarrojo en una pizarra, tenemos algunos inconvenientes:  Con estos espacios tan amplios estamos “probando” los límites de la tecnología empleada en el wiimote:

  • No sabemos cuantos wiimotes podemos necesitar para ver el objeto.
  • No sabemos la distancia máxima a la que un wiimote puede detectar el objeto.
  • Si usamos muchos wiimotes, ¿qué cálculos tendremos que hacer con los datos que obtengamos de los wiimotes para poder posicionar, lo más fielmente posible, nuestro robot? ¿Cuando tendremos que desestimar los datos recibidos por un wiimote para que no “ensucie” el posicionamiento con datos poco precisos?
  • Tenemos límites de un número máximo de wiimotes impuesto por la tecnologia bluetooth.

Para nada esto es trivial.  Por lo tanto se tendrán que hacer distintas pruebas, para comprobar como se comporta la tecnología cuando vamos aumentando las distancias entre los wiimotes y las fuentes de luz infrarrojas, y cual es la forma más óptima de ir colocando los wiimotes adicionales que vamos a ir necesitando para poder posicionar nuestro robot a lo largo del área de movimiento del mismo.

Aqui podemos ver unos ejemplos de los estudios que se pueden llevar a cabo:


PFC a la vista!

Bueno, ya hace unos días desde que abrí este blog, y desde entonces ha estado un poco dormido, la verdad.  Pero esto va a terminarse puesto que con el inicio de esta nueva semana, dará comienzo también mi lucha por sacar adelante mi PFC :p, así que habrá que ir poniéndose las pilas.

Para empezar, en la siguiente entrada presentaré el proyecto oficialmente, explicando de qué tratará. También expondré alguna propuesta de resolución; tan solo será un pequeño esbozo porque todavía no tengo mucho conocimiento como para comentar mucho acerca del proyecto, por lo menos no hasta que haya pasado una semana como mínimo.