czech english

Robotický deník

Eurobot 2004 z pohledu Short Circuits

Short Circuits Prague letos reprezentovali čtyři studenti MFF UK: Pavel Jiroutek, Jakub Lysák, Tomáš Hradecký a Pavel Černý. Zde si můžete přečíst jejich povídání na téma, jak to všechno bylo z jejich pohledu. Třeba Vás to bude inspirovat a příští rok se zúčastníte také…

Vývoj před soutěží

Plány
Tým ve Francii
Tým ve Francii

Pravidla soutěže Eurobot na rok 2004 byla zveřejněna v září 2003. Začátkem října jsme se s již sestaveným týmem rozhodli, že právě Eurobot 2004 bude tématem našeho softwarového projektu (předmět PGR023) a náplní našeho volného času po příští půlrok. K tomuto rozhodnutí nás vedla zajímavost a šíře tématu, nutnost co nejdříve zadat projekt, zkušenost části týmu s robotikou i Eurobotem, přesně definované téma i termíny, které slibovaly větší motivaci pro včasné dokončení projektu, které bylo jednou z našich priorit.
Hned v začátku jsme práci rozdělili na dva hlavní proudy - softwarový a hardwarový. Nerobotická část týmu začala pracovat na simulátoru, který jsme kromě samotného Eurobota přidali do zadání našeho školního projektu a který jsme zamýšleli pro pozdější usnadnění psaní softwaru pro robota všemi členy týmu, i když bude k dispozici jediný hardware robota k vyzkoušení.
Druhá, robotická, část týmu začala pracovat na vymýšlení hardwaru robota, který by uspokojivě řešil soutěžní úkol a který měl být hotov co nejdříve, aby ho bylo možné přidat do simulátoru a strategie už ladit pohodlně „virtuálně”. Je nutno předeslat, že u obou vývojových částí byl počáteční odhad pracnosti natolik špatný, že se obě větve podařilo spojit do jedné až opravdu na poslední chvíli. Stejně tak je ale nutno podotknout, že rezervy, které jsme si nechali na všechny části vývoje byly takové, že byl projekt připraven ke konfrontaci se soupeři ve všech termínech, kdy se to od něj očekávalo – Verze 0, české kolo Eurobota, mezinárodní kolo a konečně odevzdání projektu.

HW

Od začátku jsme byli rozhodnuti použít jako tělo hlavního robota existující trojúhelníkovou platformu, se kterou se tým Short Circuits Prague zúčastnil i předchozích soutěží. To s sebou neslo zrychlení vývoje HW samotného robota, ale také omezení plynoucí s nemožnosti navrhnout podstavu robota tak, aby se hodila právě pro zadaný úkol. Samotný trojúhelník byl, co se týče obvodu, natolik velký, že u jakéhokoliv zařízení pro sbírání míčků jsme museli bojovat s každým centimetrem, abychom se vešli do povolených rozměrů. Iterací při vývoji nástavby pro aktuální požadavky Eurobota bylo mnoho. O některých jsme uvažovali jen na papíře, jiné jsme v podobě prototypu i zrealizovali. Základní ideou bylo nevzdávat se možnosti házet míčky do branky, ale v případě, že z jakéhokoliv důvodu toto řešení při soutěži nebudeme moci použít, mít stále možnost rychlé úpravy HW do verze házející míčky pouze do lagunky…

Verze nabíracího mechanismu

Katapult

Sestrojili jsme funkční prototyp. Výhodou bylo rychlé střílení po relativně konstantní křivce a nezáleželo na tom, jak míček na lžíci katapultu položíme. Problémy byly s opakovaným natahováním katapultu, protože guma, která udělovala katapultu zrychlení, byla příliš silná pro natahování jednoduchým motůrkem nebo servem. Řešili jsme to nejdříve závitovou tyčí, která poskytovala dostatečný převodový poměr, ale toto řešení jsme zavrhli, protože v přesnosti, kterou jsme byli schopni v našich podmínkách dosáhnout, bylo příliš nespolehlivé. Dalším návrhem bylo přidání převodovky, kterou bylo ale potřeba při odpalu v okamžiku odpojit. I toto řešení fungovalo, ale kladlo příliš velké nároky na výdrž převodovky, a proto jsme ho zavrhli. Navíc katapult sám neřešil nabírání míčků.

Ruka

Uvažovali jsme i o dvouprsté ruce, která by uměla míček z daného místa v robotovi vzít a přemístit. Tím místem měl být střed radlice tvaru „V”, kde by se míčky při jízdě shlukovaly. Rukou sice nešlo přímo skórovat do vysoké branky (branka byla výš, než nejvyšší povolené místo robota), ale zato pomocí ní bylo možno dávat míčky do lagunky nebo na jiné zařízení (prak, katapult), které by je do branky střílelo. Navíc byl-li jeden míček už v tomto zařízení, mohla ruka fungovat i jako zásobník na další míček. I toto řešení jsme částečně realizovali, ale ve finální verzi se neobjevilo. Důvodem byla malá odolnost ruky proti kolizím s cizím robotem, ke kterým dochází překvapivě často a jsou pro nerobustního robota často smrtelné, vysoké nároky na přesnost a kalibraci a také velké množství senzorů a serv, kterých jsme se snažili používat co nejméně to šlo, abychom neměli problémy s napájením a hlavně s uřízením velkého množství elektroniky, se kterou nemáme příliš zkušeností.

Radlice

Pro „Verzi 0”, tedy verzi, která by se uměla s nejjednodušším možným hardwarem homologovat, tedy umístit jeden míček do soupeřovy lagunky, jsme uvažovali jednoduchou radlici, která by míček přes okraj lagunky přetlačila. Ukázalo se ale, že jednoduchá radlice pro toto nestačí, neboť okraj je vyšší než půlka míčku, a bylo by potřeba tvar radlice vymyslet složitější, nebo radlici udělat zvedací. Každopádně jsme se k této variantě už nevrátili.

Vrtule, vysavač

