Mobot#

Článek od Cosku Acay, Edwin Cho, Kenneth Li a Nishant Pol. PDF.

Popis projektu#

V soutěži Mobot na Carnegie Mellon musí roboti projet sérií 14 branek umístěných podél 255 stop dlouhé zakřivené bílé čáry na venkovním chodníku. Trať zahrnuje dvě strmé rampy a oblast rozhodovacího bodu, kde robot musí zvolit správnou cestu, aby projel 14 brankami v sériovém pořadí. Protože je čára venku a vystavena pittsburskému počasí, musí robot fungovat v různých podmínkách. Letos bylo v den soutěže deštivo a větrno. Více informací najdete na http://www.cs.cmu.edu/mobot/mobot.html

Mobot Mobot

Mobot (full size)Mobot (full size)

Řešení s CMUcam4#

Rozhodli jsme se řešit úlohu sledování čáry pomocí CMUcam4, protože vyžadovala minimální hardware a měla rozhraní dobře uzpůsobené pro sledování čáry.

Mobot hardware Mobot hardware (full size)

CMUcam4 zachytává obraz čáry rychlostí 30 snímků za sekundu a přivádí obraz sledování barvy do Arduino Mega přes jednu ze tří sériových linek. Arduino Mega poté tento obraz zpracuje (viz Popis softwaru níže) a přes další sériovou linku dodává PID regulátoru příkazy rychlosti motoru a zatáčení. PID regulátor zase poskytuje Arduino Mega počty enkodéru pro pravé i levé kolo, což nám umožňuje sledovat naši polohu a směr vzhledem k brance 0.

PID regulátor (MD-25) vyrábí Robot-Electronics ve Velké Británii. Pohání dva převodové stejnosměrné komutátorové motory s magnetickými enkodéry na hřídeli motoru. LCD obrazovka je pro účely ladění. Měli jsme dvě napájecí větve, 12V pro motory a 5V pro logiku, sdílející stejnou zem a obě napájené z jediné dobíjecí baterie 12V.

Původně jsme plánovali vyrobit prototyp z dřevěného základu, abychom se rychle dostali do fáze programování, a poté pracovat na rychlejším a spolehlivějším základu, jako je RC auto. Zjistili jsme však, že prototyp byl velmi spolehlivý a snadno se s ním pracovalo, takže jsme jej ponechali pro finální návrh. Vodotěsnost karoserie sestávala z vrstvy celofánového obalu pod vrstvou balicí pásky. Déšť však prosakoval balicí páskou, ale naštěstí ne celofánovým obalem. Kamera byla zakryta čtvercem plastu ze sáčku Ziploc, protože jsme zjistili, že tento „filtr“ zlepšil schopnost kamery ignorovat malé kousky čáry, které kameře připadaly jako podkladový beton.

Popis algoritmu#

Pozadí#

Používáme CMUcam4 v režimu barevného sledování s povoleným režimem YUV, který nám poskytuje binární obrazovou reprezentaci čáry. Software kamery odfiltruje vše, co není bílé (tj. pozadí), a umístí „zapnutý“ pixel tam, kde je čára (kde je bílá). Používáme režim YUV, aby bylo barevné sledování necitlivé na intenzitu světla, takže náš robot může fungovat za širokého spektra podmínek včetně vnitřních i venkovních.

Sledování čáry#

CMUcam4 poskytuje našemu čipu Arduino binární obraz 80 na 60. Vzorkujeme 10 rovnoměrně rozmístěných řádků pixelů z obrazu a vypočítáme těžiště „zapnutých“ pixelů (viz zde: https://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points). Poté předpokládáme, že čára leží na těžišti. Provedením tohoto na 10 různých řádcích v obraze získáme dobrou aproximaci čáry spojením bodů. Tato data pak můžeme použít tak, že zjistíme, jak daleko je každý bod na čáře od svislé čáry, která leží ve středu obrazu, abychom získali hodnotu představující, jak je čára zakřivená. To lze chápat jako něco podobného hledání plochy mezi tečnou a křivkou a použití této plochy k určení, jak moc potřebujeme zatočit. Znaménko určuje, zda je zatáčka doleva nebo doprava, zatímco velikost určuje, jak moc potřebujeme zatočit, abychom sledovali čáru. Jak byste očekávali, pokud jsme naměřili nulovou plochu, pak je čára přímo před robotem a je to přímka. Pokud je velikost plochy velká, pak robot potřebuje zatočit, aby se pokusil minimalizovat velikost této plochy.

Rozhodovací body#

Abychom určili, zda je robot v rozhodovacím bodě, vezmeme data, která kamera shromáždí při sledování čáry, a zkontrolujeme, kolik průměrných středových bodů se objeví v černém prostoru. To funguje na základě předpokladu, že průměrný bod mezi dvěma čárami by neměl ležet na žádné z čar, pokud nejsou obě čáry stejnou čárou. Pokud robot detekuje více průměrných bodů v černém prostoru, může usoudit, že zde musí být dvě čáry. Poté zvolí vhodnou zatáčku a nakloní své zatáčení k tomuto směru, dokud neuvidí pouze jednu čáru.

Přejděte prosím na https://github.com/cacay/Mobot, abyste viděli zjednodušenou verzi našeho kódu, nebo sem pro místní kopii.