2011-12-19 12 views
6

Deseo obtener el vector de aceleración de un teléfono con Android. El problema es que las coordenadas del acelerómetro son relativas a la rotación del teléfono. Lo que quiero es la aceleración "absoluta", es decir, debe devolver los mismos valores, independientemente de la dirección en que se encuentre el teléfono. (Quiero detectar si un usuario que está esquiando se desliza por una pendiente sin usar el GPS. También tengo que ser capaz de diferenciar el deslizamiento y subir el telesilla.)Android obtener la aceleración normalizada

Probablemente pueda obtener esos valores combinando el acelerómetro con el giroscopio, pero no tengo idea de cómo podría compensar los valores del acelerómetro con el del giroscopio.

Esto es posible, y si es así, ¿cómo?

Respuesta

10

Lo que describes no se puede hacer, a menos que redefinas un poco el problema. Para ayudarlo a redefinirlo, describo los principales problemas:

Primero, supongo que lo que quiere decir con "aceleración absoluta" es la aceleración con respecto a la referencia geográfica. No se puede hacer solo con el acelerómetro, ya que no tiene idea de las referencias geográficas. Si te mueves lo suficiente para el gps o usas la brújula, es posible que puedas evitar esto, pero cada uno tiene sus propios problemas (aunque al menos el problema es soluble).

El segundo problema es que la gravedad y la aceleración son completamente indistinguibles usando solo un acelerómetro (esto se conoce como el "principio de equivalencia"). Por lo tanto, cualquier aceleración medida será siempre la suma vectorial de la gravedad y la aceleración, pero siempre hay soluciones múltiples para estas ecuaciones, y en los casos habituales donde la aceleración es menor que la gravedad, realmente no se puede determinar nada sobre la aceleración . Sin embargo, dado que la gravedad es algo constante, también hay formas de evitar esto, usando, digamos, un giroscopio, o tal vez su usuario podría sostener el teléfono en una orientación fija (por ejemplo, mirando señales externas como el horizonte), y cualquiera de estos los enfoques pueden permitirle restar la influencia de la gravedad, pero en general es un problema no trivial.

El punto final no es que parezca estar pensando en un sistema de coordenadas fijo a tierra y el acelerómetro del teléfono solo está fijo en el teléfono. Ese es el eje z del acelerómetro que muchos no tienen nada que ver con arriba y abajo en la tierra, y la relación dependerá de la orientación del teléfono. Realmente, muchas personas preferirían un sistema fijo de tierra, pero el teléfono simplemente no lo sabe. Puede usar señales externas (GPS, campo magnético, giroscopio, gravedad, horizonte, etc.) para tratar de alinearlas, pero dado que el acelerómetro solo tiene una lectura arbitraria, la información simplemente no está allí.

Definiciones:
vector aceleración: esta es la x, y, z lectura desde el acelerómetro (y cada lectura dependerá de la orientación de los teléfonos), a veces escrito como A = (a x, a y, a z).
magnitud aceleración: esto es a = sqrt (a x + un y + un z), y esto no debe depender de la orientación de los teléfonos (si el diferentes ejes están calibrados para ser iguales). Si el teléfono está parado, esto básicamente será una lectura de la gravedad. Tenga en cuenta también que gran parte de la información en el vector de aceleración se pierde utilizando esta medida.
aceleración normalizada: La dirección de aceleración, que tiene magniture 1, es decir, A/a
aceleración de la tierra Coordenadas: Creo que esto es lo que realmente quiere, simplemente no hay manera fácil de conseguirlo, y realmente, incluso si pudieras, no creo que sea tan útil como podría parecer al principio.

Esquí:
yo creo que hay una buena oportunidad de determinar cuando alguien es el esquí basa en las mediciones del acelerómetro. Cosas como golpes y giros deberían ser bastante distintivos usando el acelerómetro. Para estos usaría el vector de aceleración completo. Por ejemplo, por turnos, la magnitud de la aceleración se mantendría aproximadamente constante y la dirección sería barrida. También tenga en cuenta que la caída libre (es decir, básicamente cuando el esquiador no tiene sus cielos/pies/trasero/etc. en el suelo, ya sea que estén subiendo al despegar de un bache/salto, o que se caiga del telesilla) , la magnitud de la aceleración será cero en caída libre. Para el telesilla, parece que probablemente tendrá una influencia rítmica distintiva principalmente en un solo plano.