Zajímavé pokusy probíhaly i s vrtulí z lehkého modelu letadla, která měla sloužit k odfoukávání míčků do soupeřovy lagunky. Řešení celkem fungovalo, ale z doplnění pravidel vyplynulo, že i zde platí omezení na počet míčků, které může robot současně ovládat. Tedy robot by vrtulí nesměl ovlivňovat více než tři míčky, jinak by se vystavoval riziku trestných bodů, a to jsme nemohli zaručit. Pokus s chytáním míčků pomocí jednoduchého vysavače skončil brzy s konstatováním, že tudy cesta nevede, neboť nejsme s našimi schopnosti zařídit dostatečný výkon vysavače a navrhnout ideální tvar nasávací hubice.

Rotující kolečko

Nejjednodušším řešením pro urychlení míčku tak, aby letěl vzduchem se ukázalo být rychle rotující kolečko. Míček se po podložce poslal pod toto kolečko a to, než stačilo zpomalit, mu udělilo dostatečnou rychlost, aby letěl vzduchem po potřebné dráze. Toto řešení je ideální pro kulaté míčky. My jsme ho museli mírně modifikovat kvůli šišatosti našich míčků s tím, že jsme nevěděli, jak natočený se do zařízení míček dostane. Podložku, po které se míček pod kolečko posílal tvořily kuličky navlečené na několik osiček tak, aby po nich míček lehce klouzal, i když se dostal pod kolečko ve směru, ve kterém se nemohl utáčet. Tento vystřelovací mechanismus jsme nakonec ale také nepoužili, protože na jeho integraci nezbyl čas a na jeho zapojení do robota bylo potřeba kvůli dodržení předepsaných rozměrů příliš mnoho změn, které jsme si kvůli nedostatku času na důkladné otestování nemohli dovolit.

Kolektor
Detail kolektoru
Detail kolektoru

Konečným řešením pro nabírání míčků byl rotující válec s radlicí tvaru „V”, která nasměrovala míček pod válec a ten ho přitlačil mezi sebe a pružnou stěnu, po které ho pak svou rotací zvedal. Asi v polovině dráhy míčku po zadní stěně byla umístěna infračervená fotozávora, kterou nabíraný míček přerušil a robot tak poznal, že má míček v sobě. Tam si ho držel, dokud nedorazil k lagunce, kde začal opět válcem otáčet, aby míček ze sebe dostal. Válec byl poháněn námi speciálně opraveným servem. První úprava umožňovala servu kontinuální rotační pohyb (servo je speciální motor, kterému se pošle informace o tom, do jaké pozice se má natočit a ono to udělá a danou pozici pak silou udržuje; tyto pozice jsou u většiny serv v rozsahu 180 stupňů).
Druhá úprava spočívá v zabudování jednoduchého enkodéru dovnitř serva (několik součástek umožňujících detekci otáčení osy motoru), takže jsme byli schopní detekovat, že se míček v naběráku zasekl (říkáme servu, aby se otáčelo, ale z enkodéru víme, že se neotáčí) a příslušně na to reagovat. Celé nabírací zařízení prošlo během vývoje jen drobnými úpravami. Rozšířili jsme válec, aby bylo možné nabírat míčky, které se do kolektoru dostanou z neideálního směru, kolečka válce jsme umístili do gumové duše, aby se zvýšila přilnavost na míčky (tuto vlastnost jsme pak ještě zlepšili omotáním válce oboustrannou lepící páskou). Válec byl původně konstruován tak, aby míčky pouze zvedal ze země a případně uchovával. Ke skórování mělo sloužit další zařízení, které mělo být předsunuto před válec a ten měl do něj míčky umisťovat. Toto zařízení měl být buď katapult nebo výše popsané rotující kolečko. Válec umožňoval ale i variantu bez tohoto přídavného zařízení, protože sám uměl skórovat do lagunky. Tato varianta měla být prvním řešením na kterém se začnou testovat samotné strategie a zároveň měla být záložním řešením, nepovede-li se nic víc. K tomu nakonec došlo a z výsledků jak českého tak i mezinárodního kola jasně vyplynulo, oč lepší je doladěná verze jednoduchého zařízení oproti složitému zařízení, které umožňuje potenciálně daleko více, ale není zcela dodělané.

Verze detektoru lagunky a lokalizace

Zatímco v předchozím ročníku Eurobota stačilo k úspěchu v podstatě náhodně jezdit po hřišti a plnit daný úkol (otáčet puky správnou barvou nahoru), letos přibyl jeden zásadní problém – nutnost lokalizace. Bylo totiž potřeba házet míčky buď do branky, nebo alespoň do lagunky, které bylo nutné najít a současně vědět, že se jedná o branku či lagunku vaši a ne soupeřovu, protože se kromě polohy na hřišti ničím nelišily. V zásadě se nabízely dva přístupy k řešení. Mít na robotovi takové zařízení, aby v kterýkoliv okamžiku znal pozici, na které se nachází, nebo zařízení, které v okamžiku, kdy je nutné svou alespoň přibližnou polohu znát (před skórováním), tuto dokáže zjistit. Pro podporu absolutní lokalizace byly v rozích hřiště a na tyčkách branky umístěny podstavy na majáčky (beacony), na které si týmy mohly umístit v podstatě cokoliv, co splňovalo předepsané rozměry.
Na našem robotovi jsme měli k dispozici encodery vymontované z počítačových myší přidělané na osy koleček, takže robot věděl, jak se kolečka otáčí, podle čehož dokázal počítat svou pozici na hřišti. Toto bohužel fungovalo pouze v případě, že robot měnil svou polohu, když se kolečka otáčela – když došlo ke kolizi s cizím robotem a ten nás posunul do boku, nikdy jsme to pouze pomocí těchto encoderů nemohli zjistit. Stejně tak bylo problémem protáčení koleček, ke kterému docházelo i bez cizího robota, když robot tvrdě narazil například do palmičky na hřišti. Museli jsme tedy tuto přibližnou metodu zjišťování pozice kombinovat ještě s nějakou další, která by nám dala větší jistotu, že je robot tam, kde si myslí.

Infračervený majáček na brance

