Leí un par de preguntas similares en este foro y algunos blogs en la web, aunque todavía estoy confundido, estoy decidido a calcular el desplazamiento de objetos usando datos del acelerómetro.
Entonces, traté de usar www.freescale.com/files/sensors/doc/app_note/AN3397.pdf , que da casi un 20-50% de error.
También probé esta ecuación en datos y obtuve mejores resultados.
V1 = V0 + ((a1) * t)
X2 = abs((V1 * t) + (((a1)/2)*t*t))
X2 = X0 + X2
V0 = V1
X0 = X2
Aquí t es la diferencia de tiempo entre dos muestras. X0 es el desplazamiento final. V1,a1 valores actuales. V0 valor anterior.
Aquí están mis gráficos para el movimiento de las lecturas de los sensores de Android.
1) A partir del gráfico del eje Z de aceleración lineal, ¿cómo calculo la distancia? 2) ¿Qué valores debo tomar y cuáles no? cuántas muestras de datos debo usar para el cálculo. ¿Solo para aceleración positiva o para un ciclo completo negativo positivo de datos de aceleración? 3) Qué significa el gráfico de aceleración lineal. Explique sus valores en función del movimiento del objeto.
No se puede calcular el desplazamiento de esta manera. La nota de la aplicación dice claramente "Cuando se implementa el posicionamiento en 3 ejes, se requiere un procesamiento adicional para anular el efecto de la gravedad terrestre", ¡y ese es el eufemismo del mes!
¡Anular la gravedad es un problema enorme, a menos que su acelerómetro sea perfectamente perpendicular al vector de gravedad de la Tierra! Las aceleraciones que desea medir son probablemente del orden de o menos, ¿verdad? Eso está superpuesto por . Antes de que pueda estimar el desplazamiento que causa la aceleración que le interesa, debe determinar los ángulos de los tres canales del acelerómetro en relación con , luego resta . Afortunadamente, ese procedimiento le dará una dirección hacia el piso... sin embargo, todavía no sabe en qué dirección se encuentra su y ¡los ejes están apuntando! Tu acelerómetro podría estar girando 180 grados mientras acelera... y el desplazamiento real podría terminar en la dirección opuesta a la que pensabas que iba. Ahora, un sensor de aceleración perfecto ni siquiera sería sensible a esta rotación, ¡para eso necesitaría un sensor diferente que pueda detectar rotaciones! Tal giroscopio puede o no estar integrado en su dispositivo. Dada la forma en que se implementan la mayoría de los chips de acelerómetro, los giroscopios y los acelerómetros ni siquiera muestrean de forma sincrónica, lo que significa que debe tener un filtro de remuestreo digital para correlacionar las lecturas de ambos sensores para obtener un vector de orientación/posición de seis ejes confiable. No creo que la plataforma Android le brinde suficiente información para hacer eso, en este momento. iOS podría...
Habiendo dicho eso, si desea simplificar las cosas al nivel en el que se encuentra, en este momento, puede (teóricamente) montar su teléfono celular en un riel recto, girarlo con cuidado, hasta que el vector de movimiento apunte exactamente en la dirección de uno de los ejes del acelerómetro, y ese eje es perpendicular a y luego puede aplicar un buen algoritmo de integración numérica a lo que mide en un eje, como uno de los integradores de orden superior descritos por http://mathworld.wolfram.com/NumericalIntegration.html .
Supongo que esa era tu pregunta original, ¿verdad? Me disculpo por arruinar su día con la descripción del problema real, y prometo no aburrirlo con otras ventajas como la calibración de las compensaciones, la deriva de ganancia, la diafonía (ejes desalineados) y las no linealidades.
floris
grg