sábado, 24 de mayo de 2014

Sesion 2: Solución del problema de sesnibilidad de la Kinect

Hola amigos lectores, hoy les hablaré de una problemática que surgió en la implementación del piano virtual utilizando la kinect, y de la solución que propusimos con mi grupo desarrollador. Aquí va el detalle.

Problemática

Al utilizar los puntos del esqueleto con el dispositivo kinect, éstos sufrían de un exceso de sensibilidad (incluso si uno se encontraba en reposo), por lo tanto, al posicionarnos en la frontera de una tecla del piano, éste sonaba en forma constante debido a que la sensibilidad de la kinect hacía que el pie estuviese fuera y dentro de la tecla en el transcurso de los frame.





Solución propuesta: Lógica Difusa

Las razones por lo cual se eligió utilizar lógica difusa fueron las siguientes:
  1. El pie está dentro o fuera de la tecla en cierto grado.
  2. Mientras más cercano esté el pie a la frontera de la tecla, menos grado de pertenencia tiene el pie de estar dentro de la tecla.
  3. Si el pie está más cercano al centro de la tecla, mayor grado de pertenencia tiene de estar dentro de la tecla.

Variables de entrada

Para poder implementar la lógica difusa deberemos definir las variables lingüísticas que tendrá el sistema, en este caso serán 2:
  1. Eje X.
  2. Eje Y.
El eje Y se omitió, pero en las próximas sesiones se incluirá dentro del sistema difuso. Para las variables lingüísticas X y Z se crearon 3 conjuntos difusos con sus respectivas funciones de pertenencia:
  1. Fuera 1.
  2. Dentro.
  3. Fuera 2.
Conjuntos difusos.jpeg

Considerar que existen 2 conjuntos "fuera"para tomar en cuenta los 2 margenes que tiene cada eje.


Variables de salida

La variable de salida nos permitirá determinar si se debe o no tocar el sonido de una tecla en función de las variables que hayan entrado al sistema, por lo mismo, los conjuntos difusos definidos para la salida son los siguientes:
  1. No Toca
  2. Toca

Diagrama3.jpeg

Reglas difusas

Las reglas difusas necesarias para hacer la transición entre las entradas del sistema y la salida son las siguientes:

IF (X IS Fuera1) AND (Z IS Fuera1) THEN Exito IS NoToca
IF (X IS Fuera1) AND (Z IS Dentro) THEN Exito IS NoToca
IF (X IS Fuera1) AND (Z IS Fuera2) THEN Exito IS NoToca
IF (X IS Dentro) AND (Z IS Fuera1) THEN Exito IS NoToca
IF (X IS Dentro) AND (Z IS Dentro) THEN Exito IS Toca
IF (X IS Dentro) AND (Z IS Fuera2) THEN Exito IS NoToca
IF (X IS Fuera2) AND (Z IS Fuera1) THEN Exito IS NoToca
IF (X IS Fuera2) AND (Z IS Dentro) THEN Exito IS NoToca
IF (X IS Fuera2) AND (Z IS Fuera2) THEN Exito IS NoToca

Como podemos observar, la única regla que hace tocar una tecla es cuando la variable X se encuentra dentro del conjuto difuso "Dentro" y la variable Z se encuentra dentro del conjunto difuso "Dentro".

Defuzificación

Luego debemos defuzificar la salida a través del método de Mandami, lo cual nos permitirá obtener una salida real. Si la salida real es mayor a 72,14, entonces la tecla sonará.

Conclusiones

Como vimos en esta entrada, mi grupo desarrollador tenía un problema con la sensibilidad de la Kinect, la cual hacía que una tecla sonara infinidad de veces cuando uno posaba un pies en la frontera de la tecla. Luego propusimos utilizar la lógica difusa para poder solucionar este problema y eso fue lo que sucedió. En este vídeo se puede ver la solución funcionando.




Bueno amigos, eso ha sido todo por esta entrada, en la próxima les enseñaré a como añadir más teclas al piano. Nos estamos leyendo.

No hay comentarios:

Publicar un comentario