Mediciones de actitud con sensores digitales que no están sincronizados

1

Estoy empezando a usar sensores digitales de inercia (9 ejes: acelerómetros, giroscopios y magnetómetros). Cada sensor de 3 ejes tiene una frecuencia de muestreo que puedo configurar para que los datos entren en un FIFO y pueda obtener el 100% de las lecturas y realizar mis cálculos de actitud.

Incluso si configuro los sensores a la misma frecuencia de muestreo, todos funcionarán a velocidades ligeramente diferentes (relojes independientes) y se perderán de sincronización (funcionarán durante meses, y sus osciladores son internos / incontrolables) ).

¿Cuál es la solución / algoritmo óptimo para actualizar mi actitud cuando mis sensores tienen un búfer FIFO de esta manera y los datos ingresan a diferentes velocidades?

Para las restricciones: no puedo usar un sensor 9DoF, así que estoy atascado usando los tres paquetes independientes. Si alguien sugiere sincronizar con un reloj de precisión o algo, eso no es una solución; solo asuma que el muestreo para cada sensor es regular, independiente y no controlable. Un ejemplo de dispositivo es el L3GD20

    
pregunta Bob

3 respuestas

1

He trabajado bastante extensivamente en el área con tableros 9d0f y permítanme decir que es posible sincronizar dispositivos, es solo una cuestión de cómo decide implementar su solución. El dispositivo L3GD20 al que hace referencia tiene, como la mayoría de los otros giroscopios, mediante un modo llamado bypass.

En el modo Bypass, el FIFO no está operativo y, por este motivo, permanece vacío. Como descrito en Figura 7 A continuación, para cada canal solo se usa la primera dirección. El restante Las ranuras FIFO están vacías. Cuando hay nuevos datos disponibles, los datos antiguos se sobrescriben.

¿Por qué es útil este modo? Bueno, digamos que muestrea un acelerómetro, inmediatamente después de que pueda muestrear su giroscopio y aquí está la parte clave. Incluso si su giroscopio no ha tenido la oportunidad de actualizar sus propios valores, obtendrá la lectura muestreada anterior de su giroscopio que ser lo suficientemente estimado y, por lo tanto, aliviar el problema de sincronización de tiempo.

En la mayoría de los casos, el procedimiento debe ser: Muestra todos los sensores. Realizar cálculo de actitud. Luego repita.

El modo Bypass en tu Gyro te permite hacer esto y no tendrás que preocuparte por sincronizar la hora de las lecturas FIFO o similares.

Personalmente te recomiendo que uses interrupciones. Si esto no es posible, necesitará un temporizador delta para determinar el período de tiempo que ha pasado entre las muestras para que el cálculo de su actitud sea correcto.

Hay muchos algoritmos de fusión y discutirlos en profundidad será extenso. Algunos de ellos incluyen:
Filtros Kalman.
Filtros complementarios
El algoritmo IMU AHRS de Sebastian Madgwick / Robert Mayhony con una demostración y una fuente que se puede encontrar aquí

¡Buena suerte!

    
respondido por el Peter H
0

No he abordado esto directamente, pero podría estar en una ruta de actualización en un diseño actual, por lo que he pensado en ello.

Por supuesto, dependerá de sus necesidades / deseos exactos, pero este es el enfoque aproximado que he presentado en mi cabeza.

  1. determine las tasas de muestreo relativas por el intervalo entre interrupciones en cada dispositivo. Es posible que necesite esta información para el procesamiento de datos.
  2. observe las relaciones de tiempo entre las interrupciones en diferentes dispositivos.
  3. Cuando las relaciones entre las interrupciones entre dispositivos cambian en una cantidad predeterminada, simplemente reinicie / reinicialice las secuencias de datos para volver a sincronizar.

