Aceleración cuando el dispositivo está inclinado

Actualmente estoy trabajando en un dispositivo que usa un acelerómetro 3D siempre activo (usando una escala +-2 g) y un giroscopio 3D (usando una escala +-250 g) -sensor.

Puedo leer todos los vectores posibles (X,Y,Z) y su aceleración (g) y velocidad angular (dps) y también el ángulo en el que se encuentra actualmente el dispositivo. Pero mi problema es que cuando el dispositivo está inclinado (0g cuando no hay inclinación) la aceleración está entre (hacia abajo) 0g->-1g o entre (hacia arriba) 0g-> 1g dependiendo del ángulo en el que se encuentre actualmente el dispositivo. A continuación se muestra una imagen que, con suerte, aclara la idea.

Espero que esto ayude

El dispositivo se ubicará en un automóvil y debe medir la aceleración cuando el automóvil está desacelerando (frenando). Sin embargo, si el dispositivo ya está inclinado, el acelerómetro medirá cierta aceleración que provoca la inclinación, lo que dificulta saber si el dispositivo realmente tiene algo de aceleración o es solo la inclinación la que causa la aceleración.

Los ejes X e Y producen 0 g y el eje Z es 1 g cuando el dispositivo no tiene inclinación y está sobre una superficie plana. La inclinación hace que la lectura del eje X vaya hacia 1g si la inclinación es hacia arriba y hacia -1g cuando está hacia abajo. El +-1g se alcanza cuando el dispositivo está a 90* grados de la posición original

He estado pensando mucho en cómo eliminar esa aceleración que causa la inclinación y solo medir la aceleración real del dispositivo, pero no puedo pensar en cómo solucionar este problema con los siguientes datos que puedo producir.

Básicamente, creo que si solo pudiera medir la aceleración del eje X (imagen) incluso si el sensor está inclinado como en la imagen.

Espero que este mensaje no sea demasiado difícil de entender debido a mis conocimientos de inglés y la forma en que intento explicar mi problema.

¿Por qué no mides cuando no hay una aceleración interesante y lo usas como punto de comparación?
Creo que eso no funcionaría. Si el dispositivo está perfectamente quieto, los ejes X e Y son 0g y el eje Z 1g. La inclinación hace que la lectura del eje X sea de -1g a 1g dependiendo de la inclinación, como dije. El frenado hace que el valor medido en el eje X disminuya (aceleración negativa, por lo que el automóvil está desacelerando). Si el dispositivo ya está, por ejemplo, inclinado hacia abajo, entre 0 g y (-1 g), ¿cómo puedo saber que esto no es una aceleración causada por el frenado?
¿Por qué no calcula la aceleración total de tres ejes en lugar de solo el eje Y? ¡Creo que eso es algo básico para considerar los tres ejes, ¿verdad?! algo como esto
El LSM6DSM no tiene magnetómetro. De dónde obtuviste esta información? Creo que, de hecho, está utilizando la placa X-NUCLEO-IKS01A1 de ST, que tiene el giroscopio/acelerómetro LSM6DSM y un magnetómetro LIS3MDL.
@MrGerber Gracias por notarlo. Fue mi culpa por leer mal la hoja de datos del sensor.
Esto probablemente encajaría mejor en physics.se, ya que la física es probablemente la parte más difícil (y la mayoría del resto de las cosas complicadas se harán en código)
@PlasmaHH Si eso fuera posible, supongo que el OP podría simplemente colocar el acelerómetro de tal manera que no haya ninguna inclinación.
@DmitryGrigoryev y solo conduce en llano? Podrías calibrar cuando el motor no esté funcionando.
Notaré que muchos acelerómetros no responden a frecuencias por debajo de 1 Hz.
La aceleración es un vector, no son tres partes separadas. Simplemente mida la dirección de la gravedad cuando el dispositivo no se esté moviendo y luego réstelo de sus medidas.
@immibis Un vector en un espacio tridimensional se describe como la suma vectorial de tres vectores en cada eje (X,Y,Z). En reposo, la suma de las tres lecturas del acelerómetro es de 1 g.

