Ve světě inženýrského vzdělávání existuje mnoho skvělých kurzů, ale často má vzdělávací program, založený na nich, jeden vážný nedostatek — nedostatek dobré návaznosti mezi různými tématy. Můžete oponovat: jak to?
Když se sestavuje vzdělávací program, pro každý kurz se uvádějí předpoklady a jasný pořádek, v jakém je třeba studovat discipline. Například, abychom sestavili a naprogramovali primitivního mobilního robota, musíme znát trochu mechaniky pro vytvoření jeho fyzické konstrukce; základy elektřiny na úrovni Ohmových/Kirchhoffových zákonů, pochopení digitálních a analogových signálů; operace s vektory a maticemi pro popis souřadnicových systémů a pohybů robota v prostoru; základy programování na úrovni reprezentace dat, nejjednodušších algoritmů a konstrukcí řízení toku atd. pro popis chování.
Existuje to vše v univerzitních kurzech? Samozřejmě že ano. Avšak k Ohmovým/Kirchhoffovým zákonům dostáváme termodynamiku a teorii pole; kromě operací s maticemi a vektory se musíme zabývat Jordanovými formami; v programování se učíme polymorfismus — témata, která nejsou vždy potřebná pro řešení jednoduchého praktického úkolu.
Univerzitní vzdělávání je extensivní - student se vydává širokým frontem a často nevidí smysl a praktický význam znalostí, které získává. Rozhodli jsme se převrátit paradigmu univerzitního vzdělávání STEM (z anglických slov Science, Technology, Engineering, Math) a vytvořit takový program, který se opírá o návaznost znalostí, umožňující budoucí prohlubování obsahu, tedy předpokládající intenzivní osvojení předmětů.
Studium nové tematické oblasti lze přirovnat ke zkoumání určité krajiny. A zde existují dvě varianty: buď před námi je velmi podrobná mapa s obrovským množstvím detailů, které je třeba prostudovat (což zabere hodně času), abychom porozuměli, kde se nacházejí hlavní orientační body a jak si navzájem odpovídají; nebo můžeme využít primitivní plán, na kterém jsou označeny pouze hlavní body a jejich vzájemné umístění — taková mapa stačí k tomu, abychom okamžitě mohli začít směřovat správným směrem, upřesňujíc detaily během cesty.
Přístup intenzivního vzdělávání STEM jsme otestovali na zimní škole, kterou jsme uspořádali ve spolupráci se studenty MIT za podpory
Příprava materiálu
První částí programu školy byla týdenní výuka základních směrů, které zahrnovaly algebru, elektrické obvody, architekturu počítače, programování v Pythonu a seznámení s ROS (Robot Operating System).
Tyto směry nebyly vybrány náhodně: vzájemně se doplňovaly, měly pomoci studentům vidět souvislost mezi, na první pohled, zdánlivě odlišnými věcmi — matematikou, elektronikou a programováním.
Samozřejmě hlavním cílem nebylo přečíst mnoho přednášek, ale umožnit studentům samotným uplatnit právě získané znalosti v praxi.
V části o algebře si studenti mohli procvičit operace s maticemi a řešení soustav rovnic, které se hodily při studiu elektrických obvodů. Po seznámení se s konstrukcí tranzistoru a logickými prvky na jeho základě si studenti mohli všimnout jejich využití v architektuře procesoru, a po seznámení se s jazykem Python napsat program pro skutečného robota.

Duckietown
Jedním z úkolů školy bylo minimalizovat práci se simulátory tam, kde to bylo možné. Proto byl připraven velký soubor elektronických schémat, která měli studenti sestavit na prototypové desce z reálných komponentů a ověřit jejich funkčnost v praxi, a jako základ pro projekty byla vybrána Duckietown.
Duckietown je otevřený projekt, který zahrnuje malé autonomní roboty nazývané Duckiebot a sítě silnic, po kterých se pohybují. Duckiebot je kolová platforma vybavená mikropočítačem Raspberry Pi a jednou kamerou.
Na jeho základě jsme připravili soubor možných úkolů, jako je vytváření map silnic, vyhledávání objektů a zastavování vedle nich, a řadu dalších. Také studenti mohli navrhnout vlastní problém a nejen napsat program pro jeho řešení, ale také ho okamžitě spustit na skutečném robotu.
Výuka
Během přednášky vyučující prezentovali materiál pomocí předem připravených prezentací. Některé lekce byly natáčeny na video, takže studenti měli možnost se na ně podívat doma. Během přednášek studenti používali materiály na svých počítačích, pokládali otázky, společně a samostatně řešili úkoly, někdy i u tabule. Na základě výkonu byl spočítán žebříček každého studenta samostatně podle různých předmětů.

