IMU (ADXL345 & ITG3200). Filtro de triple eje

2

Estoy construyendo un TriCopter basado en el Micro Framework de FEZmini .Net.

Tengo un acelerómetro ADXL345 de triple eje y un girocompás ITG3200 de triple eje con el que estoy interactuando a través de I2C.

Puedo obtener datos de los dos sensores y parece que funcionan bien. Lo que me está costando es encontrar un filtro que pueda fusionar con éxito los datos de los dos sensores en datos útiles de IMU.

He convertido el filtro de Kalman presentado por Varesano.net a c # pero sin ningún resultado útil. El filtro simplemente no hace nada cuando la IMU se mueve.

También convertí el filtro complementario presentado por nuclearprojects.com a c # con más éxito, pero no éxito completo : Aunque los valores de X e Y son estables, el eje Z sigue girando bastante constantemente, lo que significa que no tengo buenos datos para Yaw de mi TriCopter.

Si necesita más información sobre mi proyecto, hágamelo saber o eche un vistazo a mi proyecto en mi sitio en: enlace

Cualquier ayuda sería muy apreciada.

Gracias de antemano

Gineer

    
pregunta Gineer

2 respuestas

2

Suponiendo que la conversión de los algoritmos que usaste fue correcta, sugeriría el filtro de Kalman. Sin embargo, el problema al que se enfrentará es que .NET Micro Framework no ejecutará los ciclos lo suficientemente rápido para fusionar los datos del sensor y evitar la deriva o proporcionar resultados estables; Esto será especialmente cierto una vez que coloque el otro código de tiempo de ejecución en el procesador. Puede extraer 20-30 hz del ciclo de procesamiento si está fusionando exclusivamente los datos.

Arduino no está ejecutando código administrado y está optimizado por el compilador, lo que le da la ventaja adicional necesaria para hacer un helicóptero semi funcional como se puede ver en YouTube. Aún no es lo suficientemente estable como para el uso práctico a través de la OMI.

Para tener una IMU efectiva y un producto final letal, deberá procesar el algoritmo de fusión con un procesador independiente que ejecute un código no administrado.

Si aún desea seguir utilizando un helicóptero .NET micro para el control de vuelo central (que estoy haciendo yo mismo), eche un vistazo al nuevo Invensense MPU-6000 que realiza la fusión de sensores a bordo y descarga efectivamente los cálculos de su procesador central administrado.

enlace

    
respondido por el Ryan McGarty
1

Lo hice hace un tiempo en la universidad, pero con un dsp, elegí un dspic porque estaba familiarizado con el entorno de codificación. De todos modos, cuando Ryan McGarty contestó que va a tener un poco de problemas para que el kalman calcule lo suficientemente rápido, puede recopilar los datos lo suficientemente rápido con un arduino, pero es muy probable que tenga un tiempo de actualización tan lento como para El proyecto inútil. Tendrá que ser capaz de hacer muchas multiplicaciones de punto flotante, y con dsp puede hacer que esto suceda durante un ciclo de reloj, en un arduino el tiempo necesario depende de la complejidad de la multiplicación.

Además, hay mucha información realmente buena sobre Kalman en la web, que está intentando hacer lo mismo. No lo he investigado, pero supongo que el proyecto DIY Drones está haciendo esto.

¿Por qué necesitas conjuntos de tres sensores? Mi suposición antes era que solo necesitas 2 pitch and roll, y quizás otra brújula o gps para el encabezado.

Además, el proyecto en el que estaba trabajando era un subconjunto de un sensor que se usa en helicópteros para registrar datos de vuelo, usan un kalman.

Por supuesto, puede enviar sus datos a una tarjeta SD e interpretarlos más tarde o puede enviarlos a una computadora y ejecutar cualquier programa que quiera hacer con él. Usamos Labview, pero hay algunos avances realmente claros con openGl y el procesamiento que desearía haber existido cuando estaba trabajando en el proyecto.

Además, no estoy completamente seguro de cuál es el problema, pero recuerdo que hubo un problema con los datos cuando lo orientas y obtienes las funciones trigonométricas a la asíntota en la función tan, lo vería cuando codificas y intenta encontrar un caso donde la función de bronceado haga algo extraño dependiendo de la orientación.

Aquí hay un video que hice al respecto en 2008 enlace

    
respondido por el user2758

Lea otras preguntas en las etiquetas