¡Otro enfoque sería abarcar las diferencias entre los dispositivos, y simplemente tratarlos! Realice el servicio de cada FIFO por separado, marque las interrupciones completas de FIFO en su sistema y haga que vuelva a muestrear todo eso. Si hay un diezmo en este proceso, es posible que deba realizar un prefiltro para evitar el alias. Aún deberá determinar las tasas de muestreo exactas para cada dispositivo.

Cada uno tiene sus puntos altos y bajos. Con este último, los cálculos serán exactos, pero puede llegar a un punto en el que no haya tiempo para descargar uno de los búferes y seguir procesando. Probablemente deba pensar en todas las ramificaciones de un búfer doble o sobrepasar un búfer de anillo, y es posible que aún tenga que reiniciar de vez en cuando.

O, tal vez pueda crear un sistema de supervisión que determine qué interrupción del sensor debe ser tratada primero, en otras palabras, si las interrupciones comienzan como ABC, ¿qué sucede si después de la deriva vienen CAB? PUEDE ser suficiente con solo ejecutar su algoritmo como "procesa cualquiera de las tres interrupciones que vienen, y luego realice el procesamiento", con un supervisor para asegurarse de que si el tiempo de procesamiento se acorta, simplemente procese 4 interrupciones para cambiar el procesamiento a un modo más oportuno Es hora de ver si puedes conseguir más espacio.

    
respondido por el Scott Seidman
0

Primero que nada, no soy matemático, solo ingeniero eléctrico, por lo que mi respuesta aquí es un poco ondulada. Sin embargo, he publicado artículos que tratan con el cálculo de cuentas de MEM, incluido uno específicamente sobre un dispositivo que utiliza sensores discretos.

Procesar los flujos de datos de forma asíncrona será bastante difícil, pero no imposible. Deberá diseñar un filtro de Kalman bastante complejo para tratar el ejemplo que dio en su comentario "2.315 lecturas de acelerómetro por 1 lectura de giro "(más específicamente un filtro de Kalman asíncrono). Por ejemplo, una de esas lecturas de acelerómetro intermedio necesitaría usar valores de giroscopio pronosticados en función de la velocidad de rotación medida en la muestra del giroscopio anterior y la diferencia de tiempo con respecto a la medición actual del acelerómetro. Para mantener cualquier tipo de precisión, necesitaría ajustar ese cálculo cuando se reciba la nueva medición del giroscopio. Puede pensar que esto tiene tres flujos de datos independientes que está interpolando y cuando tiene un valor de medición o interpolado para un instante particular en el tiempo, calcula su nueva orientación basándose en la orientación anterior. Es importante tener en cuenta que esta es solo una buena manera de pensar en ello; La interpolación lineal no funcionará bien en absoluto. Deberá usar un filtro de Kalman extendido (probablemente modificado para operación asíncrona).

De lo contrario, la solución más sencilla para sincronizar sus datos es almacenar los resultados hasta que tenga un conjunto completo de cada uno de los sensores. Así que en lugar de interpolar estarías diezmando. El problema con el que se encontrará es una pérdida de precisión debido a que se supone que todas las muestras son de un solo punto en el tiempo. Esto no importará demasiado dependiendo de la frecuencia de muestreo promedio y la rapidez con la que el dispositivo cambiará de actitud. Por ejemplo, su giro tiene una señal de "datos listos", puede esperar todas esas señales de sus sensores antes de leer el conjunto de datos completo de ese período de tiempo.

Dicho esto, su problema real no será sincronizar los datos, sino mantener una estimación precisa de la orientación durante meses a la vez. Sin una forma de actualizar su sistema de vez en cuando, su posición calculada se desplazará muy rápidamente (con un sistema creado utilizando el dispositivo COTS del que ha dado un ejemplo, es probable que necesite una tasa de actualización en El orden de los minutos). Eso, por supuesto, depende de su dispositivo y del sistema en el que se encuentre. Sin embargo, esto no estaba en su pregunta, así que tendremos que dejarlo así.

    
respondido por el Samuel

Lea otras preguntas en las etiquetas