De la aceleración al desplazamiento

Hola, soy un estudiante de informática y esta pregunta debería ser muy fácil para todos los genios de la física aquí:

Tengo un conjunto de puntos de datos de un acelerómetro en un objeto en movimiento que básicamente sigue la forma.

Aceleración X incluida la gravedad

Y aceleración incluida la gravedad

Aceleración Z incluida la gravedad

Rotación sobre el eje x

Rotación sobre el eje y

Rotación sobre el eje z

Quiero trazar el objeto en un espacio tridimensional y, después de buscar un poco, me dijeron que hiciera una doble integración para obtener el desplazamiento.

¿Es esa la mejor manera? No tiene que ser computacionalmente eficiente siempre que sea fácil de entender.

Primero debe calibrar sus acelerómetros y los sensores de rotación, de lo contrario, las compensaciones, los errores de ganancia y, lo que es peor, la diafonía entre canales dará lugar a errores importantes. Luego, debe usar los datos de rotación para calcular la matriz de rotación entre los ejes reales del acelerómetro y los ejes del sistema de coordenadas en los que desea obtener el resultado. Luego, debe invertir esa matriz y aplicarla a los datos del acelerómetro. Luego tienes que restar la aceleración gravitatoria y AHORA puedes integrar dos veces. Fácil, ¿verdad? :-)
¿El objeto gira mientras se mueve? es decir, ¿"x" siempre apunta en la misma dirección, o "x" gira con la orientación del objeto?
@SamBader: Por supuesto que sí. Esa es la parte divertida. La única forma de asegurarse de que no lo haga es colocándolo en un riel guía de precisión. Entonces, por supuesto, no necesitas el acelerómetro. Una vara de medir hará el trabajo mejor y más barato. :-)
Sí, gira mientras se mueve. Bueno, el acelerómetro es de un teléfono móvil, así que no estoy seguro de cómo acceder al hardware para calibrarlo. También con respecto a si x gira con orientación al objeto, bueno ... no estoy seguro de mí mismo. Es un Samsung galaxy s5 si ayuda.
Para hacer las cosas más divertidas, las lecturas de su acelerómetro no incluyen la aceleración debida a la gravedad. Los acelerómetros miden todo lo que actúa sobre la gravedad excepto. Hablando con propiedad, miden la aceleración adecuada . Para hacer las cosas aún más divertidas, lo que está proponiendo hacer se llama " estimación muerta ". Los errores se acumulan. Su orientación y velocidad contienen ruido blanco integrado. Su posición contiene ruido blanco doblemente integrado. Necesita arreglos para compensar ese ruido.
Estoy usando la variable "aceleración que incluye gravedad.x", así que creo que tiene la gravedad incluida. ¿Es más fácil hacerlo si lo tomo sin gravedad?
Tu celular no detecta eso. Ve a la parte superior de un edificio y deja caer tu teléfono celular. Su teléfono celular va a acelerar hacia abajo en 9.81 metro / s 2 . El acelerómetro de su teléfono celular leerá aceleración cero . Si su teléfono celular sobrevive a la caída, colóquelo plano sobre una mesa. Las fuerzas que actúan sobre su teléfono celular son la gravitación, dirigida hacia abajo, y la fuerza normal de la mesa, dirigida hacia arriba. Tu celular no detecta la fuerza gravitatoria. Detecta la fuerza normal, por lo que informa que el teléfono celular está acelerando hacia arriba a aproximadamente 9.81 metro / s 2 .
Hmm Ok, lo coloqué plano y obtengo una lectura de 10 negativo para el eje x. Creo que es la gravedad?

Respuestas (1)

En principio podrías obtener el desplazamiento a partir de medidas del acelerómetro, si además tuvieras una estimación de la orientación del teléfono en cada momento.

Necesitaría usar la orientación del teléfono para convertir cada medición de aceleración instantánea en el mismo marco de coordenadas, y luego restar un componente constante que representa la gravedad, luego integrar dos veces.

