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