¿Cómo se realiza el seguimiento de "fusión de sensor" de IMU y cámara?

0

Tengo algunas cámaras de latencia de 50 ms a mano y un girocompás + acelerómetro + magnetómetro IMU de 800Hz. Me gustaría saber exactamente cómo debo hacer una fusión de sensores de una IMU y una cámara para corregir los datos posicionales de la deriva posicional IMU. No puedo encontrar muchos recursos en línea.

La razón por la que no quiero ir solo con la cámara es la latencia de 50 ms con ella. En Los marcadores ópticos para la cámara pueden ser LED, datos ORB-SLAM o marcadores AruCo, que actualmente utilizo, lo que agrega otros pocos ms de latencia al seguimiento de la cámara. En ¿Tal vez incluso exista una biblioteca o implementación documentada que pueda usar? En Gracias.

    
pregunta Mark Legault

2 respuestas

1

Comience por encontrar una manera de convertir los datos de SLAM o ArUco en posición absoluta en algún sistema de coordenadas. Esta es la parte más compleja y no tengo idea de cómo hacerlo, nunca he trabajado con ninguno de ellos.

Luego aplique el filtro de Kalman al acelerómetro y a los datos de posición, exactamente de la misma manera que se hace para el giro y el acelerómetro (hay muchos ejemplos de esto en la web, incluidos cientos de videos en Youtube).

La idea es integrar el acelerómetro en el tiempo dos veces para obtener la velocidad primero y la posición segunda. El resultado sería un valor de posición rápido con deriva severa. Luego aplica la posición absoluta ruidosa y lenta de la cámara para corregir esa deriva.

Esto es lo mismo que integrar datos de giro para obtener un ángulo rápido con la deriva y luego corregir esa deriva con las entradas del acelerómetro / magnetómetro.

    
respondido por el Maple
1

IMO:

En primer lugar, debe implementar el algoritmo de fusión 9 DOF con un MCU de muy alta velocidad, para obtener una actitud a una alta frecuencia de muestreo. Este algoritmo fue implementado por Magdwick, creo que es el más usado para esos sensores MEMS, pero hay otros DCM, Kalman, ... algunos son mejores pero también tienen más carga computacional. Luego, debe extrapolar la aceleración para cada eje XYZ e integrarla para obtener velocidad, y luego nuevamente para obtener la posición.

Anteriormente había hecho la integración de los datos del acelerómetro y comparé los resultados con una cámara de alta velocidad. La configuración consistió en un banco de carrera, cámaras de alta velocidad y un corredor con acelerómetro de 3 ejes con registro de datos en marcha, marcador, software de análisis de cámaras que genera las coordenadas 3D. Ambos registros se compararon en Matlab.

Los resultados fueron buenos, pero no satisfactorios, debido a la aceleración contrífuga durante la torsión, ... etc. El sensor era solo de 3 ejes acceleorometer. Entonces, la conclusión fue que necesitaría un estimador de actitud, también conocido como sensor IMU, y solo así podrá obtener los componentes filtrados.

problema 1: La integración de la aceleración conduce a una velocidad infinita debido a la deriva. Mi primera suposición fue que la velocidad media es cero ya que el sujeto no se fue volando. Así que utilicé filtfilt () en Matlab para restar el valor medio (promedio móvil) de la velocidad calculada, dejando solo el cambio dinámico.

isuue 2: La integración de la velocidad también da una fuga de posición. Segundo supuesto: la posición media es cero. Nuevamente, reste el promedio móvil del integrador.

número 3: La cámara y el registrador de datos no estaban sincronizados, los XTAL no producían la frecuencia exacta y las tasas de muestreo eran ligeramente diferentes. La señal se tuvo que remuestrear en Matlab (manualmente).

Conclusión: Magdwick algo usa cuaterniones, que no sé. Tal vez pueda encontrar una forma sencilla de descomponer la información de atuendo 3D y obtener solo la verdadera aceleración. Sobre todos los ejes. Otra opción es usar funciones trigonométricas, algunas MCU como cortex M4 tienen algunas instrucciones DSP básicas, por ejemplo, CORDIC (Computadora digital de rotación coordinada).

    
respondido por el Marko Buršič

Lea otras preguntas en las etiquetas