Eu já construí um robô de balanceamento de duas rodas usando alguns servos de rotação contínua e um acelerômetro / giroscópio. Atualizei os servos para alguns motores DC de engrenagens com codificadores de 8 bits, com o objetivo de fazer com que o robô dirigisse durante o equilíbrio.
Estou meio preso em como programá-lo para dirigir enquanto ainda estou equilibrando. Eu acho que uma maneira seria apenas fazer com que a entrada de controle dos motores funcionasse como se fosse pressioná-lo. Portanto, o robô ficaria momentaneamente desequilibrado na direção em que eu quero que ele viajasse. Isso parece meio desajeitado para mim. Deve haver uma maneira melhor de fazer? Eu acho que preciso combinar o modelo dinâmico para o balanceador com a unidade diferencial, mas isso está um pouco além da teoria de controle que eu conheço.
Atualização da resposta de Anorton Eu tenho uma matriz de estado bem parecida agora.
Agora, sobre a colocação dos pólos: A matriz A terá que ser 4x4 com base no novo vetor de estado. E B terá que ser uma matriz 4x2, pois só posso controlar o torque da roda esquerda / direita (vetor u = 2x1).
Talvez eu precise ler mais sobre isso, mas existe uma maneira sistemática de determinar a matriz A pela colocação de pólos? Parece-me para este exemplo e exemplos ainda mais complicados, determinar A por palpite e verificação seria muito difícil.
Atualização # 2 Depois de ler um pouco, acho que entendo agora. Eu ainda preciso da dinâmica do robô para determinar a matriz A. Quando tiver, posso fazer a colocação do poste usando matlab ou oitava.
:)
Meu controles conhecimento é muito magro, mas eu vou jogar o meu $ 0,02 vale a pena lá ...Respostas:
Isenção de responsabilidade: Eu nunca fiz isso sozinho, mas só vi uma descrição disso sendo feita no "Control of Mobile Robotics" da Georgia Tech no Coursera. Meu conhecimento de controles também é irregular. Assim ... leve isso com um grão de sal.
:)
Para manter o robô na vertical (e imóvel), você está tentando estabilizar (envie para0 0 ) o Estado x , Onde:
No entanto, quando este sistema é estável, as velocidades das rodas esquerda e direita serão0 0 . Então, queremos um deslocamento para a velocidade alvo:
Quando esse sistema é estabilizado, o robô fica na vertical e cada roda gira na velocidade desejada.
Esta é a abordagem / descrição básica. Editarei isso com mais alguns detalhes amanhã (e matemática real etc.), mas eu queria pelo menos postar a idéia geral agora. (É tarde no meu fuso horário, e eu tenho uma aula cedo para chegar.)
EDITADO: Oh, Deus. Então, acabei de olhar para os slides relacionados a isso no curso Coursera (Seção 4, slide 29). Você pode se matricular nessa turma apenas para baixar o conjunto de slides ...
:)
A parte difícil é calcular oUMA e B matrizes (é uma grande confusão de linearização). De qualquer forma, você deseja criar sua matriz de estados da seguinte forma (não como acima - minha memória não estava exatamente correta):
Ondev é a velocidade do segway, ω é a velocidade de rotação (a velocidade com que o robô gira) e ϕ é o ângulo da vertical.
Queremos ter a velocidade desejada, então vamos definir um novo vetor de estado:
Ondeδ é a velocidade desejada e a quantidade rotacional (como visto acima).
Diferenciando:
Assim, temos
OndeUMA é a matriz coeficiente padrão B é a matriz de entrada e você é o vetor de controle. Podemos então dizer:
Agora você pode usar a colocação de pólos para determinar os autovalores corretos etc.
fonte