Existe um algoritmo bom, popular e confiável que eu possa usar recebendo informações de um giroscópio e usando-o para controlar duas rodas independentes para manter um robô tão equilibrado de maneira confiável? Estou procurando um algoritmo que me permita usá-lo para acionar um robô e mantê-lo na posição vertical quando estiver parado. A capacidade de lidar com inclinações e pessoas cutucando também seria um bônus, mas não essencial.
control
gyroscope
balance
two-wheeled
berry120
fonte
fonte
Respostas:
O controlador mais simples é um controlador de feedback de estado linear. Existem essencialmente 4 estados diferentes para os quais você precisa obter um ganho. São ângulo de inclinação, taxa de inclinação, velocidade e posição.
O LQR (regulador quadrático linear) é um método para projetar esses ganhos (após obter uma representação linearizada do espaço de estados do seu sistema). Se você não possui uma representação do espaço de estados (provavelmente não possui), pode obter equações de movimento e medir os parâmetros. Se você não possui uma representação do espaço de estado, basta ajustar os ganhos manualmente (sem LQR ou outros métodos, como posicionamento de pólos ).
O ajuste ganha manualmente:
Supondo que o ângulo de inclinação, a posição / velocidade e os torques das rodas sejam todos direcionados para a frente (se positivo), você deseja um ganho positivo no ângulo e na taxa de inclinação, bem como um ganho positivo na posição e na velocidade.
Comece com um ganho no ângulo de inclinação e na taxa de inclinação. Isso fará com que ele se equilibre inicialmente. Uma vez equilibrado, você pode controlar a posição e a velocidade adicionando um ganho a eles. Se estiver instável, aumente o ganho na taxa de inclinação (o que ajuda a amortecer o sistema).
O controle de posição / velocidade controlará ambos os estados para zero. Para controlar para algum outro valor, você só precisa de um controlador de rastreamento de referência, substituindo os estados pelos erros antes de alimentá-lo no seu controlador (por exemplo, velocidade atual - referência de velocidade).
O controle de guinada pode ser realizado de forma independente (com as diferenças nos torques das rodas adicionados ao controlador principal de balanceamento / velocidade / posição).
fonte
Acredito que a solução mais popular para esse problema é um controlador LQR . O problema que você está tentando resolver é o problema do pêndulo invertido . Usando essas palavras-chave, você poderá usar o código-fonte aberto de alguém no Google. O próximo problema será mapear a maioria das quantidades físicas relevantes para sua aplicação (peso, torque do motor, etc ...)
fonte
Como não conheço suas habilidades em engenharia / teoria de controle, recomendo que você comece com um controlador PID . É um controlador simples e você encontrará muitas implementações de código. A desvantagem do PID é que você provavelmente passará algum tempo ajustando os parâmetros manualmente.
Alguns anos atrás, eu o usei para controlar um robô Lego Mindstorm de duas rodas com base em sua odometria e funcionou bem o suficiente. Para fazê-lo se movimentar, você precisará jogar com os pontos de ajuste.
Obviamente, posteriormente, você poderá melhorar a qualidade do seu controlador (estabilidade, robustez etc.) usando leis de controle mais avançadas, como o LQR mencionado anteriormente.
Boa sorte!
fonte