czech english

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.
Pole po příjezdu ...
Pole po příjezdu ...
... a po Milanově a Standově úpravě
... a po Milanově a Standově úpravě
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í.
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 …

Na konec bych zmínil, o čem to celé je … je to o testování, jak daleko jste se dostali. A že nemáte pole kukuřice? Nevadí, viz políčko z plevele, které bylo upraveno, jako by tam byl sázen s úmyslem (Jirko a Honzo, dobrá práce!).

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 .

Eduro Maxi HD

UTrooper

Tým

Vzducholoď

Fatima

Postřikovač



Letecké snímky od FernUniversität in Hagen


Odkazy: