9 Sledovanie čiary pomocou PID regulátora

V predchádzajúcom návode sme si ukázali, ako môžeme sledovať čiaru pomocou stavového automatu a binárnych výstupov zo snímačov. Aby sme moli reagovať na kombináciu všetkých výstupov zo snímačov pomocou váženého priemeru priebežne musíme využiť iný typ regulátora - PID regulátor. V tomto návode si ukážeme ako vieme vytvoriť schému s regulátorom.

Čo budeme potrebovať?

V tomto návode využijeme robota z predchádzajúceho návodu.

PID regulátor

PID regulátor (proporcionálny, integračný a derivačný regulátor) je princíp, ktorý využíva spätnú väzbu na riadenie rôznych systémov. Regulátor neustále vypočítava regulačnú odchýlku - rozdiel medzi želanou veličinou (v našom prípade je to hodnota želaného váženého priemeru, keď je robot stredným snímačom na čiare teda číslo 300) a aktuálnym meraním procesnej veličiny (skutočný vážený priemer). Na základe regulačnej odchýlky sa vypočíta korekcia (výstup z regulátora - akčný zásah - v našom prípade prírastok na motory) pomocou troch zložiek regulátora - proporcionálnej (P), integračnej (I) a derivačnej (D). Regulátor sa dá vyjadriť nasledujúcou schémou na obrázku [1]:

kde:

  • r(t) - je želaná veličina (želaná hodnota váženého priemeru)
  • y(t) - skutočná hodnota veličiny (aktuálna hodnota váženého priemeru zo snímačov)
  • e(t) - regulačná odchýlka
  • u(t) - akčný zásah (výstup z regulátora - prírastok na motory robota)
  • Plant/Proces - riadený systém (v našom prípade robot)

Regulátor sa dá matematicky vyjadriť nasledujúcim vzťahom:

Pre dosiahnutie ideálneho správa sa nášho robota, budeme musieť nastaviť hodnoty konštánt P, I a D. Ako tieto zložky pôsobia na výstup regulátora?

  • P zložka je proporcionálna ku aktuálne hodnote regulačnej odchýlky (násobíme ju). S využitím samostatnej P zložky v regulátore nemusíme dosiahnuť ustálený stav (nulovú regulačnú odchýlku), teda robot sa nenarovná presne na stred. Citeľné to môže byť ak sa zmenia podmienky v procese - napríklad dochádzajú baterky a motor bude zatáčať pomalšie.
  • I žložka zohľadňuje minulé hodnoty chyby - integruje ich (môžeme si to predstaviť ako ich súčet v čase). Pomocou I žložky vieme eliminovať regulačnú odchýlku, ktorú dostaneme využitím samostatnej P zložky.
  • D zložka zohľadňuje budúce správanie regulačnej odchýlky pomocou miery jej zmeny.

Podľa toho, aké zložky využijeme môžeme nazvať náš regulátor aj ako P regulátor alebo PD regulátor. Pre riadenie nášho robota zvyčajne postačí P regulátor, typicky sa na kompenzáciu využíva aj PD regulátor. I zložka môže "naintegrovať" chybu ak robot úplne vybehne mimo čiaru a môže spôsobiť nestabilitu, preto sa v algoritmoch sledovania čiary využíva zriedkavo.

Pre ladenie regulátora začnite so samostatnou P zložkou. Postupne zväčšujte jej hodnotu, pokiaľ robot nedokáže vytočiť zákrutu. Pokiaľ by robot začal kmitať zo strany na stranu P zložku zmenšite. Ku P zložke začnite v malých hodnotách pridávať D zložku a pozorujte jej vplyv na riadenie.

PID regulátor v Simulinku

Na vytvorenie regulačného obvodu v Simulinku môžeme využiť bloky, ktoré sme si vytvorili v predchádzajúcich návodoch. Budeme potrebovať minimálne subsystém pre snímače čiary s váženým priemerom a subsystém pre ovládanie motorov (nezabudnite nastaviť Arduino MEGA 2560 ako cieľové zariadenie). Tiež môžete použiť schému z predchádzajúceho návodu. Schému si uložte pod iným meno, keďže ju budeme upravovať. Zmažte Blok Chart a zatiaľ zakomentujte blok digitálneho vstupu pre tlačidlo (pravy klik na blok a Comment Out). Mali by sme mať teda nasledujúcu schému.

Do schémy pridáme nasledujúce bloky

  • Simulink - Sources - Constant
  • Simulink - Math Operations - Add
  • Simulink - Math Operations - Subtract (2x)
  • Simulink - Discrete - Discrete PID Controller

V bloku konštanty nastavíme hodnotu na 300, čo je naša želaná hodnota. Pomocou bloku odčítania odpočítame od želanej hodnoty aktuálnu hodnotu váženého priemeru. Výsledok je regulačná odchýlka, ktorú privedieme na PID regulátor. Ako ďalšie môžeme priviesť hodnotu našej rýchlosti na oba voľné bloky pre sčítanie a odčítanie (na port kladného znamienka). Výstup z bloku odčítania (dvojklikom do bloku môžeme zmeniť poradie znamienok bloku) privedieme na prvý motor (M1) a výstup z bloku sčítania privedieme na motor (M2). Ako posledné privedieme výstup z regulátora na voľné vstupy blokov sčítania a odčítania. Model by mal vyzerať nasledovne:

