Cómo leer un giroscopio/acelerómetro

Recientemente compré esta placa de conexión MPU6050 GY-521 . Lo probé con mi Arduino Mega usando este boceto de Arduino proporcionado por arduino.cc oficial .
( Hoja de datos MPU-6050 , página de InvenSence (productor) )

¡Hombre, da esta salida extraña!

InvenSense MPU-6050
June 2012
WHO_AM_I : 68, error = 0
PWR_MGMT_2 : 0, error = 0

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1944, 368, 15608
temperature: 30.576 degrees Celsius
gyro x,y,z : -34, -204, -247, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1952, 364, 15304
temperature: 30.435 degrees Celsius
gyro x,y,z : -38, -216, -274, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1864, 388, 15356
temperature: 30.482 degrees Celsius
gyro x,y,z : -34, -233, -278, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1888, 324, 15260
temperature: 30.576 degrees Celsius
gyro x,y,z : -14, -220, -261, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1904, 392, 15316
temperature: 30.624 degrees Celsius
gyro x,y,z : -34, -241, -238, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1856, 308, 15604
temperature: 30.435 degrees Celsius
gyro x,y,z : -33, -252, -235, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1892, 444, 15528
temperature: 30.624 degrees Celsius
gyro x,y,z : 20, -236, -251, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1924, 356, 15520
temperature: 30.576 degrees Celsius
gyro x,y,z : -19, -224, -251, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 1844, 280, 15732
temperature: 30.529 degrees Celsius
gyro x,y,z : -1, -240, -249, 

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 2004, 372, 15396
temperature: 30.671 degrees Celsius
gyro x,y,z : -20, -252, -255, 

(Esto es solo una parte, le da a este rey de salida continuamente). Lo sé con certeza, solo la lectura de la temperatura es significativa. Pero, ¿cuáles son esos valores dados para lecturas de aceleración y giroscopio?

OK, dice que esos son valores brutos. Si es así, ¿cómo puedo convertirlos en valores significativos? Con la esperanza de que pueda ser útil (como muchos sugirieron), también me gusta saber cómo usar la llamada Jeff Rowbergbiblioteca.

Espero que haya alguien con experiencia en el módulo MPU-6050. Sólo dame un punto para empezar. No tengo idea de cómo usar el módulo... :(

Cualquier ayuda es muy apreciada. Gracias !

Tuve un problema similar que resolvió en esta pregunta electronics.stackexchange.com/questions/39024/…
Guau, ¡esa es una pequeña IMU ingeniosa!

Respuestas (2)

La lectura del acelerómetro parece tener sentido. La hoja de datos , página 13 indica 4 sensibilidades diferentes:

2 g  
4 g  
8 g  
16 g  

con resp. factores de escala de sensibilidad:

16 384 counts/g  
8 192 counts/g  
4 096 counts/g  
2 048 counts/g  

A partir de la lectura Z, supongo que tiene seleccionada la escala de 2 g, luego 15 608 es 0,95 g, que es lo que puede esperar de una lectura del eje Z cuando sostiene el sensor más o menos horizontal. Las lecturas X e Y probablemente también se deban a la gravedad cuando no sostiene la pieza perfectamente horizontal. Y tendrás un error en la lectura también.



Similar para el giroscopio . A 131 conteos por grado/s, puede tener este tipo de lectura si sostiene la pieza en sus manos.

¡Gracias! Todas tus suposiciones son correctas. Entonces, ¿me está sugiriendo que multiplique la salida sin procesar por 1g/16384(cuando se usa una escala de 2 g) para obtener la lectura de aceleración real (para todos los ejes)? Entonces, ¿cómo lidiar con las lecturas del giroscopio?
¿Y cuál es el significado de LSBen la unidad LSB/g?
El giroscopio parece ser muy sensible, por lo que sostenerlo en sus manos puede dar una lectura de rotación cuando sus manos temblarían un poco (¿demasiado café? :-)). LSB = Bit menos significativo, que traduje como "recuento". Indica el cambio mínimo.
En general, las lecturas "en bruto" de este tipo de dispositivo incluirán errores de compensación (sesgo) y de factor de escala. Eventualmente, querrá calibrar estos errores restando el valor de compensación y multiplicándolo por un valor de ajuste del factor de escala para cada eje.
El enlace a la hoja de datos se ha roto. ¿Conoces la nueva ubicación de ese documento?

Un giroscopio da los valores de velocidad angular (grados/seg) en los tres ejes respectivos (ejes de guiñada, cabeceo y balanceo respectivamente).

Pero cualquier valor bruto dado primero por estos sensores debe convertirse en valores sensibles de aceleración o velocidad angular mediante escalado.

La hoja de datos de InvenSense de MPU-6050 dice que tenemos que usar diferentes factores de escala para diferentes rangos de valores de giroscopio. Explicaré cómo usar estos factores de escala al final.

Angular Velocity Limit  |   Sensitivity
----------------------------------------
250º/s                  |    131
500º/s                  |    65.5 
1000º/s                 |    32.8 
2000º/s                 |    16.4

De manera similar, para el acelerómetro (que da la aceleración de los ejes x, y, z, incluida la gravedad), la unidad utilizada es g ( 9.81 metro s 2 ).

Factores de escala para los valores del acelerómetro:

Acceleration Limit  |   Sensitivity
----------------------------------------
2g                  |    16,384
4g                  |    8,192  
8g                  |    4,096 
16g                 |    2,048 

Convirtiendo los datos sin procesar:

valor requerido = valor bruto sensibilidad_adecuada

Por ejemplo, en los primeros datos, obtuviste

accel x,y,z: 1944, 368, 15608
gyro x,y,z : -34, -204, -247

La aceleración parece estar en el límite de 2g. Entonces, factor de escala = 16384

implica a X = 1944 16384 gramo

Gyro parece estar en el límite de 250 º s . Entonces, factor de escala o sensibilidad = 131

implica valor_giroscópico = 34 131 d mi gramo r mi mi s s mi C

Espero que ayude. :)

Siento que esta respuesta proporciona una explicación mucho mejor en comparación con la aceptada.
@ajmal Entiendo los valores del sensor hasta el punto que describiste. También entiendo que el giroscopio por defecto tiene una ligera deriva. Pero no entiendo cómo visualizar los datos en el posicionamiento del mundo real. Leí mucho sobre ángulos de Euler, cuarterones, pero no entiendo las compensaciones entre las representaciones y las matemáticas detrás de esto. Cualquier sugerencia por donde empezar.