Come usare i quaternioni per alimentare un circuito di stabilizzazione quadricottero PID?


9

Sto realizzando un quadricottero. Ho impostato un loop PID per stabilizzarlo a un determinato angolo di Eulero (beccheggio e rollio). Il problema sorge quando il rotolo si avvicina a 90 gradi (45 gradi e oltre). I valori non hanno più senso, poiché si avvicina al gimbal lock. Ho intenzione di farlo compiere manovre complesse come il looping ecc., Che supera il limite di rollio di 45 gradi.

Come posso usare i quaternioni per superare questo problema? (Ricevo quaternioni dall'MPU-9150.) Ho letto molti articoli sulla questione dei quaternioni, ma tutti parlano di rotazioni nel software 3D e interpolazione tra due punti di rotazione. Questo ha poco senso poiché non conosco numeri e matrici immaginarie.


Hai risolto il tuo problema? In caso contrario, facci sapere come sta andando, altrimenti potresti voler accettare una delle risposte.
marcv81,

1
@ marcv81 Sì, ora funziona abbastanza bene :) Grazie per avermi ricordato di aver accettato una risposta :)
Amico di Kim,

Sono contento che funzioni. Mi ha fatto pensare al mio codice e anche a correggere un bug :)
marcv81,

Risposte:


6

Un quadricottero contiene (tra le altre cose) due algoritmi separati e indipendenti: un algoritmo di stima dell'atteggiamento e un algoritmo di controllo.

L'algoritmo di stima dell'atteggiamento calcola le informazioni sull'orientamento del quadricottero: gli angoli di rollio, beccheggio e imbardata.

L'algoritmo di controllo è responsabile della guida dei motori in modo tale che l'orientamento del quadricottero corrisponda alle aspettative del pilota (o del software autopilota). Questo algoritmo è ciò che leggerebbe gli angoli quadricottero stimati (dall'algoritmo di stima dell'atteggiamento) e cambierebbe la velocità dei motori per tentare di abbinare gli angoli desiderati. I PID sono un algoritmo di controllo ben adattato e comune per i quadricotteri.

Il blocco del gimbal è un fenomeno che può verificarsi nell'algoritmo di stima dell'atteggiamento. Non ha nulla a che fare con l'algoritmo di controllo. Pertanto, non è necessario ESC, motori o eliche per testare il blocco del gimbal: è possibile modificare il codice per visualizzare gli angoli di rollio, beccheggio e imbardata e verificare che i valori corretti vengano calcolati mentre si sposta manualmente il quadricottero. Potresti riuscire a farlo con il quadricottero collegato al tuo computer, tramite Bluetooth o usando altri metodi a seconda della tua piattaforma.

Se gli angoli sono calcolati correttamente non è necessario preoccuparsi dei quaternioni. Se non vengono calcolati correttamente, i quaternioni potrebberoAiutarti. L'algoritmo di stima dell'atteggiamento deve fornire 3 angoli che l'algoritmo di controllo deve utilizzare, tuttavia potrebbe utilizzare una rappresentazione interna diversa come quaternioni o matrici 3x3. In tal caso, convertirà comunque le informazioni sull'atteggiamento in angoli in modo da fornire dati utilizzabili all'algoritmo di controllo. In genere, i quaternioni non sono intuitivi ma computazionalmente efficienti. Questo li rende adatti a piattaforme lente come Arduino. Le matrici o gli angoli possono essere una scelta più semplice per un hardware più veloce. Se hai bisogno che io elabori una soluzione o l'altra, per favore fatemelo sapere, ma sarebbe abbastanza prematuro fornire dettagli in questa fase poiché non sono convinto che sia necessario implementare i quaternioni.

Infine, se gli angoli sono calcolati correttamente, il modo per realizzare il circuito quadricottero è controllare la frequenza angolare anziché l'angolo. Se i tuoi bastoncini rappresentano l'angolo del quadricoptero non c'è modo di farlo fare un ciclo completo: prova a visualizzare la posizione dei bastoncini mentre il quadricoptero si avvolge e dovresti capire perché. Tuttavia, se le levette controllano la frequenza angolare, allora puoi controllare la velocità con cui scorre.

Buona fortuna con il vostro progetto!

Nota: per semplicità non ho menzionato l'opzione teorica di manipolare i dati come matrici o quaternioni sia nell'algoritmo di stima dell'atteggiamento che nell'algoritmo di controllo. Non ho mai visto un quadricottero implementare tali algoritmi.


Grazie per la tua risposta esauriente! Una persona che lavora in InvenSense ha affermato che, nella maggior parte delle applicazioni, i quaternioni erano più facili e migliori degli angoli di Eulero. Osservando i dati vincolati, sembra che sia possibile correggere un asse per arrestare il blocco del gimbal quando questo sta per accadere.
Amico di Kim,

1
Gli angoli di Eulero sono una cattiva scelta per la rappresentazione interna dell'orientamento. Sono semplici da visualizzare, ma molto difficili da manipolare correttamente per evitare il blocco del gimbal. I quaternioni sono migliori perché non ti imbatteresti in un blocco cardanico, ma sono difficili da visualizzare. Le matrici sono in qualche modo più facili da visualizzare rispetto ai quaternioni, ma non altrettanto efficienti se la tua piattaforma è lenta. Il mio quadricoptero usa internamente i quaternioni, ma si converte in angoli di Eulero per i PID.
marcv81,

3

