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 |
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 |
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 |
V období mezi českým a mezinárodním kolem jsme na robotovi udělali několik
celkem podstatných změn:
- Změnili jsme framework pro zapisování strategií tak, aby se software běžící na robotovi co nejvíce zpřehlednil.
- Kompletně jsme předělali merkurovou nadstavbu tak, aby byl robot mnohem pevnější a jeho citlivé části ve větším bezpečí.
- 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ě.
- Doladili jsme detekování míčků pomocí detektorů SHARP.
- 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 |
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é.
Rozebraná Enya pro nedostatek šroubků |
Konec zápasu s D2R2 |
Kompletní tým u jezera |
Daisy na pastvě |
Vítězný Supaero |
České skupinové foto |
Máte-li jakékoli dotazy či připomínky, tak neváhejte a
kontaktujte nás.
Rádi vám odpovíme.
Send email to the editors
Your message could not be sent
but you can also reach us at webmaster-at-robotika.cz
Your message was successfully sent.
You need to turn on javascript to submit this form.