Como usar quaternions para alimentar um loop de estabilização de quadcopter PID?

9

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.

Friend of Kim
fonte
Você resolveu o seu problema? Caso contrário, informe-nos como está indo; caso contrário, você pode aceitar uma das respostas.
Marcv81 18/10/2014
11
@ marcv81 Sim, está funcionando muito bem agora :) Obrigado por me lembrar de aceitar uma resposta :) #
Friend of Kim
Estou feliz que esteja funcionando. Isso me fez pensar em meu próprio código e corrigir um bug também :)
marcv81

Respostas:

6

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.

marcv81
fonte
Obrigado por sua resposta completa! Uma pessoa que trabalha no InvenSense disse que, na maioria das aplicações, os quaternions eram mais fáceis e melhores do que os ângulos de Euler. Observando os dados amarrados, parece que é possível corrigir um eixo para interromper o bloqueio do cardan quando isso está prestes a acontecer.
Friend of Kim
11
Os ângulos de Euler são uma má escolha para a representação interna da orientação. Eles são simples de visualizar, mas muito difíceis de manipular corretamente para evitar o bloqueio do cardan. Os quatérnions são melhores porque você não encontraria o bloqueio do cardan, mas eles são difíceis de visualizar. As matrizes são de alguma forma mais fáceis de visualizar do que os quaternions, mas não são tão eficientes se sua plataforma for lenta. Meu quadcopter usa quaternions internamente, mas converte em ângulos de Euler para os PIDs usarem.
Marcv81 15/09/14
3

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

ryan0270
fonte
Obrigado pela sua compreensão. Eu sou completamente novo na programação bare metal. Eu apenas fiz programação de alto nível. Também estou muito interessado em física e matemática, apesar de ter acabado o ensino médio, por isso ainda não sei muito ...
Friend of Kim
Estou fazendo isso com um amigo e nós "inventamos" o loop do PID. Acostumados a uma resposta "correta", era muito difícil usá-la sem saber que essa era uma maneira comum de resolver nosso problema. E quando descobrimos o loop PID na Wikipedia, nosso próprio loop PID inventado foi "aprovado".
Friend of Kim
Então, eu realmente aprecio sua compreensão de como isso é comumente feito em projetos de trabalho. O comportamento estranho do qual estou falando se revelou ao olhar para o gráfico em 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.
Friend of Kim
O rolo é a linha azul. Vermelho é guinada, verde é arremesso, azul é rolagem. Como você pode ver, os problemas começam no pi / 4 e no exterior. Isso é um problema com o I2CDevLib ou "deveria" ser assim? screencast.com/t/svPV3C8B Estou girando o giroscópio 360 graus em torno do eixo do rolo.
Amigo de Kim
Vi o AeroQuad ser capaz de se estabilizar mesmo depois de ser jogado no ar. Isso ocorre porque ele cuida primeiro do rolo, depois do arremesso e depois do guinada?
Amigo de Kim
3

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.

Resumo - O objetivo deste artigo é apresentar um novo esquema de controle baseado em quaternário para o problema de controle de atitude de um quadrotor. Um quaternion é um número hipercomplexo do rank 4 que pode ser utilizado para evitar a singularidade geométrica inerente ao representar a dinâmica do corpo rígido com ângulos de Euler ou a complexidade de ter equações diferenciais acopladas à Matriz Cósmica de Direção (DCM). Na abordagem apresentada, tanto o modelo de atitude do quadrotor quanto o quadrado proporcional não linear proposto ( P 2) o algoritmo de controle foi implementado no espaço de quaternário, sem nenhuma transformação e cálculo no espaço angular de Euler ou no DCM. Ao longo do artigo, os méritos da nova abordagem proposta estão sendo analisados ​​e discutidos, enquanto a eficácia do novo controlador sugerido baseado em quatérion está sendo avaliada por resultados de simulação estendidos.

jgkim2020
fonte
2
Obrigado pelo artigo relevante @ jgkim2020. Mas você pode elaborar sobre isso? Talvez resuma as descobertas do artigo? (Os links podem ficar obsoletos, afinal). Você também pode querer conferir Como responder
Ben
11
Concordo com Ben - Um resumo do artigo seria ótimo, pois a morte do link geralmente ocorre depois de um tempo.
Greenonline
2

Este curso gratuito do MOOC, Bem-vindo ao AUTONAVx da TUMx! Navegação autônoma para robôs voadores , pode ajudar. Cobre:

  • Teoria da aprendizagem
  • Exercite a programação Quadcoptor que roda tanto no estimulador quanto no hardware real
EEd
fonte
O link não funciona.
Friend of Kim
O link funciona se você estiver logado.
Friend of Kim
O vídeo 1.4 tem demonstração de muitos quadrotor, realizando ações surpreendentes. Espero que você se interesse pelo tópico.
EED
Pode verificar o software FreeIMU, que fornece a) dados combinados de vários sensores (taxa de giroscópio, bússola, acelerômetro), fornecendo dados mais estáveis, com menor desvio e precisão do que apenas ler dados brutos do chip b), fornecendo vários formatos de saída, incluindo pitch, giro e guinada, que podem ser mais simples de visualizar, entender e usar.
EED
Obrigado pela ajuda. Estou usando o MPU-9150, que possui um DMP (fusão de sensores) interno do giroscópio e um acelerômetro. A fusão com o magnetômetro deve ser feita manualmente.
Friend of Kim