czech english

RoboOrienteering 2016

John Deere Mission Impossible 002

RoboOrienteering v Rychnově nad Kněžnou už má mnohaletou tradici. Letos jsme soutěž, se souhlasem organizátora Martina Lockera, „zneužili” k dosažení dalšího milníku ve vývoji autonomního zahradního traktoru John Deere X300R. Update: 14/6 — video ze soutěže

Po soutěži Robotem rovně 2016, kde se upravený zahradní traktůrek John Deere X300R poprvé automaticky rozjel, jsem přemýšlel, jak projekt posunout dál. Soutěž RORO16 nás nastartovala, ale robot dosud neuměl zatáčet, což v Písku nevadilo. Jako jediná cesta se jevila další soutěž a ve výhledu (nezdravě blízko) byl právě RoboOrienteering. Tomáš Roubíček, který na robotu dělá veškerou elektroniku, to komentoval se slovy: Martine, tobě jedna "Mission impossible" nestačila? RR byla šílenost, ale RO je mega šílenost, ne-li utopie. Pokud ale myslíš, že ten SW za 2 týdny dáš, tak ten HW nějak dohromady taky dáme. … a klobouk dolu, opravdu dali . Tak postupně.
[Mezi RR a RO byly sice 3 týdny, ale to víceméně znamenalo 2-(3) večery. S RO se nepočítalo, takže se to začalo řešit až 14 dní do soutěže.]
JD nikdy automaticky nezatáčel. Navíc se ukázalo, že to ani nejde — byla potřeba jedna z dalších netriviálních revizí, kdy Standa opravil směr otáčení (pro jednou prohození otáčení byla sranda, ale stačilo to). První měření naznačovala, že ventily jsou sice 12V, ale vyžadují 5A elektroniku. Nic podobného neměl Tomáš „po kapsách” a objednávky přece jenom nějaký den trvají. Rychlé řešení Tomáš nakonec vymyslel, ale v úterý, 3 dny do soutěže, součástky pro toto řešení ještě nedorazily.
Kdy John poprvé „zahnul”? V pátek večer, cca v době, kdy jsem slíbil Martinovi Lockerovi, že už budeme v Rychnově (a ano, byli jsme ještě tou dobou v hale na ČZU).
Ono se to vlastně všechno dalo do pohybu teprve týden před soutěže. První cíl bylo rozchození verze s Velodyne VLP-16 senzorem, aby, když traktor vidí překážku, zastavil. Toto mělo být připravené už v Písku, ale úplně se to nestihlo. První ostrý test proběhl v úterý (viz video), kdy jsme traktoru dali do cesty sloup z AirRace a zastavil cca 10cm do nárazu. Při druhém pokusu natvrdo narazil a situaci řešila STOP tlačítka.
Další test jsme chtěli udělat venku s dobrým GPS příjmem — přece jenom RoboOrienteering je outdoor soutěž. To přece vyjedeme automaticky ne? Robot lehce poskočil a jen tak tak líznul vstupní bránu! :-(
Pořádná komedie nastala teprve venku. Před halou technické fakulty měl Standa zaparkované auto, ale tomu se kupodivu nic nestalo. „Zkusíme překážku?”, ptá se Standa. Souhlas a poměrně nečekaná reakce traktůrku — nejen, že zastavil, ale doslova skočil zpět a začal rychle couvat. STOP tlačítko.
To nám pro poprvé jako zdroj adrenalinu stačilo, ale dat jsme zatím moc nenasbírali. Standa přepnul na manuální řízeni, sedl na traktor a že ho odveze zpět. Já pustil prográmek, který dál hýbal s pedálem, jenom teď byl spojovací čep vytažený. Vše v pohodě, jen na cestě zpět se na mne Standa divně podíval a traktor vyrazil rychle vpřed. Říkal jsem si, že chtěl asi zkusit rychlejší jízdu, ale ten pohled byl co to tam děláš?! Jede to samo a pedál je u podlahy! Posun pro automatické řízení totiž vypadl a zasekl se mimo a navíc se snažil přidat kvůli dostatku volného místa před traktorem. To byla opravdu poslední kapka/třešnička na dortu a stačilo. Nehledě na to, že bylo skoro 22h a každou chvíli se měl zapnout školní alarm.
Na středu jsme si dali volno, resp. pokračovali každý sám. Když se podíváte na video znovu, tak si všimnete, že tam problikávají takové zuby/výřezy. Procházel jsem logy z Velodyne a opravdu tam chyběly některé pakety (mají 1206 bajtů a odpovídá to cca pěti stupňům dat). Systém je tedy nestíhal dostatečně rychle odbavovat a byla to i indikace zběsilého chování, kdy robot vnímal realitu ze starých dat.
Důvod byl nakonec celkem prostý (vyřešeno v pátek ráno): po nastartování programu se vytvoří Velodyne objekt, ale tím už začne dostávat data. Vlákno na zpracování jsem ale zapínal až po stisknutí startovacího tlačítka a tak nejprve musel vyčíst vše co tam za to mezidobí zůstalo. Fixed.
Páteční plán byl vyrazit cca v 17h z Prahy, v Rychnově povečeřet a případně udělat ještě nějaké testy v parku. Ono ale na JD bylo ještě hodně práce (Tomáš si na to vzal celý den dovolenou) a v kombinaci s opožděnou dodávkou součástek to bylo fakt kruté. Nicméně v 20:18 proběhl první test s otáčením bez motoru (tj. že správně cvakají ventily) a 20:39 traktor poprvé elektronicky zatočil, řízen z APU2 počítače.
Řízení v té době bylo zcela bez zpětné vazby, tj. pouze délkou pulzu se určovala doba otevřeného ventilu, nesymetricky. Hodnoty 0.8s a 1.2s pro zatáčení vlevo a vpravo vypadaly rozumně. Robot by se poprvé homologoval ve 21:13 (v pravidlech je, že se musí vyhnout překážce, ale pak jsme se dozvěděli, že by stačilo zastavit).

Příjezd

Do Rychnova jsme, k nemalé radosti Martina Lockera (ironie), dorazili až po půlnoci, vlastně skoro v jednu hodinu. Chvíle spánku a od 5:00 pokračování. Tomáš se mne ptal, jestli chci raději funkční enkodéry umožnující zpětnou vazbu alespoň při jízdě nebo zařízení na vyhazování míčku. Volil jsem vyhazovač — náš cíl je dát alespoň jeden bod a bez vyhazovače to fakt nedáme . Racionálně bychom měli spíše řešit ty enkodéry, které se budou hodit i později, ale jsme na soutěži a chceme bodovat!
Outdoor testy na parkovišti proběhly celkem fajn. Na Jakubovo doporučení jsme pravo-levé zóny z Velodyne zjemnili po pěti stupních, aby při zatáčení vpravo robot ignoroval překážky vlevo, ale ve finále jsme tento kus kódu nevyužili. Někomu by mohlo přijít smutné, že z 8Mbit/s prostorových dat ze šestnácti laserů vezmeme jen minimum v dané sekci a to je vše, ale nějak se začít musí . Po revizi tedy 6 čísel odpovídajících limitům -25, -20, -15, 0, 15, 20 a 25 na 10Hz.
Řídicí logika byla jednoduchá: když je překážka na 4m zatoč vpravo, když je moc blízko (2.5m) zastav, a když široko daleko nic není (více jak 4.5m) a zatáčíš, tak srovnej kola. Tímto způsobem jsme alespoň tušili, kterým směrem traktor vyrazí a ano, nebylo to dvakrát inteligentní chování. Pokud byla překážka vpravo, tak do ní ještě více zatočil.
Pro homologaci už volil lepší směr, ale chyba lávky. Startovalo se uprostřed parku, mírně do kopečka a tak se traktor s malým plynem nerozjel. Změnil jsem požadovanou polohu pedálu z 18000 na 20000, vystartoval, u překážky zatočil vpravo a následně se snažil srovnat a prásk! Rána a evidentně se uvnitř něco pokazilo. Po odstranění krytu se ukázalo, že vylítlo těsnění z desky rozvaděče (hned vedle orbitrolu). Hydraulika není sranda a toto de-facto byla konečná. Neměli jsme ani nástroje ani náhradní součástky. Problém byl na 90% špatně nastavený tlakový ventil.
První pokus o opravu naslepo nevyšel a Milan zodpovědně kapituloval. Standa odmítal (přece jenom s tímto strojem zápasí už nějaký čas) a vyrazil s Jakubem na procházku po místních obchodech s autodíly. Já jsem šel psát kód na vyhazování míčku na GPS souřadnicích (částečně Copy & Paste z roku 2012?) a Tomáš vymýšlel mechaniku na vyhození míčku.
Jak to dopadlo? Provizorní těsnění částečně fungovalo, ale zatáčení jsme se rozhodli omezit na minimum. A software status? Výsledný algoritmus byl postaven čistě na GPS souřadnicích a míček se odhazoval, pokud se vzdálenost od cíle zvětšila. Toto vše o okruhu 10m od kuželu. Otázka byla jak volit cíl? Stačilo by nám vybrat jeden, ale na startu je trošku stres, soutěžící dostane pouze USB disk se zadáním a není rozumné cokoliv editovat. Řešení bylo nakonec triviální — naviguj na všechny cíle najednou, tj. použij minimum ze všech vzdáleností.
V mezičase Tomáš připravil servo s CAN modulem na vyhazování míčků. Alternativní plán byl jet rovně (pokud z důvodů problémů s hydraulikou nelze zatáčet) a u prvního cíle odhodit míček. První vyhazovací test proběhl v 11:33. Nefungoval, protože modul nedostal domluvené ID=5, změna na ID=0x7F. Další pokus v 11:35 s novým ID. Stále nefunguje. Tomáš zkouší znovu ze svého notebooku a nachází špatný kontakt u prastarého CAN modulu. Fixed. 11:46 první úspěšné vyhození.

Kolo 2

John Deere 2.kolo
John Deere 2.kolo
Soutěžíme! Start je na cestě u dětského hřiště, podezřele blízko cíle (GPS hlásí 14m) — úplně to vidím, že se chytne cíle místo prvního kuželu a krátce před startem edituji kód. Ono v tom Pythonu je to jen změna na waypoints[1:-1], ale znáte to . Přehrání logu funguje, tak snad odstartujeme. Traktor jede mírně vpravo a tak kužel míjíme sice do vzdálenosti 10m, ale mimo bodovaný kruh (5m). Vyhazuje nebodovaný míček, ale necháváme ho jet dál. Zastaví se pod nižší větví, nadzvedáme větev a traktor pokračuje na další kužel. Druhý výhoz není implementovaný a přestože Tomáš nabízel ještě druhý podavač, tak jsem odmítl. Nicméně traktor u kužele pozastavil, což rozhodčí klasifikoval jako motivační výhoz … ale tyto body nejsou „košér” a nezasloužíme si je.

Kolo 3

Do posledního kola reviduji waypointy (po dosažení odmaž ze seznamu), a před vyhozením se zastavuje a podavač vrací do nulové polohy. Hydraulika prý jeden pokus vydrží, tak odkomentovávám posílání pulzů na ventily. Máme jen jednu šanci, tak si jí užijeme. Kužel, který jsme si vybrali, se ukázalo, že je cíl a za něj žádné body nedostaneme. Traktor pouštíme na „náhodnou procházku” s vyhazováním, kdyby jel okolo nějakého kužele. Věřte nevěřte vyhnul se pár stromům a bodoval u
K4: 50.166352 16.278328 55
Dostáváme zasloužené body a dokonce porážíme TeaPack Systems, viz výsledky. Jsem rád, že by tomu tak bylo i v případě nepočítání druhého kola. Prima.

Závěr

Pokud se chcete podívat na soutěžní kód, viz
(očekávám masivní revizi, tak jsem to raději otagoval).
Za sebe jsem spokojen, vlastně velmi spokojen! Mise splněna (bodovali jsme), tým fungoval skvěle, jen jsem ještě teď po třech dnech stále unavený . Pomalu přemýšlím o třetím kvantovém skoku, ale show pro ministra to pozítří v Nabočanech asi nebude. Potřebujeme „dobít baterky” (lidské).
Čtenářům se omlouvám, že tento report je čistě egoisticky o našem týmu. Mariánky byly jednoznačný vítěz, Aleš s autíčkem se jim snažil dělat soupeře, ale přesto dostatečně nebodoval. TeaPack bych pochválil za snahu (celý den tam Honza něco kutil a nakonec robot alespoň jednou skóroval). Co měli za problém matfyzáci netuším a Pavla (ND Team) bych pokáral, že nefunkční robot ve dvě hodiny ráno není omluva . Ale Pavel je sám a ono je to hodně o týmu. Což mi připomíná návrh na změnu pravidel, kterou Martin Locker komentoval, že to bude těžké, když jenom dva týmy jezdí, ale … stejně ji ventiluji. Třeba se někdo chytne .

Foto


Video (autor David Obdržálek)

foto od Davida:


Odkazy


Návrh na rozšíření pravidel

Motivace

Robotické soutěže jsou primárně o soupeření a spolupráce týmu je spíše vedlejší efekt (něco jako nemá někdo měřák, náhradní sonar, klíč 22 a pod). Z toho to pohledu se mi líbil Field Robot Event 2012, kde byl i Cooperation Task. Dva náhodně spárované týmy měli během dopoledne připravit demo nějaké spolupráce robotů. Byla to sranda, pořádný „brain storming” a oba týmy se lépe poznaly, včetně detailů obou robotů.
Druhou inspirací je Eurobot, který měl vždy pravidla stavěná tak, aby jedna úloha byla triviální a její rozšíření těžké. Každý tým si tedy našel to své a, pokud byl rozumný, tak začal nejprve s jednoduchou úlohou, aby zjistil, že až tak jednoduchá není.

Kvalifikace

Dopolední kola by byla úplně stejná jako letos, tj. start/waypointy/cíl, vyhazování míčků pro poloměry 2.5m a 5m. Obě kola by se ale počítala, aby součet bodů lépe definoval výsledné pořadí.

Capture the Kužel

v odpoledním programu by se týmy rozdělily na dvě skupiny. První a druhý tým podle kvalifikačního pořadí by byly vedoucí a buď by si vybíraly nebo losovaly nebo nějak systematicky přibíraly další týmy. Každý tým by měl svoji barvu golfových míčků (jsou bílé a zlaté např.), která by se losovala a ve druhém kole prohodila. Obě skupiny by se společně snažily obsadit co nejvíce kuželů. Obsazení znamená položit více bodovaných míčků než soupeř (na začátku by každý dostal zase 5 míčků). Startovali by všichni současně od různých kuželů (asi by se tím rušil start a cíl?) a na „souboj” by bylo zase 30 minut (nebo možná hodina?).
A teď ta těžká úloha — míčky by bylo možné během soutěžního času i automaticky sbírat a ubírat tak nepříteli body. Asi má Martin pravdu, toto je asi v našich současných podmínkách zatím nepředstavitelné …