AUTOR
Petr Sedláček
21
.
12
2017
|

Kódohraní 2017

Když si žárovka povídá s vypínačem a topení reguluje teplotu jen pomocí teploměru - to je IoT! Internet of Things byl hlavní náplní letošního Kódohraní. Přečtěte si, jak jsme se (s tím) v týmech poprali.

Kódohraní je naše tradiční akce (vlastně byl teprve druhý ročník, ale klidně jí říkejme tradiční). Spočívá v jedno až dvoudenním soustředění na venkově, kde se sejdou naši programátoři a frontend vývojáři a v týmech se snaží splnit zadaný úkol. První ročník byl o TDD (Test-driven development), což je přístup k vývoji software, který je založený na malých stále se opakujících krocích. Letos jsme zabrousili pro změnu do IoT.

Začněme od začátku

14 dní před akcí u nás proběhla úvodní přednáška, kde jsme se dozvěděli základní informace o protokolu MQTT. Ten slouží k předávání zpráv mezi chytrými zařízeními.  (MQTT používá centrální bod, takzvaný MQTT broker, který třídí zprávy do témat a každé jednotlivé zařízení mu může zprávy buď posílat, nebo se naopak přihlásit k odběru. V MQTT si lze pamatovat nastavení i při ztrátě připojení nebo uschovat zprávy pro budoucí odeslání.)

Po přednášce nám byla nabídnuta možnost sejít se 17. listopadu v Kozojedech a tento protokol si vyzkoušet. Z plakátů v kanceláři a na záchodech jsme pochopili, že se bude soutěžit v hledání auta. Fajn, tohle si nechceme nechat ujít! Ve čtvrtek večer jsme v počtu 37 lidí vyrazili.

Ubytovali jsme se v příjemném venkovském hotýlku v Kozojedech.

Autostop trochu jinak

Po večeři jsme se dozvěděli podrobnosti o zítřejší soutěži. Opravdu budeme stopovat auto!

Co budeme mít k dispozici?

  • Údaje z GPSky v autě,
  • údaje z tachometru a otáčkoměru,
  • natočení volantu,
  • aktuální azimut,
  • zařazenou rychlost,
  • atmosférický tlak v kabině,
  • údaje z akcelerometru.

Každý tým si může vybrat, jaká z těchto dat bude odebírat, ale za každý údaj zaplatí soutěžními body. Čím přímočařejší data, tím vyšší cena. Rychlost čtená z GPSky bude drahá, rychlost z tachometru výrazně levnější, a pokud by náhodou někdo uměl zužitkovat údaje z akcelerometru, dostane je zadarmo. K tomu budeme mít k dispozici data týkající se silnic v okolí, jejich směru a sklonu, a také data týkající se checkpointů, kolem kterých může auto projíždět.

Jaké bylo zadání úkolu?

  • Sledovat pozici auta na mapě.
  • Spočítat průměrnou rychlost a ujetou vzdálenost.
  • Hlídat maximální rychlost a sledovat, jestli auto nepřekračuje povolenou rychlost. (Povolená rychlost byla pro účely soutěže stanovena na 80 km/h, aby nebylo nutné porušovat dopravní předpisy.)
    Dodatečné body získá tým, který po zastavení auta a vyslání zprávy o otevření dveří první lokalizuje telefonnní budku a zavolá do ní.  

Dopoledne proběhlo osahávání! MQTT protokolu. 

Republika oslavuje výročí pádu komunismu. My se scházíme ve společenské místnosti a zajímá nás hlavně to, kde najít zásuvky, do kterých si zapojíme nabíječky. Dopoledne je vyhrazené na pořádné osahání MQTT protokolu. Rozdělujeme se do skupin podle programovacích jazyků, které ovládáme. Následuje několik jednoduchých úloh (pošlete pomocí MQTT protokolu zprávu sousedovi; reagujte na zprávu, kterou někdo poslal; zareagujte na nabídku zboží poslanou pomocí MQTT a nabídněte nejlepší cenu). Před obědem nám již nedělá problém orientovat se v protokolu a publikovat nebo odebírat zprávy včetně jejich formátování.

První testovací kolo

Během oběda se rozdělíme do týmů znovu, tentokrát již napříč technologiemi. V těchto týmech se už bude soutěžit naostro. Nejdříve dvě přípravná kola, během kterých budeme mít bez placení k dispozici všechna data a budeme se snažit napsat a otestovat kód na jejich zpracování. Při posledním ostrém soutěžním kole se už programovat nebude, hotové programy by měly běžet samy. A také dostaneme jen ta data, za která jsme ochotní zaplatit.

