¿Cuál es la mejor manera de obtener la matriz de rotación del dispositivo con magnetómetro y acelerómetro?

Es posible que desee buscar filtros Kalman extendidos. http: //robotics.stackexchange.co…

La matriz de rotación [matemática] R [/ matemática] transforma los vectores de un cuadro a otro (una base o marco inercial y el marco fijo o del dispositivo). Si tiene una medición vectorial en cada cuadro (campo magnético en este caso) que le da dos ecuaciones independientes en la siguiente forma:

[matemáticas] R b _ {\ text {cuerpo}} = b_ {base} [/ matemáticas]

donde [math] b _ {\ text {body}} [/ math] es la medición del magnetómetro, [math] b _ {\ text {base}} [/ math] es el campo magnético en el sistema de coordenadas de la base. Esto es constante y necesita ser medido (tal vez por el dispositivo tan pronto como se enciende).

Lo anterior es un sistema de tres ecuaciones pero solo dos son independientes. Tiene tres variables independientes para resolver ya que [math] R [/ math] tiene nueve elementos, de los cuales 3 son independientes. (Quiero señalar que la orientación generalmente no se expresa como una matriz de rotación en la implementación de software por esta razón. Los ángulos de Quaternions o Euler se usan más comúnmente. Recomiendo quaternions ya que no te meterán en problemas con las singularidades, ver Gimbal bloquear.)

Por lo tanto, la medición del campo magnético no es información suficiente para resolver [math] R [/ math].

El acelerómetro da la aceleración del dispositivo. Suponiendo que está unido a un cuerpo rígido que tiene un punto, [math] p [/ math], que es fijo, la aceleración del dispositivo viene dada por:

[matemáticas] a _ {\ text {dispositivo}} = \ omega \ times \ left (\ omega \ times r_ {dp} \ right) + \ dot {\ omega} \ times r_ {dp} [/ math]

donde [math] a _ {\ text {device}} [/ math] es la medida del acelerómetro, [math] \ omega [/ math] es el vector de velocidad angular, [math] r_ {dp} [/ math] es la posición del dispositivo relativo a [math] p [/ math], expresado en el sistema de coordenadas del cuerpo.
Puede usar esta ecuación para resolver [math] \ omega [/ math] de [math] a _ {\ text {device}} [/ math].

Ahora tienes la velocidad angular. Si conoce la orientación inicial y la velocidad angular, puede resolver esta ecuación diferencial para [math] R [/ math] (o el equivalente en cualquier representación que use):

[matemáticas] \ dot {R} = R \ Omega [/ matemáticas]

donde [math] \ Omega [/ math] es la forma de matriz simétrica oblicua del vector [math] \ omega [/ math] que se usa para calcular productos cruzados (ver Producto cruzado). Simplemente integrando el lado derecho le daría la solución que está buscando, pero el problema es que hay una deriva , es decir, los errores se acumulan con el tiempo. Entonces, la primera ecuación que usa la medición del magnetómetro se usa para eliminar parte del error.

Esto se conoce como fusión de datos del sensor, y los filtros de Kalman son un método común para hacer esto.

Además de los EKF mencionados por Deepti Kannapan, también analice las matrices de coseno de dirección y los métodos de fusión de sensores. Los DCM se utilizaron en UAV de bajo costo porque son una forma muy simple de tratar con los datos del sensor de orientación.