Analogová logika 3

… aneb kde je čára ?

Přestavte si, že máte robota pro sledování čáry. A protože nejste žádní troškaři, máte vpředu rovnou osm čidel čáry. Čidlo čáry se většinou zapojuje přes komparátor přímo na pin mikrokontroléru, takže dává jenom jednoduchoučkou informaci černá/bílá, ale to jsem v prvním díle o analogové logice nedoporučoval, protože dopadnete jako ten chudák mladík na Mini-Sumu, co s námi nemohl soutěžit, protože mu nevyhovovala „černá“ na naší aréně.

PetrK_SledovacCidla

Takže – máte robota ten má vpředu 8 odrazových čidel typu CNY70 a všech 8 je zapojeno na AD převodník. Představme si, že máme udělanou analogovou elektroniku tak dobře, že bílá je hodnota AD převoníku 255 a černá je 0. Přestavte si, že jedete a potřebujete zjistit, pod kterým čidlem je čára. Zase vás budu zrazovat od „zdánlivě jednoduchéhoIF Čidlo1 THEN…, IF Čidlo2 THEN… atd, protože budu klást klasické sugestivní otázky – co když dráha není dokonale bílá a páska dokonale černá, nebo je dokonce dráha lehce flekatá? Nebylo by lepší použít algoritmus, který vám rovnou vysype číslo čidla pod kterým je čára – a pokud je trošku pod třetím a trošku pod čtvrtým tak dokonce vysype třeba „3,6“ ?

Pokud jste minule pochopili jak se to dělá, bude to úplně jednoduché.

Čidlo 1 2 3 4 5 6 7 8
Číslo 21 22 23 24 25 26 27 28
Signál 230 220 240 250 100 30 200 230
Obrácený signál 25 35 15 5 155 225 55 25
O_Signál * Číslo 525 770 345 120 3875 5850 1485 700
Součet Násobků 13670
Součet O_Signálů 540
Poloha čáry 5,3

Máme čidla číslo 1-8 – tím pádem číslo 8 čidla je 8x větší než číslo prvního – to se nám z jistých důvodů nehodí, tak si čidla očíslujeme 21 až 28 – tam už rozdíl není tak veliký (to je druhý řádek). Pak máme ten problém že podložka je bílá a čára černá – my ale pro náš algoritmus potřebujeme aby čára dávala vyšší signál než pozadí – tak uděláme jednoduchou operaci typu

Obrácený signál = 255 – Signál.

Pak už jenom pořadové číslo čidla násobíme jeho hodnotou a výsledek si poznamenáme někam do paměti. (to je 5. řádek tabulky). Pak spočteme dva součty – součet násobků a součet obrácených hodnot (oba součty tam vidíte) podělíme-li oba součty vyjde nám 25,3 což je „těžiště signálu“ neboli poloha čáry, od té musíme odečíst 20, které jsme na počátku připočetli k číslu čidla. Pokud se vám zdá že hodnota čidla č. 6 je „více černá“ než hodnota čidla č. 5 a proto by výsledek měl být spíše 5,7 než 5,3 – tak je to proto, že jsem podložku udělal uměle „flekatou“ a hodnoty čidel 1-3 udělal schválně nízké, abyste viděli, že tenhle agoritmus je docela robustní a má „autokalibraci“ tedy co je „bílá“ a co je „černá“ rozhoduje podle okamžitých hodnot z čidel …

Jako vždy to není úplně snadné – co když žádné čidlo nevidí čáru ?

V tom případě se bude hodnota polohy „čáry“ divoce měnit podle náhodných šumů v čidlech, proto je vhodné brát jako platnou hodnotu polohy čáry teprve tu hodnotu, která má dosti vysoký parametr označený v tabulce „Součet O_signálů“ – jak vysoký zjistíte pokusem, kdy robota dáte na čáru a pak na úplně bílou podložku – a uvidíte rozdíl – pro naše podmínky by to mělo být alespoň 200.

Pro zkušenější mezi vámi – celá matematika v tomto i předchozím díle je o počítání vážených průměrů a těžišť vektorů – což zní strašně, ale třeba naprosto stejný algoritmus, který jsme si dneska popsali, jen doplněný ještě o druhou osu, se používá pro hledání významných útvarů při analýze obrazu. Jistě pochopíte, že pro 2 megapixelový obrázek musí mít roboti něco jiného než 2 mega IF-THEN ;-)))