Startuje první testovací kolo. Organizátoři posílají data, my se přihlašujeme k jejich odběru a začínáme se v nich orientovat. Řešíme první praktické problémy. („Hele, rychlost čtená z GPSky je mnohem přesnější než rychlost z tachometru, takže bychom měli používat tu GPSkovou.“ - „No jo, ale odběr rychlosti z GPSky je mnohem dražší a to fakt platit nechceme!“ - „Ok, dokážeme si tedy poradit i s rychlostí z tachometru? Nebo ji nějak přepočítat?“)

Kromě programovacích schopností si musíme osvěžit i znalosti z matematiky a fyziky. Jak se převádí kilometry za hodinu na metry za sekundu ví každý. I spočítat vzdálenost dvou bodů na mapě jsme se ve škole učili. Horší to už je s přepočtem metrů a kilometrů na mapě na zeměpisnou šířku a délku. A vzít údaje z akcelerometru a gyroskopu a z nich pomocí kvaternionů vypočítat něco použitelného, to nedokázal snad nikdo.

    Úkolů je hodně a poradit si se všemi je nad naše možnosti. Navíc během odpoledne musí pár lidí odjet, což týmy oslabuje.  

Přituhuje

Nakonec se druhé testovací kolo prodlužuje na zbytek odpoledne a je rozhodnuto, že ostré kolo proběhne až po večeři. Únava se zvyšuje - ne vše funguje tak, jak by mělo (často je těžké poznat, jestli jsou to problémy technického rázu nebo nám problémy dělá nějaká chyba v kódu, kterou už kvůli únavě nemůžeme najít).

    Sbíráme síly do finiše. Snažíme se z posledních sil dokončit rozdělané úkoly a těšíme se na večeři.  

Po večeři jedeme na ostro. Spusťte si svoje programy a ruce pryč od klávesnic! Teď už musí vše běžet samo. Auto se na mapě na projekčním plátně rozjíždí po skutečné soutěžní trase (byť jde o nahraná data - trať byla projeta a nahrána dříve). A za ním po mapě vyráží šest našich aut, od každého týmu jedno. Jejich poloha se zjišťuje z dat, která počítají naše programy a posíláme je do centrálního brokeru pomocí MQTT protokolu.

Jedno z týmových aut ani pořádně nevyjede, ostatní alespoň ze začátku kopírují pozici stopovaného auta, ale časem se začnou více či méně odchylovat z trasy. Nějaká auta pomalu mizí za okrajem mapy. Dva týmy dokázaly správně zpracovat posílání checkpointů, takže když stopované auto projede checkpointem, vrátí se na jeho pozici a chvíli s ním zase drží stopu.

Pár kilometrů před koncem nám organizátoři vypnou promítání (aby nám mapa nepomohla ve zjišťování, u které telefonní budky auto zastaví). Teď už máme jen svoje data. Čekal bych (vzhledem k tomu, jak nepřesné odhady byly), že správnou budku najde sotva jeden tým, ale opak je pravdou. Když auto zastaví, všichni berou do rukou telefony a vytáčí (většinou i správné) telefonní číslo. Po pár přehmatech a jednom omylem položeném telefonu konečně jeden tým slyší ze sluchátka vítěznou melodii.

Ještě následují prezentace, při kterých se dozvíme podrobnosti o tom, co se týmům dařilo, s čím měly problémy a jak dokázaly spolupracovat. Dva týmy připravily pěkné vizualizace, jeden z nich dokonce s 3D modelem auta. Zvládli jsme toho hodně.

Pak už jen společenský večer, který se pro některé protáhl až do ranních hodin, snídaně a odjezd domů. Tentokrát je tu mikrobus včas (silnice jsou v sobotu ráno přeci jen volnější).

Vyhlášení

  • Na body zvítězil tým číslo 3 ve složení Pavel Šinták, Pavel Šimon, Jan Verner, Petr Kubeš a Vladimír Balco.
  • Jako první se Pevíkovi (řidiči vozidla) do telefonní budky úspěšně dovolal tým číslo 4, tedy Břéťa Proft, Honza Podhajský, Jarda Ševčík, Vašek Dobeš, Honza Markup a Martin Ptáček.
    Hlavní cena byla tak trochu pro všechny - společný dárek do Etneterie: magnetický fotbálek (ovšem ve variantě hokej), který jsme si vyzkoušeli na letošním Offlinu.  

Co říci na závěr?

Sám si nedokážu představit, kolik práce stojí takovouhle akci připravit. Ale z mnoha stran jsem slyšel, že si s tím organizátoři dali práce opravdu hodně, takže v první řadě je potřeba poděkovat organizátorům!  Dále patří obdiv i soutěžícím, protože vzhledem k náročnosti zadání a nedostatku času toho dokázali spočítat opravdu hodně. A kromě zpracování dat z akcelerometru snad neexistuje úkol ze zadání, který by nedokázal vyřešit aspoň jeden tým.

Pokud chcete mít bližší představu o akci, podívejte se na naše video.

 

Přečti si taky