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 |
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é …