Majáček mohl vyzařovat například infračervené světlo, které robot uměl detekovat a podle něj branku najít, nebo jen barevná krabička, kterou uměl robot najít pomocí kamery. Při použití majáčku bylo ale vždy potřeba dát pozor na to, aby byl jednoznačně odlišitelný od okolí. Například infrasvětlo kromě vašeho majáčku produkují i zaměřovače kamer, slunce a spousta dalších zdrojů. Jako první způsob detekce branky jsme chtěli použít právě infračervený majáček umístěný na brance. K odlišení od ostatních zdrojů světla jsme majáčkem blikali na přesné frekvenci a na zdroj světla jsme reagovali pouze v případě, že blikal právě na této frekvenci. K tomu, aby se dal majáček použít jako jediná metoda lokalizace na hřišti jsme ovšem potřebovali, aby byl vidět z jakéhokoliv místa na hřišti, což se nám hardwarově nikdy nepodařilo tak, aby to bylo použitelné. Strategie s tímto majáčkem měla být taková, že po hřišti budeme jezdit náhodně, bez znalosti pozice a v okamžiku, kdy najdeme míček, otočením robota detekujeme majáček, na který se pak nasměrujeme a pomocí jednoduchého algoritmu k němu dojedeme a míček vyhodíme.
V okamžiku, kdy jsme ale neuměli zajistit viditelnost majáčku odkudkoliv, byla potřeba strategie jiná. Tou mělo být to, že po sebrání míčku se natočíme k nejbližší zdi, o tu se nárazem srovnáme kolmo k ní a opravíme si jednu souřadnici a natočení v paměti robota. Poté se rozjedeme k brance (na konkrétní místo u okraje lagunky) do kterého opět narazíme a opravíme si druhou souřadnici. Pak pomocí infradetektoru umístěném na servu otočením zjistíme, je-li v blízkosti náš majáček. Když ano, míček vyhodíme, když ne, chováme se, jako bychom byli na hřišti otočení o 90 stupňů a pokusíme se branku najít znovu. Tato strategie fungovala, ale problémem byla její pomalost. Ani za ideálních podmínek bychom nebyli schopní umístit do branky více než dva míčky, protože bychom to prostě kvůli pomalé lokalizaci nestihli. Omezení zápasu na 90 sekund se pro nás ukázalo jako velký problém. Tato strategie totiž vyžadovala schopnost robota otáčet se velmi přesně, což jsme sice nakonec dokázali, ale na úkor času.

Pouze enkodéry a detekce branky

Další metodou, kterou jsme zkusili, bylo vyhazování míčku, kdykoliv jsme detekovali kolizi virtuálním nárazníkem (na motory dáváme sílu, ale kolečka se netočí) a x-ová souřadnice byla větší než nějaká hodnota. Tato metoda ale nebyla příliš robustní, protože vyhazovala míčky, i když kolidovala s cizím robotem u soupeřova brankoviště a po ztracení už robot nedokázal nikdy skórovat. Proto jsme se snažili najít nějakou absolutní metodu rozpoznání branky. Tu jsme nakonec našli asi 5 hodin před startem v českém kole Eurobota. Umístili jsme k přední radlici robota dva infračervené vzdálenostní detektory SHARP GP2D12. Ty byly umístěny nad sebou tak, spodní detekoval okraj lagunky směrem do hřiště, který byl nižší než vnější okraje hřiště a horní detekoval zadní okraj hřiště, který byl od nízkého okraje lagunky vzdálen asi 30 cm. Pak jsme specifikovali jaký vztah musí platit mezi hodnotami vracenými čidly, aby pro nás znamenaly branku. Míček jsme pak vyhazovali v okamžiku, kdy jsme detekovali kolizi, x-ová souřadnice byla větší než polovina hřiště a zároveň jsme si z čidel mysleli, že stojíme před brankou. Tato metoda se nakonec ukázala jako nejrobustnější a použili jsme ji jak při českém kole, tak v kole mezinárodním. Robot s ní totiž dokázal skórovat, i když byl totálně ztracený a jen náhodně do lagunky narazil. Vztahy mezi hodnotami z obou čidel byly nastaveny tak volně, že do lagunky nemusel narazit přímo, ale povolovaly i menší nepřesnost v otočení, a stejně detekovaly lagunku, protože i v takovém případě dokázal robot míček do lagunky umístit. Řešení mělo dvě nevýhody, které ale nepřevýšily výhody. Jednou z nich bylo to, že se občas stalo, že robot vezoucí míček narazil na hřišti do palmičky a před ním byly míčky umístěné tak nešťastně, že podle hodnot ze sharpů robot prohlásil, že vidí branku a míček vyhodil. Druhým, větším problémem bylo to, že když robot vezl jeden míček a do radlice se mu při tom dostal další tak nešťastně, že zakryl detektory, robot branku neviděl. Tento problém byl ale řešen ve strategii tak, že se robot po neúspěšném pokusu míček vyhodit o to samé pokusil ještě jednou s novým nájezdem na branku, což už se mu typicky podařilo.

Hledání míčků

V prvních verzích jsme aktivní hledání míčků nijak neřešili a jezdili jsme robotem jen náhodně po hřišti, na kterém bylo míčků relativně hodně, takže robot měl velkou šanci, že brzy na některý narazí. Ve francouzském kole jsme měli do strategie zabudovaný modul hledače míčků, o kterém nebylo jasné, je-li opravdu lepší než náhodné ježdění, ale robot s ním vypadal na první pohled „chytřejší”.
Využili jsme dvou infračervených detektorů SHARP, které jsme měli na předku robota kvůli detekci lagunky. Spodní detektor byl ve výšce, kde by měl případný míček zachytit jako překážku. Vrchní detektor jsme umístili tak, aby koukal nad míček a tak jej nezachytil, ale naopak zachytil mantinely hřiště, které byly 7 cm vysoké, zatímco míček jen 6 cm. Tím jsme dokázali rozlišovat mezi překážkami, na které jsme koukali – mantinel, palmička, cizí robot a míček. Robot vybavený tímto detektorem se pak na hřišti otočil o 360 stupňů a ze dvou funkcí, které získal z detektorů, určil pomocí speciální funkce směr, ve kterém je nejpravděpodobněji míček. Pak si naplánoval cíl cesty dostatečně daleko v tomto směru a vydal se za ním.

Laserová lokalizace

