Atualmente, estou lendo sobre robôs de auto-equilíbrio que usam uma IMU (giroscópios + acelerômetros) para estimar o ângulo de inclinação atual.
A maioria dos documentos que encontrei dizem as mesmas coisas:
- Você não pode simplesmente pegar a tangente ao arco dos dados dos acelerômetros para encontrar a direção da gravidade, porque eles são afetados por "ruídos inerciais".
- Você não pode simplesmente integrar a saída do giroscópio ao longo do tempo, porque ele flutua.
- Existem duas soluções geralmente aceitas para mesclar esses dados:
- Um filtro Kalman que estima a inclinação atual juntamente com o viés atual do giroscópio .
- Um filtro complementar que aplica um filtro passa-baixo nos dados do acelerômetro (eles podem ser confiáveis a longo prazo) e um filtro passa-alto nos dados do giroscópio (pode ser confiável a curto prazo).
Todas as fontes que encontrei parecem usar os dados brutos dos acelerômetros nesses filtros, desconsiderando o fato de que, em um robô com auto balanceamento, podemos ter uma estimativa muito boa do "ruído inercial" mencionado acima.
Aqui está o meu pensamento
Vamos modelar nosso robô com um pêndulo invertido com um ponto de apoio em movimento e usar esse desenho ruim como referência.
As forças inerciais sentidas pelos acelerômetros em C podem ser derivadas (se eu não cometer nenhum erro)
Assumindo que
- Nosso robô está rolando sem escorregar
- Podemos medir x (usando motores de passo ou motores DC com codificadores)
Então podemos ter uma boa estimativa de todas essas variáveis:
- : Diferenças finitas sobre nossas medidas atuais e anteriores de
- : A leitura atual do giroscópio
- : Estimativa anterior de além da integração de e mais de um
- : Diferenças finitas sobre e
Depois disso, podemos negar o efeito das forças inerciais nos acelerômetros, deixando apenas uma medida muito melhor da gravidade.
Provavelmente ainda é uma boa idéia usá-lo como entrada do filtro Kalman usual, como em 1. acima.
Talvez possamos até criar um filtro Kalman que possa estimar todas essas variáveis de uma só vez? Eu vou tentar isso.
O que você acha? Estou faltando alguma coisa aqui?
Acho que o robô de auto-equilíbrio pode ser uma boa etiqueta, mas não consigo criá-la