Actualmente estoy leyendo sobre robots autoequilibrados que usan una IMU (giroscopios + acelerómetros) para estimar su ángulo de inclinación actual.
La mayoría de los documentos que he encontrado dicen lo mismo:
- No puede simplemente tomar la tangente de arco de los datos del acelerómetro para encontrar la dirección de la gravedad porque se ven afectados por "ruidos de inercia".
- No puede integrar la salida del giroscopio con el tiempo porque se desplaza.
- Hay dos soluciones generalmente aceptadas para fusionar esos datos:
- Un filtro de Kalman que estima la inclinación actual junto con el sesgo actual del giroscopio .
- Un filtro complementario que aplica un filtro de paso bajo en los datos del acelerómetro (se puede confiar en ellos a largo plazo) y un filtro de paso alto en los datos del giroscopio (se puede confiar en el corto plazo).
Todas las fuentes que he encontrado parecen utilizar los datos sin procesar de los acelerómetros en esos filtros, sin tener en cuenta el hecho de que, en un robot de autoequilibrio, podemos tener una muy buena estimación del "ruido de inercia" mencionado anteriormente.
Aquí está mi aunque
Modelemos nuestro robot con un péndulo invertido con un punto de apoyo móvil y usemos este dibujo pobre como referencia.
Las fuerzas de inercia que sienten los acelerómetros en C se pueden derivar de (si no cometí ningún error)
Asumiendo que
- Nuestro robot está rodando sin resbalar
- Podemos medir x (ya sea usando motores paso a paso o motores DC con codificadores)
Entonces podemos tener una buena estimación de todas esas variables:
- : Diferencias finitas sobre nuestras medidas actuales y anteriores de
- : La lectura actual del giroscopio
- : Estimación previa de más la integración de y más de una
- : Diferencias finitas sobre y
Una vez que tenemos eso, podemos negar el efecto de las fuerzas de inercia en los acelerómetros, dejando solo una medida mucho mejor de la gravedad.
Probablemente todavía sea una buena idea usar esto como la entrada del filtro Kalman habitual como en 1. arriba.
¿Quizás podamos incluso construir un filtro de Kalman que pueda estimar todas esas variables a la vez? Voy a intentar eso
¿Qué piensas? ¿Me estoy perdiendo de algo?
Creo que el robot de autoequilibrio podría ser una buena etiqueta, pero no puedo crearlo