PID regulátor

daton
Příspěvky: 434
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton » 24 bře 2016, 08:25

Dobrý den
Jo tak tomu rozumím, myslel jsem si že to asi možná bude takto ale nebyl jsem si ani zdaleka jist. Já jsem tak trochu přemýšlel o podobném problému jen jsem to jinak nazval v příspěvku zatížení arduina. Nešel jsem však takto do hloubky a ten můj globální přístup k zatížení nebyl pochopen tak jak jsem o něm přemýšlel (možná jsem ho nedokázal správně vysvětlit). Přístup s levnými a drahými operacemi je v tomto světle podstatně průhlednější a vypovídá více o zatižitelnosti platformy.

Stránky P Kubáče ještě stále studuji a někdy je to dost náročné. Je tam ale spousta naznačených cest, které jsou zajímavé. Jen vzhledem k tomu že jsem nikdy nestudoval assembler jsem trochu hendikepovaný v jeho vysvětlení na úrovni tohoto základního kodu.

Ale i když budu nadále studovat jeho web nedá mi abych se nezeptal jak vy ostatní řešíte PID regulátory zda používáte hotové knihovny nebo si je programujete a hlavně jak spojujete jejich výstupy klasicky pro dva motory (každy na jednom kole)?

Uživatelský avatar
gilhad
Příspěvky: 157
Registrován: 29 kvě 2015, 00:36

Re: PID regulátor

Příspěvek od gilhad » 24 bře 2016, 11:15

Ted zase nejak moc nerozumim ja :)
PID regulator zatim neresim, jeste se hrabu v HW H-mustku a podobnych problemech, takze nic nejezdi, nic nemeri a neni co propojovat.

Ale az na to prijde rada, tak si nejaky napisu sam (abych mu rozumel), muj navrh architektury je "vicevrstvy" - nekde nahore bude rozhodovaci algoritmus, ktery na zaklade zadani ("jed rovne ale vyhybej se prekazkam"), historie ("minule jsem uhnul vpravo") a dat ze senzoru ("prekazka 30cm pred nami") usoudi kam chce jet a jak rychle ("blizi se prekazka, pribrzdim a zahnu vlevo") a vyda prikazy podrizenym jednotkam ("zahnout na 20 cm vlevo o 90stupnu"), ty to prelozi svym podrizenym jednotkam ("pravy pas 80%", "levy pas 30%") a ty se to pokusi nejak dodrzet ("ted jedu podle svych udaju 100%, mam jet 80%, musim ubrat, ale ne moc" - a to je ten PID, protoze za chvilku dojde k "ted jedu 78%, mam jet 80% musim malicko pridat") a ty to zase predaji dalsim podrizenejsim jednotkam ("PWM nastavit na stridu 123") a tak dal (motor konstrukcne dostane nejake PWM, takze da nejaky vykon, ma nejaky odpor prevodu, tlaci robotka do mirneho kopce a ma nejake treni, z toho vyplyne konecna rychlost otaceni a tedy prez prevody rychlost posunu pasu - zni to ucene, ale proste elektrinou motor pohanim a otacky se ustali tam, kde to dovoli zatizeni)

Takze pripojeni PWM je vec, ktera mi tak nejak vyplyva ze zadani sama - "shora" jde pokyn, jakou hodnotu mam udrzovat, "zdola" jdou informace o tom jakou rychlost skutecne mam, ja vim, co jsem dal na vystup, cary mary fuk PID , v dalsim kroku musim dat na vystup bud vic, nebo min, nebo stejne. Vystupem je tu strida PWM (123/255), vstupem rychlost otaceni (treba 200 pulzu /sec (coz pri 20 dirkach dava 10 otacek/sec ale to me nezajima)), zadanim (pozadovany cilovy stav) je pokyn 80% (coz si prelozim jako ze vstup ma byt 80% z 200, tedy 160) a ze tedy strida PWM(co byla 180 minule ) musi klesnout (na tech 123) a tudiz "vystup z PID regulatoru" pripojim tak, ze na analog write pinu pro pravy pas zapisu misto 180 hodnotu 123.

Nacez Arduino zmeni stridu PWM na pinu 10, H-Mustek co je na nej napojeny zacne posilat do motoru min stavy a pravy pas (kvuli vsem odporum) lehce pribrzdi.

Tudiz se kolo praveho pasu bude tocit pomaleji, dirky pred fotodiodou se budou menit pomaleji, ta vysle min pulzu za sekundu (treba 150), ja to ctu na nozicce pinu 11, necim to sekundu scitam a to je vstup do PIDu v dalsi iteraci.

(cisla jsou ciste ilustrativni a od oka, taky sekunda je moc dlouhy interval, jde o princip)

cili PID je je "cerna krabicka" co ma zadani jak ma vypadat vstup, ma skutecny vstup a ma nejaky vystup (80% vykonu = 160 pulzu pozadovanych, 200 pulzu namerenych, strida 123) a nejakymi triky s vystupem se snazi udelat, aby vstup odpovidal zadani.

V praxi je to proste funkce, vypadne z ni cislo a posle se bud do dalsi funkce ("rekni ze chceme stridu 123"), nebo do HW ("nastav registry na stridu 123").

