czech english

RoboKrysa

aneb Robůtek II. ještě žije

Před dvěma lety se na Robotice objevil můj článek o vývoji Robůtka II s příslibem „open-end” seriálu o jeho vývoji. Robůtek II svůj další vývoj měl, seriál bohužel dva roky ne. O to více času mi ale zbylo na hraní. Zajímá vás jak to s Robůtkem II tedy nakonec dopadlo?

Historické souvislosti

Před dvěma lety se na Robotice objevil můj článek o vývoji Robůtka II s příslibem „open-end” seriálu o jeho vývoji. Robůtek II svůj další vývoj měl, seriál bohužel dva roky ne. O to více času mi ale zbylo na hraní. Zajímá vás jak to s Robůtkem II tedy nakonec dopadlo? Na Robotice se vlastně už něco z dalšího vývoje Robůtka II objevilo. Bylo to v robotickém deníku týmu Short Circuits Prague ze soutěže Eurobot 2004. Vystupoval tam ale pod přezdívkou „RoboKrysa”. Protože se toto označení vžilo, tak budu Robůtkovi říkat takto nadále i v tomto článku (což s sebou nese i změnu do příjemnějšího – ženského – rodu). K této přezdívce RoboKrysa přišla díky svému současnému zaměstnání. Pracuje totiž už druhý rok ve Fyziologickém ústavu Akademie věd jako pomocný robot při pokusech s učením laboratorních potkanů.
Při jednom z pokusů představuje RoboKrysa predátora umístěného v kruhové aréně o průměru 1 m společně s potkanem, jehož úkolem je se predátorovi vyhýbat v bezpečné vzdálenosti. Robokrysa v tomto pokusu má velice jednoduchou strategii - jede rovně dokud nenarazí aktivním nárazníkem do zdi, pak couvne, otočí se na místě o náhodný úhel a opět jede vpřed. Na nasazení RoboKrysy v tomto úkolu není ani tak zajímavý úkol samotný, jako to, za jakých podmínek probíhá - RoboKrysa pracuje ve znečistěném prostředí (potkani si ani před robotem ženského rodu servítky neberou), navíc pracuje úplně bez odborné technické obsluhy. Jeho spolehlivost musí být tedy velice vysoká. Po několika úpravách od původního návrhu se RoboKrysa může pochlubit tím, že za půl druhého roku najezdila podle údajů z FgU AV přes 7 km s asi třemi mými servisními zásahy. Na Eurobotovi 2004 byla mírně upravená RoboKrysa sekundárním robotem našeho týmu, jehož hlavní funkcí bylo být pohyblivou překážkou pro cizí roboty, ve které také obstála díky své pevné konstrukci.

Konstrukce

Hlavním konstrukčním materiálem RoboKrysy jsou hliníkové pásky široké 16 a tlusté 3 mm. Podle mé zkušenosti se velice pohodlně řežou, vrtají i ohýbají. Přesto je konstrukce z nich pro takhle malého robota velice pevná. V původním návrhu RoboKrysy jsem spojoval jednotlivé díly z těchto pásků šroubky M3, které držely v závitech udělaných přímo v hliníku. Na hodně namáhaných místech jsem ale musel tyto závity nahradit matkami (velice se osvědčily ty s plastovou vložkou, co se nepovolují), protože závity v hliníku nebyly příliš pevné.

Pohon

V této součásti prošla RoboKrysa největší změnou. Původně ji poháněly stejnosměrné motorky z Merkuru — stejné jako Robůtka I ze článku Jak programátor k robotovi přišel. Pro pohon robota velikosti RoboKrysy zcela postačovaly, navíc jsem mohl použít už ověřenou konfiguraci elektroniky z Robůtka I – h-bridge L293D pro ovládání motorů. Pak ale přišla nabídka z FgU AV, kde jeden z požadavků byl provoz v různych rychlostech, kde nejpomalejší požadovaná rychlost byla pro tyto motůrky za použití PWM regulace rychlosti nedosažitelná. Rozhodl jsem se tedy použít motory jiné. Nejdostupnější a nejlevnější motor s převodovkou, která byla třeba ke zvládnutí velice nízkých rychlostí, bylo pro mě klasické modelářské servo. Odbrousil jsem zábranu proti protáčení z posledního ozubeného kolečka serva, potenciometr ze serva jsem přemístil z původního umístění tak, aby se neprotáčel, když se točí ozubená kola převodovky. Potenciometr používá elektronika serva k tomu, aby poznala, že servo dosáhlo pozice, která se jí pošle. Přemístěním potenciometru se dosáhlo toho, že otočení serva nemá vliv na otočení potenciometru. Servo tedy fakticky nikdy nedosáhne pozice, která se mu poslala v podobě signálu pro servo, protože se jeho aktuální pozice z pohledu elektroniky serva nemění. Z tohoto důvodu se servo točí pořád.
Další vlastností serva je to, že k dosažení pozice, která je vzdálenější od aktuální pozice, používá vyšší rychlost otáčení ve směru, ve kterém se požadovaná pozice nachází. Aktuální pozice odpovídá natočení potenciometru. Nastavíme-li tedy na potenciometru „střed”, pomocí klasického servo-signálu můžeme bez jakékoliv další elektroniky dosáhnout kontinuálního otáčení serva oběma směry a různými rychlostmi. A to tak, že (pohybují-li se hodnoty posílané na servo od 0 do 256) pro hodnoty menší než 128 se bude servo točit jedním směrem a pro hodnoty větší než 128 opačným směrem, přičemž absolutní hodnota rozdílu hodnoty od 128 bude ovlivňovat rychlost otáčení. Je-li na servu hodnota 128, servo stojí. Střed se nastaví tak, že na servo posíláme hodnotu 128 a pak otáčíme potenciometrem serva tak, aby se motor zastavil. Pak potenciomentr v této pozici zafixujeme a zabudujeme do serva. Tento střed ale bohužel mírně kolísá podle aktuálního stavu baterií, proto je lepší zastavovat servo tak, že na něj nebudeme posílat žádný signál.

