Según mi entendimiento, con el fin de convertir los valores brutos del giroscopio en ángulos. Primero debo multiplicar los valores sin procesar de cada eje con el nivel de sensibilidad.
Ejemplo:
// Convertir Gyro en bruto a grados por segundo
rate_gyr_x = (float) gyrRaw [0] * G_GAIN;
rate_gyr_y = (float) gyrRaw [1] * G_GAIN;
rate_gyr_z = (float) gyrRaw [2] * G_GAIN fuente: enlace
Y para calcular el ángulo, necesito multiplicar la velocidad con el período de bucle.
Ejemplo:
gyroXangle + = rate_gyr_x * DT;
gyroYangle + = rate_gyr_y * DT;
gyroZangle + = rate_gyr_z * DT;
fuente: enlace
Pero no entiendo por qué los valores de ángulo se agregan con valores anteriores.
En mi problema, intento escribir un código para equilibrar un péndulo invertido. Tengo un temporizador que interrumpirá el programa principal una vez cada 30 ms. Y una vez en cada 30 ms, ejecutaré una función para leer valores de giro y comparar el valor de lectura con referencia. En función de la diferencia, se ajustará la velocidad y la dirección del motor. Para obtener el ángulo de referencia y el ángulo de nueva lectura, he multiplicado los valores brutos del giroscopio con el nivel de Sensibilidad y multiplicado ese resultado con 0.03s (como mi período de bucle es de 30 ms) para obtener el valor del ángulo. Pero en el enlace de referencia que he proporcionado anteriormente, el autor ha agregado los ángulos. (Integrado en el tiempo). Solo multiplicando la velocidad (grados / seg) con el período de bucle se obtendrá el Ángulo, pero entonces ¿por qué tenemos que resumirlo? ¿hora? ¿Cómo puede usar este ángulo resumido para comparar con el ángulo de referencia? ¿Me estoy perdiendo de algo? por favor hágamelo saber.