Calcular la velocidad del acelerómetro

Estoy tratando de usar mi acelerómetro en mi dispositivo móvil (reloj inteligente para ser específicos) para calcular la velocidad de giro del brazo de una persona.

Los datos devueltos por el acelerómetro están en metro / s 2 .

Como la aceleración del brazo de una persona no es constante, no puedo usar la ecuación v0 + atpara calcular la velocidad.

Nunca he sido bueno en física, entonces, ¿cómo calculo la velocidad con una aceleración variada?

Tienes que calcular una integral numérica. En su forma más simple, es solo una suma de las muestras de aceleración multiplicadas por el paso de tiempo. Habiendo dicho eso, su acelerómetro mide la aceleración a lo largo de tres ejes, que giran en relación con un marco de referencia físico real. Además, el acelerómetro no puede distinguir entre la gravedad ( gramo z ) y una aceleración de 1g hacia el suelo. Compensar estas cosas y los componentes de error del acelerómetro es un problema computacional difícil.
@CuriousOne Me doy cuenta de que habrá márgenes de error, así que no busco nada extremadamente preciso, le haré saber al usuario que es una velocidad estimada
El problema no es uno de pequeños errores, es uno de una señal diez veces más grande que depende de la orientación de su dispositivo que se superpone a lo que está tratando de medir. A menos que ya tenga un código que corrija eso, el problema es bastante difícil.
@CuriousOne - es gramo ¿un problema? - en un ascensor cuando bajo mi estómago siente la aceleración hacia abajo incluso cuando es menor que gramo . Supongo que el acelerómetro del teléfono también debería poder sentir eso. ¿Qué piensas?
@tom: El problema no es que el acelerómetro no pueda medir la aceleración gravitatoria, el problema es que no puede diferenciar entre la aceleración gravitatoria y una aceleración real en el sistema inercial en el que desea que se realice la medición. Cuanto más profundo la razón de esto es que la superficie de la tierra NO es un sistema inercial, solo nos gusta fingir que lo es. Y si observa la propagación del error de una aceleración constante de un g superpuesta vectorialmente en una aceleración pequeña (0,01-0,1 g) que normalmente nos interesa, los errores resultantes son enormes.
@CuriousOne gracias por la respuesta, punto interesante: me pregunto si esto es demasiado pesimista, pero supongo que la mejor manera de averiguarlo sería probarlo y ver si cuando se mueve el teléfono y se vuelve a poner en reposo, la velocidad vuelve a cero o no.
@tom: No traté de sonar pesimista, simplemente estoy explicando el desafío real. Estoy bastante seguro de que uno puede hacer un trabajo muy razonable si el teléfono celular tiene hardware de alta calidad, que es más probable para iPhones que para Android. Intenté hacer esto en teléfonos Android hace un tiempo y me encontré con problemas muy feos tanto en el hardware como en el software. Habiendo dicho eso, no me esforcé mucho (aproximadamente una semana a tiempo completo). Estoy seguro de que alguien que realmente se preocupe y dedique varios meses de I+D puede hacer que funcione razonablemente bien.
@CuriousOne - interesante de nuevo. Tal vez a medida que la tecnología mejore, pronto será realista en Android... gracias por su conocimiento.
@tom: Es menos una tecnología y más un problema de economía/licencia. En un momento dado, no hay más que un puñado de diseños de iPhone completamente caracterizados, sobre los cuales Apple tiene control total. La plataforma Android, por otro lado, consta de miles de dispositivos sin ningún requisito técnico firme en los acelerómetros, aparte de poder distinguir entre arriba y abajo. Lamentablemente eso se nota. Habiendo dicho eso, se supone que este sitio es sobre física. No deberíamos tener esta discusión aquí.

Respuestas (2)

Necesitas integrar la aceleración para obtener la velocidad.

v ( t ) = t = 0 t a . d t

Hay varias maneras de hacer esto numéricamente.

Supongo que obtienes estas lecturas regularmente con un espacio de d t , por ejemplo d t = 100 metro s o algo así.

Acerca de la forma más sencilla de hacerlo es

v ( t ) = v ( 0 ) + a × d t

dónde v ( t ) es la velocidad en el tiempo t . pero hay formas más sofisticadas de hacerlo; no las repetiré aquí, pero es posible que desee utilizar la regla de Simpson, que se describe aquí .

El problema se complica porque la velocidad es tridimensional, por lo que debe integrar cada una de las tres dimensiones x, y y z separadas.

Depende de cómo el teléfono te dé la información sobre la aceleración, pero si obtienes a X , a y y a z a intervalos regulares, puede hacer lo siguiente...

vx += ax * dt;
vy += ay * dt;
vz += az * dt;

si obtiene la aceleración como un número y ángulo sin procesar, entonces tendrá que convertir, supongo, coordenadas polares a componentes xyz para poder sumarlas.

velocidad total, | v | está, por supuesto, dada por | v | = v X 2 + v y 2 + v z 2

Por supuesto, intentaría empezar por v = 0

Curious One, plantea un punto realmente interesante sobre gramo - la mejor manera de probar esto es codificarlo y probarlo - agitar el teléfono y ver si la velocidad vuelve a cero cuando está en reposo después de agitarlo o moverlo....

... ¿puedes publicar tus resultados si haces esto y lo pruebas?

Otro problema es girar el teléfono y girar el acelerómetro; esto requeriría que pienses en la aceleración angular, etc., pero los principios básicos descritos aquí serían los mismos si tuvieras que pensar en los ángulos.

Sí, la información llega muy rápido, unas 20 muestras cada 1000 ms. La información del sensor está en forma de a X , a y , a z . Ya hice algunas pruebas para ver cuánta deriva hay en el sensor cuando está quieto y hay una buena cantidad de deriva, voy a realizar una especie de calibración para tratar de filtrar el ruido.

Por eso cuando quieres integrar numéricamente la aceleración vertical tienes que restarle 1g a la aceleración vertical que mides con el acelerómetro

¿Por qué necesitas restar 1g?
Porque 1g no produce ninguna velocidad "visible", pero como se dijo anteriormente, el acelerómetro no puede distinguir entre la gravedad y otras aceleraciones. Así que restas 1g sabiendo que cualquier otra aceleración vista además de esa habrá producido una velocidad real apuntando en alguna dirección: si la aceleración medida es menor a 9.8, entonces la velocidad es negativa, apuntando hacia el piso, si es mayor a 9.8 será una velocidad positiva apuntando hacia el techo/cielo. (Convencionalmente, el vector 1g apunta desde el suelo hasta el techo). espero haber sido lo suficientemente claro!