Parametre PID regulátora môžeme nastavovať dvojklikom na blok. Dôležité parametre sú

  • Time domain - Discrete-time
  • Perióda vzorkovania - Sample time - 0.01 (alebo vaša perióda vzorkovania v schéme a snímačoch)
  • Proportional (P) - ladenie P zložky
  • Derivate (D) - ladenie D zložky
  • Use filtered derivate - využitie filtrovania derivácie (môžete skúsiť oba spôsoby)

Dokázali sme vytvoriť regulačný obvod a vieme, kde môžeme ladiť parametre, ale táto schéma ma jeden nedostatok. Skôr ako začneme regulovať by sme mali nakalibrovať snímače čiary. Uložme si schému do nového súboru a poďme schému ešte upraviť.

PID regulátor v Simulinku s kalibráciou snímača

V predchádzajúcom návode sme vytvorili postupnosť krokov, kde sme najskôr nakalibrovali snímače a potom sme spustili sledovanie čiary pomocou tlačidla. Niečo podobné vieme dosiahnuť v Simulinku. V schéme môžeme zmazať všetko okrem subsystému snímačov čiary, motorov a môžeme odkomentovať blok Digital Input pravým klikom na blok a voľbou Uncomment. Ako prvé vyskúšame točenie motorov bez regulátora. Do schémy vložme nasledujúce bloky:

  • Simulink - Sources - Constant
  • Simulink - Math Operations - MinMax Running Resettable - nastavte max
  • Simulink - Logic and BitOperations - Logical Operátor - nastavte NOT
  • Simulink - Signal Routing - Merge (2x)
  • Simulink - Ports and Subsystems - Enabled subsystem

Do bloku MinMax, kde sme nastavili maximum priveďme signál z Digitálneho vstupu tlačidla. Na port R pripojme konštantu, v ktorej nastavíme 0. Z bloku MinMax privedieme signál do bloku logického operátora, kde sme nastavili operáciu NOT. Výstup z bloku pripojíme na horný port v bloku Enabled Subsystem a do druhého bloku Enabled Subsystem privedieme výstup z bloku MinMax. Takýmto postupom zabezpečíme, že keď tlačidlo nebude stlačené budeme vykonávať subsystém do ktorého ide signál z bloku NOT a v opačnom prípade pôjde výstup zo subsystému kde ide signál MinMax. Vstúpme dvojklikom do bloku subsystému, kde ide signál z NOT. Tento blok reprezentuje, čo sa má stať pokiaľ kalibrujeme snímače - stojíme. Zmažme blok In1, lebo vstupy nebudeme potrebovať. Naopak musíme pridať blok výstupu Out. Skopírujte blok Out1 do schémy a premenujte Out1 na M1 (motor 1) a blok Out2 na M2 (motor 2). Ako vstupy do týchto blokov priveďte bloky konštánt s hodnotou 0.

Postup zopakujeme pre druhý subsystém, avšak namiesto 0 v bloku konštánt tam dáme hodnotu želanej rýchlosti pohybu dopredu, teda 60. Vrátime sa do hlavného okna Simulinku modrou šípkou nahor a mali by sme vidieť 2 výstupy z týchto subsystémov. Aby sme mohli skombinovať signály pre oba motory z jednotlivých subsystémov musíme použiť bloky Merge. Do jedného bloku Merge pripojme signály pre ľavý motor (M1) a v druhom bloku Merge pre pravý motor (M2). Z blokov Merge už potom môžeme potiahnuť signál na motory. Výsledná schéma by mala vyzerať nasledovne:

Na testovanie schémy nepotrebujeme subsystém pre snímače, takže ho môžeme dočasne zakomentovať. Položte robota tak, aby mal kolesá vo vzduchu a schému spustite pomocou Monitor & Tune. Robot by mal stáť na mieste a po stlačení tlačidla by sa mali kolesá točiť.

Pokiaľ sa nám to podarilo môžeme v subsystéme pohybu nahradiť konštanty regulačným obvodom, ktorý sme vytvorili v predchádzajúcej schéme. Môžeme ju otvoriť a bloky skopírovať, okrem subsystémov snímačov a motorov (odznačíme pomocou klávesy SHIFT), do subsystému Enabled Subsystému, do ktorého ide signál MinMax. V tomto subsystéme zároveň zmažeme bloky konštánt. Na port M1 pripojíme výstup z bloku odčítania a na port M2 pripojíme výstup z bloku sčítania. Zmažeme konštantu rýchlosti a do schémy vložíme 2 porty vstupov.

  • Simulink - Ports and Subsystems - In1 (2x)

Jeden port si nazvime priemer, ten pôjde do bloku odčítania pred regulátorom a druhý nazvime rýchlosť a ten pôjde namiesto zmazaného bloku rýchlosti.

Vráťme sa do hlavného okna Simulinku a dokončime schému. Odkomentujme subsystém snímačov a pripojme výstup priemer na port subsystému. Vytvorme novú konštantu s rýchlosťou napríklad 60 a pripojme ju na port rýchlosti.

Schému môžeme nahrať na zariadenie a odtestovať na testovacej dráhe či už v režime Monitor & Tune s 3m USB káblom, alebo nahratú na zariadenie s powerbankou. Robot by mal na začiatku stáť kým nenakalibrujeme snímače a po stlačení tlačidla by mal začať sledovať čiaru (samozrejme ak sú nastavené dobré parametre v regulátore).

V tomto návode sme si ukázali ako môžeme vytvoriť model na sledovanie čiary v Simulinku s využitím PID regulátora. Ako však môže skombinovať silu PID regulátora a modelovania postupnosti krokov v Stateflow? To si už ukážeme v nasledujúcom návode.

Literatúra

[1] https://en.wikipedia.org/wiki/PID_controller