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


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).

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.


Bons pontos sobre questões do mundo real como calibração, desvio, temperatura etc.
Ben
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.