Od začátku jsme přemýšleli o nějaké absolutní metodě lokalizace, vedle encoderů na kolečkách. Vcelku kvalitní detekce branky potřebu takové lokalizace mírně zmenšila, ale pro pohyb na hřišti s minimem kolizí a rychlým umisťováním míčků do lagunky byla taková metoda nutná. Po neúspěšných pokusech s inframajáčky a nemožností použít naši loňskou metodu – lokalizaci podle černobílých čtverců na podlaze (letos měly čtverce téměř neodlišitelné odstíny žluté), jsme se rozhodli vyzkoušet něco nového – absolutní lokalizaci pomocí laserového paprsku.
Robot má na servu umístěné laserové ukazovátko, kterým dokáže otáčet v úhlu 180 stupňů. Spolu s ukazovátkem se otáčí prstenec fototranzistorů, které dokáží měřit intenzitu odraženého laserového světla (a bohužel i intenzitu jakéhokoliv jiného světla). Na místech pro majáčky jsme měli umístěné válce s maximálními rozměry pro majáčky, které byly obaleny reflexní páskou, aby odrážely světlo do směru, z něhož na majáček dopadalo. Servo s laserem a fototranzistory bylo nastaveno tak, že laser svítil ve stejné rovině, v jaké byly umístěny majáčky, takže byl-li robot otočen alespoň přibližně správným směrem, otočením serva laser postupně posvítil na každý ze 4 majáčků umístěných podle pravidel na stranách soupeřovy lagunky. Pak už jen stačilo dostatečně rychle vzorkovat hodnoty, které vracely fototranzistory a v navrácené funkci se pokusit najít ony 4 majáčky, které odrážely světlo daleko výrazněji než zbytek okolí. Z informace o tom, pod jakým úhlem vidíme majáčky jsme pak počítali svoji absolutní polohu na hřišti.

Detektor palmiček a cizího robota

Dělali jsme testy s detektorem palmiček a cizího robota, protože jsme chtěli eliminovat počet kolizí, ke kterým při zápase dojde, aby nedocházelo ke zbytečné ztrátě pozice. Jednalo se o servo, na kterém byl umístěn SHARP detektor. Servo neustále kmitalo v úhlu asi 90 stupňů a detektor tak viděl překážky, které jsou v této výseči asi do 1 m před robotem. Problémem tohoto typu detektoru je to, že vrací analogovou hodnotu, která odpovídá velice nelineárně vzdálenosti, kde se paprsek odrazil. Přesnost se ale s rostoucí vzdáleností velmi rychle ztrácí. Vráceným hodnotám lze tedy věřit pouze přibližně. Přesáhla-li vrácená hodnota určitou mez, chovali jsme se, jako by robot kolidoval. Tedy zastavil, couvnul si a vybral si jiný cíl na hřišti, ke kterému se rozjel.
Detektor byl připraven k použití do českého kola, ale nakonec jsme se rozhodli ho do ve výsledné strategii nepoužít, protože robot se pak "moc bál" palmiček a byly-li například v pozici poblíž mantinelů, mohlo se stát, že se robot nechá jednou palmičkou „obklíčit”, tj. v ústupu mu bude bránit mantinel, v postupu vpřed pak palmička. Daisy bez detektoru kolize s palmičkami řešila naopak poměrně rychle – jednou do ní narazila, couvla si a pak si vybrala jiný cíl na hřišti, přičemž cíle byly rozmístěny tak, aby se co nejvíce měnil směr jízdy robota, aby se tak samovolně po kolizích překážkám vyhýbal.

Sekundární robot – Enya

Od začátku jsme plánovali nasazení sekundárního robota pro obranu naší lagunky. Absolutní prioritu měl ale samozřejmě robot hlavní, protože bez něj, na rozdíl od robota sekundárního, se vyhrát nedalo. První verzí sekundárního robota byla Enya – robot s podobnou konstrukcí kolektoru míčků jako Daisy, ale kvůli omezení na obvod o mnoho „mělčí”. Byl poháněn dvěma upravenými protáčivými servy s encoderem a řízen jednočipem AVR 90S8535. Při testování se bohužel ukázalo, že je robot kvůli netypickému tvaru velice nestabilní a v úzké lagunce se bude pohybovat jen velice těžko. Nezbývalo mnoho času do francouzského kola, proto jsme se rozhodli netrávit čas nejistým vylepšováním špatně navržené Enyi, ale vsadili jsme na jistotu – RoboKrysu.

Sekundární robot - RoboKrysa

RoboKrysa je náš robot, který pracuje ve Fyziologickém ústavu Akademie věd ČR jako pomůcka při pokusech s inteligencí krys. Jeho jediným úkolem tam je, aby jezdil po kruhové arénce a po nárazu do stěny se někam otočil a jel dál. Činí tak krysám pohyblivou překážku (predátora), které se musí dostatečně vyhýbat. Rozhodli jsme se pro jeho nasazení jakožto sekundárního robota, protože narozdíl od Enyi měl dobrý funkční softwarový základ pro další rozvíjení a hlavně je mnohonásobně robustnější.
Pro RoboKrysu jsme plánovali primárně jeden úkol. Krátce před francouzským kolem soutěže jsme totiž už věděli, že nebudeme střílet míčky do branky, ale jen je umisťovat do lagunky. Proto by nám velice vadilo, kdyby měl soupeř sekundárního robota, který dokáže efektivně míčky ze své lagunky vyhazovat. RoboKrysa měla tedy přejet celé hřiště a zastavit v soupeřově lagunce, kde by překážela soupeřovu robotovi v činnosti. Tuto práci jsme si ale nechali až do Francie, zbude-li čas.

SW