Deska

RoboKrysa je řízena jednočipem od firmy Atmel AVR AT90S4433. Na desce je konektor pro sériovou komunikaci UART, programovací konektor ISP, konektory pro digitální vstupy a výstupy a analogové vstupy, konektory pro připojení serv a enkodérů. Deska obsahuje také komparátor LM393 s trimry pro digitalizaci analogového signálu z enkodérů.

Enkodéry

Tato součást prošla u RoboKrysy také vývojem. Původně jsem používal ověřenou konstrukci, kdy IR-LED s fototranzistorem (CNY70) kouká na kolečko s černobílými paprsky, které bylo přilepené přímo na kole RoboKrysy. Toto řešení fungovalo uspokojivě. Problém byl ale v tom, že papírové kolečko ve znečistěném prostředí rychle ztrácelo své odrazové vlastnosti, a také v tom, že pro zaznamenávání průběhu testů s potkany se používá IR kamera, kterou tyto zdroje světla rušily. Navíc byla tato konstrukce dost citlivá na přesnost umístění „cnyček” nad paprsky a čas od času do robota někdo neodborně sáhl a toto umístění změnil. Proto jsem začal dělat pokusy z jiným, kompaktnějším, řešením enkodérů. Nakonec mi z toho vyšlo umístění enkodéru přímo do serva, které vám teď popíši.
Jde o to, že umístíme do serva CNY70 a jako „paprskové” kolo použijeme jedno z ozubených koleček serva. Celý enkodér je pak umístěn uvnitř serva, takže je prakticky nerozbitný, nijak neovlivňuje okolí a okolí neovlivňuje jeho… Využil jsem toho, že když se potenciometr serva přemístí ze své původní pozice do prostoru, kde obvykle bývá pěnová distanční hmota (případně lze i zkrátit osičku potenciometru, protože stejně není potřeba tak dlouhá), vejde se vedle do tohoto prostoru ještě fotozávora CNY70 i s potřebnými odpory. Do prvního ozubeného kolečka za motorem jsem vyvrtal díru, skrz kterou buď cnyčko svítí nebo ne, podle toho, jak je kolečko natočené. Spodní část kolečka jsem natřel bílou barvou, aby se zvýšil rozdíl mezi dírou a "nedírou". Cnyčko i s odpory jsem kvůli kompaktnosti zalil do hotglue a pomocí hotglue i přilepil na správné místo v servu, které jsem si v něm udělal vybroušením přepážek původně držících potenciometr. Je důležité, aby díra v servu byla alespoň tak velká, aby skrz ní byly vidět obě aktivní části cnyčka. Díra v kolečku musí být alespoň tak velká, aby jí prosvítila LED z cnyčka. Díky tomu, že jsem umístíl do serva i odpory pro CNY70 (pull-up odpor a odpor pro napájení fotoled), lze cnyčko napájet přímo z desky serva (stačí na ní někde najít +5V a GND) a výstup ze serva se tedy rozšírí pouze o jeden kablík, který vede analogový signál serva a dá se přímo připojit na analogový vstup jednočipu. Zapojení CNY70 je popsáno v článku Jak programátor k robotovi přišel.
Nevýhodou tohoto enkodéru je to, že z něj není poznat směr, kterým se kolečko otáčí. K tomu by byly potřeba cnyčka dvě, která se ale do serva už asi nevejdou. Tento problém ale zas není tak velký, protože typicky víme, na jakou stranu servem otáčíme a samovolný pohyb (tím, že do robota někdo strčí) není zas tak častý, protože servo se samo otáčí velice ztuha a má velkou sílu. Jen je potřeba dát při programování pozor na kmitání na hranách díry, protože by mohlo způsobit „virtuální” pohyb robota. Tím, že se jako enkodérové kolečko používá to nejrychlejší z ozubených, dostaneme na jednu otáčku hlavní osy serva asi 100 tiků.

Rádio

Dalším požadavkem na RoboKrysu, který v průběhu času vyvstal, byla kontrolovaná změna její rychlosti v průběhu dvacetiminutového testu. A to vše bezdrátově, protože by kabel v průběhu testu vadil. Jako nejlevnější řešení jsem našel jednosměrné rádiové moduly RTF-DATA-SAW a TX-SAW od firmy Aurel pro příjem resp. vysílání. Dají se koupit běžně v obchodě (např. GES za cca 400 Kč celkem). Pomocí relativně jednoduchého zapojení z datasheetů těchto modulů jsem vyrobil desky, z nichž ta vysílací obsahuje jednočip AT90S1200, ke kterému je připojen starý joystick, a přijímací je připojena přímo k jednočipu řídícímu RoboKrysu, který si sám pomocí jednoho timeru vzorkuje signál. Tyto moduly samy o sobě nedělají žádný protokol pro posílání dat. Fungují tak, že co se na jedné straně zapíše, to se na druhé objeví (na jednom pinu). Pomocí relativně jednoduchého přenosového protokolu se mi ale dařilo přenášet spolehlivě data v místnosti do vzdálenosti několika metrů (bez jakýchkoliv znalostí o konstrukci antény a sdělovací technice vůbec…).

Kolečko serva
Kolečko serva
Servo
Servo
Po modifikaci
Po modifikaci

Máte-li jakékoliv dotazy, připomínky, doplnění či poznámky, tak se nám prosím ozvěte pomocí standardního formuláře.