Dovolím si prafarázovat název soutěže, která se jmenuje Robotem rovně a každému ji doporučuju navštívít.
Jestli jste viděli nějaký Sovětský (nebo Americký) válečný film jistě víte že když Německý tank najede na Sovětského partyzána v zákopu začne se točit na místě aby jej pásy rozdrtil. Když se točí na místě vidíte že jeden pás se točí dopředu a druhý pás se točí dozadu. To je tzv. Diferenciální řízení, které my robotici milujeme, protože
- Robot se otočí na svém vlastním půdorysu
- Nepotřebujeme se babrat s hřídelemi a řídícimi tyčemi (jako v autě) stačí jen postavit levý a pravý motor a točit jimi různými rychlostmi.
Takže postavíte svůj první podvozek a v netrpělivosti připojíte holé motory pomocí drátů na baterku a čekáte že robot vyrazí vpřed - což většinou udělá, ale protože žádné 2 motory nikdy nejsou stejné tak se s kýmkoliv vsadím o cokoliv, že to nebude rovně ale do oblouku....
TAkže robotem není problém jezdit rychle a dokolečka, ale pomalu a rovně - takže zvládnout řízení otáček motoru je základní úloha každého robotika a první problém každého robota.
Aby robot jel skutečně rovně musí snímat otáčky levého a pravého motoru a udržovat je pokud možno co nejpřesnějíi stejné - to je pro nás zatím příliš složitá úloha - takže zatím si hrajeme na to že chceme jet jedním motorem rychlostí 1 metr/sec ....
Takže máme v robotu procesor který může do motoru pustit jakýkoliv proud a máme z čidel informaci že v současnosti jedeme 0 metrů /sec (Neřešme nyní detaily jak robot zjistí jak rychle jede a jak to udělá že pustí do motoru náležitý proud)
Intuitivně je jasné, že musíme proud motorem řídit podle rozdílu mezi žádanou (1m/s) a skutečnou (0 m/s) rychlostí - řekněme, že rozdíl vynásobíme 5 a takový proud pustíme do motoru - 5A
V dalším kroku regulace se dozvíme, že jedeme 0,5 m/s tedy prud bude (1-0,5) * 5 = 2.5 A
V dalším kroku se dozvíme, že jedeme 0,9 m/s - proud bude (1-0,9) *5 = 0,5 A
Teď si ale představne že robot potřebuje 0,5 A jenom proto aby se udržel v dané rychlosti, takže příští hodnota bude zase 0,9 m/s - znovu pošleme 0,5A a rychlost bude zase 0,9 m/s atd ...
To co jsme právě popsali je tzv proporcionální regulace, která má výhodu jenoduchost a nevýhodu, že nikdy nedosáhne nastavené rychlosti, protože nepočítá s energií pro udržení ustáleného stavu.
Chyba proporcionální regulace souvisí se "zesílemím smyčky" - to je ta konstanta 5 - a opravdu - pokud místo 5 dáme 50 pak se robot ustálí na rychlosti ( 1 m/s - 0,99 m/s ) * 50 = 0,5A - chyba 1 centimetr za sekundu už není tak strašná - zdánlivě bychom mohli chybu rychlosti vynásobit miliónem a měli bychom chybu v mikrometrech / sekudu a tou už by nikdo nepoznal - ve skutečnosti bychom však měli takovou situaci
- Rychlost je o vlásek větší než nastavená - pustit 1000 A do motorů
- A příště - rychlost je o vlásek menší než nastavená - všechno vypnout
- Příště 1000A
- Příště vypnout
což by se projevovalo kmitáním regulace - které se navenek jeví úplně stejně jako když má nějaké zvíře křeče (mnohokrát jsem to na svých robotech viděl).
Takže je třeba jít na to jiným způsobem. Máme základ z Proporcionální regulace (P regulace) a máme chybu, kterou P regulace neumí vyrovnat - takže si tu chybu poznamenáme někam do sešitku a budeme si chyby v jednotlivých krocích sčítat - a podle součtu budeme dávat ještě další proud navíc nad to co nám nařizuje P regulace.
Tomu sčítání chyb se říká Integrační regulace neboli I regulace a ted měl nastat odstavec, kde bychom si ručně spočítali I-regulaci - jenomže to by blonďaté čtenářky dostaly asi psotník takže mi prostě věřte, že robot řízený P regulací jede pomaleji než by měl, mezitím se díky I regulaci v jeho procesoru nasčítá chyba, která vede k tomu že regulátor přidává proudu a chyba se bude sčítat tak dlouho dokud rychlost nastavená - rychlost skutečná nebude 0 (pak už se nemá co sčítat) - takže díky I regulaci konečně dosáhneme toho, že robot jede přesně tak rychle jak má nastaveno.
Problémem I regulace je že může nastat taková situace (opět náš příklad - nasčítaná chyba od začátku je 1,6 m/sec )
(1-0,9) * 5 + 1,6 * 0,1 = 0,66A
- a to je pro udržení rychlosti 1 metr / sec příliš mnoho - takže robot v příštím kroku zpomalí - tím P regulace přidá proudu - tím robot zase zrychlí - k tomu I regulace ještě něco přidá - a máme tu zase kmitání smyčky - neboli robota v křeči - svým okem doktora (měl jsem zkoušku z neurologie, která se tohle řeší u lidí) poznám kdy kmitá P-regulace (krátké a rychlé křeče- jakoby chvění) a kdy kmitá I-regulace (delší záchvěvy kdy robot má tendenci pojíždět dopředu a dozadu)
K tomu aby se křeče omezily - slouží Derivační - alias D regulace - ta bere jako základ rozdíl mezi současnou a minulou rychlostí (na rozdíl od I regulace, která bere součet chyb) a ten přičtě k nastavenému proudu - takže představme si naši situaci kdy robot překmitnul a jede rychlostí 1,1 metrů / sec
(1-1,1) * 5 + 1,6 * 0,1 - tohle vby dávalo součet -0,34 A ted do motoru by nešlo nic a v příštím cyklu by robot zpomalil a zase by šlo mnoho -jenomže máme D regulaci která ví e předminulá rychlost byla 0,9 současná je 1,1 rozdíl je 0,2 metrů / sec vycucáme si z prstu že výsedek se násobí řekněme 4 - takže máme 0,8- 0,34 = 0,46 - derivační regulace zachránila situaci a (téměř) zabránila kmitání.
I D regulace může kmitat - to už vůbec nebudu matematicky zdůvodňovat - tohle kmitání se projevuje u robotů stejně jako u lidí Parkinsonova choroba - když jsou v klidu - jsou volní a vláční a když se mají pohnout najednou "ztuhnou v křeči"
Takže si to ještě zrekapitulujeme jako malinký prográmek
- Chyba_rychlosti = Nastavená - současná rychlost
- Suma_chyb = Chyba_rychlosti + Suma_chyb
- Rozdíl_rychlosti = Současná - minulá rychost
Proud_do_motoru = P * Chyba_rychlosti + I * Suma_chyb + D * Rozdíl_rychlosti
P, I a D - jsou Proporcionální, Integrační a Derivační koeficienty regulace - v našem případě
P = 5, I = 0,1 D = 4
Většinou to tak bývá, že I koeficient je malý (aby robot nekmital). Nicméně P, I, a D koneficienty se musí nastavit a je to veliká věda když se to dělá "vědecky" a je to spousta pokusů a omylů když se to dělá metodou pokus-omyl (takhle to děláme všichni možná jenom Martin a Kamil - jsou geniání natolik, že to zvládají výpočtem)
Pro hardcore matematiky tady je základ teorie na Wikipedii
Pro všechny ostatní robotiky - kluci škoda že jste taky neměli neurologii - ta podoba mezi křečováním lidí a cukáním robotů při ladění PID regulace je až hrůzu budící - po podlaze se vám šmrdlá něco, co zavání SkyNetem.
Nakonec tradiční rada pro blondýny - když si zvědavý chlap bude chtít vyzkoušet vaši sukni - nepohoršujte se - vy taky nosíte (jeho?) kalhoty !!
Docela pěkně popsáno.