14. května 2015 v 5:32 | Petr
|
Robotický den se nám zase blíží. Když jsem vyplňoval formuláře pro organizátory (opět mě tam uvidíte) vzpoměl jsem si, že jsem dlouho nepsal nic o robotech - a taky jsem v robotice dlouho nic neudělal, pokud nepočítám robota řízeného televizním dálkovým ovladačem, kterým jsem přiváděl k šílenství našeho psa - tak dlouho až se psisko naštvalo a podniklo na robota lov - takže teď stojí na polici a čeká až budu mít čas znovu vyrobit praskou desku se senzory.
Nicméně při vyplňování formulářů jsem si vzpoměl na soutěž
Robotour asi tak před 3 lety kdy jsem slyšel tuto historku : "
upadl nám drátek k napájení motorů, robot mrtvolně stál, pak jsme drátek přidělali a robot vyrazil vpřed nejvyšší rychlostí a málem přejel rodinku s děckem v kočáře"....
Takže jsem robotikům - kteří mimochodem byli velice zkušení marfyzáci - jako amatér - začal okamžitě doporučovat
ANTI - WIND - UP proceduru, která - pokud by ji měli - změnila by zběsilý útěk před rozlíceným robotem jenom na relativně neškodné škubnutí (robota). Jelikož mnozí moji čtenářové teď přemýšlejí nad softwarem pro robotický den - pojďmě srozumitelně probrat
Anti WIND-UP nechanismus, abyste si jej mohli do robotu naprogramovat.
Nejprve tedy k čemu došlo u kolegů: Robot jak víte má software, který plánuje trasu - plánování má různé levely - od orientace v mapě okolí po propočet trasy až k určení jak rychle se bude které kolečko otáčet. Představte si, že plánování trasy určí že se pojede relativně neškodnou rychlostí 0,5 metrů / sec vpřed. Jenomže dráty od baterie k motorům upadnou. Takže procesor dostává informaci "kolik se skutečně ujelo" a podle toho nepatrně koritguje další postup :
První sekunda - požadovaná rychlost 0,5 metrů - ujetá vzdálenost 0 - chyba 0,5 metrů
Druhá sekunda - požadovaná rychlost 0,75 metrů - ujetá vzdálenost 0 - chyba 1 metr.
Pak robotici znervózní a začnou se 5 minut dohadovat "co se děje" - mezitím plánovač trasy dospěje do stavu ve stylu :
299 sekunda - požadovaná ryclost 99.9 metrů - ujetá vzdálenost 0 - chyba 149,5 metrů.....
Pak na to někdo přijde a upadlé dráty připojí - procesor ví, že je oproti plánu o 150 metrů pozadu - tak vyrazí maxímální rychlostí aby zpoždění dohonil a přejede maminu i s kočárem.
Takhle to je pokud se plánuje na "
vysoké úrovni". V robotech to je ale většinou mnohem jednodušší ( avšak se stejnými výsledky ). Rychlost koleček hlídá
PID algoritmus - tedy
Proporcionálně Integračně Derivační regulátor, o kterém jsme už psali
zde a
zde. Vykradu sám sebe a uvedu odstaveček z prvního článku - jak zhruba funguje regulace otáček (rychlosti) PID algoritmem. Tedy softwaru robota se pravidelně 20 - 100x za vteřinu spouští následující 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.
Minule jsme brali že "plánovač trasy" eviduje chybu rychlosti - tady se chyba rychlosti akumuluje v proměnné "Suma _chyb" - pokud motory nejednou několik minut - tato proměnná dosáhne obrovské hodnoty - a robot pak prudce vyrazí "aby chybu umořil".
Existuje dokonce i horší varianta - že "Suma_chyb" přeteče z kladných do záporných hodnot a po přidělání drátku - robot vyrazí přesně opačným směrem než by všíchni odčekávali ....
Ergo "dělejte to jako já" - pokud Proud_do_ motoru - dosáhne 100% maxima - prostě přestaňte k "Sumě_chyb" přičítat další chyby. V takovém případě naopak procesor ve kterém běží PID algoritmus by měl "poslat nahoru" chybové hlášení, že motor (motory) mají nějaký problém, protože motory mají být navrženy tak aby dlouhodobý průměr proudu, který jimi teče dosahoval 50% maximálního proudu zastaveného motoru (v takovém režimu má kartáčový elektromotor nejvyšší účinnost).
Pokud přece jenom jste "opatrní inženýři" nemusíte přestat SUMU_CHYB akutalizovat hned když poprvé dosáhne požadovaný proud motory 100% - můžete počkat pár cyklů - rozhodně však ne déle než 1 vteřinu - protoře pokud ani po nastavení 100% proudu se robot nerozjede rychlosti, kterou plánovač trasy požaduje - nemusíte být inženýr, aby bylo jasné, že někde je něco špatně a další přičítání k Sumě_chyb (tedy další zvětšování integračního členu) povede k úrazu člověka spíše, než k poklidné jízdě po naplánované trase....
Tedy čiste lingvisticky "Anti Wind up" - je nědo jako "procedura proti přetažení" - pokud ji máte, drátek vám upadne, a pak jej (po několika minutách) přiděláte zpátky - robot nemá v PID algoritmu nasčítáno "skoro nekonečno", ale jenom něco málo za pár cyklů PID regulace, než dosáhl požadavku na maximální proud - a to je právě ta hodnota, která naprosto stačí na kvalitní PID regulaci otáček, ale způsobí jen to (snad neškodné) škubnutí.
OK zbývá už jenom tradiční rada pro blondýny - k sehnání manžela na robotickém dni potřebujete - krátkou sukni vysoké podpatky a robota bez Anti Wind Up procedury - pak musíte celou situaci nahrát tak, že robot do vás drcne - vám se "
podlomí podpatky" a plácnete sebou tak "
nápadně nenápadně", že díky krátké sukní ukážete "
vybranému adeptovi" co vám příroda nadělila - a je ruka v rukávě. Podotýkám jenom, že robotici jsou lidi vzdělaní, slušní a často i bohatí - nebo alespoň s potenciálem být bohatí -
paní Zuckerbergová (nebo
paní Kubáčová) by mohly vyprávět....
malinko bych ten poslední odstavec poupravil - robotici jsou lidé s NEREALIZOVANÝM potenciálem být bohatí ;)