Field Robot 2010
kukuřičné stříbro putuje do České Republiky
Letošní spolupráce s Českou zemědělskou univerzitou se rozhodně vyplatila. Celkově druhé místo pro Eduro Team a čtyři kukuřičné „poháry” společně s druhým českým týmem Cogito MART jsou snad samovysvětlující . Jaký hardware, software a strategie jsme letos použili, se dozvíte v článku …
Na Field Robot Event 2010 jsme vyrazili ve
dvou týmech: Eduro Team, pod záštitou České zemědělské
univerzity v Praze, katedry zemědělských strojů a Cogito MART ve spolupráci
Matematicko-fyzikální fakulty Univerzity
Karlovy, katedra softwarového inženýrství a České zemědělské univerzity v
Praze, katedry zemědělských strojů. Jednak se to „ve dvou lépe táhne” a pak
se lépe využily nejrůznější prostředky jako testovací kukuřičné pole nebo
mikrobus na cestování. V neposlední řadě je to osvědčené hecování, které
žene vývoj obou týmů rychle dopředu. V realitě byly oba týmy hodně propojené a
například postřikovací zařízení sdílely.
- Eduro Team FRE2010
- Milan Kroulík — šéf, kompletní podpora, příprava testovacího kukuřičného pole, postřikovací zařízení
- Jan Roubíček — mechanika
- Tomáš Roubíček — elektronika
- Martin Dlouhý — software
- Cogito MART
- Jiří Iša — software a hardware
- Stanislav Petrásek — servis, podpora
Pravidla
Soutěžilo se v pěti kategoriích z nichž většina byla stejná jako loni:
Basic Task
První úlohou bylo systematicky projíždět řádky kukuřice s tím, že robot musí
být plně autonomní a na konci řádky se má správně otočit. Bodovala se ujetá
vzdálenost v metrech (1 metr = 1 bod) v časovém limitu 3 minuty. Za každou
poničenou kukuřici tým ztrácel 1 bod, za dotek operátora 5 bodů a za pomoc robotu
při otáčení na konci řádku 2 body. Řádky byly úmyslně do mírného oblouku a
důraz byl kladen na preciznost a rychlost. Otáčení na konci řádky v této
disciplíně tolik nehrálo roli.
Advanced Task
Pro druhou úlohu tým dostal kód trasy (pro letošek to bylo
2R-1L-2R-3L-4L-0(U-Turn)-2R-4R-1L) a robot měl pro průjezd řádků sledovat
tento vzor, tj. nejprve zahnout do druhého vpravo, pak do prvního vlevo, …
Zde byla vysoká (8 bodů) penalizace za dotek při otáčení, ale jinak bylo
hodnocení stejné jako v první úloze.
Professional Task
Tato úloha byla podivně rozdělena na dvě podúlohy: v jedné se mělo demonstrovat
postřikovací zařízení a ve druhé schopnost detekce plevele. Plevel byl
simulován umělými sedmikráskami, destička cca 7x7cm. Pravidla ale byla trošku
zmatená a nebylo zřejmé, že se smí postřikovat __pouze__ čtverce s bílými
kytičkami.
Cooperative Challenge
Zde bylo cílem ukázat spoluprácí více robotů. Výsledek hodnotící komise byl
dále násoben faktorem, jak moc jsou oba týmy vzdáleny, tj. stejná škola 1x,
stejná země 1.5x a jiné země 2x.
Freestyle
Poslední úlohou byla volná jízda, kde roboti měli předvést cokoliv společného se
zemědělskou tématikou. Bodování pak bylo zcela v rukou komise.
Realita
Po příjezdu do Německého Braunschweigu jsme byli všichni trošku šokování. To co jsme
viděli, bylo nesrovnatelné s luxusním políčkem, které nám na testování připravil
Milan na pozemku ČZU na Suchdole v Praze.
V množství plevele nebylo téměř vidět
kukuřici a její nedostatečný vzrůst Němci „ošetřili” spoustou zeleně
natřených tyček. Zatímco jsme se ještě chvíli ze šoku vzpamatovávali, Standa s
Milanem nelenili, vrhli se na nářadí a během pár minut nám připravili nový prostor pro
testování.
Pole po příjezdu ... |
... a po Milanově a Standově úpravě |
Před odjezdem na soutěž byly na Suchdole už dobře vidět listy kukuřice a kamera
se ukazovala jako nejlepší senzor, v Německu byla téměř nepoužitelná. Tyčky
byly úzké a barvou spíše do šeda, takže řádově lepší výsledky dával sonar a
laserový dálkoměr.
Co se počasí týče, tak v pátek bylo ještě celkem pěkně, ale v sobotu, den soutěže, klasicky pršelo až
cedilo, a roboti si užívali bahínka. V neděli pak už zase svítilo sluníčko
a bylo pěkně …
Průběh soutěže a výsledky
Robot Eduro Maxi HD jezdil krásně, udělal sice několik chyb, ale několikrát byl
oceněn potleskem. Na druhé straně nad šestikolkou UTrooper porota jen kroutila
hlavou — stroj se kroutil jak v poslední křeči a nebýt pravidelných
Standových servisních zásahů by mu jistě upadla všechna kola. Je to stroj,
který bychom výrobci hodili na hlavu a to hodně z výšky — fakt hrozný :-(.
Začátek byl celkem adrenalinový: pár minut před startem nebylo jasné, zda má
robot za úkol odbočit vlevo nebo vpravo. Organizátoři to několikrát změnili,
první tým jel 2x a finální rozhodnutí bylo, ať si každý jede jak chce.
Pravda, v programu robota se to lišilo pouze záměnou, zda má robot dostat
sekvenci -1,1,-1,1,… nebo 1,-1,1,-1,…, ale stres to myslím byl poměrně
zbytečný.
Eduro jelo pěkně bez doteku, ale při otáčení do čtvrtého řádku si neporadilo s
větší hroudou. Takto by to bylo 45 metrů bez doteku, ale zbývalo ještě poměrně
hodně času, takže nás sudí vyhecovali k ručnímu zásahu a opětnému startu. Laser
ale nabíhá 20s a věděli jsme, že robot tímto určitě odbočí do špatné řádky, ale
co … alespoň to byla show pro diváky . Ve zbývajícím čase tedy robot ujel
ještě další dvě řádky a špatné přejetí se počítalo jako druhý dotek. Celkově
tedy cca 75-5-2 bodů (přesné výsledky ještě teď neznáme).
Druhá úloha byla zajímavější. Už začalo slušně pršet a tak všichni obalovali
své vodocitlivé roboty (ani náš není vodotěsný). Tady bylo jasné, co má robot na
konci řádku dělat, takže to bylo paradoxně klidnější. Sousední přejezdy a
přejezd ob řádek jsme trénovali, takže minimálně začátek kódu byl pro nás
příznivý. Příznivé bylo i jeho opakování, protože ve třetím průchodu došlo k
problému a robot byl zastaven. Tentokrát jsem neměl obavy o špatné odbočení,
protože první příkaz byl zase odbočit do druhé řádky vpravo .
Z důvodu pomalého restartu tedy zvládl už jen otočku a třetinu nového řádku,
takže celkové cca 50 metrů s jedním dotekem, tj. odhaduji 45 bodů.
Poslední disciplína, detekce a postřik plevele, byla asi nejzmatenější. Ani teď
vlastně nevíme, co se kde mělo předvést a za co přesně byly body a penalizace.
Navíc jsme postřikovací zařízení sdíleli, takže zde byl netriviální servisní
zákrok v přešroubování a kompletaci závěsného vozíku. Konečně v řádce byla
překážka, do které robot neměl narazit (jeden z dalších týmů ji zničil, tak na
ní asi tak nebazírovali, nevím … v dalších kolech se pak totiž už
neobjevila).
Z pohledu programátora jel Maxík nad očekávání. Posun detekovaného plevele v
obrázku z kamery vůči momentu, kdy se mělo spustit postřikovací zařízení byl asi
75cm. Za tuto vzdálenost ale mohl být detekován další plevel na druhé straně,
případně znova na té samé. Prostě a krátce, roboty nám v 12:30 sebrali a časově
opožděné příkazy bylo nutné naprogramovat naslepo během projevů ministrů,
sponzorů a organizátorů. A bez testu, sigh. A celé to mohlo pokazit první dvě
úlohy … well, nechtěl bych to dělat znovu, ale dopadlo to dobře. Tedy vlastně
nedopadlo. Robot s poměrně vysokou přesností detekoval ohniska plevele, s
houkající sirénou, blikajícími LEDkami a postřikem, který do země udělal pořádnou
díru, ale po průjezdu řádky sudí volal: „STOP, STOP, STOP”. Říkal něco ve
smyslu, že nemáme postřikovat ty zelené čtverečky bez sedmikrásek a jestli to
jsme schopni změnit. Tehdy jsem ho měl za blázna, ale teď si myslím, že bychom
to možná celkem rychle dokázali implementovat. Tedy když najdeme ten zelený
čtvereček, tak bychom udělali v daném prostoru ještě test na bílé pixely a
__možná__ by to fungovalo. No nic. Krásně to stříkalo po zelených čtvercích, ale
bodově to bylo asi špatné. Z logu se teď dá vyčíst, že jsme ujeli něco přes pět
řádek a sprejovali snad 100x, ale oceněno to nebylo. Co mne ale těší je, že v
této disciplíně bodoval UTrooper/Cogito MART.
Volná jízda a spolupráce robotů
Eduro Team a Cogito MART se účastnili i volné jízdy a v plánu byla i ukázka
spolupráce robotů.
Ve volné jízdě měl být robot Eduro Maxi připojen na sledovací zařízení VTU10
zapůjčené firmou MapFactor. Toto zařízení se běžně
používá pro sledování polohy aut, ale má interní akumulátor s dostatečnou kapacitou, aby
nemuselo být stále napájené a lze jím sledovat i třeba osoby nebo balíky.
VTU10 vedle posílání aktuální polohy robota umožňuje i posílání krátkých zpráv
mezi řidičem a dispečerem. Toho jsme s výhodou využili a posílali řídící
instrukce z mobilního telefonu přes trackovací krabičku do robota. Na
satelitních snímcích jsme si vybrali cíl a jeho souřadnice se odeslaly. V
ideálním scénáři by pak robot měl během pár sekund na zadaný cíl vyrazit
(s možností průběžného sledování) a dosažení cíle měl robot oznámit posláním
zprávy.
Píšu hodně v podmiňovacím způsobu, protože vše se do prezentace nestihlo zcela
zprovoznit. Jak se později ukázalo, problém byl v ID zpráv, které musí být
jedinečné přes „život” krabičky, aby bylo možné zpětně zjistit, zda zpráva
byla doručena či nikoliv. Posílací prográmek z PDA ale generoval ID pro každý
běh stejné a tak je server odmítal přijmout. Teď už demo funguje a možná ho
uvidíte v akci na RoboOrienteeringu v
Rychnově nad Kněžnou.
K dispozici jsme měli dvě jednotky VTU10. Druhá jednotka byla jednak záložní a
dále jsme s její pomocí chtěli demonstrovat spolupráci robotů. První robot
jednotku pouze vezl (mohl to být klidně i člověk s VTU10 v kapse), ale jeho
pozice byla sledována a odesílána na server. Druhý robot pak měl sledovat
trajektorii prvního, aniž by ho potřeboval vidět…
Tímto bych rád poděkoval firmě MapFactor za
zapůjčení dvou sledovacích jednotek VTU10 a firmě
T-Mobile, za zapůjčení tří
SIMek s povoleným datovým roamingem v Německu.
Eduro Team
Hardware
Jako platforma byl použit model „Eduro Maxi HD”, tj. větší než znáte např. z
Eurobota, ale stále postavený na SMAC (Stepper Motor – Adaptive Control)
technologii. Jedná se prototyp outdoorového robota pro výuku (Eduro =
EDUcational RObot), výzkum a v neposlední řádě i pro soutěže podobného
charakteru. Podvozek byl tříkolový, diferenciálně řízený. Motory byly
připojeny přes řemenovou převodovku 1:4.
Během soutěže byla zvýšena kapacita baterií na 24V/8Ah, takže nyní by měl být
robot chopen několikahodinového provozu bez dobíjení.
Eduro je modulární systém postavený na sběrnici CAN. Na sběrnici jsou navěšeny jak
jednotlivé senzory, tak motory a správa napájení. Připojit lze libovolný modul
podporující CANopen komunikační protokol.
Řízení nejvyšší úrovně zajišťuje jednodeskový počítač s procesorem řady x86, na
kterém běží operační systém Linux. Počítač má 3 Ethernet rozhraní, 2 USB
porty, 1 RS232 a WiFi. Sériový port RS232 je využíván pro připojení ke sběrnici
CAN.
Hlavními senzory byly IP kamera s s širokoúhlým objektivem, laserový dálkoměr LMS100,
kompas, odometrie a sonar.
Postřikovač
Postřikovač je dílem Milana Kroulíka z České zemědělské univerzity v Praze, katedra
zemědělských strojů. Jedná se o funkční model skutečného postřikovače rozšířený
o světelnou a akustickou indikaci při postřiku.
Základní model je přívěsný vozík, který byl použit k robotu UTrooper. Pro Eduro
pak byla kolečka a oj odmontovány a celé zařízení se rovnou přišroubovalo na
hlavní kostru robota.
Pro snadné sdílení postřikovače mezi roboty měl postřikovač vlastní napájení a
jednoduché ovládání pomocí dvou logických signálů.
Software
Řídící software pro robota byl napsán v jazyce Python. Pro zpracování obrázků z
kamery byla použita externí utilita psaná v C/C++ s využitím OpenCV
knihovny.
Přestože to zpočátku vypadalo na tři různé úlohy, podřilo se je celkem pěkně
spojit:
contest = FieldRobot( robot, verbose ) contest.ver2([-1,1]*10) # Task1 contest.ver2([2,-1,2,-3,-4,0,2,4,-1]) # Task2 contest.ver2([1,-1]*10) # Task3
Pozorní diváci si tedy všimli, že v druhé úloze (Advanced Task) robot ke konci
posřikoval něco, co vypadalo jako plevel . Celý kód specifický pro Field
Robot, včetně logování, pomocných výpisu a rutinami pro postřikovač, je zhruba
300 řádků dlouhý.
Navigace v řádku
V Praze na Suchdole kukuřice celkem rostla a byla pěkně zelená, takže navigace
pomocí kamery byla řádově úspěšnější než z laseru, který podléhal náklonům
robota a často se neměl čeho chytat.
Při navigaci pomocí kamery byla použita jednoduchá barevná segmentace (podobně
jako na soutěži RobotChallenge ve Vídni na detekci puků). Následně v
jednotlivých pásech ve směru vlevo a vpravo byl analyzován počet zelených
pixelů. Tento pás se zastavil, jakmile byl dosažen požadovaný počet. Příklad
detekce vidíte na obrázku:
Detekce plevele
Pro detekci plevele byl nakonec použit stejný algoritmus jako pro hledání
řádky. Jediný rozdíl byl v definici zelené barvy, která byla tentokráte ostře
zelená (v RGB prostoru (G > 1.3*R && G > 1.3*B)). Z obrázku pak vypadly drobné
flíčky a ty odpovídaly hledanému plevelu.
Navigace v řádce pomocí laseru
V Německu bylo daleko spolehlivější pro navigaci použít laserový dálkoměr.
Organizátoři se totiž rozhodli nevyrostlou kukuřici doplnit množstvím cca 30cm
dlouhých zelených dřevěných tyček a ty bylo možné pomocí laseru s půlstupňovým krokem
celkem dobře najít.
Laser směřoval dolů pod úhlem cca 10 stupňů, takže viděl zem ve vzdálenosti 1.7m. Tento
náklon jsme zkoušeli už v Praze, abychom 15cm vysokou kukuřici vůbec viděli,
ale ukázal se lepší i pro dřevěné tyčky. Důvodem byla nerovnost povrchu na
poli, kdy robot v záklonu mohl snadno ztratit tyčky ze zorného pole, přesněji
„řezné roviny” laseru.
Překážka byla definována jako objekt bližší jak 1m. Tím vznikl binární pás
odpovídající jednotlivým úhlům (minimum přes pětistupňové vzorky) a cílem bylo
najít správné širokou mezeru. Samotné debugovaní trošku připomínalo ASCII art z
počítačově prehistorických dob:
RESET ROW (0.00, 0.00, 0.0) ===== ACTION 1 ===== ' xx xxxxxxxx x x C xxx x xx xx x x ' ' xx xxxxxxxx x x C xxx x xx xx xxx ' ' x xxxxxxxx x x C xxx x xxx xx x xx ' ' x xxxxxxxxx xxx C xxx x xx x x x ' logs/cam100612_165004_000.jpg ' x xxxxxx xx xxxx C xxx xx xx xx xx ' ' x xxxxxx x x xx C xxx x xxx x x xx ' ' x xxxxxxxx x xx C xxx x xxx xxxx x ' ' xx xxxxxxxx x xxx C xxx x xx x xx ' ' x xxxxxxx xx xx C xx x xx xx x ' logs/cam100612_165004_001.jpg ' x xxxxxxx x xxx C xx x xx x ' 'x xxxxxxxx x xxx C xxxx x xx x ' ' xxxxxxxxxx x xxx C xxxx x xxx xx x ' ' xxxxxxxxxxx xx C xxxx x xxx x x ' logs/cam100612_165005_002.jpg ' xxxxxxxxxxx x C xx x x xxxxx xx xx' OFF 7 7 14 ' x xxxxxxxxx xx x C x x xxxxx xx x' ' xxxxxxxxxx xx x C x x xx xxxx x ' ' xxx xx xx xx xxx C xxxx xx xxxx xx' ' xxx xxx x x x C xxx x x xxxxx x'
Pokud vás zajímá, co je co, tak 'x' jsou překážky, 'C' je posuvný střed, kam se
robot snaží dostat a občasná jména souborů jsou referenční snímky z kamery.
Testing, testing, testing …
Závěr
Myslím, že soutěž Field Robot Event mohu vřele doporučit všem, koho zajímá
robotika a má něco společného se zemědělstvím. Ano, na to dokonale pasuje Česká
zemědělská univerzita v Praze a katedra zemědělských strojů . Jelikož
sestavit úspěšný tým není nic jednoduchého (letos se to povedlo!), tak pokud
vás soutěž zaujala a máte např. něco společného s ČZU, tak se nám ozvěte a
přibereme vás na FRE2011, které se bude
konat 2. července 2011 v Herningu, Dánsko.
Možná perlička na závěr, chcete vědět jak dopadl Eduro Team v „Profesionální
úloze”? Eduro Team vyhrál! Chybou v excelovském sheetu, ale cenu přebral Optimizer, který
skončil na místě sedmém. Musím přiznat, že soutěž je celkem náročná na
organizaci a až na pár drobností (jako tato), byla o třídu lepší než loni. Jen
tak dál .