Calcular la distancia vertical usando la aceleración

Tengo el siguiente escenario: un iPhone está conectado a un riel vertical (su movimiento está restringido al eje Y). A través de medios mecánicos, el teléfono es forzado hacia arriba y luego se le permite volver a descansar. La distancia varía (entre 6" y 24"). El tiempo total requerido para el viaje completo es de aproximadamente 1 a 2 segundos. El objetivo es estimar la distancia que recorre el dispositivo.

He leído a través de ambos:

Cálculo de la distancia a partir de la aceleración medida frente al tiempo

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

(aunque debo reconocer que hace años que no tengo que tratar directamente con estos temas)

Actualmente estoy recopilando datos de aceleración (a lo largo del eje Y) y uso lo siguiente para estimar la integral de aceleración y velocidad (a través de Excel):

1  Time [A]  Acceleration [B]   Velocity [C]                Distance [D]
2  0         a(z)               0                           0
3  1         a(z)               =C2+(A3-A2)*(B2+B3)/2       =D2+(A3-A2)*(C2+C3)/2
4  2         a(z)               =C3+(A4-A3)*(B3+B4)/2       =D3+(A4-A3)*(C3+C4)/2
5  3         a(z)               =C4+(A5-A4)*(B4+B5)/2       =D4+(A5-A4)*(C4+C5)/2
6  4         a(z)               =C5+(A6-A5)*(B5+B6)/2       =D5+(A6-A5)*(C5+C6)/2
7  5         a(z)               =C6+(A7-A6)*(B6+B7)/2       =D6+(A7-A6)*(C6+C7)/2
8  6         a(z)               =C7+(A8-A7)*(B7+B8)/2       =D7+(A8-A7)*(C7+C8)/2
9  7         a(z)               =C8+(A9-A8)*(B8+B9)/2       =D8+(A9-A8)*(C8+C9)/2
10 8         a(z)               =C9+(A10-A9)*(B9+B10)/2     =D9+(A10-A9)*(C9+C10)/2
11 9         a(z)               =C10+(A11-A10)*(B10+B11)/2  =D10+(A11-A100)*(C10+C11)/2
12 10        a(z)               =C11+(A12-A11)*(B11+B12)/2  =D11+(A12-A11)*(C11+C12)/2
   ...       ...                ...                         ...

Aquí hay una muestra de mis datos: test_data_1.csv

Si las unidades de aceleración se miden en G (9,8 m/s^2), ¿cuáles son las unidades resultantes de velocidad y distancia?

Así es como se ve una gráfica de mis datos: realmente no tiene sentido para mí (lo cual no es sorprendente ya que no tengo mucha experiencia en estas áreas). Una vez más, el objetivo es llegar a una estimación de la distancia (no tiene que ser perfecto).

Cualquier sugerencia/aclaración sería muy apreciada.

Si sus intervalos de tiempo están en s mi C o norte d s entonces las integrales son metro mi t mi r / s mi C o norte d y metro mi t mi r .
¿Está utilizando CMAccelerometerData#accelerationo CMDeviceMotion#userAccelerationpara obtener el valor de la aceleración? Porque la primera es la aceleración propia , una suma vectorial de G y la dv/dtaceleración familiar.
@LeonidShevtsov que estoy usando CMAccelerometerData#acceleration, ¿es eso lo que sugieres que use?
@RobertJoseph No, debería estar usando startDeviceMotionUpdatesy CMDeviceMotion#userAcceleration, consulte la descripción general en esta página . Básicamente, la API filtra la gravedad y te proporciona dv/dta ti.

Respuestas (3)

El acelerómetro mide el negativo de la gravedad más cualquier aceleración hacia arriba. Consulte la NOTA n.° 1.

a C C = ( gramo + X ¨ )

y quieres integrar X ¨ para obtener velocidad v = X ˙ y posición X . Así que sus expresiones deben ser

v ( t ) = 0 t ( a C C + gramo ) d t X ( t ) = 0 t 0 t ( a C C + gramo ) d t d t

También sabes que la posición final debe ser igual a la inicial y la velocidad final debe estar en reposo. Esto requiere que modifique los resultados de la integración para obtener el resultado deseado. Esto puede justificarse ya que tiene valores de aceleración discretos. Aquí es donde calibra el modelo con los datos de medición.

