Estou fazendo um quadcopter. Eu configurei um loop PID para estabilizá-lo em um determinado ângulo de Euler (pitch and roll). O problema surge quando o rolo se aproxima de 90 graus (45 graus ou mais). Os valores não fazem mais sentido, pois se aproximam da trava do cardan. Pretendo fazer manobras complexas como looping etc., que excedam o limite de rolagem de 45 graus.
Como posso usar os quaternions para superar esse problema? (Eu recebo quaternions no MPU-9150.) Li muitos artigos sobre quaternions, mas todos falam sobre rotações em software 3D e interpolação entre dois pontos de rotação. Isso faz pouco sentido, pois não conheço números e matrizes imaginários.
quadcopter
pid
stability
Friend of Kim
fonte
fonte
Respostas:
Um quadcopter contém (entre outras coisas) dois algoritmos separados e independentes: um algoritmo de estimativa de atitude e um algoritmo de controle.
O algoritmo de estimativa de atitude calcula informações sobre a orientação do quadcopter: os ângulos de rotação, inclinação e guinada.
O algoritmo de controle é responsável por acionar os motores, de modo que a orientação do quadcopter corresponda ao que o piloto (ou o software do piloto automático) espera. Esse algoritmo é o que lê os ângulos estimados do quadcóptero (a partir do algoritmo de estimativa de atitude) e altera a velocidade dos motores para tentar corresponder aos ângulos desejados. Os PIDs são um algoritmo de controle comum e adequado para quadcopters.
O bloqueio do cardan é um fenômeno que pode ocorrer no algoritmo de estimativa de atitude. Não tem nada a ver com o algoritmo de controle. Como tal, você não precisa de ESCs, motores ou hélices para testar a trava do cardan: você pode modificar seu código para exibir seus ângulos de rotação, inclinação e guinada e testar se os valores corretos são calculados à medida que você move manualmente seu quadrotor. Você pode fazer isso com o quadcopter conectado ao computador, via Bluetooth ou usando outros métodos, dependendo da plataforma.
Se os ângulos são calculados corretamente, você não precisa se preocupar com quaterniões. Se não forem calculados corretamente, os quaternions podemajudar você. O algoritmo de estimativa de atitude deve gerar 3 ângulos para o algoritmo de controle usar, no entanto, ele pode usar uma representação interna diferente, como quaterniões ou matrizes 3x3. Nesse caso, ele ainda converteria as informações de atitude em ângulos para fornecer dados úteis ao algoritmo de controle. De um modo geral, os quaternions não são intuitivos, mas computacionalmente eficientes. Isso os torna adequados para plataformas lentas, como o Arduino. Matrizes ou ângulos podem ser uma escolha mais fácil para hardware mais rápido. Se você precisar que eu elabore uma solução ou outra, informe-me, mas seria prematuro fornecer detalhes nesta fase, pois não estou convencido de que você precise implementar quaterniões.
Finalmente, se os ângulos são calculados corretamente, a maneira de fazer o loop do seu quadcopter é controlar a taxa angular e não o ângulo. Se seus paus representam o ângulo do quadcóptero, não há como fazer um loop completo: tente visualizar a posição dos paus à medida que o quadcóptero faz um loop e você deve entender o porquê. No entanto, se os manípulos controlarem a taxa angular, você poderá controlar a velocidade com que ele faz o loop.
Boa sorte com seu projeto!
Nota: Por uma questão de simplicidade, não mencionei a opção teórica de manipular os dados como matrizes ou quaternions, tanto no algoritmo de estimativa de atitude quanto no algoritmo de controle. Eu nunca vi um quadcopter implementando tais algoritmos.
fonte
Primeiro, acho que você precisa voltar e examinar seu código. O bloqueio do cardan é apenas um problema quando você chega muito perto (dentro de alguns graus) dos 90. Se você estiver vendo um comportamento estranho a 45 graus, outra coisa é a causa.
Quanto à sua pergunta, os quaternions geralmente não são usados diretamente no controle PID básico, pois possuem um comportamento complicado, resultando em resultados não intuitivos. Geralmente, eles são convertidos em ângulos de Euler e, em seguida, usados no controlador PID normal, ou controladores não lineares especiais são projetados para usá-los.
Observe que, para suas manobras em loop, o PID geralmente não é um controlador muito bom: os ganhos que funcionam bem perto do foco flutuante não funcionam mais em grandes ângulos. Geralmente, quando alguém quer fazer um loop, ele entra em "open loop", ou seja, inicia a manobra sob controle e, depois de passar por um determinado ângulo, basta aplicar uma série fixa de comandos até concluir o loop. Descobrir que série fixa de comandos usar é a parte mais complicada e geralmente usa o aprendizado por reforço (como uma maneira formal de tentativa e erro).
fonte
Serial Chart
( code.google.com/p/serialchart ) A entrada é a saída direta do Euler do I2CDevLib (MPU-9150). Vou testar um pouco mais. O "erro" pode ter sido causado por movimentos imprecisos por mim mesmo.Este artigo, Controle de atitude baseado em quaternário completo para um quadrotor de Emil Fresk e George Nikolakopoulos, demonstra o que você está tentando alcançar.
fonte
Este curso gratuito do MOOC, Bem-vindo ao AUTONAVx da TUMx! Navegação autônoma para robôs voadores , pode ajudar. Cobre:
fonte