Para ser explícitos, tomemos un marco donde la gravedad tira a lo largo del z ^ dirección, X ^ es este, y ^ es el norte

El teléfono puede apuntar en cualquier dirección, por lo que también define su propio marco de coordenadas dependiente del tiempo, p. X ^ ( t ) apunta a la derecha de la pantalla, y ^ ( t ) apunta a la parte superior de la pantalla y z ^ ( t ) señala fuera de la pantalla. Este es el cuadro en el que obtienes los datos de tu acelerómetro a metro ( t ) .

Digamos que hay un giroscopio perfecto en el teléfono para que sepa cómo describir la orientación del teléfono en el espacio. es decir, puedes escribir X ^ ( t ) , y ^ ( t ) , z ^ ( t ) en términos de X ^ , y ^ , z ^ y t . Entonces puedes calcular una matriz de rotación R ( t ) que convierte entre fotogramas.

a metro ( t ) = R ( t ) a metro ( t )

Y luego restar la gravedad:

a = a metro gramo z ^

Luego, asumiendo que el teléfono comienza en reposo en el origen:

r = d t d t a .

¡Voila!

Pero , este método es muy propenso a errores. Por ejemplo, si su estimación de orientación se desvía aunque sea un poquito, entonces la resta de la gravedad no funcionará bien y el algoritmo pensará que su teléfono está acelerando incluso cuando está parado. Un error de un grado podría llevar fácilmente a equivocarse por kilómetros del orden de minutos, ¡particularmente porque cualquier error de aceleración se integra doblemente!

Vea aquí para una buena discusión!

Wow, eso es detallado... Muchas gracias... Intentaré usar un filtro kalman para eliminar el ruido de los datos.
¡Cosa segura! No estoy familiarizado con el filtro de Kalman, pero solo lea la página Wiki, suena inteligente y tengo curiosidad sobre dónde lo aplicaría. El ejemplo de wiki incluía una aplicación que fusionaba datos de GPS con una navegación a estima basada en la velocidad. ¿Es similar a lo que estás planeando?
Es algo similar, excepto que no tengo datos de gps, así que usaré la posición inicial y la orientación de los teléfonos como datos constantes. Probablemente lo aplicaré antes de comenzar a hacer cálculos matemáticos.
Hmm, eso es un sesgo definitivo, ¿no? Por ejemplo, si el usuario inicia el teléfono en el punto A, lo mueve al punto B y lo deja en el punto B de forma indefinida, entonces la salida de su algoritmo se arrastrará constantemente hacia A, ¿verdad? ¿O tal vez eso está bien en su aplicación...?
aww damm.. en este caso, necesito encontrar un nuevo algoritmo para eliminar el ruido entonces. va a tomar un tiempo
No creo que encuentre nada para estabilizar los resultados a largo plazo de la navegación a estima, pero tal vez podría diseñar la aplicación de tal manera que solo necesite saber cómo cambia la posición en períodos cortos de tiempo. No sé cuál es el objetivo final, pero este método debería permitirte, por ejemplo, trazar formas con el teléfono. ¡Háganos saber cómo va! :D. (O si hay algo más que pueda hacer para responder adecuadamente a su pregunta).
bueno, en realidad solo necesito rastrear y trazar el objeto durante períodos de tiempo de 10 a 20 segundos a la vez. así que supongo que el DR no debería tener tanto error acumulado. claro, te dejaré saber cómo va.
¡Espero que vaya bien! Por cierto, si ha encontrado útil lo anterior, siéntase libre de "aceptar" la respuesta. ¡Gracias!
En el teléfono, hice clic en la marca verde. Creo que eso es aceptar la respuesta? Es útil, pero soy muy débil en matemáticas... Así que me llevará un tiempo...
¡Eso funciona, gracias! Por cierto, la página de descripción general de los sensores incluye toneladas de funciones útiles que pueden ahorrarle algunos cálculos (por ejemplo, getRotationMatrix()).
Wow, no sabía que existían tales funciones. Gracias. Esto debería acelerar las cosas un poco.