Así que aquí están los pasos a seguir

  1. Encuentre la frecuencia de muestreo norte = # s a metro pag yo mi s s mi C o norte d
  2. Suponga que la posición inicial es cero
  3. Suponga que la velocidad inicial es cero
  4. Desde los primeros segundos, encuentra el local gramo valor mientras el teléfono no se mueve
  5. Ejemplos de valores de aceleración a C C y calcule los tiempos para cada muestra utilizando la frecuencia de muestreo y el recuento de muestras.
  6. Encuentre el inicio del evento comprobando cuándo a C C comienza la desviación de gramo . Establecer el tiempo igual a cero al inicio del evento
  7. Integrar a C C gramo con el tiempo desde el tiempo cero y tenga en cuenta la velocidad final v 1 y tiempo t 1 al final.
  8. Ahora integre las velocidades para obtener la posición y observe la posición final X 1 en el momento t 1 al final.
  9. Ahora debe modificar los valores de aceleración con la función lineal a lo largo del tiempo para obtener el efecto deseado de que el teléfono descanse al final. Esto se hace con esta pieza de magia analítica ver NOTA #2
    v ( t ) = 0 t ( a C C + gramo ) + ( 2 v 1 t 1 6 X 1 t 1 2 ) + t ( 12 X 1 t 1 3 6 v 1 t 1 2 ) d t X ( t ) = 0 t 0 t ( a C C + gramo ) + ( 2 v 1 t 1 6 X 1 t 1 2 ) + t ( 12 X 1 t 1 3 6 v 1 t 1 2 ) d t d t
  10. Ahora puede encontrar la velocidad máxima y la altura máxima.

NOTA #1: Para obtener la ecuación del acelerómetro, debe hacer un diagrama de cuerpo libre en el acelerómetro mismo, ya que está conectado al teléfono y sigue el movimiento del teléfono. La fuerza de conexión F se detecta materiales piezoeléctricos usados ​​tales que F metro a C C gramo = metro a C C X ¨ . La aceleración reportada está calibrada para ser

a C C = F metro a C C = gramo X ¨
tal que una fuerza de reacción hacia arriba indica una aceleración hacia abajo (la llamada regla de D'Alembert). Tenga en cuenta que inicialmente cuando a C C = gramo el resultado es X ¨ = ( gramo ) gramo = 0 .

NOTA #2: Puedes verificar que

0 t 1 ( 2 v 1 t 1 6 X 1 t 1 2 ) + t ( 12 X 1 t 1 3 6 v 1 t 1 2 ) d t = v 1 0 t 1 0 t ( 2 v 1 t 1 6 X 1 t 1 2 ) + t ( 12 X 1 t 1 3 6 v 1 t 1 2 ) d t d t = X 1

En realidad, la separación d²x/dt²es tan útil que hay una API de iPhone que realiza los pasos del 1 al 6 por usted: consulte CMDeviceMotion#userAcceleration

Como dijo Ross, debe intentar eliminar la parte constante general de sus datos de aceleración. La mayoría de los aceleradores reportan la gravedad todo el tiempo. Entonces, incluso si su teléfono estuviera quieto en un escritorio, informaría una aceleración de -9.8 m / s ^ 2 "hacia abajo", sin embargo, hacia abajo alineado con los ejes de su teléfono.

Mirando un poco sus datos, durante el primer 1/3 de su intervalo, la aceleración es en gran medida constante alrededor de -0.977. Supongo que para esa parte de los datos, su dispositivo de medición no se movía realmente, por lo que puedo tomarlo como referencia y eliminarlo. Si elimino eso y luego hago la integración trapezoidal, obtenemos algo como:

Puestos Integrados

¿Se parece a lo que esperabas?

Además, te equivocaste en tu descripción de la integración trapezoidal. En ambos casos, cuando integramos a Llegar v y cuando integramos v Llegar X , queremos realizar esa integración a lo largo del tiempo. Entonces, en su columna D, en lugar de algo como D3=D2+(B3-B2)*(C2+C3)/2debería serD3=D2+(A3-A2)*(C2+C3)/2

¡Muchas gracias @alemi! Su gráfico es exactamente lo que estoy buscando. Parece que no puedo hacer que mi gráfico de distancia se parezca al tuyo (estoy usando los datos a los que me vinculé en mi pregunta). ¿Hay alguna forma de que puedas enviarme los datos que usaste para trazarlo? FYI: corrigí mis ecuaciones de integración trapezoidal como sugeriste.
La escala se establece por las unidades en que se mide el tiempo. No sabía su frecuencia de muestreo, así que simplemente la escalé hasta que la gráfica se veía bien, pero si quiere velocidad en m/s y x en metros, debe hacer su columna de tiempo en segundos y multiplicar su columna de aceleración por 9.8.
@RobertJoseph Me temo que ya no lo tengo.
@RobertJoseph Si entras en la sala de chat de física, podríamos resolverlo. No se necesita compensación.
¿No debería la línea roja (posición) volver a cero después del evento?
@ ja72 Ese es el error de deriva que hemos acumulado.
Que el OP puede eliminar si siguen el método descrito en mi respuesta.

Si sus aceleraciones están en gramo , debe multiplicar el segundo término en la columna C por 9.8 . Entonces, las velocidades estarán en m/seg y su integración para hacer D estará en metros. A continuación, es posible que desee aplicar cualquier restricción que conozca. Si sabe que la velocidad comienza y termina en cero, es posible que desee sumar o restar una aceleración constante a los datos para que resulte así. Si sabe que el teléfono regresa a su ubicación inicial, puede aplicar otra corrección (¿cambio lineal en la aceleración frente al tiempo?) para que eso salga. Estos pueden mejorar la precisión.