Cómo implementar un cálculo de una posición basado en la aceleración medida por una IMU 9DOF con fusión de sensor en C ++

La integración doble sería apropiada si tuviera lecturas continuas e infinitesimales para la aceleración, pero aquí se trata de muestreo de aceleración o valores de aceleración discretos.
Eso significa que entre dos puntos en el tiempo, tendrá una lectura de aceleración para el primer punto en el tiempo y una lectura de aceleración para el segundo punto en el tiempo. Se supone que el cambio en la aceleración entre estos dos tiempos es uniforme o lineal. Definamos el intervalo entre las dos muestras para que sea la constante, [math] t _ {\ Delta} [/ math].
Como la aceleración es un cambio de velocidad con respecto al tiempo, y la velocidad es un cambio de posición con respecto al tiempo, podemos determinar el cambio de posición para dos muestras de aceleración discretas diciendo algo como [matemática] \ Delta \ | \ vec {x (t)} \ | [/ matemáticas] = [matemáticas] \ | \ vec {x (n \ cdot t _ {\ Delta})} \ | [/ math] = [math] \ Sigma \ left [t _ {\ Delta} \ cdot \ | \ Delta \ vec {v (t)} \ | \ right] [/ math] o el cambio de posición es la suma de los productos de los cambios en el tiempo (que será el intervalo de muestreo, [math] t _ {\ Delta} [/ math]) y las velocidades a esas veces.
Está bien. ¿Pero cuáles son las velocidades en esos momentos?
Aquí supondremos que el objeto que estamos considerando,

  1. comienza en reposo, o
  2. comienza a una velocidad desconocida [matemática] v_ {0} [/ matemática] con respecto a nuestro marco de referencia.

Si comienza en reposo, entonces la velocidad en el primer punto de muestra es [matemática] v_ {1} [/ matemática] y sabemos que la aceleración en el primer punto de muestra representa el cambio promedio en la velocidad con respecto al tiempo, o [ matemáticas] \ frac {v_ {1} -v_ {0}} {t _ {\ Delta}} [/ matemáticas] = [matemáticas] \ frac {v_ {1}} {t _ {\ Delta}} \ equiv a_ {1 } [/ math] implica (por algún álgebra simple) que [math] v_ {1} = t _ {\ Delta} \ cdot a_ {1} [/ math]. Ahora que resolvió la primera velocidad, tenga en cuenta que la velocidad [matemática] v_ {n} [/ matemática] en el siguiente punto de muestra es [matemática] \ frac {v_ {n} -v_ {n-1}} {t _ {\ Delta}} \ equiv a_ {n} [/ math]. Entonces, [math] v_ {n} \ equiv a_ {n} \ cdot t _ {\ Delta} – v_ {n-1} [/ math]. De esta manera, podemos usar la velocidad anterior para calcular la velocidad “actual” dada la aceleración muestreada.
Eso es todo desde el punto de vista de la teoría de muestreo de física discreta.
Ahora solo necesita multiplicar esa suma completa por su intervalo de tiempo de muestreo constante [math] t _ {\ Delta} [/ math] (podemos factorizar el producto común, [math] t _ {\ Delta} [/ math], out de la sumatoria).
Para las muestras [matemáticas] n [/ matemáticas] (mediciones de aceleración), esta forma de razonamiento da la posición como [matemáticas] x (n) = t _ {\ Delta} \ cdot \ sum_ {0} ^ {n} a_ {n } \ cdot t _ {\ Delta} – v_ {n-1} [/ math], o si no te gusta el griego,

donde [math] v_ {n-1} [/ math] es la velocidad calculada usando todos los cambios de velocidad previos como lo indicarían nuestras lecturas de aceleración discretas.
En el caso en que [matemáticas] \ frac {v_ {1} -v_ {0}} {t _ {\ Delta}} \ equiv a_ {1} [/ matemáticas] su objeto comienza con una velocidad desconocida [matemáticas] v_ {0 } [/ math], simplemente agregas [math] v_ {0} \ cdot t _ {\ Delta} [/ math], el producto de [math] v_ {0} [/ math] y tu intervalo de tiempo constante [ math] t _ {\ Delta} [/ math], a la suma anterior.
Los cálculos anteriores se vuelven algo más complicados a medida que su objeto se acerca a la velocidad de la luz con respecto a su marco de referencia, pero no es difícil de calcular. Para obtener un resumen completo, vea It’s About Time: Understanding Einstein’s Relativity de N. David Mermin.

Estoy de acuerdo con la respuesta de Mavaddat y no puedo pensar en una mejor manera de decirlo. Sin embargo, mi consulta se refiere a su declaración sobre el uso de una IMU. Estoy interesado en resolver un problema similar y parece que no puedo entender el uso de un giroscopio para compensar la gravedad en las lecturas de aceleración utilizando el filtro de fusión de sensores Madgwick. Solo veo el uso de este filtro para llegar a una orientación más precisa en el espacio 3D.

¿Podría identificar en qué parte del código fuente abierto de Madgwick el uso de un giroscopio ayuda a compensar la gravedad?