Aceleración cuando el dispositivo está inclinado

13

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

Puedo leer todos los vectores posibles (X, Y, Z) y su aceleración (g) y velocidad angular (dps) y también el ángulo donde está actualmente el dispositivo. Pero mi problema es que cuando el dispositivo está en inclinación (0g cuando no hay inclinación) la aceleración es entre (hacia abajo) 0g -> - 1g o entre (hacia arriba) 0g-> 1g dependiendo de qué ángulo esté el dispositivo actualmente. 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 se desacelera (frena). Sin embargo, si el dispositivo ya está inclinado, el acelerómetro medirá cierta aceleración que causa la inclinación, lo que hace que sea difícil saber si el dispositivo tiene realmente alguna aceleración o es solo la inclinación la que causa la aceleración.

Los ejes X e Y producen 0 gy el eje Z es de 1 g cuando el dispositivo no tiene inclinación y está en 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 se baja. Se alcanza el + -1g cuando el dispositivo está en 90 * grados desde la posición original

He estado pensando 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 salir de 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 estoy tratando de explicar mi problema.

jumbojohn
fuente
2
¿Por qué no solo mides cuando no está ocurriendo una aceleración interesante y la usas como punto de comparación?
PlasmaHH
Creo que eso no funcionaría. Si el dispositivo está perfectamente quieto, los ejes X e Y son 0 gy el eje Z 1 g. 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 disminuya el valor medido del eje X (aceleración negativa, por lo que el automóvil se desacelera). Si el dispositivo ya está inclinado hacia abajo, por lo tanto, es algo entre 0g - (-1g), ¿cómo puedo decir que esto no es la aceleración causada por el frenado?
jumbojohn
¿Por qué no calcula la aceleración total de tres ejes en lugar de solo el eje Y? ¡Creo que es algo básico considerar los tres ejes, ¿verdad? Algo como esto
charansai
El LSM6DSM no tiene un magnetómetro. De dónde obtuviste esta información? Creo que de hecho está utilizando la placa X-NUCLEO-IKS01A1 de ST, que tiene tanto el giroscopio / acelerómetro LSM6DSM como un magnetómetro LIS3MDL.
MrGerber
@ MrGerber Gracias por notar eso. Fue mi mal por leer mal la hoja de datos del sensor.
jumbojohn

Respuestas:

18

Solo 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. Puede imaginar la aceleración en reposo o el 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 debido al frenado distorsionará la esfera misma; la suma vectorial de X, Y, Z ya no será 1G.

Entonces

UN=X2+Y2+Z2

UN

UNUN

A menos que también esté girando o deslizándose, por lo que necesita entradas 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 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.

Brian Drummond
fuente
En realidad, nunca antes había trabajado con acelerómetro / giroscopio, por lo que el panorama general no está completamente claro cómo funcionan estas cosas y las matemáticas no son una de mis habilidades más sólidas, por lo que agradecería los consejos / aclaraciones, gracias.
jumbojohn
Si bien es correcto, 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 (p. Ej., Golpes de velocidad, baches), por lo que es posible que deba resolver eso dependiendo de la aplicación.
Chris H
Pero la gravedad no es constante si te fijas lo suficiente . Mientras que el camino más alto en los Estados Unidos solo reduce $ g $ en aproximadamente 0.1%, ir de los polos al ecuador hace una diferencia de 0.5%. La geología también puede marcar la diferencia en este orden de magnitud . Probablemente no cambie las reglas del juego, pero no descuides la calibración
Chris H
Solo necesita modificar el radio de la esfera G de acuerdo con su ubicación, o medirlo antes de encender el motor; Eso no es un problema. Sin embargo, estoy de acuerdo en que los golpes probablemente deben manejarse junto con los patines y la dirección.
Brian Drummond el
Calibrar antes de arrancar 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.
Chris H
9

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

