czech english

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

  1. 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]
  2. 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
  3. 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:

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ě .