Respuestas (7)

Sólo un boceto de una solución.

Tenga en cuenta los 3 ejes.

La aceleración debida a la gravedad, independientemente de la inclinación, siempre será 1G, como una suma vectorial de X,Y,Z, sin importar la inclinación. Puedes imaginarte la aceleración en reposo o en movimiento constante como un punto en una esfera con radio 1G. (Si está perfectamente horizontal, ese punto será (0, 0, -1), es decir, directamente debajo de usted).

La aceleración debida al frenado distorsionará la esfera misma; la suma vectorial de X,Y,Z ya no será 1G.

Asi que

A = X 2 + Y 2 + Z 2

te da la aceleración total. Si es igual a G estás en reposo; de lo contrario, está acelerando, y A es la suma vectorial de G y la aceleración verdadera.

Ahora tiene que encontrar la verdadera aceleración que normalmente será un vector en la dirección hacia adelante (o hacia atrás) que explica la diferencia entre A y G. Necesita restar algún punto en la esfera G de A , para encontrar un vector (con suerte, una solución única) con solo un componente X (adelante/atrás). Esa es su aceleración. (Dejaré la trigonometría como un simple rompecabezas, ojalá quede clara la idea).

A menos que también esté girando o patinando, por lo que necesita información del volante y del ABS para estar seguro; eso se convierte en un problema de fusión de datos. Este enfoque proporcionará una estimación de la aceleración. Para verificar la cordura y refinar esa estimación, combínela con otras fuentes de datos (también poco confiables), como en la respuesta de Phil Frost, usando un filtro de Kalman.

En realidad, nunca antes había trabajado con acelerómetro/giroscopio, por lo que el panorama general no está del todo claro cómo funcionan estas cosas y las matemáticas no son una de mis habilidades más fuertes, por lo que agradecería los consejos/aclaraciones, gracias.
Si bien es cierto, tengo una fuerte sospecha de que los márgenes de error serán importantes. Además, no olvide que la aceleración vertical distorsionará la esfera (por ejemplo, badenes, baches), por lo que es posible que deba resolver eso según la aplicación.
Pero la gravedad no es constante si miras lo suficiente . Mientras que la carretera más alta de los EE. UU. solo reduce $g$ en aproximadamente un 0,1 %, ir de los polos al ecuador hace una diferencia del 0,5 %. La geología también puede marcar una diferencia de este orden de magnitud . Probablemente no cambie las reglas del juego, pero no descuide la calibración
Solo necesitas modificar el radio de la esfera G según tu ubicación, o medirlo antes de encender el motor; eso no es un problema. Sin embargo, estoy de acuerdo en que los baches probablemente deban manejarse junto con los patines y la dirección.
Calibrar antes de encender el motor es el tipo de cosas en las que estaba pensando. Sin embargo, la calibración debería ser rápida si el constructor no es el usuario final.
¡Esperemos que G no varíe tanto antes de que llegue el momento de repostar!

Su principal error es no tratar la aceleración como un solo vector. Cuando el automóvil está en reposo, ese vector siempre será 1 g hacia arriba. No mire solo el componente X de los datos del acelerómetro sin procesar. Haz las matemáticas vectoriales reales.

Pero mi problema es que cuando el dispositivo está inclinado (0g cuando no hay inclinación) la aceleración está entre (hacia abajo) 0g->-1g o entre (hacia arriba) 0g-> 1g.

No. Este es el punto. Lo que dice puede ser cierto para el componente X de la salida del acelerómetro, pero no es cierto para la aceleración cuando el automóvil está en reposo.

La aceleración medida ideal siempre será la aceleración real del automóvil (en relación con la Tierra), más la aceleración de 1 g debida a la gravedad. Este último siempre está en la dirección hacia arriba. Si conoce la orientación del automóvil, puede restar este 1 g debido a la gravedad para encontrar la aceleración que realmente está buscando.

