Elimine la gravedad de los datos sin procesar del acelerómetro de la IMU -> apruebe las matemáticas y el algoritmo

Estoy usando este dispositivo (http://www.sparkfun.com/products/10724) y he implementado con éxito una estimación de orientación que funciona bastante bien basada en una fusión de datos de magnetómetro, acelerómetro y giroscopio basados ​​en este http://www.x-io.co.uk/node/8#open_source_imu_and_ahrs_algorithms implementación. Ahora quiero calcular la aceleración dinámica (mide la aceleración sin la aceleración de la gravedad estática). Para hacer esto llegué a la siguiente idea.

Calcule un promedio móvil de los datos del acelerómetro sin procesar. Si la aceleración bruta es estable durante algún tiempo (pequeña diferencia entre el promedio de ejecución y los datos brutos medidos actualmente), asumimos que el dispositivo no se mueve y estamos midiendo la gravedad bruta. Ahora guarde el vector de gravedad y también la orientación actual como cuaternión. Este enfoque asume que nuestro dispositivo no podría acelerarse constantemente sin la gravedad.

Para calcular la aceleración sin gravedad, ahora estoy haciendo el siguiente cálculo de cuaterniones:


RA = Quaternion with current x,y,z raw acceleration values
GA = Quaternion with x,y,z raw acceleration values of estimated gravity
CO = Quaternion of current orientation
GO = saved gravity orientation

DQ = GO^-1 * CO // difference of orientation between last gravity estimation and current orientation

DQ = DQ^-1 // get the inverse of the difference

SQ = DQ * GA * DQ^1  // rotate gravity vector

DA = RA - SQ // get the dynamic acceleration by subtracting the rotated gravity from the raw acceleration

¿Alguien podría comprobar si esto es correcto? No estoy seguro porque al probarlo obtengo una gran aceleración al girar mi placa de sensor, pero puedo obtener algunos datos de aceleración (pero es mucho menor que la aceleración durante la rotación) si el dispositivo se mueve sin girarlo.

¡Además, tengo la pregunta de si el acelerómetro también mide la aceleración si se gira en su lugar o no!

preguntado el 29 de mayo de 12 a las 16:05

Me temo que me estoy perdiendo un punto importante aquí. Si obtuvo la orientación después de la fusión del sensor (y dice que ya la tiene), ¿por qué no resta la gravedad de la aceleración medida? No puedes hacerlo mejor que eso. Me temo que me estoy perdiendo algo aquí, así que por favor explíquelo. -

Solo tengo la orientación relativa del dispositivo visto desde un punto de inicio arbitrario, no sé la posición actual en el espacio mundial. Es por eso que estoy estimando la gravedad con el algoritmo anterior. -

¿Podrías actualizar el segundo enlace? -

2 Respuestas

Otra forma es diferenciar accel to give jerk (usando diferencia finita, j = (a2 - a1) / dt). Ejecute el jerk a través de una función de decaimiento/fuga (utilice un valor de cálculo de decaimiento de vida media en lugar de un simple multiplicador). Luego integre el tirón (regla trapezoidal, a = dt * (j1 + j2) * 0.5) y eliminará la compensación de CC (gravedad). Nuevamente ejecute esta señal a través de una función de decaimiento.
Las funciones de decaimiento evitan que el valor caiga en espiral, pero reducirán la magnitud de los valores de aceleración dinámica que ve e introducirán cierta forma en la señal. Por lo tanto, ya no obtendrá valores que sean lecturas 'precisas' de m/s/s. Pero es útil para movimientos de corta duración.

Por supuesto, podría usar un filtro de paso alto en su lugar, pero eso generalmente requiere una tasa de muestreo fija y probablemente sea más costoso computacionalmente si está usando convolución (filtro de respuesta de impulso finito).

Respondido 15 ago 14, 14:08

Es más fácil de lo que piensas. Es posible que desee echar un vistazo a mi publicación aquí al respecto: http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus

Respondido 24 Jul 12, 11:07

¡Gracias por la respuesta! Ya encontré tu publicación antes, ¿puedes explicar qué hace el cálculo en la función? ¿Asumes que conocemos la orientación absoluta en las coordenadas mundiales o cómo funciona? - chris lb

¿Qué sucede si solo tiene 6dof IMU (sin magnetómetro)? ¿Todavía puedo usar esto de alguna manera? Obtengo el cuaternión de Extended Kalman Filter que fue implementado por otra persona. - c0dehunter

Qué está haciendo q[3] se supone que debe estar en su código? AFAIK, los vectores 3D tienen 3 coordenadas... - Tomáš Zato - Reincorporar a Monica

@TomášZato q es el cuaternión, un vector de 4 dimensiones - nuevobrict

¿Tiene una referencia adecuada para este código implementado en algún libro de texto? - Färid Alijani

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.