Hlavní navigace

Stavíme kvadrokoptéru: PID regulátor

Jiří Kačírek

PID regulátor je používán v mnoha odvětvích průmyslu, dá se také použít ke stabilizaci kvadrokoptéry a nejen to: můžeme ho použít k regulaci teploty v místnosti, stabilizaci segwayů, zkrátka všude tam, kde je potřeba něco regulovat. V tomto článku pokračuji v jeho implementaci v rámci kvadrokoptéry.

V minulém díle jsem začal PID regulátor a v tomto díle jej dokončím. Nejprve se odkážu na kód PID regulátoru z minulého dílu a ukážu, jakým způsobem upravuji výkon motorů:

float supp = 0;
supp =                    get_pid( // Funkce PID regulátoru.
                          &pid_ns, // Reference na strukturu s daty PID regulátoru pro North-South osu.
       command.x + command.trim_x, // Požadovaný náklon (z joysticku) + korekční hodnota (trimr).
                           ypr[1], // Náklon kvadrokoptéry v NS-ose získaný z IMU.
                        1/LOOP_HZ  // časová perioda, s jakou probíhá update motorů.
                                );
     power_n = command.pwr - supp; // command.pwr je hodnota výkonu definovaná na joysticku, kde
     power_s = command.pwr + supp; // na jedné straně k výkonu připočtu supp, na druhé ho zase odečtu.

supp = get_pid(&pid_ew, command.y + command.trim_y, ypr[2], 1/LOOP_HZ); //to samé pro EW osu
    power_e = command.pwr + supp;
    power_w = command.pwr - supp;

supp = get_pid(&pid_z, command.z, gyroZ, 1/LOOP_HZ); // PID pro korekci rotace. Vstupem je úhlové zrychlení okolo osy Z.
    power_n += supp; // Korekce pro rotaci probíhá na všech
    power_s += supp; // motorech. Cílem je dosáhnout rozdílu
    power_e -= supp; // výkonu na obou osách, čímž je vyvíjena
    power_w -= supp; // rotace. 

V kódu je v tento moment nejdůležitější si povšimnout, jak vlastně vypadá korekce výkonu pro jednotlivé osy. Z funkce get_PID je vrácena hodnota, která bude rozdílem (dvojnásobným) výkonu motorů na ose, ke které je PID vztažen. V případě osy Z, jak jsem pojmenoval osu pro rotaci kvadrokoptéry, je korekční hodnota výkonu rozdílem výkonu obou os. Pokud se zaměříme na NS-osu, rozdíl výkonu na jejich motorech tedy vyvíjí klopení.

Schéma PID regulátoru

Schéma PID regulátoru

PID regulátor je složen ze součtu tří složek: P-proporcionální, I-integrační, D-derivační. Každá z těchto složek má svou vlastní konstantu, kterou ručně nastavujeme. Představme si, že kvadrokoptéru umístíme do stojanu za EW-osu a budeme si hrát s PID regulátorem NS-osy. Na jednu stranu kvadrokoptéry přiděláme olůvko, takže se kvadrokoptéra překlopí. V tuto chvíli jsou všechny tří konstanty PID nastaveny na hodnotu 0 a joystick je ve výchozí poloze, takže požadovaný náklon je 0°.

Čím více budeme zvětšovat proporcionální konstantu, tím víc se bude projevovat rozdíl mezi požadovaným náklonem a aktuálním náklonem, což je tzv. chybový signál, a kvadrokoptéra se bude víc a víc srovnávat. V určitém momentě hodnoty proporcionální složky začne kvadrokoptéra lehce oscilovat – jednou se překlopí lehce na jednu stranu, potom zase na druhou. Pokud budeme pokračovat ve zvyšování konstanty, v určitý moment oscilace naberou rostoucí charakter, budou se samovolně víc a víc zvětšovat. Důležité zde je, že za pomocí proporcionální složky nelze kvadrokoptéry stabilizovat – buďto by nebyl dosažen požadovaný náklon (vždy by něco chybělo), nebo by došlo k oscilacím.

Integrační složka oproti proporcionální nezačne působit okamžitě. Integrace je v našem případě vlastně sumace všech chybových signálů. Nyní budou všechny konstanty na opět nule, naše kvadrokoptéra bude s olůvkem převrácená, a my o něco zvýšíme integrační konstantu. Kvadrokoptéra nejprve nic neudělá. Postupně ale uvidíme (spíše uslyšíme), že rostou otáčky na jednom z motorů. Postupně začne víc a víc narůstat integrační složka a kvadrokoptéra se začne srovnávat. Nakonec se srovná do polohy oscilací okolo požadovaného náklonu. Pokud integrační složku zvýšíme za určitou mez, i v tomto případě naberou oscilace zvětšující se charakter.