Tenga en cuenta que hay un error considerable en tales lecturas, especialmente en sensores MEMS baratos. Si bien debería poder obtener una buena idea sobre eventos a corto plazo, como una aceleración o un frenado bruscos, estos datos no son lo suficientemente buenos para realizar una navegación inercial durante más de unos pocos segundos en el mejor de los casos.

¿La aceleración (medida) debida a la gravedad no estará en la dirección "hacia arriba"? Es decir, la lectura que obtendrá del dispositivo en reposo en la gravedad de la Tierra será la misma que obtendría fuera de cualquier campo gravitacional pero acelerando en la dirección "arriba" (relativa al dispositivo).
@psmears: Sí, tienes razón. La fuerza es hacia abajo, pero la aceleración aparente es hacia arriba. Fijado.

Como han dicho otras respuestas, el acelerómetro proporciona un vector tridimensional que es la suma de la gravedad y otra aceleración en el automóvil debido al motor, los frenos u otras fuerzas que actúan sobre el automóvil. Entonces, su objetivo es restar la aceleración gravitacional de la salida del acelerómetro para encontrar las otras fuerzas restantes.

Para obtener la mejor precisión, no puede asumir que la gravedad siempre está "abajo" en relación con el acelerómetro. Por ejemplo, el automóvil puede estar en una colina. Todos sus cálculos deben realizarse con matemáticas vectoriales tridimensionales, y debe tener alguna estimación de la orientación del automóvil para saber la dirección del vector de gravedad a restar.

Un filtro de Kalman es un enfoque común aquí. La idea es tomar todos los datos que tiene que podrían alterar la orientación del automóvil, luego realizar un promedio ponderado de las mediciones, combinar eso con lo que sabe sobre la física que actúa en el automóvil, para llegar a una estimación probabilística de la nueva orientación del coche y en qué dirección es "abajo".

Cuantos más datos tenga y con mayor precisión pueda modelar la física del automóvil, más precisa será esta estimación.

Por ejemplo, si tiene un giroscopio y mide el cabeceo del automóvil, puede predecir que el vector de gravedad girará hacia la parte trasera del automóvil. En el corto plazo, digamos cuando el automóvil acaba de comenzar a subir una colina, esto puede ayudar al vector de gravedad a asumir rápidamente la orientación correcta.

También puede suponer que, en promedio, el automóvil no frenará ni acelerará. Por lo tanto, una salida filtrada de paso bajo del acelerómetro podría alimentar la estimación de qué dirección es "abajo". Esto proporciona una medición a largo plazo que no está sujeta a la deriva inercial.

La combinación de datos del acelerómetro y el giroscopio para estimar la dirección de la gravedad proporciona una estimación más precisa que cualquiera de las dos mediciones por sí sola.

Puede incorporar aún más lo que sabe de la posible envolvente operativa del vehículo. Por ejemplo, el automóvil no puede subir o bajar colinas demasiado empinadas, por lo que cuando el acelerómetro indica ángulos tan extremos, es posible que lo pese menos, suponiendo que la mayor parte de su rendimiento se deba a los frenos o al motor, no a la gravedad.

Sabes que si el conductor pisa los frenos, esto moverá el vector de aceleración, y puedes restarlo del componente "descendente" estimado.

O si tiene GPS y datos de mapas, puede incorporar una estimación de la pendiente del automóvil según la ubicación. Si tiene datos de alta precisión, puede saber con precisión en qué colina se encuentra el vehículo. Si solo tiene datos de baja precisión, esto aún puede ser útil. Por ejemplo, si el automóvil está en Kansas, las colinas son poco probables. Si el automóvil está en San Francisco, es más probable que haya colinas y es posible que le dé menos peso al acelerómetro.

Si tiene datos sobre el consumo de combustible y la velocidad, sabiendo que se consume más combustible cuando va cuesta arriba, puede usar esto para estimar que el automóvil se inclina hacia arriba o hacia abajo en función de la eficiencia del combustible.