Při psaní softwaru na robota jsme vycházeli ze zkušeností z předchozích let, proto jeho základní část mnoha iteracemi neprošla. Nad řídícím softwarem, který nám zprostředkovával interface mezi skutečným hardwarem a jeho převodem do položek, ze kterými umí pracovat strategie, stál modul, který tuto strategii implementoval. Jeho první verzi tvořil jednoduchý stavový automat. Měl stavy dvou úrovní. V první úrovni byly základní akce, které byl robot schopen činit. Tedy jízda vpřed, vzad, rotace na místě, jízda na souřadnici a čekání na místě. Druhou úroveň tvořily sekvence stavů z první úrovně a přechody mezi těmito stavy.
Už před českým kolem nám bylo jasné, že způsob zapisování strategie pomocí těchto sekvencí a přechodů je poměrně komplikovaný a těžko a nepřehledně se v něm dělají i drobné změny. Přirozeně totiž vznikla nutnost jakéhosi přerušení normálního běhu, vykonání jiné sekvence a vrácení se zpět. Například v případě, kdy robot detekoval kolizi, sebral míček, atd. S takovými mechanismy původní návrh frameworku pro strategie nepočítal a jejich zavedení vneslo do programu značnou nesystémovost a z toho plynoucí nepřehlednost. Protože jsme ale nechtěli riskovat nasazení nedostatečně otestovaného a odladěného systému v důležitém turnaji, v českém kole jsme ještě ponechali starý odzkoušený systém. V kole francouzském byl ale už systém jiný, přehledný, snadněji modifikovatelný.

Verze 0

Takzvaná „Verze 0” pro nás byla první metou. Jejím cílem byl hardware a software, který by se dokázal homologovat podle oficiálních pravidel, tj. umístit jeden bod do soupeřovy lagunky. Hardwarové řešení naší nulté verze mělo rotační válec na sbírání míčků, lokalizovalo se pouze podle encoderů na motorech robota, nemělo žádný způsob detekce lagunky ani hledání míčků. Využívali jsme toho, že dva míčky (středově souměrně) na hřišti byly umístěny na předem známých pozicích. Robota jsme před startem umístili tak, aby se dotýkal okraje naší lagunky (podle pravidel) a přitom stál přímo namířený na pevně umístěný míček. Po hřišti mohly být umístěné dvě palmičky, jejichž polohu jsme také před zápasem neznali, ale znali jsme pozice, na kterých určitě nemohou být – nejbližší palmička k bočnímu okraji hřiště mohla být 60 cm od něj. Robot tedy vyjel, sebral první míček, odbočil do 60 cm širokého koridoru u mantinelu bez palmiček, ve kterém dojel až k soupeřově lagunce. Tu poznal jen podle toho, že zaznamenal kolizi na souřadnici, kde její x-ová složka byla větší než nějaký práh. V takový okamžik robot vyhodil nabraný míček. Toto řešení fungovalo celkem spolehlivě pro první míček. Jeho snadným rozšířením bylo nechat robota po vhození prvního míčku jezdit náhodně po hřišti a po sebrání míčku jet opět na pozici branky a tam míček opět vyhodit. Byly-li ale na hřišti přítomny palmičky a cizí robot, náš robot poměrně rychle ztrácel informaci o své pozici, protože velice často docházelo ke kolizím a robot nebyl schopen najít lagunku jinak, než z této pozice. S tímto řešením robot ale navíc vyhazoval míčky i na zcela špatných místech, došlo-li k jeho ztracení.

České kolo

Dne 24. dubna 2004 se v Praze, na půdě naší fakulty, konalo české kolo Eurobota. Byly do něj přihlášeny 4 týmy, ze kterých bylo potřeba vybrat tři, které nakonec pojedou do Francie. Podmínkou pro postup do mezinárodního kola ale byla úspěšná homologace v kole národním, proto bylo nutné národní kolo nepodcenit a už na něj udělat robota co možná nejspolehlivějšího. Nehledě na to, že jsme chtěli před domácím publikem dosáhnout co nejlepšího výsledku.

Přípravy

