Archivi tag: controllo

SW Dev : intro loop di controllo

Finora lo sviluppo sw ha incluso funzionalita di jogging base andando a modificare direttamente le velocita’ dei motori e lasciando all utilizzatore la loro modulazione.

A questo punto ho introdotto il concetto di controllo in cui l’ operatore indica l’ angolo desiderato ed il controllore , il nostro rapberry pi, deve decidere le velocita’ dei motori.

control_loop

La relazione teorica fra angolo del quadricottero (sia esso roll, pitch, yaw o una combinazione di essi) puo’ essere ritrovata nella pagina del quadricottero.
L equilibrio che si ottiene e’ di tipo instabile: e’ sufficiente un minimo disturbo (ad esempio un alito di vento) perche tale equilibrio si perda.

Nella realta’ bisogna anche considerare dissimetrie costruttive (struttura, eliche etc.), o comportamenti non costanti dei motori.

Cio si traduce nella necessita’ di sapere:

  • qual’e’ il comportamento istantaneo del velivolo
  • qual’e’ la reale relazione fra angoli e velocita motori in quanto differente da quella teorica

Per il primo punto si deve introdurre qualcosa che possa leggere lo stato attuale del quadricottero, diciamo un sensore.
Nella maggior parte dei casi si utilizza un sensore montato a bordo come un giroscopio o un giro+ accelerometro.

Il giroscopio ritorna la velocita angolare dal cui integrale si ottiene l’angolo.
L’ accelerometro ritorna l’ accelerazione nelle sue componenti x,y,z

Quindi, noto l’ angolo attuale e l’ angolo desiderato (target) posso calcolare l’ errore e decidere una strategia di modulazione della velocita’ dei motori.

Tale strategia si traduce in un metodo di controllo denominato PID.

Si ipotizza cioe’ che la relazione fra due variabili (nel nostro caso velocita’ angolare del motore e angolo) sia approssimabile a tre componenti:
Proporzionale (P) = kp*Ei
Integrale(I) = Ki* sum (Ei)*t
Derivativa(D)= kd * (Ei-Ei-1)/t

Dove Ei e’ errore fra w target e w current all’istante i-esimo, t e’ il tempo ciclo del loop
Dove i vari k vanno determinati empiricamente.

Il pid qundi mi restituisce un valore di variazione motori che deve permettere di minimizzare E.

Un loop di lettura da sensore, calcolo correzione con pid e applicazione correzione w motori costituisce la base del controllo d’ angolo.

Nei post seguenti dedichero’ una descrizione specifica agli specifici blocchi: sensore, PID e control loopcon lo scopo di definire la struttura finale del programma.