Y así. Cuanto más sepa, mejor será su estimación.

Necesitaría un algoritmo de fusión y usaría sensores 3D-acelerómetro, 3D-Gyro y 3D-Magnetic. Con este algoritmo de fusión obtienes la actitud, la gravedad terrestre ayuda como referencia para detectar el horizonte: ángulos de cabeceo/guiñada/balanceo. Los otros dos sensores mag/gyro ayudan a filtrar el movimiento dinámico. Como su automóvil también girará a la izquierda/derecha, se agregará la fuerza centrífuga. Una vez que tenga la actitud, puede restar el vector gravitacional y desmontar la aceleración resultante en los tres ejes.

Como un enfoque muy básico, puede usar un filtro de paso alto para eliminar la parte constante de la aceleración (que corresponde a la gravedad) y mantener la parte variable que se debe a la dinámica del automóvil. Suponga rawque es un vector que contiene sus medidas X, Y y Z, y acces la aceleración del automóvil sin gravedad. Después

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

Los componentes individuales de acctodavía se ven afectados por la inclinación, pero la norma del vector no:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

Por supuesto, este método no es muy preciso, especialmente si la inclinación cambia a un ritmo elevado. Esto es lo más lejos que te llevan las matemáticas ingenuas. Si necesita una mayor precisión, aprenda a usar un filtro de Kalman.

La respuesta está en la definición precisa de "disminuir la velocidad" .

De tu pregunta:

El dispositivo se ubicará en un automóvil y debe medir la aceleración cuando el automóvil está desacelerando (frenando).

Sin embargo, desacelerar no es igual a frenar . Hay dos definiciones posibles:

  1. La velocidad del automóvil en relación con el suelo está disminuyendo.
  2. Los frenos del coche están siendo aplicados.

Esta diferencia es significativa en subidas y bajadas. En las bajadas, la velocidad del automóvil aumentará si no se aplican los frenos. Y en las subidas, la velocidad puede disminuir incluso cuando no se frena.

Resulta que detectar 1. es significativamente más difícil que 2. Definamos los ejes en relación con la orientación del automóvil: X: dirección adelante-atrás, Y: dirección izquierda-derecha, Z: dirección arriba-abajo. Todos los ejes alineados al carro.

Soluciones:

  1. Para la definición 1., el mejor enfoque es suponer que la velocidad del automóvil solo puede cambiar en la dirección X. Entonces la aceleración medida a = g + v donde g es la aceleración debida a las fuerzas que contrarrestan la gravedad, yv es la aceleración debida al cambio de velocidad. Puedes suponer que la longitud de g es siempre igual a 9,8 m/s² y que v siempre está en la dirección X. Entonces (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , lo que da v_x = a_x - sqrt((9.8m/s²)² - g_y² - g_z²) . Esto solo funcionará mientras |v| es menor que |g|, es decir, la aceleración debida al motor oa los frenos es inferior a 1G. Debería ser una suposición bastante segura a menos que su automóvil tenga un propulsor de cohetes.

  2. Para la definición 2., puede simplemente tomar la lectura del eje x directamente. Si el automóvil no está acelerando o frenando, la única fuerza que contrarresta la gravedad que actúa sobre él es la fuerza normal de la superficie de la carretera. Esta fuerza siempre está en la dirección z en relación con el automóvil, por lo que no cambia la lectura del eje x. Los frenos y el motor actúan solo en la dirección x y serán directamente visibles en esta lectura.

Parece que está utilizando un dispositivo "excesivo" para su aplicación. Debe usar un dispositivo que solo mida la aceleración x e y, de esta manera, la inclinación no tendrá un efecto medible. Aunque la aceleración total puede ser menor o mayor, debido a la inclinación, el dispositivo medirá solo los componentes x e y de la aceleración en el plano en el que se encuentra el vehículo.