Podíváme se podrobněji na výuku každého předmětu. Prvním předmětem byla lineární algebra. Studenti se během jednoho dne seznamovali s vektory a maticemi, soustavami lineárních rovnic atd. Praktické úkoly byly navrženy v interaktivním režimu: navržené úlohy byly řešeny individuálně, přičemž učitel a ostatní studenti poskytovali komentáře a rady.

Druhým předmětem bylo elektřina a jednoduché obvody. Studenti se seznámili se základy elektrodynamiky: napětí, proud, odpor, Ohmův zákon a Kirchhoffovy zákony. Praktické úkoly byly částečně prováděny v simulátoru nebo na tabuli, ale více času bylo věnováno vytváření skutečných obvodů, jako jsou logické obvody, oscilační obvody atd.

Dalším tématem byla architektura počítačů, která v jistém smyslu představuje most spojující fyziku a programování. Studenti studovali základní pojmy, jejichž význam je spíše teoretický než praktický. Jako praxi studenti samostatně navrhovali aritmeticko-logické obvody v simulátoru a za splněné úkoly získávali body.
Čtvrtý den - první den programování. Jako programovací jazyk byl zvolen Python 2, protože se používá při programování pod ROS. Tento den probíhal takto: lektoři představili materiál, uváděli příklady řešení úloh, zatímco studenti je poslouchali, seděli u počítačů a opakovali to, co lektor napsal na tabuli nebo na slajd. Poté studenti samostatně řešili podobné úlohy, jejichž řešení následně hodnotili lektoři.
Pátý den byl věnován ROS: studenti se seznamovali s programováním robotů. Po celý školní den seděli studenti u počítačů a spouštěli kód, o kterém hovořil lektor. Dokázali samostatně spustit základní jednotky ROS a seznámili se s projektem Duckietown. Po skončení tohoto dne byli studenti připraveni začít s projektovou částí školy - řešením praktických úloh.

Popis vybraných projektů
Studenti byli vyzváni, aby se spojili do týmů po třech a vybrali si téma projektu. Nakonec byly přijaty následující projekty:
1. Kalibrace barev. Duckiebot potřebuje kalibraci kamery při změně světelných podmínek, proto existuje úkol automatické kalibrace. Problém spočívá v tom, že barevné rozsahy jsou velmi citlivé na osvětlení. Účastníci vytvořili utilitu, která by v obrazovém záznamu vyzdvihovala požadované barvy (červenou, bílou a žlutou) a vytvářela rozsahy pro každou z barev ve formátu HSV.
2. Duck Taxi. Myšlenka tohoto projektu je, aby Duckiebot mohl zastavit u určitého objektu, vyzvednout ho a následovat určitou trasu. Jako objekt byla vybrána jasně žlutá kachna.

3. Stavba grafu silnic. Existuje úkol sestavení grafu silnic a křižovatek. Cílem tohoto projektu je postavit graf silnic bez poskytnutí a priori dat o okolí pro Duckiebot, založený pouze na datech z kamery.
4. Patroulové auto. Tento projekt byl vymyslen samotnými studenty. Navrhli naučit jednoho Duckiebota, „patrolního“, pronásledovat druhého - „porušovatele“. K tomu byl použit mechanismus rozpoznávání cíle podle ArUco markeru. Jakmile rozpoznání skončí, „porušovateli“ je zaslán signál o ukončení práce.