Pero mi problema es que cuando el dispositivo está en inclinación (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 está diciendo 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 debido a la gravedad. Este último siempre está en la dirección ascendente. 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 existe un error considerable en tales lecturas, especialmente de sensores MEMS baratos. Si bien debería poder tener una buena idea sobre los eventos a corto plazo, como la aceleración o el frenado bruscos, estos datos no son lo suficientemente buenos como para hacer una navegación inercial durante más de unos pocos segundos.

Olin Lathrop
fuente
¿No estará la aceleración (medida) debido a la gravedad en la dirección "hacia arriba"? Como en, 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
@psmears: Sí, tienes razón. La fuerza es hacia abajo, pero la aceleración aparente es hacia arriba. Fijo.
Olin Lathrop
5

Como han dicho otras respuestas, el acelerómetro proporciona un vector tridimensional que es la suma de la gravedad y otras aceleraciones en el automóvil debido al motor, los frenos u otras fuerzas que actúan en el automóvil. 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 suponer que la gravedad siempre está "abajo" en relación con el acelerómetro. Por ejemplo, el auto puede estar en una colina. Todos sus cálculos deben hacerse con matemática de vectores tridimensionales, y debe tener alguna estimación de la orientación del automóvil para que sepa 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 tenga que puedan alterar la orientación del automóvil, luego realizar un promedio ponderado de las mediciones, combinarlo 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 automóvil y en qué dirección está "abajo".

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

Por ejemplo, si tiene un giroscopio y mide la inclinación del automóvil, puede predecir que el vector de gravedad girará hacia la parte trasera del automóvil. A corto plazo, digamos que 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 estará frenando o acelerando. Por lo tanto, una salida filtrada de paso bajo del acelerómetro podría alimentar la estimación de la dirección "hacia abajo". Esto proporciona una medición a largo plazo no sujeta a 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 mediciones por sí sola.

Puede incorporar aún más lo que sabe del posible sobre operativo del vehículo. Por ejemplo, el automóvil no puede subir o bajar cuestas que son demasiado empinadas, por lo que cuando el acelerómetro indica ángulos tan extremos, podría pesarlo menos, suponiendo que la mayor parte de su salida se deba a frenos o motor, no a la gravedad.

Sabes que si el conductor pisa los frenos, esto va a mover el vector de aceleración, y puedes restar esto del componente estimado "hacia abajo".

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 puede ser útil. Por ejemplo, si el automóvil está en Kansas, es poco probable que haya colinas. Si el automóvil se encuentra en San Francisco, es más probable que haya pendientes y podría darle menos peso al acelerómetro.

Si tiene datos sobre el consumo de combustible y la velocidad, sabiendo que se consume más combustible al subir una cuesta, puede usar esto para estimar que el automóvil se sube o baja según la eficiencia del combustible.

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

Phil Frost
fuente
3

Necesitaría un algoritmo de fusión y utilizaría un acelerómetro 3D, un giroscopio 3D y sensores magnéticos 3D. 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.

Marko Buršič
fuente
3

Como 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 de la cual se debe a la dinámica del automóvil. Supongamos que rawes un vector que contiene sus medidas X, Y y Z, y acces la aceleración del automóvil sin gravedad. Luego

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 están afectados por la inclinación, pero la norma del vector no lo es:

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 una velocidad alta. Esto es lo más lejos que te llegan las ingenuas matemáticas. Si necesita una mayor precisión, aprenda a usar un filtro Kalman.

Dmitry Grigoryev
fuente
1

La respuesta se encuentra en la definición precisa de "desaceleración" .

De tu pregunta:

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

Sin embargo, reducir la velocidad no equivale a frenar . Hay dos definiciones posibles:

  1. La velocidad del automóvil en relación con el suelo está disminuyendo.
  2. Se están aplicando los frenos del automóvil.

Esta diferencia es significativa en subidas y bajadas. En 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 de adelante hacia atrás, Y: dirección de izquierda a derecha, Z: dirección de arriba hacia abajo. Todos los ejes alineados al automóvil.

Soluciones:

  1. Para la definición 1., el mejor enfoque es asumir 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 debido a las fuerzas que contrarrestan la gravedad, y v es la aceleración debido al cambio de velocidad. Puede suponer que la longitud de g siempre es igual a 9.8 m / s², y que v siempre está en 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 |o, en otras palabras, la aceleración debida al motor o los frenos es inferior a 1G. Debería ser una suposición bastante segura a menos que su automóvil tenga un cohete propulsor.

  2. Para la definición 2., puede tomar la lectura del eje x directamente. Si el automóvil no está acelerando o frenando, la única fuerza contraria a 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.

jpa
fuente
0

Parece que está utilizando un dispositivo "excesivo" para su aplicación. Debe usar un dispositivo que solo mida la aceleración x & 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 & y de la aceleración en el avión en el que se encuentra el vehículo.

Guill
fuente