aneb jak postavit vítězného robota snadno a rychle
Úterý – druhý den maturit (tedy pro mne jako zkoušejícího)
Mezi ranním a odpoledním blokem zkoušení nemám moc chuť něco dělat. Prohlížím tedy jeden z oblíbených webů – Robodoupě. Letmo si povšimnu upozornění na soutěž 20. 6. 2020 v Olomouci – RoboTrip summer. To je něco nového, to neznám. Procházím stránku soutěže a pravidla, ale moc moudrý z toho nejsem. Má to být především pro děti a přitom se má jezdit po parkových cestách. To je úkol jako na Robotour, který vlastně pořádně nezvládli ani největší borci za těch 15 let, co se koná.
Večer po příchodu domů jsem informován, že bychom o víkendu měli jet navštívit tchýni, kde jsme od začátku koronamoru nebyli. Tuto informaci přijímám jako něco, co se musí občas skousnout.
Středa – třetí den maturit
Ráno než začínáme zkoušet, pročítám poštu a okem spočinu na nezavřené stránce soutěže. Mám ještě chvilku, tak znovu pročítám pravidla, jestli nepochopím, o co jde. Ještě se zkusím podívat na fotky ze závodního prostoru. A jejda. Ta parková cesta je cyklostezka s plnou bílou čárou uprostřed. To zcela mění náročnost úkolu. Úkol je tedy projet celou parkovou cestičku o délce 900 m co nejrychleji. Hodnotí se ujetá vzdálenost po opuštění cesty a v případě dokončení celé trati, pak čas.
V hlavě mě probleskne myšlenka, že by se dalo spoji nutné zlo s něčím příjemným. V pátek bychom jeli na Moravu k mamince a v sobotu bych si už jen odskočil do Olomouce na soutěž – alespoň bych měl dobrou záminku proto se vypařit. Myšlenka pomalu zraje.
V poledne už přehrabuji „sklad“ robotického haraburdí, abych našel něco, co by se dalo použít. Volba vozidla je jasná. Maxi, se kterým jsem jel loňský RoboOrienteering je stále mimo provoz. Letos se soutěž nekoná (mimochodem měla být právě 20. 6.), a tak mě nic nedonutilo podvozek dodělat. Proto vytahuji ze skříně malou čtyřkolku naposledy použitou na RoboTour 2008 – jak ten čas letí. Bohudík není příliš zkanibalizovaná, je téměř kompletní – servo řízení, H-můstek, enkodér, chybí jen původní deska řízení motoru. V nejhorším tam vrznu arduino.
Teď už jen vymyslet jak jet po té cestě. Infračervené snímače, které se běžně používají na čáru, venku moc fungovat nebudou, to už jsem si vyzkoušel. Co takhle použít kameru? Zatím jsem se jí bránil, vždy mi to přišlo zpracování obrazu složité a ne moc spolehlivé. Jediné, co jsem s ní zatím zkoušel, bylo vyhledávání barevných předmětů. S řídicím počítačem stavebnice Fischertechnik a využitím předprogramovaných funkcí jsme sledovali barevný míček. No, oranžový míček to na modrém linu za dobrého osvětlení celkem obstojně identifikovalo.
Ještě než vyrážím po páté hodině domů, zkouším, jak by to tu čáru zvládalo. Čára na silnici je asi široká jako půlka kratší strany A4. Překládám tedy papír podélně, vytahuji stavebnici a testuji. První dojem je poměrně dobrý, nachází to celkem spolehlivě papír – čáru na světle hnědém povrchu stolu. Zkouším ještě kam tu kameru na robota namontovat. Stojánek po kompasu (který tam už není, byl někdy zrecyklován) bude vyhovovat, chce to jen nějaký držák.
Plán je tedy jasný, mám na to jeden a půl dne. Tedy teoreticky, ve čtvrtek ještě od 8 do 16 s přestávkou zkouším, ale v pátek už bude volno, i když jen dopoledne. Odpoledne už odjíždíme.
Večer ještě popřemýšlím o co nejjednodušším dokončení hardwaru a návrhu softwaru.
Čtvrtek – čtvrtý a poslední den maturit
Ráno si trochu přivstanu a vyrážím do školy už o půl sedmé. Rychle kreslím držáček na kameru a dávám tisknout. Ještě než jdu zkoušet, ho testuju. Celkem to vyhovuje, ale chtělo by to mít možnost měnit sklon kamery, aby se dala zvolit vzdálenost před robotem, kde bude hledat čáru. Začínám upravovat model, ale práce volá.
V polední pauze dokončuji model a dávám tisknout hned třikrát. Stejný držák půjde použít i na sonary.
Poslední den maturit končíme „už“ ve čtyři. Konec zkoušení byl poněkud infarktový. Prší celý den, ale kolem půl čtvrté přichází bouřka a s ní i několik krátkých výpadků elektriky. Ještě, že to bylo 5 minut před koncem zkoušky posledního studenta. Ono zkoušení CADů na počítači bez elektriky není úplně to nejlepší. To důležité jsme viděli a posledních 5 minut jsme si o tom už jen povídali. Po rychlém kafi a zákusku spěchám do laborky.
Montuju držáky kamery a sonarů na robota. Ještě bude potřeba nějak přidělat počítač – kostku ze stavebnice. Maluju další díly na montáž a dávám tisknout. Během tisku řeším baterky. Robot je navržen pro oddělené napájení motorů a elektroniky. Bude se to hodit, ten Fischer s kamerou má docela spotřebu. Jeden pack lionek vytahuju z Maxiho, ale druhý použitelný nikde není k nalezení (dva další byly ve skříni, ale napětí dvoučlánku pod 4 V moc důvěru nedává). Minulý týden jsem repasoval kamarádovi baterku do křoviňáku, tak vytahuji, co mi zbylo. Dva obstojné články tam byly. Výroba packu a další kabeláže akorát vyplňuje čas tisku držáků. Dávám všechno dohromady a ještě před šestou mířím domů. Jako obvykle čekám, že jsem ve škole poslední, ale dnes je to jinak. Ten déšť byl poněkud vydatnější, i když v zaujetí práce jsem si toho moc nevšímal. V šatnách a skladu v suterénu je už 10 cm vody a „pěkně“ to stříká ze zdí a spárami mezi dlaždicemi. Rychle se vytrácím, abych také nedostal od školníka kýbl.
Po příchodu domů dostávám čerstvou informaci, že se nikam nejede. Tchýně má prý moc práce, a tak nás tam nechce. Tak teď nevím, zda je to dobrá, či špatná zpráva. Spíš špatná. Takhle tam pojedeme asi příští týden a to už nebudu mít výmluvu na soutěž.
Pátek – „volný den“
Přicházím do školy a přemýšlím, co vlastně budu dělat. Měl bych dát do pořádku laborku – tedy uklidit. Moc se mi do toho nechce, a tak mě přepadá myšlenka, že bych toho robota přeci jen dodělal.
Hledám nějaký software, který jsem používal pro řízení motorů. Bohužel původní nejde použít, protože jsem tam dal jinou desku – zkanibalizoval jsem delta manipulátor. V ní je jen ATmega8 na 8 MHz oproti původní desce s ATmega328 na 16 MHz. Chybí mi čítač 0, který v 328 umí generovat pwm. Tak beru sw z Maxiho, předělávám části s čítači. No hrabat se v léta starém softwaru je docela zajímavé (hlavně ta část v asembleru).
Pomalu to oživuju, kupodivu to vypadá, že to bude i fungovat. Servo řízení běží, enkodér taky. Zkouším pustit motor přímým nastavením pwm a nic. Vždy sebou jen cukne. Kontroluju můstek – ok. Píšu kód jen pro zapnutí výstupů – ok, motor jede. Znovu kontroluju nastavení čítačů, přerušení, … nic. Více než hodina zabitého času.
Ponaučení, pokud zkouším jen funkci můstku, měl bych si vypnout ten PI regulátor, co má řídit otáčky a hrabe mi tak do toho, pět řádků za nastavením pwm.
Zbývá komunikace s počítačem z Fischera přes I2C (důvod proč jsem tam dal tuto desku, na ní mám I2C vyvedené). Kdysi jsem I2C slave pro AVR psal pro inteligentní snímač čáry, takže vyhledám a přidávám do kódu.
Propojuji s Fischerem a zkouším něco poslat do AVR. Motor opět nic, servo řízení funguje. Zjišťuju, že ta implementace I2C slave je nějaká divná. Příznak dokončení zápisu přijde jen po zápisu do posledního registru. Nebudu to teď řešit, vždy pošlu hodnotu pro motor i servo.
Zbývá software do Fischera. Algoritmus super jednoduchý. Blok hledání čáry umí vrátit pozici od středu obrazu a pravděpodobnost nalezení čáry. Povel pro servo řízení je tedy přímo odchylka čáry od středu. Pokud je pravděpodobnost nalezení čáry více než 50% jedu plnou rychlostí, pokud je menší tak zpomalím. Pokud sonary vidí překážku, motory zastavit a zahoukat. To je vše – práce na 10 minut.
Kolem poledne tak mám hotovo. Jdu domů, stále prší.
Odpoledne tak trochu proflákám (aktivní odpočinek ve vodorovné poloze) s neradostným výhledem, co budu dělat o víkendu, když stále prší.
Kolem půl šesté přestává pršet a tak vyrážím ven. Napadá mě, že bych se mohl stavit ve škole pro robota a vyzkoušet ho. Přesouvám se tedy s ním na dopravní hřiště. Pouštím ho na části plné čáry. JEDE. Dokonce překonává i mezery v přerušované čáře. I s vyšrafovanou částí si poradí tak, že se chytá na levou okrajovou čáru. Super. Objíždí na první pokus celé dopravní hřiště, cca 150 m. Opět začíná pršet.
Testování na dopravním hřišti (natočeno až v neděli po soutěži – ale stále funguje).
Skoro je mi líto, že na soutěž nejedu, když to vypadá, že robot funguje. Dan mě hecuje, že přeci můžu jet do Olomouce jen na soutěž. Vidina odjezdu v 6 hodin se mi moc nezamlouvá.
Nechávám to na ráno s tím, že se uvidí, i když předpověď je pesimistická – má celý den pršet.
Sobota – soutěž
Nějak nemůžu dospat, jsem vzhůru už před pátou. Stále prší. Přesto vstávám a jdu udělat pláštěnku na robota.
O čtvrt na šest vstává má drahá polovička – asi jsem ji vzbudil –, a že pojede se mnou. V šest vyrážíme.
Po poklidné cestě v 8 hodin dojíždíme do Olomouce. Prší jen lehce. Přesouváme se do Pevnosti poznání (náhodou už vím, kde to je). U vchodu narážíme na hlavního organizátora Radima Děrdu. Je velmi potěšen, že někdo přijel. Dáváme se do řeči a přesouváme se na místo startu. Zde už se trousí další účastníci, povětšinou mládež s roboty z Lega. Potkávám i známou tvář, Tomáše z Jedovnice. Nakonec je účast nad očekávání – 13 soutěžních robotů.
Připojuji robota k notebooku, abych se podíval, jak uvidí čáru. Katastrofa. Čára je výrazně širší, zabírá téměř polovinu šířky zorného pole a hlavně je to ukrutně přepálené. I když je pod mrakem, tak je světlo výrazně větší než v šest večer. Robot chvílemi čáru vidí s pravděpodobností 10%, ale když zmenším sklon kamery, aby se čára jevila užší, tak ji ztrácí úplně.
V hlavě mi vyvstává vzpomínka na první RoboOrienteering u nás v Rychnově, kde Jirka Iša (doufám, že to byl on), řešil stejný problém s přepálením obrazu. A vyřešil to nasazením slunečních brýlí webkameře. Vracím se do auta a prohledávám kastlík, kde by měly být staré sluneční brýle s vypadávajícím sklem. Jsem úspěšný a tak mám sklíčko ze slunečních brýlí. Teď ještě jak ho tam připevnit. Rezignuji na všechna optická pravidla a natvrdo omotávám kameru přes sklíčko izolepou (ta je přeci taky průhledná).
Musí to držet, ta středová čára je s nějakými výstupky (snad pro slepce nebo proti usnutí na kole?), takže robot na tom pěkně poskakuje. Výsledek je ohromující. Pravděpodobnost nalezení čáry kolem 50 %. Robot je připraven.
Soutěž pomalu začíná. Vzhledem k počasí a očekávanému nízkému počtu účastníků je organizace velmi volná. Jediný vyhrazený rozhodčí se vydává na 900 m dlouhou trať s prvním robotem, který se už podle testů řadí k favoritům. Podvozek z RC auta, řízení Raspberry Pi s kamerou. Jede spolehlivě a hodně rychle. Dlouho se nevrací, takže odhadujeme, že to projel celé. Nakonec urazil za 11 minut asi ¾ tratě. Projevuje se problém, že je jen jeden rozhodčí a při takové vzdálenosti to trochu trvá. Závěr je ten, že si to budou soutěžící měřit sami nebo s nimi půjde někdo jiný.
Prší jen lehce, a tak vypouštím mého robota na trať. Jede spolehlivě, v místech, kde je cesta méně mokrá vidí čáru dobře, a tak jede plnou rychlostí. V místech, kde stojí voda, která světlo odráží, zpomaluje, ale čáru nikde neztrácí. Pokud to robot dojede, bude to trvat při jeho rychlosti asi 0,5 m/s zhruba půl hodiny. Asi v polovině trasy začíná silněji pršet. Míst, kde stojí voda je více, a tak jede skoro pořád pomalu. Objevuje se další nepříjemnost. I přes kryt proti dešti, který přesahuje sonary o 3 cm, se některé kapky dostávají až na něj a způsobují falešnou detekci překážek. Robot se občas zastavuje a houká. Ale vždy to nakonec nějak skápne a robot pokračuje dál. Úspěšně přijíždí do cíle v čase 31 minut 1 sekunda. Úkol je splněn.
Při návratu na start potkáváme další roboty, kteří se zarputile rvou o každý metr. Prší stále silně. Lego roboti brodící se kalužemi s deštníky, které nad nimi nesou soutěžící, jsou úžasní.
Dalším úspěšným robotem je robot z Lega v čase 49 minut. A nakonec ještě jeden lego robot dosáhne cíle s časem 47 minut. Neskutečné. I ostatní lego roboti jeli dobře, ale někteří opravdu nevydrželi vodní koupel, většinou utopili světelná čidla, která měli blízko země. Největší adept na dobré umístění nakonec k druhému pokusu nenastoupil. S postupujícím časem se i přes pršení zvyšovala intenzita světla a tak měl podobné problémy s kamerou jako můj robot. Celou trať tedy absolvovali tři roboti.
Soutěž měla úžasnou komorní atmosféru, kde se nikdo nehnal za výsledkem. Ale všichni se až dokonce snažili, aby jejich robot podal maximální výkon. Ještě jednou smekám před účastníky s roboty z Lega (doufám, že je bez úhony vysuší). Nakonec bych chtěl poděkovat organizátorům za krásný, i když hodně mokrý zážitek.