Ještě několik dní před českým kolem jsme měli jen několik dílčích "chování", která robot dokázal dělat - jízda náhodně po hřišti, vyhazování míčku v lagunce, detekce lagunky podle polohy a nárazu, neodladěné detekování míčků pomocí „sharpů”… Bylo tedy potřeba co nejrychleji z těchto chování sestavit spolehlivou strategii, která bude nakonec použita. Rozhodli jsme se, že aktivní hledání míčků v tomto kole nepoužijeme, protože nebyl čas na jeho důkladné otestování a náhodné ježdění po hřišti fungovalo na hledání míčků poměrně dobře.
Sestavili jsme tedy strategii, jejíž první část byla totožná s homologační verzí 0, tedy Daisy sebrala první míček, pak jela koridorem, kde zaručeně nebyly palmičky a první míček na pevné pozici vyhodila do lagunky. Poté měla zadánu sekvenci pozic po celém hřišti tak, aby ho co nejlépe celé projela, nekolidovala s mantinely a co nejčastěji se měnil směr mezi jednotlivými pozicemi, aby se po kolizi do palmičky nebo cizího robota této překážce pravděpodobně vyhnula. Její reakce na kolize totiž byla vždy stejná – couvnout asi o 30 cm a přejít na další akci, kterou měla vykonat, tedy vybrat další pozici a na ní se vydat. Po náhodném sebrání míčku podle své souřadnice rozhodla, jestli je bližší levá nebo pravá část soupeřovy lagunky a zamířila na pozici asi 1 m před pozicí, kde chtěla míček vyhodit. Z této pozice vyrazila přímo k okraji lagunky. To proto, aby k tomuto okraji přijela vždy relativně kolmo a míček mohla vyhodit úspěšně. Daisy se vždy pokusila do jedné části lagunky míček vyhodit maximálně dvakrát. Když se jí to ani napodruhé nepodařilo, pokusila se o skórování v opačné části lagunky. To proto, kdyby před lagunkou byl robot soupeře, abychom měli stále šanci míček umístit někam jinam… Toto řešení krásně fungovalo na prázdném hřišti bez soupeře a palmiček. Byly-li ale přítomny palmičky a došlo ke kolizi s nimi, pozice, kterou si Daisy udržovala se často pokazila tak, že už žádný další míček kromě prvního nedala.
Ačkoliv jsme si slíbili, že nebudeme dělat velké změny krátce před turnajem, protože by s velkou pravděpodobností byly kvůli nedostatečnému testování spíše kontraproduktivní, v noci před turnajem nás napadlo jedno výrazné vylepšení – použít pro detekci lagunky již zamontované detektory SHARP (zatím byly namontované kvůli detekci míčků, ale do strategie pro české kolo jsme toto chování nestihli zapojit). To robotovi umožňovalo rozpoznat lagunky vždy, když před ní stál a ne podle pozice, která se rychle kazila. I když byla tedy Daisy ztracená a náhodně narazila lagunku, poznala to a míček vyhodila. Jenom během českého kola jsme zaznamenali asi 2 míčky, které Daisy umístila díky této vlastnosti. Zvýšení šancí na skórování zavedením tohoto řešení se nám zdálo tak velké, že jsme se rozhodli riskovat nasazení tohoto již v českém kole. Stálo nás to ale probdělou noc plnou testování.
Asi 8 hodin před začátkem českého kola se navíc stala věc, při které nás doslova zamrazilo. Robot při jednom z testů začal rotovat na místě. Bylo jasné, že to není softwarová závada. Začli jsme tedy s kontrolou všech hardwarových součástí, které měly souvislost s chodem motorů. Brzy jsme zjistili, že je problém na motorech samotných. Ocelová závlačka, která sloužila předchozí dva roky spolehlivě pro uchycení osy motoru na osu kolečka se rozpadla asi na 4 části a motor se tak protáčel, zatímco kolečko stálo.
Tento druh závady je pro Daisy velice nepříjemný, protože jednou z mála jejích konstrukčních chyb je to, že aby se daly z hliníkového profilu tvořícího nápravu vymontovat motory a uchycení koleček, je třeba rozmontovat téměř celého robota, což téměř nepřipadalo v danou chvíli v úvahu, protože při tom bychom riskovali poškození čehokoliv jiného, co na robotovi bylo. Proto jsme se rozhodli pro provizorní opravu bez vymontování motoru, která ale vyžadovala velkou trpělivost a štěstí. Náhradní závlačku jsme neměli po ruce, pokusili jsme se tedy zafixovat osičky asi milimetr tlustým měděným drátem. Už se zdálo, že je byla oprava úspěšná. Při dalším testu jsme ale zjistili, že po opravě přestal fungovat encoder na onom kolečku. Vypadalo to na špatný kontakt, ale to jsme nedokázali opravit ze stejného důvodu jako motor – k enkodéru se nedalo nijak dostat. Zafixovali jsme tedy jen přívodní vodič izolepou, aby držel v jedné poloze, ve které encoder fungoval. Po dalších asi pěti testovacích jízdách se ale stejně jako ocelová závlačka praskl i měděný drát. Použili jsme tedy jako zdroj dalšího materiálu tlustou ocelovou pružinu, která už naštěstí fungovala spolehlivě celý zbytek noci i během českého kola.
Na poslední chvíli jsme také na robota namontovali speciální konstrukci z drátu a koberce, která měla za úkol shazovat míčky z palmiček, okolo kterých pojedeme. Díky tvaru konstrukce získala Daisy brzy přezdívku „Vrtulník”. Chtěli jsme mít co nejvíce míčků na hřišti, abychom zvýšili svoje šance, když už jsme míčky neuměli aktivně hledat.

Průběh

Celé české kolo pro nás bylo po probdělé noci už naštěstí bezproblémové. Daisy fungovala tak jak měla. Jen při první homologační jízdě zaváhala, když se jí při vezení prvního míčku do lagunky do kolektoru dostal míček další. Při vyhazování míčku pak jedno servo neutáhlo oba míčky, protože ten druhý se v kolektoru dost vzpříčil. Pro takový případ byl v servu rotačního válce zabudován encoder pro detekci zaseknutí válce. Když to robot zjistil, měl chvíli otáčet válcem na druhou stranu, aby se ze špatné situace dostal. Tohle řešení ale v této chvíli nezafungovalo. Ještě dlouho potom jsme se domnívali, že se tam míčky vzpříčili tak, že válcem nešlo otáčet ani na jednu stranu. Až asi po týdnu se zjistilo, že v kódu pro ovládání kolektoru byla zavlečená logická chyba, která způsobila, že se robot ani nepokusil z této situace dostat. Druhá riskantní homologace se stejnou konfigurací hřiště se už naštěstí povedla a chyba v kolektoru se už během turnaje neprojevila.

Závěry z českého kola

Kromě několika výtek francouzských rozhodčí ke konstrukci našeho robota (červená barva naší konstrukce z Merkura je na robotech zakázaná, „vrtulník” se nevejde do předepsaných rozměrů atd.) jsme si odnesli následující poznatky:
  • České kolo jsme vyhráli ne díky tomu, že náš robot byl nejlepší, ale protože byl v potřebnou chvíli nejspolehlivější a nejdoladěnější.
  • Do Francie bude potřeba Daisy ještě více opevnit.
  • Na rotační válec v kolektoru namontujeme ještě jedno servo, aby válec protlačil kolektorem i více míčků současně ( i když se později ukázalo, že tento požadavek vznikl na základě nesprávně vyvozených závěrů z první neúspěšné homologace ).
  • Je třeba implementovat nějakou metodu absolutní lokalizace, aby robot jistěji umisťoval i jiné míčky ně jen ten první.

Mezinárodní kolo

Přípravy
Vybalování Daisy
Vybalování Daisy

V období mezi českým a mezinárodním kolem jsme na robotovi udělali několik celkem podstatných změn:
  1. Změnili jsme framework pro zapisování strategií tak, aby se software běžící na robotovi co nejvíce zpřehlednil.
  2. Kompletně jsme předělali merkurovou nadstavbu tak, aby byl robot mnohem pevnější a jeho citlivé části ve větším bezpečí.
  3. Softwarově i hardwarově jsme dokončili laserovou lokalizaci, takže Daisy uměla určit svojí polohu téměř přesně z velké části hřiště.
  4. Doladili jsme detekování míčků pomocí detektorů SHARP.
  5. Definitivně jsme se rozhodli, že nemáme čas na dodělávání Enyi a že použijeme RoboKrysu. Tu jsme ale měli mít k dispozici až den před odjezdem, takže ji budeme programovat až ve Francii.

Průběh

