Robotem rovně 2013
fandorama reportáž
Soutěž „Robotem rovně” se letos konala již popáté(!). Je to oblíbené zahájení sezóny autonomních outdoor robotů, konané současně s píseckým Cipískovištěm. Pro robotiky je to ideální příležitost oprášit staré nebo vyzkoušet nové stroje. Robotická špička je už dost těžko překonatelná, ale vezměme to od začátku …
Jede se za každého počasí. Tečka. A to počasí bylo v 7h ráno opravdu
odrazující. Sám jsem z chaty vyrazil cca v 5:30, v holinkách a gumovém obleku v
silném slejváku přebrodil zahradu k autu a po dálnici měl pocit, že jedu moc
rychle, přestože ručička neukazovala ani 100km/h. Čtyřtulku jsem měl sice s
sebou, ale v tomto počasí by jí kapky deště umlátily a co by to udělalo s vodě
snadno dostupnou elektronikou ani nechci domýšlet.
No nic, řízení počasí je drahá záležitost, a tak ho organizátoři objednali až
na 8h, kdy začínaly homologace. Přestalo pršet, roztrhalo se to a následoval
krásný slunečný den … .
Letošní startovací listina byla poměrně plná. Když jsem před dovolenou koukal
na
seznam
týmů, tak se mi nechtělo věřit, že dorazí 14 robotů včetně dvou zahraničních!
Tonda Seiner ve svém
článku
moc nepřeháněl, když tvrdil, že zde byla celá Robotour robotická špička.
Abecedně: ARBot, Radioklub Písek, Roboauto a Short Circuits Prague. Až mne to
samotného překvapilo. Soutěž „Robotem Rovně” tedy není jen vhodná příprava na
těžkou Robotour, ale je to i vhodné místo pro tréning zkušených týmů. A na
rovinu, je to i krásná příležitost se zase vidět s ostatními robotickými
nadšenci a to ve velmi přátelském prostředí.
Autíčka
Přiznám se, že jsem kategorii „Autíčka” příliš nesledoval. Zúčastnit se snad
může libovolný stroj, kde dáte cihlu na plyn a pustíte ho . Z tohoto pohledu
mne zaujal především tým „Trpaslíci”, který se proháněl po parku a když došlo
na soutěž, tak táta klukům autíčko sebral, připevnil volant gumicukem a už se
závodilo. Bodově se jim příliš nedařilo, ale byla to krásná ukázka jak z hračky
udělat soutěžní autíčko.
Tuto kategorii vyhrál tým Hejtmi s hračkou traktoru, který měl pevnou přední
osu. V obou kolech ujel více jak 60 metrů a tím pokořil i mnohé roboty.
Roboti
Tady byla konkurence až krutá. Letos na vítězství už nestačilo 4x dojet až do
konce (314 metrů), ale museli jste tam navíc být rychle. Rychlejší byl
robotický klub Mariánské Lázně a druhý tedy skončil ARBot. Třetí místo, prý už
klasicky, získali domácí — lokotka Radioklubu Písek, která ve druhém kole
trošku zaváhala s chybělo jí do cíle 34m.
V pořadí týmů následuje skok, kdy roboti ztratili zhruba jedno kolo: Short
Circuits Prague na čtvrtém místě a Roboauto na pátem. Po dalším propadu
následuje německý tým JFCC na šestém místě, který bodově za čtyři kola zhruba
nasbíral celý úsek (317 bodů).
Požádal jsem několik týmů o odstaveček a zde je jejich kompilace.
RK Mariánské Lázně
Robotický klub Mariánské Lázně letos vyhrál už potřetí. Jejich robot Explorer
trasu 4x projel bez problémů. Pro navigaci používal mechanické gyro
pravděpodobně z tanku T72. Nevím, zda mne v roce 2011, kdy jsem robota v akci
poprvé viděl, zaslepila závist, ale … letos mi došlo, že integrace tohoto
senzoru nemusí být vůbec triviální. Potvrdil mi to i vedoucí kroužku Karel
Čermák. Nakonec sepsal celý článek pro připravované webové stránky:
Psal se rok 2010 a nějakou náhodou jsem narazil na stránky kufr.cz, kde mě
zaujala soutěž RORO. Spíše ze zvědavosti jsme narychlo upravili autíčko a se
synem vyrazili omrknout, o čem to vlastně je. S velkým zaujetím jsem sledoval
tu spoustu lidiček, snažících se dojet se svými udělátky co nejdál rovně.
První, co nezasvěceného napadne je, že to nic není. Rovně přece umí jet kde co.
Ale hned po prvním pokusu asi každý rychle zjistil, že opak je pravdou. Rovně
prostě nejede nic. více ...
ARBot
Aleš Ruda píše:
Po zkušenostech z minulých let jsem se rozhodl nevymýšlet pro letošek nové a
dokonalejší algoritmy, ale soustředit se na jejich perfektní odladění. Jedinou
změnou tak byla předělávka algoritmu pro detekci hranice vozovky. Jinak vše
při starém. Robota jsem testoval na téměř rovném úseku mezi Jižákem a
Kateřinkama o délce cca kilometr. Vše fungovalo více jak dobře.
Příprava na Robotem Rovně 2013:
video
Na vlastní soutěž jsem jel s velkou nadějí. Počasí po cestě do Písku vypadalo
dost děsivě. Naštěstí v 8 ráno se na jiho-západě objevilo modrojasno a tak už
to zůstalo po celý den. Na startu prvního kola jsem vtipkoval se sudím, že se
nebudem vzájemně zdržovat ať tam napíše 314 metrů. O 12 minut později robot
skutečně 314 metrů ujel. Stejného výkonu dosáhl i v dalších kolech jen v
malinko lepším čase.
Na trati se projevoval jediný problém pár metrů před prvním stánkem, kdy robot
3 krát ze 4 případů prudce zahnul doleva, ale po cca 1 metru se zas srovnal. Po
druhém kole jsem uvažoval, že zvýším rychlost robotu na 1.5 m/s, abych časově
dohnal robota Explorer, ale do věcí, které fungují se nemá hrabat a tak jsem
ponechal prověřených 0.5 m/s.
Průjezd cílem 4. kola: video
Výsledné 2. místo je skvělým úspěchem a dává naději na dobré umístění v
podzimní Robotour. Chtěl bych poděkovat
Radioklubu Písek za perfektní organizaci a nádherné počasí.
Radioklub Písek
Q: Co se stalo s lokotkou v druhém kole, kdy měla cíl už nadosah?
A: Závada na lokotce byla celkem triviální: vyklepal se jeden konektor…
Short Circuits Prague
Pavel Jiroutek píše:
S týmem Short Circuits Prague
(www.shortcircuits.cz) jsme se zúčastnili soutěže
Robotem Rovně v Písku potřetí. Tuto soutěž máme rádi nejen díky přátelskému
prostředí v Písku, ale také kvůli tomu, že je to zpravidla první soutěž po
robotické zimě, která prověří jak oprášený hardware a software z předchozí
sezony, tak i chtěné a nechtěné změny na obou úrovních, které se za zimu
nashromáždily.
Těch chtěných změn u nás bylo v tomto ročníku několik. Ta vizuálně
nejvýraznější je nový vzhled robota. Z plastových desek a samolepících folií
jsme po několika prototypech vytvořili karoserii, která se dá bez dalších úprav
robota nasadit na jeho původní tvar. Empiricky jsme zjistili, že přihlížející
lidé vnímají robota, který má tvar auta zhruba jako o 50% inteligentnějšího,
než když vypadá jako krabice z IKEA.
Druhou změnou oproti předchozímu ročníku bylo nasazení lidaru, který jsme
získali na loňském Sick Robot Day. Lidar jsme měli sice půjčený už na loňském
RR, ale při převozu na soutěž se nám ho podařilo rozbít. Další změny byly jen
drobné bugfixy po loňském Robotour. RR jsme jeli s
identickým algoritmem (kvůli výrobě karoserie přes zimu mnoho času nezbylo).
Novinkou byl také nový notebook, který jsme pořídili za cenu ze
Sick Robot Day. Robot má tedy konečně SSD
disk a vlastní notebook, který nezpomalují pracovní aplikace.
Měli jsme připraveno několik větších změn, které se ale nepodařilo nasadit.
První změnou bylo nasazení širokoúhlé kamery s úhlem 150 stupňů, od které jsme
si slibovali lepší detekci okrajů cesty okolo robota. Software na to je
připravený, nasazení ale narazilo na ztracení zásilky z Číny. Kamera dorazila 2
týdny po soutěži. Další plánovanou změnou mělo být použití inerciální jednotky
(AHRS). U ní se nám ale včas nepodařilo odladit drift v určení orientace, proto
jsme jeli se starým kompasem. Algoritmus tedy opět kombinoval vstupy z kamery a
lidaru, ze kterých tvořil lokální mapu, ve které hledal pomocí algoritmu
VFH
ideální cestu podle kompasu směrem, kam robot mířil při startu.
Na soutěži jsme skončili celkově čtvrtí. Ačkoliv je to jedno místo za medailí,
jsme s výsledkem spokojeni. Konkurence byla velká. Všichni tři medailoví roboti
projeli trasu v podstatě ve všech čtyřech kolech celou. Nám se to povedlo při
prvních dvou kolech. Pak nás zradilo slunce s ostrými stíny, které prověřilo
nedokonalost našeho zpracování kamery. Robot se v posledních dvou jízdách
vyhýbal slunci na cestě tak, že mu přišlo zhruba v polovině trati vhodnější
přejet na udupanou hlínu.
Ze soutěže jsme si vzali několik ponaučení. Hlavním naším problémem bylo
zpracování obrazu na ostrém slunci s výraznými stíny. Pravděpodobně to vyřešíme
detekcí kvality obrazu podle analýzy histogramu. Když rozpoznáme, že se jedná o
přesvětlený obraz, aplikujeme jednodušší metodu detekce cesty, která je vůči
stínům imunní. Dalším problémem bylo iniciální určení směru cesty. Jako směr
cesty jsme vzali orientaci robota na startu, což se ukázalo jako problémové.
Robot kvůli nepřesnosti pořád uchyloval k jedné nebo druhé straně cesty během
celé trasy. Tím se neustále dostával do situací, kdy musel spoléhat na detekci
okraje cesty, protože s ním stále kolidoval. Kdyby znal přesněji směr cesty,
mohl si spoustu problémů ušetřit.
Děkujeme organizátorům za uspořádání další povedené soutěže a zajištění pěkného
počasí. Soutěž doporučujeme všem robotikům. Její nastavení je vhodné jak pro
začátečníky tak pro velmi zkušené týmy.
Roboauto
David Herman píše:
Tento ročník soutěže v Písku nás zasáhl tak trochu od boku. S účasti jsme
nepočítali. Nicméně prosbu Tondy Seinera o naši participaci na soutěži, aby se
nováčci měli od koho učit, jsme vyslyšeli a dodatečně se registrovali. Nakonec
vše dopadlo trochu jinak a úvodní slova hlasatele „nyní vyjíždí jeden z
favoritů soutěže” již po druhém kole budila úsměv v našich tvářích. Večer před
soutěží se ukázalo, že výherní algoritmus z roku 2010 není zpětně kompatibilní
s novým řídícím systémem robota z roku 2013. V noci tak byla vytvořena nová
navigační třída RoRoNav2013 a doprogramována potřebná logika. Robot měl za úkol
tvořit si lokální mapu z dat laserových dálkoměrů a pomocí paprskového
algoritmu volit vhodný směr s ohledem na preferovaný kurz. Strategie byla
ověřená, implementace však nikoliv. Půlnoční testování i se simulací davu
jedním člověkem pobíhajícím před robotem dopadlo dobře a my se spokojeně
uložili ke spánku.
Startovní soutěžní kolo jsme dojeli do konce. V průběhu druhého a třetího kola
se počet návštěvníků parku alespoň zdesetinásobil, což samotářského Quida
vyvedlo z rovnováhy, a proto se rozhodl využít první možnou odbočku z trasy a
vzít nohy na ramena. Před závěrečným kolem soutěže se nám nakonec podařilo
úpravou koeficientů řídícího algoritmu učinit Quida méně plachým a opět
bezpečně dorazit do cíle. Tabulkově to máme za pět, jídlo a organizace soutěže
Radioklubem Písek však byla na výbornou. Děkujeme a třeba zase příští rok.
Smartbot (vznášedlo)
autor: Franta Cifri
Když jsem vyplňoval registraci pro tuto soutěž, ještě jsem neměl žádného robota
hotového a zatím jsem přemýšlel do jakého autíčka nacpu destičku "STM32F3
Discovery" a vyzkouším co umí. Ani nevím proč, ale najednou sem dostal
bláznivej nápad vyrazit do parku se vznášedlem.
Nejdřív jsem začal zkoušet lítat s papírovou krabicí jen pomocí RC soupravy. A
ono se to opravdu vznášelo a šlo to i řídit. To už nic nebránilo vrhnout se do
„pořádnýho” vznášedla. No když jsem v den soutěže ráno v 8:10 nahrál první
program, který letěl bez zásahu vysílačky a v obýváku zkoušel jestli to vůbec
letí, říkal sem si, že to byl fakt ostrej nápad s tím vznášedlem.
Homologace:
Překvápko je mokro a vak vzduchového polštáře se mi lepí k zemi a vznášedlo se
sotva plouží. Jen tak tak zvládne homologaci.
1 kolo:
Měření rychlosti zatím nefunguje, tak sem mu trochu přidal výkon na motorech,
aby se od tý vody utrhlo. Sakra to jsme se s komisařem proběhli. Trať totiž
částečně oschla a tak už letělo bez odporu. Cedulka "20m" elegantně odlétla po
nárazu mého robovznášedla. Ujelo rovných 20m.
2 kolo:
Stále pracuji na odměřování rychlosti, nějak se nedaří.
Tak jen ubírám výkon na vrtuli, ať za ním nemusím tak letět.
Dostávám se na 55m, krásnej výkon.
3 kolo:
Konečně mi funguje odměřování rychlosti, teda zatím nevím jak, ale na trati se
ukáže. Můj SmartBot se krásně vznáší po trati. Na 60m mu dochází baterka. V
zápalu programování jsem mu ji zapomněl vyměnit!!! Sakra!!!
4 kolo:
Na 55m se zaseklo o hranu cesty a jak se neustále vrtělo sem tam, gyroskop se
asi zbláznil a když se konečně vyprostilo, otočilo se o 180° a letělo zpátky
směrem ke startu! Nakonec si to rozmyslelo a zastavilo se na 48m.
Závěr:
S výsledkem jsem velmi spokojen. Vzhledem k tomu, jak krátkou dobu jsem na mém
výtvoru pracoval, jsem čekal tak max 20m a konec. Věřím že robotvznášedlo byl
originální nápad a i když nedojelo do cíle zaujalo spoustu diváků. Jinak
Discovery je pěkná hračka, ale to elektronický gyro, akcelerometry i ten kompas
— je docela záhul z nich něco obstojnýho dostat.
Příští rok se už ale chci dostat na konec trati
Budu se na příště těšit Cifri
Heidi - robotika.cz (čtyřtulka)
První kolo — generál
Startoval jsem z krabice, aby spodní kamera rozpoznávala černobílou základnu a
případně se jí držela. Heidi odstartovala, vznášela se cca 1m nad zemí a nic.
Na emergency nijak nereagovala, nepřistávala, nic … prostě generálský efekt
číslo jedna. Přesně to samé jako se stalo
ruskému týmu Sirin ve Vídni.
Na start je jedna minuta, tak divadlo s chytáním drony ve vzduchu, převrácení
na záda (tentokrát bez rozlomení ochranného krytu vejpůl … alespoň něco jsem
se naučil), opakovaný start a úplně stejný průběh. Žádná sláva, nula bodů.
Druhé kolo — mexická vlna
Druhé kolo už někteří ani nenatáčeli a tak zabodoval
Murphy, čtyřtulka se
zvedla a rozletěla. Nezdravě hodně lidí bylo ale i přímo na cestě a tak jsem po
chvíli zmáčkl emergency tlačítko. Přistála krásně na cestě a byla za toto
divadlo odměněna potleskem se 17 body. Podle logu uletěla 17.2m, což se mi ani
nechce věřit, že byla taková shoda. I podle videa, které opravdu nemohu
publikovat, to vypadá, že po celou dobu letěla na cestě. No nic. Nikomu
neublížila a to je hlavní.
Třetí kolo — zpátečka
Už start byl „zapamatováníhodný” . Vypadalo to, jako že pilot zařadil
zpátečku a rozhodl se postrašit všechny organizátory. Podle logu čtyřtulka
couvala tři a půl metru, než se rozletěla dopředu. Když se jí konečně
podařilo překonat startovní čáru, tak odbočila ostře vpravo, prolétla skupinkou
přihlížejících a udělala kotrmelec nárazem do větve.
Čtvrté kolo — překonání rekordu z roku 2010
Čtvrté kolo bylo bodově nejlepší. Při prvním startu se zase kousla komunikace,
ale druhý pokus s resetem proběhl už bez problémů. Heidi celkem svižně uletěla
přes 30 metrů.
Závěry
- přestože drona má posílat navdata od prvního vyžádání, tak občas přestane. Je třeba doplnit timeout a pokus o znovunavázání spojení [koukám teď do kódu cvdrone, kde v každém cyklu posílají „init packet” a přesto se spojení kousalo, tak nevím]
- je potřeba zkusit dronu při autonomním startu řídit. Těch 3.5m „couvala sama” protože létat se nedá dokud nepřejde do stavu CTRL_FLYING nebo CTRL_HOVERING … ale třeba to nějak jde, protože při přistání snad AT*PCMD příkazy prý akceptuje
- je nutná regulace rychlosti. Odpor vzduchu je sice dobrý, ale není dostatečný. Létal jsem s náklonem 20% z control:outdoor_euler_angle_max = 3.4906584e-01, tj. 4 stupně a na delší let stále akcelerovala. Pro představu v posledním kole letěla skoro 4m/s (přesně to bylo 3.91m/s) a to by např. při RoboOrienteeringu byl dvojnásobek povolené rychlosti.
Zdrojový kód
Létal jsem s ver1, která navigovala po linii definované úhlem a referenční
bodem. Použil jsem souřadnice při prvním zavolání funkce
flyRobotemRovneVer1, ale měl jsem použít startovní pozici (0,0). Pak by se
Heidi možná srovnala i ve třetím kole.
Ver0 pozici ignorovala a pouze čtyřtulku naklonila vpřed a letěla 10m. Tuto
verzi jsem použil pro „zaměření úhlu”, pod kterým má letět ver1.
Nepoužíval jsem ani PID regulaci — jenom „mrtvé pásmo” (určitě to má nějaký
odborný název) a korekce, když ho opustí. Při nutnosti regulace výšky jsem
raději zpomaloval. U regulace natočení a Y-ové osy ale robot letěl naplno.
Ještě bych zmínil, že korekce 0.2 v Y-ové ose vedla k rostoucím oscilacím …
chvíli jsem si myslel, že je to znamínkem a cvičně ho otočil (ještě při
testování na zahradě). Po ostrém manévru se potvrdilo, že znaménkem to rozhodně
nebylo a tak jsem ubral na 0.1 (10% z 20 stupňů = 2 stupně náklon).
def flyRobotemRovneVer1( self ): MIN_HEADING_RADIUS = 1.0 # fly that distance without angle correction altitude, dist, timeout = 1.5, 200.0, 300.0 desiredHeading = math.radians(145+5.71) # based on compass/test measurements print "flyAtHeight", altitude, dist, timeout, math.degrees(desiredHeading) refX = self.coord[0] refY = self.coord[1] line = Line( (refX, refY), (refX+math.cos(desiredHeading)*dist, refY+math.sin(desiredHeading)*dist) ) zTolerance = 0.1 # +/- no action yTolerance = 0.5 angleTolerance = math.radians(5) speedUpDown = 2*self.speed speedLeftRight = self.speed/2.0 speedAngle = self.speed startTime = self.time while self.time-startTime < timeout: altSonar, altVision = altitude, altitude if self.altitudeData != None: altVision = self.altitudeData[0]/1000.0 altSonar = self.altitudeData[3]/1000.0 speedXYZA = [ self.speed, 0, 0, 0 ] if max(altSonar, altVision) < altitude-zTolerance: speedXYZA = [ self.speed/2.0, 0.0, speedUpDown, 0.0 ] elif min(altSonar, altVision) > altitude+zTolerance: speedXYZA = [ self.speed/2.0, 0.0, -speedUpDown, 0.0 ] offsetY = line.signedDistance( (self.coord[0], self.coord[1]) ) if offsetY > yTolerance: speedXYZA[1] = -speedLeftRight if offsetY < -yTolerance: speedXYZA[1] = speedLeftRight if distance( (refX, refY), self.coord ) > MIN_HEADING_RADIUS: headingDiff = normalizeAnglePIPI( self.heading-desiredHeading ) if headingDiff > angleTolerance: speedXYZA[3] = -speedAngle if headingDiff < -angleTolerance: speedXYZA[3] = speedAngle self.moveXYZA( *tuple(speedXYZA) ) if distance( (refX, refY), self.coord ) > dist: print "DIST REACHED" break
Odkazy:
- Stránky organizátorů: http://www.kufr.cz/
Fandorama
Toto byl první pokusný
fandorama
projekt. Tímto děkuji čtyřem přispěvovatelům (jmenovitě to byl: Aleš Holub,
Adam Heinrich, Ondřej Luks a Tonda
Seiner), kteří projekt podpořili, „donutili” mne do Písku i přes slejvák
vyrazit a tuto robotickou soutěž si plně užít. Snad vás článek zaujme a příští
rok budete i vy na startovní listině .