Kalibrace barev
Cílem projektu Color Calibration bylo upravit rozsah rozpoznávaných barev dopravního značení podle nových podmínek osvětlení. Bez těchto úprav se rozpoznávání stůjících čar, oddělovačů pruhů a hranic silnic stávalo neplatným. Účastníci navrhli řešení založené na předzpracování šablon barev dopravního značení: červené, žluté a bílé.
Pro každý z těchto barev je stanoven předběžný rozsah hodnot HSV nebo RGB. Pomocí tohoto rozsahu se na snímku hledají všechny oblasti obsahující vhodné barvy, přičemž se vybírá ta největší. Tato oblast je přijímána jako barva, kterou je třeba zapamatovat. Následně se používají statistické vzorce, jako jsou výpočty průměrné hodnoty a směrodatné odchylky k posouzení nového barevného rozsahu.
Tento rozsah je zaznamenán do konfiguračních souborů kamery Duckiebot a může být použit později. Popisovaný přístup byl aplikován na všechny tři barvy, čímž se nakonec formovaly rozsahy pro každou z barev dopravního značení.
Testy ukázaly téměř dokonalé rozpoznávání čar značení, kromě případů, kdy jako materiály značení byla použita lesklá páska, která tak silně odrážela zdroje osvětlení, že při úhlu pohledu kamery vypadalo značení bíle bez ohledu na jeho původní barvu.

Duck Taxi
Projekt Duck Taxi spočíval ve vytvoření algoritmu pro vyhledávání v městě kachny-pasažéra a jejím následném převozu na požadované místo. Účastníci rozdelili tento úkol na dvě části: detekci a pohyb v grafu.
Studenti provedli detekci kachny tím, že předpokládali, že kachnou se nazývá jakákoli oblast na snímku, kterou lze rozpoznat jako žlutou s červeným trojúhelníkem (zobákem) na ní. Jakmile je taková oblast nalezena na dalším snímku, robot se k ní přiblíží a poté se na několik sekund zastaví, aby napodoboval přistání pasažéra.
Poté, se záznamem grafu silnic celé duckietown a polohou robota, a získáním vstupních dat pro cílové místo, účastníci sestaví cestu z výchozího bodu do cílového bodu pomocí Dijkstrova algoritmu pro vyhledávání cest v grafu. Výstupy se prezentují jako sada příkazů — odbočení na každé z následujících křižovatek.

Graf silnic
Cílem tohoto projektu bylo vytvoření grafu — sítě cest v Duckietown. Uzly výsledného grafu představují křižovatky a hranami jsou silnice. K tomu musí Duckiebot prozkoumat město a analyzovat svou trasu.
V průběhu práce na projektu byla zvažována, ale nakonec odmítnuta myšlenka vytvořit vážený graf, kde by cena hrany byla určena vzdáleností (časem potřebným k překonání) mezi křižovatkami. Realizace této myšlenky se ukázala být příliš časově náročná a na její provedení by v rámci školy nezbylo dostatek času.
Když se Duckiebot dostane k další křižovatce, vybere si cestu, která vede z křižovatky a kterou ještě neprošel. Jakmile jsou všechny cesty na všech křižovatkách projity, zůstane v paměti bota vytvořený seznam sousednosti křižovatky, který se pomocí knihovny Graphviz převede na obraz.
Navrhovaný algoritmus účastníků není vhodný pro libovolný Duckietown, ale dobře fungoval v malém městě složeném ze čtyř křižovatek, které bylo použito v rámci školy. Myšlenka byla doplnit každou křižovatku ArUco-markerem, který obsahuje identifikátor křižovatky, aby se sledoval pořádek projíždění křižovatkami.
Schéma práce navrženého algoritmu účastníky je znázorněno na obrázku.

Patrol Car
Cílem tohoto projektu je vyhledání, sledování a zadržení porušovatele v Duckietown. Patrolní bot by měl jezdit po vnějším obvodu silnice ve městě ve snaze nalézt předem známého porušovatele. Po jeho odhalení by patrolní bot měl následovat porušovatele a donutit ho zastavit.
Práce začala hledáním nápadu pro detekci bota na snímku a jeho rozpoznáním jako porušovatele. Tým navrhl vybavit každého bota ve městě vzadu unikátním markerem — stejně jako skutečné automobily mají registrační známky. K tomu byly vybrány ArUco-markery. Ty byly již dříve používány v Duckietown, protože se s nimi snadno pracuje a umožňují určovat orientaci markeru v prostoru a vzdálenost k němu.
Dále bylo potřeba zajistit, aby patrolovací robot se pohyboval výhradně po vnějším kruhu bez zastavení na křižovatkách. Ve výchozím nastavení Duckiebot jede v pruhu a zastavuje na stop lince. Poté pomocí dopravních značek určuje konfiguraci křižovatky a rozhoduje o směru projíždění křižovatky. Za každou z těchto fází odpovídá jeden z stavů konečného automatu robota. Aby se eliminovala zastavení na křižovatce, tým změnil automat stavů tak, aby při přiblížení k stop lince robot okamžitě přešel do stavu projíždění křižovatky přímo.
Dalším krokem bylo vyřešení úkolu zastavení robota-porušitele. Tým předpokládal, že patrolovací robot může mít přístup přes SSH ke každému robotu ve městě, což znamená mít určité informace o tom, jaké údaje pro autorizaci a jaké ID má každý robot. Takže po zjištění porušitele začal patrolovací robot připojovat přes SSH k robotu-porušiteli a vypínat jeho systém.
Po potvrzení, že příkaz k vypnutí byl splněn, se patrolovací robot také zastavil.
Algoritmus práce patrolovacího robota lze představit v následující schémě:

Práce na projektech
Práce byla organizována v podobném formátu jako Scrum: každé ráno studenti plánovali úkoly na aktuální den a večer se hlásili o vykonané práci.
V první a závěrečné dny studenti připravili prezentace, které popisovaly zadaný úkol a způsoby jeho řešení. Aby se studentům usnadnilo dodržování vybraných plánů, v místnostech, kde se pracovalo na projektech, byly neustále přítomny učitelé z Ruska a Ameriky, kteří odpovídali na otázky. Komunikace probíhala převážně v angličtině.
Výsledky a jejich prezentace
Práce na projektech trvala jeden týden, po jehož uplynutí studenti představili své výsledky. Všichni připravili prezentace, ve kterých vyprávěli, co se v této škole naučili, jaké byly jejich nejdůležitější lekce, co se jim líbilo nebo nelíbilo. Poté každé týmy představily svůj projekt. Všechny týmy splnily stanovené úkoly.
Tým, který realizoval kalibraci barev, dokončil práci na projektu rychleji než ostatní, a proto stihli připravit i dokumentaci k své programu. Tým, který se zabýval grafem cest, se dokonce i poslední den před demonstrací projektu snažil dotáhnout a opravit své algoritmy.

Závěr
Po ukončení školy jsme požádali studenty, aby zhodnotili proběhlé aktivity a odpověděli na otázky o tom, jak škola odpovídala jejich očekáváním, jaké dovednosti získali atd. Všichni studenti uvedli, že se naučili pracovat v týmu, rozdělovat úkoly a plánovat svůj čas.
Studentům také bylo nabídnuto zhodnotit užitečnost a složitost absolvovaných kurzů. A zde se utvořily dvě skupiny hodnocení: pro jedny kurzy nepředstavovaly větší obtíž, jiní je hodnotili jako maximálně složité.
To znamená, že škola zaujala správnou pozici, když zůstala dostupná pro začátečníky v dané oblasti, ale také poskytla materiály pro opakování a upevnění pro zkušené studenty. Je třeba poznamenat, že kurz programování (Python) byl téměř všemi označen jako nezložitý, ale přínosný. Nejsložitější se podle studentů ukázal kurz „Architektura EVM“.
Když se studentů zeptali na nedostatky a přednosti školy, mnozí odpověděli, že se jim líbil zvolený styl výuky, v rámci kterého učitelé rychle a individuálně poskytovali pomoc a odpovídali na vzniklé otázky.
Dále studenti poznamenali, že se jim líbilo pracovat v režimu každodenního plánování svých úkolů a samostatně si stanovovat termíny. Mezi nedostatky studenti uváděli nedostatek poskytnutých znalostí, které byly potřeba při práci s botem: při připojení, chápání základů a principů jeho fungování.
Téměř všichni studenti uvedli, že škola předčila jejich očekávání, což svědčí o správně zvoleném směru organizace školy. Takže by se měly zachovat obecné zásady při organizaci příští školy, přičemž je třeba vzít v úvahu a pokud možno odstranit nedostatky, které studenti a učitelé uvedli, možná změnou seznamu kurzů nebo času jejich výuky.
Autoři článku: tým v
P.S. Náš firemní blog má nové jméno. Nyní se bude věnovat vzdělávacím projektům společnosti JetBrains.
Zdroj: habr.com
