signal-processing - proyectos - mpu6050 arduino nano
Integración de giroscopio y acelerómetro lecturas (6)
Posible duplicado:
Combine datos de giroscopio y acelerómetro
He leído varios artículos sobre Kalman filters
, pero parecen existir pocos ejemplos bien trabajados accesibles públicamente para pasar del papel matemático al código de trabajo real.
Tengo un sistema que contiene un acelerómetro de tres ejes y un solo giroscopio que mide la rotación alrededor de uno de los ejes del acelerómetro. El sistema está diseñado para ser sostenido por un ser humano, y la mayoría de las veces el giroscopio estará midiendo la rotación alrededor del vector de gravedad o cerca de él. (Las personas que trabajan en la misma industria probablemente reconocerán de lo que estoy hablando;)) Me doy cuenta de que esto no tiene límites.
Los giroscopios parecen tener un sesgo casi constante que es ligeramente diferente para cada instancia del sistema. ¿Cómo voy a codificar un filtro para usar las lecturas del acelerómetro para calibrar el giroscopio cuando el sistema está inclinado, por lo que el eje del giroscopio no está colineal con la gravedad y se está girando alrededor del eje del giroscopio? Parece que debería haber suficiente información para hacer eso, pero que le digan que no existe y por qué sería una respuesta también :)
Parece que tienes dos (o tres) problemas separados aquí.
1. Realmente no entiendes los filtros de Kalman y / o las matemáticas detrás de ellos. Eso hará que sea muy difícil implementar y usar correctamente uno.
2. Parece que no entiendes la física básica involucrada en el problema. (La física básica significa física subyacente, no física simple, porque no es simple).
Sugiero que intente utilizar un integrador mucho más simple, como un Runga-Kutta 4, para el cual puede encontrar muchos libros con ejemplos de la implementación y el uso. Debería ser suficiente para este problema. (Si el cliente especificó Kalman, pregunte por qué).
En cuanto a por qué el problema está bajo restricciones, me parece que no se puede asegurar que el dispositivo se mantenga verticalmente y no se pueda medir la orientación real. Olvídese del giróscopo por el momento y suponga que el dispositivo no se puede girar sobre un eje vertical. Tienes tres acelerómetros, presumiblemente para estimar la posición en 3D. Entonces, si ves una aceleración en la dirección X, aumentas la estimación de dónde estás en la dirección X. De manera similar, si ves una aceleración en la dirección Z (que asumiré que está "arriba"), aumentas la estimación de dónde estás en la dirección Z. Ahora gire el dispositivo ligeramente, digamos 30 grados sobre el eje Y. Ahora, cuando el dispositivo cree que está acelerando a lo largo de la dirección X, el dispositivo en realidad está acelerando un poco menos de lo indicado en X y también está acelerando en la dirección Z. Entonces su estimación de posición ahora es incorrecta.
Las rotaciones son mucho más difíciles de integrar (las ecuaciones son más "rígidas", lo que requiere un paso de tiempo menor para mantener la precisión). Pero sufrirán problemas similares al computar respuestas incorrectas si el dispositivo recibe una propina (porque el dispositivo no puede decir que está inclinado). Pensará que la rotación sobre el eje vertical es más grande o más pequeña de lo que realmente es, porque parte de la rotación se trata en realidad de un eje diferente (al igual que parte de la aceleración era a lo largo de un eje diferente).
Quizás necesite contratar un consultor (no, no estoy buscando trabajo) para ayudarlo a formular las matemáticas.
Encontré buenos artículos sobre el uso de acelerómetros y giroscopios en navegación en este blog . La parte del filtrado de Kalman es un poco confusa, pero parece que hay ejemplos de código.
También encontrará recursos generales sobre el filtrado de Kalman en http://academic.csuohio.edu/simond/publications.html . El artículo mencionado en (8) es una introducción buena, no demasiado aterradora, a las matemáticas detrás de los filtros de Kalman.
Dado su interés en el filtro de Kalman, quizás pretenda aumentar los datos de GPS con mediciones de inercia. Acerca de su pregunta:
"¿Cómo voy a codificar un filtro para usar las lecturas del acelerómetro para calibrar el giroscopio cuando el sistema está inclinado, por lo que el eje del giroscopio no está colineal con la gravedad y gira alrededor del eje del giroscopio? Parece que debería haber suficiente información para hacer eso "
Esto suena como una alineación gyrocompasing. Suponiendo que está haciendo una calibración de fábrica, y tiene la unidad en un banco, podrá medir independientemente la alineación. A continuación, ejecute el código de nivelación que va a escribir y anule el error de sesgo del giro a partir de la diferencia entre la medida y las alineaciones giroscópicas.
Si quieres actualizar la deriva del giroscopio sobre la marcha, entonces necesitarás el filtro kalman.
En lo que respecta a la implementación, recomiendo el Capítulo 7, GPS e Integración inercial de la posición global Teoría y aplicaciones del sistema, vol. 2, tiene excelentes antecedentes sobre el tema. Tiene la teoría y las matemáticas, pero no el código fuente.
Si se está desarrollando para el Propeller uController, entonces Parallax Object Exchange tiene algún código. Gran pregunta ;-)
Un caballero en Dinamarca acaba de publicar un ejemplo elaborado de la derivación de un filtro de Kalman para resolver casi exactamente este problema.
nBot, un robot equilibrador de dos ruedas
Bastante información y enlaces sobre cómo este autor eligió resolver el problema de equilibrio para su robot de dos ruedas.