In primo luogo, penso che devi tornare indietro e guardare il tuo codice. Il blocco del giunto cardanico è un problema solo quando ti avvicini molto (entro un paio di gradi) a 90. Se vedi un comportamento strano a 45 gradi, qualcos'altro è la causa.

Per quanto riguarda la tua domanda, i quaternioni di solito non vengono utilizzati direttamente nel controllo PID di base poiché hanno un comportamento complicato che porta a risultati non intuitivi. Di solito vengono convertiti in angoli di Eulero e quindi utilizzati nel normale controller PID, oppure sono progettati speciali controller non lineari per utilizzarli.

Nota che per le tue manovre di looping, il PID non è generalmente un ottimo controller: i guadagni che funzionano bene vicino al passaggio del mouse non funzionano più bene con grandi angoli. Di solito, quando qualcuno vuole fare un ciclo, passa a "circuito aperto", cioè inizia la manovra sotto controllo e poi, una volta superato un certo angolo, applica semplicemente una serie fissa di comandi fino a quando non ha completato il ciclo. Capire quale serie fissa di comandi usare è la parte difficile e spesso usa l'apprendimento per rinforzo (un po 'come un modo formale di fare prove ed errori).


Grazie per la tua comprensione. Sono completamente nuovo alla programmazione bare metal. Ho fatto solo programmi di alto livello. Sono anche molto interessato alla fisica e alla matematica, anche se ho appena finito il liceo, quindi non so ancora troppo ...
Amico di Kim,

Lo sto facendo con un amico e abbiamo "inventato" noi stessi il loop PID. Essendo abituato a una risposta "corretta", è stato molto difficile per noi usarla senza sapere che questo era un modo comune per risolvere il nostro problema. E quando abbiamo scoperto il loop PID su Wikipedia, il nostro loop PID inventato è stato "approvato".
Amico di Kim,

Quindi apprezzo molto la tua comprensione di come ciò viene comunemente fatto nei progetti di lavoro. Lo strano comportamento di cui sto parlando si è rivelato guardando il grafico in Serial Chart( code.google.com/p/serialchart ) L'input è l'output diretto di Euler da I2CDevLib (MPU-9150). Proverò ancora un po '. L '"errore" potrebbe essere stato causato da movimenti imprecisi da parte mia.
Amico di Kim,

Il rotolo è la linea blu. Il rosso è imbardata, il verde è pece, il blu è roll. Come puoi vedere, i problemi iniziano da circa pi / 4 e verso l'esterno. È un problema con I2CDevLib o "si suppone" che sia così? screencast.com/t/svPV3C8B Sto ruotando il giroscopio di 360 gradi attorno all'asse del rullo.
Amico di Kim,

Ho visto AeroQuad riuscire a stabilizzarsi anche dopo essere stato lanciato in aria. È perché si occupa prima del rollio, poi del pitch, poi dell'imbardata?
Amico di Kim,

3

Questo documento, Attitude Control basato su un quaternione completo per un quadrotore di Emil Fresk e George Nikolakopoulos, dimostra ciò che stai cercando di ottenere.

Riassunto - Lo scopo di questo articolo è presentare un nuovo schema di controllo basato sul quaternione per il problema del controllo dell'atteggiamento di un quadrotore. Un quaternione è un numero iper complesso di rango 4 che può essere utilizzato per evitare la singolare geometria intrinseca quando rappresenta la dinamica del corpo rigido con angoli di Eulero o la complessità di avere equazioni differenziali accoppiate con la Direction Cosine Matrix (DCM). Nell'approccio presentato sia il modello di assetto del quadrotore sia il quadrato proporzionale non lineare proposto ( P 2) l'algoritmo di controllo è stato implementato nello spazio quaternione, senza trasformazioni e calcoli nello spazio angolare di Eulero o DCM. In tutto l'articolo, i meriti del nuovo approccio proposto vengono analizzati e discussi, mentre l'efficacia del nuovo controller basato su quaternione suggerito viene valutata da estesi risultati della simulazione.


2
Grazie per il documento pertinente @ jgkim2020. Ma puoi approfondire? Riassumi forse i risultati del documento? (I collegamenti possono diventare stantii dopo tutto). Potresti anche voler dare un'occhiata a Come rispondere
Ben

1
Sono d'accordo con Ben - Un riassunto del documento sarebbe fantastico, dato che la morte dei collegamenti di solito si verifica dopo un po '.
Greenonline,

2

Questo corso MOOC gratuito, benvenuto in AUTONAVx di TUMx! La navigazione autonoma per robot volanti può essere d'aiuto. Copre:

  • Teoria dell'apprendimento
  • Esercita la programmazione Quadcoptor che funziona sia su stimolatore che su hardware reale

Il collegamento non funziona.
Amico di Kim,

Il collegamento funziona se sei collegato.
Amico di Kim,

Il video 1.4 ha una demo di molti quadrotori, eseguendo azioni sorprendenti. Spero che ti interessi all'argomento.
EEd,

Può controllare il software FreeIMU, che fornisce a) dati fusi da più sensori (giroscopio di velocità, bussola, accelerometro), fornendo dati più stabili, a bassa deriva e precisi rispetto alla semplice lettura di dati grezzi dal chip b) forniti più formati di output, tra cui pitch, roll and yaw, che può essere più semplice da visualizzare, comprendere e usare.
EEd,

Grazie per l'aiuto. Sto usando l'MPU-9150 che ha un DMP (fusione del sensore) integrato sia del giroscopio che di un accelerometro. La fusione di questo con il magnetometro deve essere eseguita manualmente.
Amico di Kim,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.