PID na levem motoru netusi, ze je neco jako pravy motor a ze ma ten ma taky svuj PID, tak se o nej nijak nestara. Taky netusi nic o prekazkach, zatackach a vyhybani, ma sve prikazy (rychlost 80%) a ty si plni.

Nadrizena jednotka resi, ze pro zatacku potrebuje takovou rychlost leveho a makovou rychlost praveho motoru, tak si je objedna a jako vstup ma (doufejme) nejake mereni, kudy stroj fakt jede ("blizime se k prekazce moc rychle") a zadani ("vyhnout se prekazce"), takze v dalsim kroku si objedna jine rychlosti motoru, aby to zatacelo vic (Ano, zase to muze byt PID na nejake vyssi urovni, nebo libovolna jina logika)


Pricemz "jednotky" muzou byt cokoli, treba ruzne funkce v programu, nebo jen par dalsich radku ve smycce, nebo ma kazdy motor svuj ridici mikropocitaci a cele to diriguje vypocetni cluster z netu, nebo nektere jednotky jsou proste kusa HW (prevodovka, motor), ci natvrdo zadratovane elektroniky (H-mustek), a "rozhodovani" v nich proste vyplyva z jejich konstrukce (motor ma nejakou setrvacnost, takze se neroztoci ani nezastavi hned, ale postupne a rychlost otacek vyplyva z dodane energie a odporu na hrideli a vnitrnich charakteristik)

hubacekp
Příspěvky: 259
Registrován: 24 úno 2013, 13:40

Re: PID regulátor

Příspěvek od hubacekp » 24 bře 2016, 11:26

já jsem loni viděl toto pěkně srozumitelné video o PID:
http://www.youtube.com/watch?v=4Y7zG48uHRo
třeba se někomu bude hodit na osvětlení nastavení parametrů PID

daton
Příspěvky: 434
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton » 24 bře 2016, 12:20

Hodně zajímavé a přínosné video díky.
Re Gilhad to co píšete je přesně to co řeším i já, avšak vzhledem k tomu že jsem o regulátorech PID slyšel jen z doslechů snažím si v tom udělat pořádek a zatímco vy jste dobře popsal okolí a připojení PID já se snažil svými dotazy pochopit PID a jeho funkci včetně matematiky okolo. To další mne také ještě čeká.
A jak správně píšete jedna věc je matematika a přesné nastavování a druhá drivery a mechanika která hodně mění. Nejprve jsem chtěl jít do krokových motorů ale to jsem už opustil a půjdu do klasických komutátorů s převodovkou ale bez senzorů otáček. Doufám že se to dá řešit i jinak ale ještě nevím jak...

Uživatelský avatar
gilhad
Příspěvky: 157
Registrován: 29 kvě 2015, 00:36

Re: PID regulátor

Příspěvek od gilhad » 24 bře 2016, 20:20

Ja prave odpovidal pouze na tu otazku "jak pripojim PID k motoru" - ten zbytek tu rozebirali jini.

Tady je o te matematice za tim PID

http://petr-kubac.blog.cz/1505/zraneni-robotem
http://petr-kubac.blog.cz/1203/robotem-pomalu
http://petr-kubac.blog.cz/1203/robotem- ... nom-clovek

Jinak ta mechanika okolo - on ten PID se snazi ridit neco, o cem vlastne nevi, jak to funguje (jinak by tam soupnul spravnou hodnotu rovnou a drzel ji tam celou dobu), takze to taky dela metodou pokus-omyl (ci spise metodou postupne strefovaci) a tudiz s podivnostma mechaniky tak nejak pocita (pokud nejsou prilis divoke) a zahrnuje je do tech vypoctu prave tim, ze zada pozadavek a pak meri vysledek a podle toho pak ten pozadavek upravi (nevi, co je spravne, tak to zkousi, dokud se tam nedoladi a v tu chvili tam dava prave to, co mechanika potrebuje, at uz je to cokoloi). A kdyz se mu situace zmeni (dostane jine zadani, nebo treba robot najde kopec), tak hleda postupnym priblizovanim zase novou spravnou hodnotu. Stejne jako kdyz ridite auto, tak nepocitate, kam ma byt seslapnuty plyn presne, ale pridavate, dokud nejedete dost rychle a kdyz je to moc, tak uberete. Atu uz tam je jaky chce motor a jakakoliv prevodovka a libovolny kopec.

daton
Příspěvky: 434
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton » 24 bře 2016, 22:31

Rozumím, a budete tedy vše programovat sám (myslím PId regulátor) nebo budete využívat nějakou knihovnu s PID?
A ještě další praktický dotaz když to naprogramujete v IDE jak to testovat? Přemýšlel jsem o tom ale žádný simulátor jsem nenašel. Nejsem si ale jist zda je jediné řešení vždy změnit konstanty, a hodit program do arduina a z výsledků chování mechaniky pak zkusit opět pozměnit hodnoty konstant a znovu naprogramovat- to ten program budu muset asi nahrávat velmi - častokrát.
Je to skutečně jediná cesta jak se to dělá?