Todas estas cosas se pudieron descifrar. Lo recomiendo, si realmente quiere resolver este problema, es registrar los datos de su acelerómetro mientras está esquiando, y ver si puede determinar cuándo está esquiando según las características de los datos. (Mi suposición es que su principal obstáculo con esto serán las matemáticas, porque puede ser un poco complicado crear un algoritmo que distinga las firmas del esquí, por lo que parece que sería una buena idea revisar el vector Matemáticas, y cosas como productos de puntos y productos cruzados, y también, sospecho que un poco sobre otro tema conocido como FFT o transformadas de Fourier podría ser útil para clasificar las firmas de tiempo y frecuencia del esquí vs balanceo en el telesilla .)

También podría doblar en las mediciones de GPS, que no serían tan confiables, o dar una buena resolución de tiempo, pero al menos podrían utilizarse para verificar su algoritmo.

+0

Quiero detectar si un usuario que está esquiando se desliza por una pendiente sin usar el GPS. ¿Crees que es factible? –

+0

En realidad, puede ser. Lo pensaré y haré algunos cálculos. Parece que tienes dos cosas para ti aquí: 1) suele ser irregular, por lo que el acelerómetro tomaría esto; 2) al menos en caída libre es la única situación en la tierra cuando la aceleración total (g + a) es cero, por lo que el trineo es un poco como la caída libre, quizás uno podría detectar una aceleración menor que la gravedad, al menos al inicio. ¿Hay algún aspecto de su problema que descartaría usar cualquiera de estos? – tom10

+0

No lo creo, pero podría estar equivocado. También debemos ser capaces de diferenciar el deslizamiento y el ascenso del telesilla ... –

3

Se puede calcular la aceleración independientemente de la orientación del teléfono usando:

a = sqrt(x*x + y*y + z*z) 

Dónde a es la aceleración absoluta y x, y y z son los valores del acelerómetro para cada uno de los 3 ejes del teléfono.

+0

Necesito los diferentes ejes de aceleración individualmente (de hecho, solo necesito 'z', pero probablemente todos sean similares en cómo los obtiene). –

0

Considere usar el GPS. En una aplicación de registro de vuelo utilizo la aceleración (aunque el valor absoluto, no el vector) para filtrar los datos ruidoso GPS (quito lugares donde la aceleración necesaria para el cambio de velocidad no es plausible):

/** 
* Remove noise from the measurement of the location. 
* @param loc a location 
* @return Answer <code>false</code> iff the location should not be used. 
*/ 
private boolean filterNoise(final Location loc) { 
    if(! loc.hasSpeed()) 
     return true; 
    if(this.recentSpeeds.isEmpty()) { // rescentSpeeds is a queue of locations 
     this.recentSpeeds.add(loc); 
     return true; 
    } 
    final Location lastFix = this.recentSpeeds.getHead(); 
    final long delta_t = (loc.getTime() - lastFix.getTime())/1000; 
    if(delta_t == 0) 
     return false; 
    final float delta_v = loc.getSpeed() - lastFix.getSpeed(); 
    final float a = delta_v/delta_t; 
    if(Math.abs(a) <= AccelThreshold) { 
     this.recentSpeeds.add(loc); 
     return true; 
    } 
    return false; 
} 

Si calcula la velocidad usando las coordenadas del último arreglo y la solución actual obtiene la aceleración como vector.

1

Algunos teléfonos tienen incorporado un barómetro (sensor de presión de aire). Después de aplicar una media móvil, he encontrado que está listo para escritura para determinar si el usuario está subiendo o bajando, quizás sea útil para su problema. En la galaxia s4 y 5 tengo una resolución lo suficientemente buena como para determinar si el dispositivo simplemente se movió de la mesa al piso.

Tenga en cuenta que los cambios graduales en el clima afectarán sus lecturas, por lo que debe considerar el Delta en un intervalo de tiempo razonable e ignorar los cambios en torno a algún umbral.

+0

¡Esto es muy interesante! No sabía que los teléfonos más nuevos tenían esto. La mía no, pero sin duda volveré a visitar si alguna vez consigo un nuevo teléfono con uno. ¡Gracias por hablar con tus resultados! –

Cuestiones relacionadas