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…).
Pohled zezadu |
Pohled ze strany |
Pohled zepředu |
Pohled shora |
Opora |
Mode selector |
Vnitřek |
Pohled zespodu |
Původní enkodéry |
Kolečko serva |
Servo |
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.