Necesito usar el magnetómetro en un dispositivo para determinar con precisión cuántos grados lo gira el usuario (gira en el plano x-y). No me importa la orientación absoluta, solo el delta angular. Por supuesto, el usuario puede sostener el dispositivo en cualquier orientación. Esencialmente, esto es como un picaporte que no está conectado a nada.
Probé atan2 (x, y) pero el delta anglular resultante varía según la orientación del dispositivo. Algunas investigaciones sugieren que la compensación de inclinación es necesaria, pero todas las soluciones son para corregir brújulas basadas en conocer el vector de gravedad.
En esta aplicación, los datos del acelerómetro, la gravedad y el giro no están disponibles, solo el magnetómetro. Esto significa que el tono y amp; rollo utilizado en soluciones típicas no están disponibles. Sin embargo, no estoy buscando encabezados verdaderos, solo rotación en x-y.
¿Alguien puede explicar la matemática & solución para esto? Me doy cuenta de que esto es estrictamente una pregunta de programación, pero esto es algo que solo una EE sabría.
La aplicación se usa normalmente de modo que el plano x-y rara vez, si alguna vez, es perpendicular al campo de la Tierra, por lo que sqrt (x 2 + y 2) > 0.
El magnetómetro es un MEMS de 3 ejes AK8975 soldado al dispositivo sin disposición de nivelación de tipo cardán. La calibración de hierro duro ya está cuidada. La frecuencia de muestreo es de 40 Hz, mientras que lo más rápido que puede girar su mano hacia atrás & adelante es inferior a 5 Hz. La orientación del magnetómetro es totalmente desconocida ya que el eje del magnetómetro está fijado al dispositivo y el dispositivo puede estar en cualquier orientación. No se sabe nada ni se puede asumir sobre la gravedad ni la orientación o ubicación del dispositivo.
[Más tarde] Hice un experimento donde tomé el dispositivo y lo coloqué en una silla giratoria orientada hacia el Norte, luego la giré en 360. El asiento de la silla está nivelado con el suelo. Aquí está la tabla:
x = azul, y = verde oscuro, z = rojo, sqrt (x ^ 2 + y ^ 2 + z ^ 2) = aqua El eje x es segundos transcurridos, el eje y es uT.
Dos cosas saltan hacia mí:
- ¿No debería ser plana la magnitud del color del agua? El canal es 30 contra 45 para la parte plana. De lo contrario, ¿es esto un indicio de que este sensor está mal calibrado? ¿O es esto una indicación de que se necesita compensación de inclinación?
- La x & Los picos de Y están ligeramente desplazados y tienen rangos ligeramente diferentes, pero no tanto. Esto, estoy dispuesto a ignorarlo como error, en oposición a la diferencia de 30:45 por la magnitud que parece suficiente para arruinar cualquier cálculo.
- La Z es plana como se esperaba