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.
El acelerómetro mide el negativo de la gravedad más cualquier aceleración hacia arriba. Consulte la NOTA n.° 1.
y quieres integrar para obtener velocidad y posición . Así que sus expresiones deben ser
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
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 se detecta materiales piezoeléctricos usados tales que . La aceleración reportada está calibrada para ser
NOTA #2: Puedes verificar que
d²x/dt²
es tan útil que hay una API de iPhone que realiza los pasos del 1 al 6 por usted: consulte CMDeviceMotion#userAccelerationComo 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:
¿Se parece a lo que esperabas?
Además, te equivocaste en tu descripción de la integración trapezoidal. En ambos casos, cuando integramos
Llegar
y cuando integramos
Llegar
, 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)/2
debería serD3=D2+(A3-A2)*(C2+C3)/2
Si sus aceleraciones están en , debe multiplicar el segundo término en la columna C por . 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.
Juan Alexiou
Leonid Shevtsov
CMAccelerometerData#acceleration
oCMDeviceMotion#userAcceleration
para obtener el valor de la aceleración? Porque la primera es la aceleración propia , una suma vectorial de G y ladv/dt
aceleración familiar.RobertoJoseph
CMAccelerometerData#acceleration
, ¿es eso lo que sugieres que use?Leonid Shevtsov
startDeviceMotionUpdates
yCMDeviceMotion#userAcceleration
, consulte la descripción general en esta página . Básicamente, la API filtra la gravedad y te proporcionadv/dt
a ti.