A ještě jedna otázka, vím že se stále vracím k té integrační části ale stále mi vrtá hlavou kdy vymazat nebo jak pracovat s velmi vysokou hodnotou součtů odchylek, protože když to přeteče pak už není cesty zpět alespoň dle toho základního vzorce a mít tam jen maximální hodnotu po celou funkci je jistě špatné. Proto si myslím že v určité době by se součty měly umazat nebo alespoň umět odečítat aby tato část PID byla stále funkční a ne jen saturovaná.

Uživatelský avatar
gilhad
Příspěvky: 157
Registrován: 29 kvě 2015, 00:36

Re: PID regulátor

Příspěvek od gilhad » 24 bře 2016, 23:23

Ja to pochopil tak, ze ta integracni cast ma mit tak velkou konstantu (a hlavne s takovym znaminkem) u sebe, aby ten robot jejim vlivem "osciloval" okolo optimalni hodnoty a pobyt "nad" a "pod" se v souctu poodcitaly. Jakoze kolik stravi nad, tolik by mel stravit i pod a naopak. (nebo vlevo/vravo a tak)

Protoze ta chyba muze byt jak kladna, tak i zaporna. Takze dokud je chyba kladna, tak se mi ta suma zvysuje a ridici hodnota snizuje. Jakmile zacne byt chyba zaporna, tak se soucet zacne snizovat (ale protoze je porad jeste kladny, tak integracni clen to porad snizuje, zatimco primy clen to zvysuje a tak se navzajem korigujou) a az bude soucet na nule, tak integracni clen zacne ridici hodnotu zvysovat.

Takze primy clen to porad tlaci ke spravne hodnote, integracni se snazi, aby odchylky na obe strany byly asi tak stejne (a tudiz jsme porad neujizdeli jednim smerem) a derivacni pusobi jako tlumic, cim vic se ridici hodnota meni, tim vic je derivacni clen proti, takze ridici hodnota ma tendenci byt "lina" a nekmitat ani moc rychle a v dusledku toho ani nekmitat moc, protoze je vic kroku okolo nuly, kdy se ty druhe dva cleny maji sanci uklidnit.

AlesH
Příspěvky: 322
Registrován: 25 úno 2013, 09:18

Re: PID regulátor

Příspěvek od AlesH » 24 bře 2016, 23:45

Osobně jsem jeden z nejlepších popisů PID regulátoru našel na https://robotika.cz/guide/control/cs . Mimo jiné je tam uveden i základní "program" pro PID regulátor (jeden krok) takto:

Kód: Vybrat vše

e = req_speed - cur_speed
sum_e += e
pulse_width = P * e + I * sum_e - D * (cur_speed - last_speed)
last_speed = cur_speed
Aby ta integrační část (sum_e) "nepřetekla", dá se to ošetřit např. nějakou podmínkou typu "sčítej odchylky jen když to má smysl":

Kód: Vybrat vše

if (pulse_width>min && pulse_width<max) sum_e += e
Jak už psal gilhad, tak jediným úkolem PID regulátoru je udržovat "cur_speed" (měřenou rychlost) co nejblíž k "req_speed" (požadovaná rychlost) pomocí "pulse_width" (to je to, co je "spojené s motorem"). Vlastní řízení (např. směru) robotu musí zajišťovat "něco jiného než PID regulátor" tím, že nastavuje "req_speed".
Nastavování hodnot P, I a D se dá dělat přímo v IDE (natvrdo v programu) a po pár pokusech to může dát vyhovující funkčnost (obvykle to tak opravdu dělám), ale dá se to udělat i tak, že v programu bude možnost měnit (nastavovat) ty "konstanty" přímo za chodu (při běhu algoritmu) pomocí nějakých nastavovacích tlačítek (na robotu) nebo třeba pomocí příkazů ze sériové linky. Nastavené hodnoty se mohou průběžně ukládat do trvalé FLASH nebo EEPROM (která bývá součástí skoro každého procesoru) a tak si robot bude pamatovat poslední nastavené hodnoty i po vypnutí a zapnutí.
Viděl jsem ale i zmínky o programech, které se pokouší nastavit vhodné P, I a D hodnoty zcela automaticky podle autonomní analýzy chování celého systému. To jsem ale prakticky nikdy nezkoušel.

daton
Příspěvky: 434
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton » 26 bře 2016, 10:12

Zdravím
Tak mi to přecce nedalo abych si nevyzkoušel jak to vlastně v tom regulátoru funguje matematicky a trochu jsem modeloval v excelu. Výsledek mého snažení je zde
http://uloz.to/xWyh7SVb/pokus-o-simulaci-pid-xlsx heslo: robodoupe

Je to jen pokus o představu jak to tam vlastně chodí a jak asi nastřelit první hodnoty konstant. Zkuste na to mrknout a zkusit mi sem dát připomínky co a jak.

jova
Příspěvky: 267
Registrován: 16 pro 2013, 11:40

Re: PID regulátor

Příspěvek od jova » 26 bře 2016, 11:38

Nedalo by se to uložit jako XLS ve starší verzi?

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host