Po příjezdu do Francie jsme zaznamenali jen menší hardwarové problémy, které vznikly během převozu. Ještě v noci po příjezdu jsme se rozhodli otestovat, jak by se změnilo chování Daisy, kdyby komunikace mezi jednočipem a iPAQem neprobíhala dvacetkrát, ale třeba stokrát za vteřinu. Chtěli jsme tím urychlit proces lokalizace, protože samotné scanování majáčků, kdy Daisy stála na místě trvalo asi 13 vteřin, což bylo v tak krátkém zápase opravdu podstatné. Naštěstí se ukázalo, že zrychlení komunikace nic podstatného neovlivní a že naopak pomohlo zrychlit lokalizaci na asi 4 vteřiny.
Jinak Daisy fungovala podle našich představ. První den jsme se měli již homologovat. Usilovně jsme tedy pracovali na dodělání RoboKrysy do homologovatelné podoby (podpora pro majáček, startovací kabel…), na rozbalovacím se mechanismu pro Daisy podobném "vrtulníku" pro shazování míčků z palmiček (francouzské palmičky byly o mnoho pevnější než české a nárazem do nich míčky rozhodně nespadly) a na různých drobných mechanických vylepšeních Daisy. Zároveň jsme usilovně testovali, která nyní z již asi 4 přípustných verzí strategie je pro homologaci nejlepší. Vybrali jsme nakonec verzi bez hledání míčků, s lokalizací. Poté se Daisy úspěšně na první pokus homologovala se třemi vhozenými míčky bez nejmenšího zaváhání. To bylo pro nás podstatné, protože se do celkového bodování kvalifikační části soutěže započítávaly i body z homologace a se třemi body jsme byli silně nad průměrem.
Ještě týž večer měl mít každý tým svůj první zápas v hlavní aréně. Kvůli nedostatku volných stolů ale již během dne probíhaly homologační jízdy i v této aréně. Využili jsme toho a vzali tam Daisy alespoň do publika, abychom nasbírali logy z laserového lokalizátoru za osvětlení, při němž budou probíhat ostré zápasy. Výsledky jsme byli upřímně zděšeni. Z prvních logů se zdálo, že celá koncepce laseru je špatně a že za podmínek, kdy možná desítky silných reflektorů svítí a blikají ze všech možných úhlů přímo do fotosenzorů, je tato metoda nepoužitelná. Na funkci vrácené z fotosenzorů nebyly majáčky vůbec znatelné ani lidským okem, natož automatickým vyhodnocením. Začali jsme okamžitě zkoušet různá hardwarová vylepšení. Ukázalo se, že když maximálně znemožníme světlu projít do prostoru s fototranzistory, kromě světla přímého, rušení zůstane stále velké, ale majáčky už začnou být většinou rozpoznatelné. Nasbírali jsme tedy spoustu logů a odebrali se kompletně přeprogramovat funkci pro detekování majáčků.

1. zápas
1. zápas
1. zápas

To jsme samozřejmě do prvního zápasu nemohli stihnout, proto jsme při něm využili toho, že z iPAQa si můžeme vybrat, kterou ze strategií použijeme a vybrali jsme strategii bez lokalizace. Naším prvním soupeřem byl jeden z německých týmů. Jejich robot toho ale mnoho během zápasu nepředvedl a tak Daisy vyhrála se třemi vstřelenými góly i bez laseru.

2. zápas

Další zápas byl proti týmu ze Španělska. V tomto zápase nás naše herní štěstí opustilo. Daisy vyjela, soupeř ne. Soupeř měl na místě, kde jsme chtěli vyhodit první míček sekundárního robota, takže se to Daisy nezdařilo. To jí ale nemělo vadit. Tohle naše strategie po druhém neúspěšném pokusu řešila pokusem na druhé straně lagunky. Tam se ale Daisy nikdy nevydala. Neustále to k našemu úžasu zkoušela do té ucpané části lagunky. Zápas tedy skončil bezbrankovou remízou s bodem pro nás, protože jsme přejeli alespoň půlku hřiště. Byli jsme velice zvědaví na log ze zápasu, protože jsme si to chování robota neuměli vysvětlit.
Vysvětlení bylo bohužel velice jednoduché, podobné tomu s nefunkčním laserem. Daisy byla vybavena fotozávorou uvnitř kolektoru, kterou přerušil míček valený rotačním válcem. Tím zjistila, že míček má. V takový okamžik si Daisy naplánovala cestu k nejbližší lagunce a tam míček vyhodila, případně zkusila lagunku druhou. Reflektory svítící všude okolo Daisy ji bohužel posvítily do fotozávory tak, že i když měla sebraný míček, tedy závora byla přerušená, dokázaly vyvolat takovou intenzitu infračerveného světla, že se Daisy zdálo, že opět míček nemá. Bohužel jsme s takovou situací v softwaru nepočítali, takže po dalším přerušení fotozávory (stačilo aby se Daisy otočila z přímého dosvitu reflektoru) se opět naplánovala cesta k nejbližší lagunce. A ta byla neustále na té straně ucpané soupeřovým robotem. Softwarové a hardwarové zafixování této chyby nám zabralo další večer a noc, v jejíž polovině nás čekalo další mrazivé překvapení. Před jedním ze cvičných zápasů proti týmu Sirael nám po zapnutí robota přestal fungovat jednočip na robotovi, řídící hardware. Dalo se to snadno detekovat, protože jsme pro jistotu hardwarová zařízení, která to umožňovala vybavili světelnými diodami, abychom byli schopni případnou závadu lokalizovat co nejdříve. To byla závada, která se nám při práci s robotem snad ještě nestala. Po chvíli nervózního měření jsme zjistili, že závada není na jednočipu, ale už v jeho napájení, protože je ve zkratu kvůli uvolněnému konektoru enkodéru. Konektor jsme tedy přepájeli a unaveni šli s úlevou spát.

3. zápas

