Acelerômetros em um robô que se equilibra, não podemos fazer melhor?

9

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:
    1. Um filtro Kalman que estima a inclinação atual juntamente com o viés atual do giroscópio .
    2. 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.

insira a descrição da imagem aqui

As forças inerciais sentidas pelos acelerômetros em C podem ser derivadas (se eu não cometer nenhum erro)

(cr¨cΘ¨)=(-x¨pecado(Θ)-RΘ˙2-x¨porque(Θ)+RΘ¨)

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:

  • x¨^k : Diferenças finitas sobre nossas medidas atuais e anteriores de x
  • Θ˙^k : A leitura atual do giroscópio
  • Θ^k : Estimativa anterior de Θ além da integração de Θ˙^k e Θ˙^k-1 1 mais de um Δt
  • Θ¨^k : Diferenças finitas sobre Θ˙^k e Θ˙^k-1 1

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

Julien
fonte
Um telêmetro a laser seria incrivelmente útil.
holmeski

Respostas:

1

Se você construir corretamente um filtro Kalman com uma entrada 'x', então sim, será melhor. Notavelmente, o sensor inercial não pode fornecer um valor absoluto para x em nenhum caso, porque você está (essencialmente) tentando integrar duas vezes um sinal do acelerômetro em uma posição, e isso é extraordinariamente sensível ao ruído na saída do acelerômetro.

Algumas coisas que você pode querer considerar em suas viagens:

  1. Um filtro Kalman completo é computacionalmente intenso, mas um Kalman em estado estacionário é basicamente um filtro complementar com frequências de rolloff selecionadas pela construção em vez de b'guess e b'gosh.
  2. Falando em b'guess e b'gosh, se você quer que um Kalman funcione bem (e, às vezes, de alguma forma), você precisa explicar com muita precisão tudo o que entra em suas variações. Os Kalmans são notórios por não responderem bem a incompatibilidades entre seu modelo e a realidade. Se você estiver disposto a fazer as contas, consulte o H-infinito e outras técnicas robustas de estimativa de estado.
  3. Se você seguir o caminho do infinito H, também poderá encontrar o filtro de infinito H no estado estacionário e obter a mesma vantagem computacional (e, de fato, a estrutura real do filtro no seu código incorporado será a mesma; apenas valores diferentes nos coeficientes).
TimWescott
fonte
Eu acho que você está exagerando o custo computacional de um filtro kalman completo. Julien provavelmente terá menos de 6 estados, o que não seria um problema na maioria dos conselhos.
holmeski
1

Embora essa não seja uma resposta completa à sua pergunta, quero deixar alguns dos meus pensamentos. Eu acho que você perdeu:

  1. A própria gravidade, que aponta para baixo e normalmente é de cerca de 9,81 m / s², mas pode ser diferente dependendo da sua localização (você só mede a gravidade 0 quando o robô está em queda livre)
  2. Os sensores normalmente não estão alinhados 100% ao seu eixo x / y / z (o chip não é totalmente horizontal na PCB ... a PCB não é montada totalmente horizontal / verticalmente no seu robô e assim por diante); você precisa compensar isso
  3. Os sensores do acelerômetro têm um valor de compensação e ganho, que você precisa compensar. Eles são afetados, por exemplo, pelas tolerâncias de temperatura e fabricação. Existem algoritmos de calibração online para isso; mas você também pode colocar essas variáveis ​​desconhecidas em um filtro Kalman.
  4. Os giroscópios têm uma deriva, que também depende da temperatura. Não é uma constante, mas pode mudar com o tempo. Esse desvio pode ser ligeiramente compensado com a ajuda de um magnetômetro.
  5. Os magnetômetros, também conhecidos como sensores de bússola em 3D, podem ser usados ​​para compensar a deriva dos giroscópios. No entanto, às vezes são afetados por campos eletromagnéticos (motores, ímãs, aço nas paredes, etc.). Portanto, eles não podem ser totalmente confiáveis.

Um modelo de filtro Kalman é uma boa abordagem. Quanto mais conhecimento sobre o modelo de movimento você colocar no modelo, melhor ele funcionará. Você também precisa conhecer (co-) variações de todas as variáveis ​​... Quão certo você acha que as medidas de cada sensor são.

SDwarfs
fonte
Bons pontos sobre questões do mundo real como calibração, desvio, temperatura etc.
Ben