Para un proyecto, mi equipo y yo hemos estado tratando de rastrear un wiimote en un espacio 3D usando el acelerómetro incorporado y el giroscopio WiiMotion Plus.¿Cómo puedo tener en cuenta la gravedad usando el acelerómetro de un wiimote?
Hemos podido rastrear la rotación y la posición con un ODE (se encuentra en http://www.alglib.net/), pero hemos tenido un problema al quitar el componente de gravedad del acelerómetro.
nos fijamos en Accelerometer gravity components que tenía la fórmula (implementado en C#/XNA)
private Vector3 RemoveGravityFactor(Vector3 accel)
{
float g = -1f;
float pitchAngle = (Rotation.Z);
float rollAngle = (Rotation.Y);
float yawAngle = (Rotation.X);
float x = (float)(g * Math.Sin(pitchAngle));
float y = (float)(-g * Math.Cos(pitchAngle) * Math.Sin(rollAngle));
float z = (float)(-g * Math.Cos(pitchAngle) * Math.Cos(rollAngle));
Vector3 offset = new Vector3(x, y, z);
accel = accel - offset;
return accel;
}
Pero no funciona en absoluto. Como referencia, la aceleración es directa desde el acelerómetro, y la rotación se mide en radianes después de que se ha trabajado a través del ODE.
Además, estamos teniendo problemas para entender cómo funciona esta fórmula. Debido al hecho de que nuestro seguimiento tiene en cuenta todas las dimensiones, ¿por qué no se tiene en cuenta a Yaw?
Gracias de antemano por cualquier consejo o ayuda que se ofrece.
EDIT:
Después de discutir con mis compañeros de equipo y jefe, que hemos llegado a encontrar que esta fórmula funcionaría realmente si estábamos usando correctamente X, Y, y Z. Sin embargo, hemos llegado a otro tocón.
El problema que estamos teniendo es que la biblioteca de Wiimote que estamos utilizando devuelve valores relativos de rotación basados en el movimiento del giroscopio. En otras palabras, si los botones están hacia arriba, girar el wiimote hacia la izquierda y hacia la derecha es guiñada y si los botones apuntan hacia usted, el guiñada es el mismo cuando DEBERÍA ser la rotación de todo el wiimote.
Hemos encontrado que los ángulos de Euler pueden ser nuestra respuesta, pero no estamos seguros de cómo usarlos adecuadamente. Si hay alguna aportación sobre este nuevo desarrollo o cualquier otra sugerencia, por favor denles.
¿Eso significa que el control remoto falla cuando lo pones boca abajo? –
no necesita ser calibrado en gravedad cero. la gravedad es 1g abajo y muy predicable. no es como si no pudieras compensarlo. –
@dan_waterworth: sí, la gravedad es muy predecible; y sí, puedes compensarlo. Eso es diferente de "eliminar el efecto de gravedad del acelerómetro". La compensación no eliminará el efecto; lo compensará, pero hay un nivel de precisión diferente entre la eliminación y la compensación. –