accelerometer - lsm303 arduino
Cómo determinar la orientación absoluta. (5)
Tengo un acelerómetro xyz y un magnetómetro. Ahora quiero determinar la orientación del dispositivo usando ambos. El problema que veo es que, dependiendo de la orientación del dispositivo, necesitaría usar los sensores en un orden diferente.
Déjame dar un ejemplo. Si tengo el dispositivo frente a mí, los cambios tanto en el balanceo como en la inclinación se pueden determinar con el acelerómetro. Para la guiñada utilizo el magnetómetro.
Pero si coloco el dispositivo horizontalmente (es decir, gírelo 90º, mirando hacia el techo), cualquier cambio en el vector hacia arriba (ahora horizontal) no se notará, ya que el acelerómetro no detecta ningún cambio. Esto ahora se puede detectar con el magnetómetro.
Entonces la pregunta es, cómo determinar cuándo usar uno u otro. ¿Es suficiente con ambos sensores o necesito algo más?
Gracias
Aquí hay alguna documentación que recorre este proyecto. Como queda claro a partir de otras respuestas, las matemáticas pueden ser complicadas. http://www.freescale.com/files/sensors/doc/app_note/AN4248.pdf
Creo que la pregunta "cómo determinar cuándo usar uno u otro" es errónea. Siempre debe usar ambos sensores para la orientación. Hay casos en que uno de ellos es inútil. Sin embargo, estos son casos de borde.
En el caso de que aún necesite orientación absoluta, puede consultar este panel de salida de Adafruit: https://www.adafruit.com/products/2472 . Lo bueno de esto es que la placa es que tiene un procesador ARM Cortex-M0 para hacer todos los cálculos por usted.
La clave es utilizar el producto cruzado de los dos vectores, la gravedad y el magnetómetro. El producto cruzado da un nuevo vector perpendicular a ambos. Eso significa que es horizontal (perpendicular a abajo) y está a 90 grados del norte. Ahora tienes tres vectores ortogonales que definen la orientación. Es un poco feo porque no todos son perpendiculares, pero es fácil de arreglar. Si luego cruzas este nuevo vector de vuelta con el vector de gravedad que da un tercer vector perpendicular al vector de gravedad y el vector plano del imán. Ahora tiene tres vectores perpendiculares que definen su sistema de coordenadas de orientación 3D. El vector original del acelerómetro (gravedad) define Z (arriba / abajo) y los dos vectores de producto cruzado definen los componentes este / oeste y norte / sur de la orientación.
Si lo entiendo correctamente, necesitará algo para detectar el tono (inclinación) y la orientación de acuerdo con los puntos cardinales (Norte, Este, Sur y Oeste).
El tono puede leerse desde el acelerómetro.
La orientación según los puntos cardinales se puede leer desde una brújula.
La combinación de la salida de estos dos sensores correctamente con la matemática correcta en su software probablemente le dará la orientación absoluta.
Creo que es factible de esa manera.
Buena suerte.