Solo necesitas realizar una integración de tiempo discreta. Es bastante simple en realidad. La versión más sencilla es algo así para cada muestra.
-
Recoge la muestra de tu gyro
sample = gyro_sample;
-
Obtén la hora actual
time = current_time;
-
Calcule el tiempo transcurrido desde la última muestra diferenciando las muestras de tiempo
delta_time = current_time - previous_time;
-
Multiplica la muestra y la diferencia de tiempo: este es tu cambio de ángulo desde la última muestra
delta_angle = sample * delta_time;
-
Añade esta diferencia a tu ángulo actual
current_angle = current_angle + delta_angle;
-
Guarda la hora actual como la hora anterior
previous_time = time;
Tendrá que hacer esto para cada eje que venga del giro.
Habiendo dicho todo esto, y respondiendo a tu pregunta, hay un poco más.
Esto proporcionará resultados bastante horribles. El ángulo se desplazará muy rápidamente. Deberá comenzar con una orientación conocida y luego tendrá una orientación precisa en el orden de segundos. Además, si estás utilizando los ángulos de Euler, tendrás problemas con los polos. Para obtener resultados más precisos, deberá implementar un filtrado bastante complejo. Sin embargo, no ha descrito su aplicación, por lo que es difícil decir lo que realmente necesita. Es posible que pueda eliminar código de proyectos completos de IMU . Muchas de las IMU en Sparkfun tienen código de ejemplo.