Třetí zápas byl proti dalšímu španělskému týmu. V tomto zápase jsme poprvé nasadili sekundárního robota a poprvé v ostrém zápasu laserovou lokalizaci. Ačkoliv se velkou část předchozí noci pracovalo na tom, aby se dokázal dostat bezpečně do soupeřovy lagunky a tam škodit jeho sekundárnímu robotovi, rozhodli jsme se, že strategií naší RoboKrysy v tomto zápase bude bránit lagunku naši. Soupeř totiž, stejně jako my neuměl míčky házet do branky, ale jen je dával do lagunky. Jaká byla strategie RoboKrysy při obraně naší lagunky? Očekávali jsme, že soupeř bude mí stejný začátek strategie jako my, tedy že se pokusí vyhodit míčky, které, jak se v zápase ukázalo, dokázal „očesat” z palmičky, zhruba uprostřed levé části okraje lagunky. Tam jsme tedy před startem umístili RoboKrysu (podle pravidel se musela dotýkat tohoto okraje). V pravidlech také bylo, že sekundární robot nesmí být konstruovaný jako pasivní překážka. To ale naše RoboKrysa nebyla. Dokázala i aktivně plnit bojové cíle. Před zápasem jsme ale rozhodli, že svůj cíl v tomto zápase splní tím, že nevystartuje. Vytáhli jsme tedy po odstartování předpisově startovací kabel, ale robot byl v tu chvíli vypnutý. Průběh zápasu pak byl přímo ukázkový. Soupeř vyjel, sebral první míček, očesal palmičku a jel vyhodit míčky do lagunky. Tam narazil do naší RoboKrysy a dál se nehnul. Mezitím Daisy v klidu dělala svoji práci a zápas pro nás skončil vítězstvím. Poprvé zafungovala jak lokalizace, tak nový software pro kolektor.

4. zápas

Byli jsme rádi, že jsme si v zápase se Španělskem spravili reputaci, protože nyní nás čekal soupeř, se kterým jsme vyhrát nemohli. V mezinárodním kole byly i tři týmy z Francie, země, jejíhož národního kola se letos účastnilo asi 200 týmů. My jsme dostali za soupeře vítěze francouzského poháru. Ale na tom celkem nezáleželo, protože každý ze tří týmů, který postoupí z takové konkurence je natolik kvalitní, že mezi zbytkem startovní listiny jen těžko hledá konkurenci. Do zápasu jsme tedy šli s přáním dát soupeřovi alespoň jeden bod a neudělat ostudu. I v tomto zápase jsme nasadili RoboKrysu. Tentokrát už puštěnou. Bohužel po kolizi se soupeřem zůstala stát na hřišti vypnutá, protože jí vyrazil baterii. Daisy svůj čestný bod dala, soupeřův sekundární robot míček nedokázal vyhodit z lagunky, protože ho Daisy umístila chytře až do kouta. Soupeř dal asi 5 gólů.

5. zápas

V tomto zápase nás štěstí opustilo už nadobro. Měli jsme startovat proti týmu ze Slovenska, týmu, se kterým jsme už od začátku udržovali přátelský vztah, týmu, který postihla den předtím velká pohroma v podobě vypálené základní desky jejich PC, které řídilo celého robota. Slováci se rozhodli do zápasu vůbec nenastoupit. Měli jsme tedy startovat bez soupeře, což nám slibovalo slušný bodový zisk. Bohužel po vytažení startovacího kabelu se stala věc, kterou jsme nečekali ani ve zlém snu. Ačkoliv Daisy prošla týden před soutěží důkladnou technickou kontrolou včetně kompletního rozebrání podvozku a výměny oněch ocelových závlaček, které nás zradily už před českým kolem, po odstartování se jen bezmocně cukala na místě, poháněná jen jedním motorem. Závada se projevila znovu, pravděpodobně jí dopomohl předchozí tvrdý zápas s Francouzi. Daisy se nedostala ani za polovinu hřiště, nedostali jsme tedy ani ten jeden bod za aktivní prohru. Tohle pro nás byla velká rána, protože tento zápas byl pro nás poslední v kvalifikaci, rozhodující pro postup mezi nejlepší šestnáctku a před ním jsme si nepřipouštěli neúspěch. Následovalo dlouhé čekání, než dohrají poslední zápasy i ostatní týmy. Ale v postup jsme věřili už jen ze setrvačnosti. Nakonec se ve výsledkové listině náš tým Short Circuits Prague objevil na postupovém čtrnáctém místě a my se mohli těšit narozdíl od asi 20 nepostupujících týmů na další zápas.

Osmifinále

Narychlo jsme tedy upravili podvozek tak, aby přežil ještě alespoň další zápas a vydali se do finálových bojů. V zázemí arény byly stoly, každý určen jako shromaždiště pro jeden z osmi zápasů osmifinále. Na našem stole již čekali naši loňští známí - francouzský tým Supaero. Vloni skončili druzí ve francouzském i mezinárodním poháru. Letos opět druzí v kole francouzském, zanedlouho se ukázalo, že proti nám stojí budoucí vítěz kola mezinárodního. My jsme je dobře znali, protože jsme s nimi vloni také v play-off narazili. Tehdy to bylo ve čtvrtfinále a Supaero vyhrál. Zápas měl podobný průběh jako naše zápolení s předchozím francouzským týmem. Daisy se snažila uhrát alespoň gól. Nakonec se jí podařily dva. Na excelentního Supaera to ale nestačilo. Tímto jsme se s turnajem rozloučili, poraženi od týmu, který nakonec vše vyhrál, tedy se ctí, úlevou a splněnými cíli.

Závěry z mezinárodního kola

Analýza chyb, které se objevily během mezinárodního kola je smutně jednoznačná. Říká to, co jsme věděli, jen jsme v tom možná nebyli dostatečně důslední: „Nevěřte hardwaru!”. Dva zápasy s francouzskými týmy jsme prohráli, protože byly objektivně lepší. Další dva jsme nevyhráli, protože nás zradil hardware. Nejprve se projevila chyba v detektoru míčků, která plynula s přílišné důvěry ve správné hodnoty vrácené fotozávorou a její neotestování v extrémním osvětlení. Druhá závada byla prasklá závlačka během nešťastného „utkání” se Slovenskem. Jediné ponaučení, které se asi dá vzít z této chyby, je důsledně kontrolovat stav robota mezi zápasy a nevěřit tomu, že když se rozjel jednou, rozjede se i podruhé.

Máte-li jakékoli dotazy či připomínky, tak neváhejte a kontaktujte nás. Rádi vám odpovíme.