Obtener la posición de un acelerómetro en un teléfono Android

Sé que integrar la aceleración dos veces me dará la posición (aceleración-->velocidad-->posición), pero ¿cómo puedo hacer todo esto cuando todo lo que tengo es un conjunto de puntos de datos (por ejemplo, 1 segundo = algunos # m/s ^ 2); ¿Cómo puedo tomar estos puntos de datos e integrarlos?

¿Tiene esto algo que ver con la integración numérica ?

Sí, sin duda: la integración pura de datos es peligrosa por las razones dadas en mi respuesta y prácticamente ilustradas por la respuesta de George GOrdon.

Respuestas (3)

Incluso si también tiene giroscopios, los errores de ellos y de los acelerómetros serán demasiado grandes cuando se integren durante un período de tiempo útil y los resultados de posición tendrán errores enormes.

Lo que estaría construyendo es un sistema de navegación inercial (INS). Esto requiere instrumentos de alta precisión como los que se encuentran en el INS utilizados en aviones militares y de otro tipo. Un INS preciso es mucho más grande de lo que podría caber en un teléfono inteligente, ¡incluso esos ridículamente grandes que están comercializando hoy en día!

Incluso un INS de grado militar tiene errores y sus datos generalmente se mezclan con datos de GPS para proporcionar un sistema de navegación altamente preciso y resistente. Este sistema integrado también se utiliza en aviones comerciales.

Me gustaría agregar una forma diferente de enunciar la respuesta de George S. Gordon , que es una excelente manera práctica de decir que la integración pura de una serie temporal puede ser algo peligroso porque la varianza del error absoluto, con suficiente tiempo, superará cualquier valor positivo, por grande que sea . Así, su respuesta ilustra un punto de considerable importancia para el procesamiento de datos y la física experimental.

Lo que esto significa es que, dependiendo de su aplicación, sus resultados serán útiles solo por un tiempo finito, después del cual debe recalibrar su cálculo de alguna manera utilizando el conocimiento de la posición obtenido de alguna medición independiente.

Para ilustrar más: cualquier algoritmo general de procesamiento de datos aplicado a una serie de tiempo a menudo significa que está calculando efectivamente su resultado mediante una relación de recurrencia; en el k t h paso estimamos nuestro "resultado" Y ( k ) de nuestros datos sin procesar X ( k ) dónde X y Y son generalmente vectores columna:

(1) Y ( k + 1 ) = F ( Y ( k ) , X ( k ) )

dónde F : R norte × R norte R norte es una función general no lineal. En realidad, hay ruido. norte ( k ) agregado a los datos sin procesar, por lo que en su lugar calcula:

(2) Y ~ ( k + 1 ) = F ( Y ~ ( k ) , X ( k ) + norte ( k ) )

A veces, y siempre debe esforzarse por organizar su procesamiento de datos para que esto sea así, si puede, la recurrencia anterior puede ser estable . Esto significa que no importa cuántos pasos realice en el procesamiento de datos, la varianza del error absoluto de estimación Y ~ Y permanece acotado . Por ejemplo, si nuestro estimador es una relación de recurrencia lineal:

(3) Y ( k + 1 ) = A Y ( k ) + B X ( k )

dónde A es una matriz cuadrada cuyos valores propios se encuentran estrictamente dentro del círculo unitario en el plano complejo, entonces la varianza del error es norte ~ T C T C norte ~ dónde

(4) C = B + A B + A 2 B + A 3 B +

y norte ~ es un vector de desviaciones estándar de ruido para que la varianza converja al valor finito norte ~ T B T ( ( i d A ) 1 ) T ( i d A ) 1 B norte ~ . NUNCA necesitamos recalibrar nuestro estimador en este caso, si estamos satisfechos con esta varianza acotada.

Pero en tu caso, esto no es así. Estás haciendo una doble integración. Sus ecuaciones de estado, discretizadas, son:

(5) v ( k ) = v ( k 1 ) + a ( k ) Δ X ( k ) = X ( k 1 ) + v ( k ) Δ

dónde a , v , X son, naturalmente, la aceleración, la velocidad y la posición y Δ su intervalo de discretización. El a ( k ) son sus "datos sin procesar" y su estimador es como en la ecuación (3) con A = i d y B ( k ) = ( 1 1 ) Δ a ( k ) . Puede ver que la serie (4) crece sin límite, de ahí la necesidad de recalibrar a intervalos regulares.

Teóricamente estos cálculos son posibles. Pero se complica por el hecho de que cada uno de los tres acelerómetros (uno en un eje perpendicular a los otros dos) cambia constantemente de orientación. Podría rastrear la orientación de manera similar con datos de giroscopios electrónicos. No estoy seguro de si los dispositivos Android incluyen giroscopios. También está limitado por la resolución de sus datos y los errores aparecerían rápidamente, lo que limitaría la precisión durante períodos bastante cortos.