Nuevos Paradigmas de Interacción PRÁCTICA 1

Transcripción

Nuevos Paradigmas de Interacción PRÁCTICA 1
Carla Marisa Lobo Simões
22/10/2014
Nuevos Paradigmas de Interacción
PRÁCTICA 1 - MS KINECT TM
MÓDULO DE DETECCIÓN DE POSICIONES Y MOVIMIENTOS
BÁSICOS
Movimiento 1:
En pie con las manos en reposo, cabeza recta y los pies juntos. Igual pero con
los pies separados un ángulo que se establezca.
En este movimiento se deben detectar dos posiciones:
Posición 1: En pie con las manos en reposo, cabeza recta y los pies juntos
que será identificado pelo método:
private bool AreFeetTogether(Skeleton received)
En este método se atribuirá el color verde al esqueleto si la posición
recibida fuera la correcta, amarillo si está por detrás de la posición y rojo si está
errada.
De acuerdo con lo que se especifica como correcto:
1. Pies juntos: serán identificados si los tobillos están juntos lado a
lado (de acuerdo con vista frontal para el Kinect), no será admitido
con los pies delante un de lo otro.
2. Manos en reposo: serán identificadas si los hombros están en la
misma línea que los codos y muñecas.
3. Cabeza recta: será identificada si la línea hecha entre cabeza e
medio de hombros fuera recta.
Posición 2: En pie con las manos en reposo, cabeza recta y los pies
separados un ángulo que se establezca, será identificado pelo método:
private bool AreFeetSeparate(Skeleton received)
En este método se atribuirá el color verde al esqueleto si la posición
recibida fuera la correcta, amarillo si está por detrás de la posición y rojo si está
errada.
De acuerdo con lo que se especifica como correcto:
1. Pies separados: serán identificados si los tobillo están separados
uno del otro (pero en la misma línea y no un delante de lo otro)
desde un ángulo de 30.5º hasta 39,5º.
Page 1 of 3
Carla Marisa Lobo Simões
22/10/2014
2. Manos en reposo: serán identificadas si los hombros están en la
misma línea que los codos y muñecas.
3. Cabeza recta: será identificada si la línea hecha entre cabeza e
medio de hombros fuera recta.
Problemas encontrados:
1. Cambio de color de los huesos en el esqueleto, solo he conseguido cambiar el
color de los puntos de las articulaciones: con el método DrawBonesToJoints he
utilizado este alterado para cada color: Green,Yellow,Red y Gray.
 Gray es usado cuando el cuerpo está en posición inicial:
if (skel.TrackingState == SkeletonTrackingState.Tracked)
{
DrawBonesAndJointsGray(skel, dc);
}

Yellow es usado cuando la posición está próxima de la correcta (solo
una de las 3 posiciones está errada):
else if ((IsAlignedBodyAndArms(skel) &&
!AreFeetSeparate(skel) && !AreFeetTogether(skel)) ||
(!IsAlignedBodyAndArms(skel) && AreFeetSeparate(skel) &&
!AreFeetTogether(skel)) || (!IsAlignedBodyAndArms(skel) &&
!AreFeetSeparate(skel) && AreFeetTogether(skel)))
{
DrawBonesAndJointsYellow(skel, dc);
}

Green es usado para las 2 posiciones correctas:
if ((IsAlignedBodyAndArms(skel) && AreFeetTogether(skel)) ||
(IsAlignedBodyAndArms(skel) && AreFeetSeparate(skel)))
{
DrawBonesAndJointsGreen(skel, dc);
}

Red es usado cuando la posición este errada en relación a las
anteriores.
else DrawBonesAndJointsRed(skel, dc);
2. En la posición de piernas separadas he tenido dificultades para obtener un
grado que me pudiese ser presentado por el Kinect como correcto. He tentado
primero con 60 grados y no ha funcionado y después he disminuido
gradualmente hasta que me reconociese la posición, y me ha reconocido la
posición con 30 grados y con un error de 4.5 grados:
double
double
double
double
double
distHiptoAnkleL = HipCenterPosY - AnkLPosY;
radian1 = (4.5 * Math.PI) / 180;
DistErrorL = distHiptoAnkleL * Math.Tan(radian1);
radian2 = (30 * Math.PI) / 180;
DistSeparateFoot = distHiptoAnkleL * Math.Tan(radian2);
Page 2 of 3
Carla Marisa Lobo Simões
22/10/2014
if (Math.Abs(AnkRPosX-AnkLPosX) <= Math.Abs( DistSeparateFoot +
DistErrorL) && Math.Abs( AnkRPosX - AnkLPosX) >=
Math.Abs((DistSeparateFoot) - DistErrorL))
return true;
else return false;
Page 3 of 3

Documentos relacionados