Paso 4: Use-calibración
¿Por qué necesitamos calibrar?
¿No es el sensor ya calibrado de fábrica?
Estas son diez lecturas consecutivas (aceleraciones seguidos de velocidades angulares; x, y, z en ambos casos) con la GY521 en reposo, en posición vertical (eje + X hacia arriba):
- 17088 208 5-1048-1-216
- 17028 308-1320 4 3 -250
- 16988 360-1212 7 3-236
- 16876 376--1032 13 -218-36
- 16972 244--1348 13-25-226
- 17060 316-1156 -2-11 -224
- 16948 328--1300 31 -224 0
- 17016 332-1124 1-1-209
- 17088 348--1088 6-27-238
- 17072 284--1104 13-24-228
Si el dispositivo es realmente vertical, las lecturas para las aceleraciones deben ser (véase la razón): (16384, 0, 0); y si el aparato era realmente todavía, las lecturas para el giroscopio debe ser: (0,0,0). ¿Así: las lecturas deben todos han sido: [16384, 0, 0, 0, 0, 0]: lo que está mal? ¿O es realmente algo malo?
Probablemente se suceden tres cosas:
- el dispositivo sigue siendo, por lo menos con ningún movimiento notable, pero es probable que no es perfectamente vertical,
- hay ruido de la señal, y esto es probablemente la causa de la fluctuación en las lecturas instantáneas,
- las lecturas son crudas, no calibrado, razón por la cual ellos son "desviados", en promedio.
Por lo tanto, vamos a ir paso a paso.
ADC de la MPU6050
El MPU6050 tiene un integrado ADC (convertidor de analógico a Digital) que cada canal (aceleración y velocidades angulares, cada en x, y, z) en 16 bits. Por lo tanto 2 ^ 16 resultados diferentes son posibles: 0 a 65535, o-32768 a +32767. Esta gama de lecturas está asignada en la configuración estándar de + - 2g en aceleraciones y +-250 deg/s en velocidades angulares. Luego 1 g corresponde a 16384 LSB (menos pedacito de vaciado o digitales raws unidades de lectura), y 1 deg/s corresponde a 131 LSB.
Ambas gamas se pueden cambiar en las opciones de configuración mediante software a través del código de Jeff Rowberg (ver paso anterior). Las posibilidades son:
- Rangos de aceleración: + - 2g, 4g, 8g, 16g
- Gamas de giroscopios: +-250, 500, 1000, 2000 deg/s.
Nota que debido a restricción de 16 bits de ADC, ampliando los rangos de medidas disminuye la sensibilidad: el rango de + - 4 g asignado en un rango de lectura de (-32768, +32767) da 8192 LSB/g.
Por lo tanto, las lecturas de la materia prima se pueden convertir en "físico" unidades con sensibilidades conocidas son:
- 1,042969 0,012695 - 0,063965 0,038168 - 0,007634 - 1,648855
- 1,039307 0,018799 - 0,030534 0,080566 0,022901 - 1,908397
- 1,036865 0,021973 - 0,053435 0,073975 0,022901 - 1,801527
- 1,030029 0,022949 - 0,062988 - 0,099237 - 0,274809 - 1,664122
- 1,035889 0,014893 - 0,082275 - 0,099237 - 0,190840 - 1,725191
- 1,041260 0,019287 - 0,070557 - 0,015267 - 0,083969 - 1,709924
- 1,034424 0,020020 - 0,079346 - 0,236641 0,000000 - 1,709924
- 1,038574 0,020264 - 0,068604 0,007634 - 0,007634 - 1,595420
- 1,042969 0,021240 - 0,066406 - 0,045802 - 0,206107 - 1,816794
- 1,041992 0,017334 - 0,067383 - 0,099237 - 0,183206 - 1,740458
- Unidades: g y grados/s
Bueno, pero... ¿Cuál es el resultado real? ¿Cuántos decimales pueden utilizarse correctamente? He seleccionado 6 decimales, pero ¿por qué no 10?
Manipulación de números
Lo que podemos decir es que con un nivel de confianza del 95% (basado en todos los registros de la calibración, no sólo los 10 que se muestra a continuación) pueden calcularse los promedios con herramientas estadísticas y consideración de las reglas de cifras significativas. Ver aquí la hoja de cálculo, cuyos resultados son:
- AX = +-5 17002 LBS <> – 1.038 g + 0.000
- Ay = 328 +-4 LBS <> – g + 0.000 0.020
- AZ =-1170 +-6 lb <> –-0.071 + 0.000 g
- GX = -1,9 +-0.7 libras <> –-0.014 +-0.005 º / s
- GY = 0,6 +-1.1 LBS <> – 0.004 +-0.008 º / s
- GZ =-227 + 1 lb <> –-1.730 +-0.007 º / s
Claramente, sólo al mirar los resultados: las lecturas de aceleración parecen "confiable", y no es Gy. Pero incluso estos promedios "estadísticamente corregidos" todavía no son lo que uno esperaría. Aceleración debe ser 1.000; y, además, uno se pregunta por qué es tan alto si el dispositivo no estaba moviendo el promedio de Gz.
Por lo tanto, entrar en calibración - por fin!
Calibración (acelerómetro)
Primera observación: calibración no pretende corregir los resultados de un sensor defectuoso. Si de los resultados anteriores nos parece que el sensor de Gz probablemente roto o miss conectado, no es probablemente ninguna calibración que puede arreglarlo.
Segunda observación: una calibración compara las lecturas, o lecturas con suposiciones. Extrapolación más allá de esas lecturas requiere cuidado.
La MPU6050 muestra una relación lineal teórica entre las medida aceleraciones o velocidades angulares y la salida. (La hoja de datos de especificación de producto menciona una "linealidad" de 0,5% y 0,2%, respectivamente; "sensibilidad del cruz-eje", la cantidad de cambios introducidos en un eje por la aplicación de la aceleración o velocidad angular sobre otro eje, es 2%).
Entonces, sería posible aplicar correcciones a las ecuaciones de conversión. En el caso anterior, para las aceleraciones, la corrección del error de ganancia lleva a:
- AX(g) = (Ax(LBS)) / (16384 + 618)
Compensación de las desviaciones pueden corregirse también:
- Ay(g) = (Ay(LBS) - 328) /(16384-328)
- AZ(g) = (Az(LBS) +1170)/(16384+1170)
Este procedimiento de compensación podría ser correcto IF está seguro de que el acelerómetro es realmente vertical (+ X a) cuando se tomaron las medidas de calibración, de lo contrario no es correcto. Puede ser que el error así introducido es pequeño, pero sin embargo no es correcto. Y, desafortunadamente, es difícil estar seguro de la precisión de la verticalidad con la cual se coloca el MPU6050 durante la calibración.
Procedimiento de calibración alternativa "(prueba seis posiciones") sería leer seis veces la aceleración resulta, con el dispositivo todavía. En cada uno de estos casos el sensor sería dado vuelta para que cada vez que un eje diferente está en la "vertical" (+-x/y/z). Las lecturas en cada posición para todos los ejes proporciona suficiente información para una calibración detallada.
Una descripción simple de este procedimiento se puede encontrar aquí; información más precisa aquí; más grave aquí.
Independientemente de la posición del sensor, si no se mueve, entonces la norma o módulo de la aceleración vectorial debería ser 1 g (o sea la aceleración de la gravedad en su lugar). Esto puede también usarse para propósitos de calibración en cualquier posición del sensor.
Calibración (acelerómetro) que con G
Dos pruebas sencillas de calibración adicional parecen posibles, aunque no les he desarrollado:
- Caída libre: un acelerómetro en caída libre debe leer (0,0,0), independientemente de su orientación espacial. Probablemente será difícil reunir suficientes datos antes de aplicar un pararrayos (desde mi piso 7 tardará el probador de apenas más de 2 segundos para llegar a la calle).
- Péndulo: Un péndulo en el que bob es el GY521 medir aceleraciones y velocidades angulares que son relativamente fáciles de calcular.
Calibración (giroscopio)
El procedimiento estándar utilizado para la calibración del acelerómetro puede utilizarse para el desplazamiento control del giróscopo, pero no proporciona ninguna pista acerca del error de ganancia. Si el error de ganancia necesita revisarse, supongo que un péndulo calibrado puede ser necesario.
¿Cuánto tiempo de calentamiento? ¿Y para la calibración?
Se adjunta un gráfico mostrando las lecturas sesión lo antes posible después de haber encendido el Arduino. No hay período de calentamiento es evidente -, o si hay alguna, parece que es muy corto y no tendrá efecto práctico para mis propósitos.
La pregunta de cuánto tiempo se requiere para la lectura de datos de calibración se puede convertir en un problema estadístico: ¿cuántas muestras se requiere de una población general para estimar con precisión el promedio? La respuesta es: como necesario para proporcionar resultados estables. Hay expresiones explícitas para el número de muestras, pero, en general y cuando sea posible, es preferible que hacer tantas suposiciones sobre la población como sea posible. Un gráfico adjunto muestra la evolución de la estimación de Ax con el tamaño de muestreo. Después de 10-15 segundos de lectura los resultados son bastante estables, y mi recomendación sería leer para 20-25 s a una frecuencia de al menos 25 Hz.