Nakonec derivační složka. Derivační složka je v podstatě rozdíl aktuálního chybového signálu a předchozího chybového signálu. Působí PROTI jakékoliv ZMĚNĚ náklonu. Pokud zvednete hodnotu této konstanty, uvidíte, že kvadrokokoptéra převrácená ve stojanu opravdu nic neudělá a ani po čase se nic nestane. Přijďte k ní a zkuste ji obrátit ručně: uvidíte, že kvadrokoptéra vám bude v tomto pohybu bránit. Čím výš nastavíte derivační konstantu, tím tužší bude jakýkoliv pokus o rotaci kvadrokoptéry. Pokud to s derivační konstantou přeženete, motory začnou škaredě vibrovat, protože derivační složka začne přehnaně reagovat na šumový signál a zesílí jej.

Všechny tři složky PID regulátoru se krásně doplňují, ale je třeba dobře nastavit jejich konstanty. K tomu s dá použít následující metoda.

Ziegler-Nicholsova metoda

Je to jednoduché, takže to zkrátím. Jak už jsem řekl, když zvyšujeme proporcionální konstantu (zbývající konstanty musí být na nule), tak v určitý moment začne kvadrokoptéra lehce oscilovat. Tato hodnota, pojmenujme ji Ku, a následující tabulka, je vše, co potřebujete k základnímu nastavení konstant:

Ziegler-Nicholsova metoda pro nastavení PID regulátoru

Ziegler-Nicholsova metoda pro nastavení PID regulátoru

Osobně používám variantu „no overshoot“. Proporcionální konstantu Kp nastavíme jako 0.2*Ku, integrační konstantu pak nastavíme jako 2*Kp, derivační konstantu jako Kp/3. Proměnná Tu je oscilační perioda a upřímně, nikdy jsem se jí nezabýval, protože jednotlivé konstanty si pak stejně dodatečně doladím podle potřeby ručně.

Důležitý je zde tedy poměr konstant P:I:D 3:6:1, který vám dá dobrý základ. Z mé zkušenosti nicméně plyne, že je nutné všechny konstanty, které vzešly z této metodiky, proporcionálně zvětšit o nějaký jejich společný násobek, neboť toto základní nastavení je moc slabé – kvadrokoptéra nereaguje na ovládání dostatečně ostře. Proto jsem si do GUI na notebooku kromě číselníku k nastavení konstant PID regulátorů ještě přidal jeden, který je násobí. S PID regulátorem je zkrátka třeba si trochu vyhrát.

Závěr

PID regulátor je velice důležitá a užitečná věc nejen pro použití v kvadrokoptéře, ale všude tam, kde je potřeba regulace, od balancujících robotů na dvou kolečkách po regulaci teploty v místnosti. Má řadu obměn pro použití v různých systémech, které můžete najít v publikacích pana prof. Ing. Miloše Schlegela, CSC.

Následující videa ukazují využití PID regulátoru v různých aplikacích:

Našli jste v článku chybu?

6. 8. 2015 13:39

robotron (neregistrovaný)

Pro uplnost: mne vubec nevadi, ze je clanek rozdelen do vice dilu, at jich je klidne sto. Pan Tisnovsky ma taky mnohadilne serialy a jsou bezva. Vychazim z prohlaseni "V minulém díle jsem začal PID regulátor a v tomto díle jej dokončím.". Proti dokoncenosti tohoto PIDu jsem se ohradil. Ze se da regulator nebo treba metoda jeho nastaveni rozpracovat z embrya v skutecne dilo, o tom vubec mluvit nechci, slo mi o naprosto zasadni NEFUNKCNOST toho pahylu, ktery sem byl hozen zajemcum.

Kolik inkasuje…

6. 8. 2015 13:23

robotron (neregistrovaný)

Uznavam, antiwindupu je cela rada. Uplne nejjednodussi pro pripad s I, PI ci PID regulatorem je:

a) implementovat D, P, I slozky jako D^2 (druha diference), D, P a do serie dat integrator, jehoz hodnota bude ifelsem omezena tak, aby nikdy nepresahla omezeni akcniho zasahu (tj. mam-li vystup -0.3...+1.0, tak hodnota tohoto integratoru v kaskade s (D^2,D,P) nesmi pretect z techto mezi);

b) ignorovat prispevky D a P slozky a implementovat omezeni integratoru samotneho ifelsem jako v bode (a).

Ob…

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu