Vo svete inžinierskeho vzdelávania existuje veľa skvelých kurzov, ale často má program založený na nich jeden vážny nedostatok — nedostatok dobrej súvislosti medzi rôznymi témami. Môžete namietať: ako je to možné?
Pri zostavovaní učebného plánu sú pre každý kurz stanovené predpoklady a presný poriadok, v akom je potrebné študovať disciplíny. Napríklad, aby ste zostavili a naprogramovali primitívne mobilné robota, musíte mať poznatky o mechanike na vytvorenie jeho fyzickej konštrukcie; základy elektriny na úrovni zákonov Ohma/Kirchhoffa, predstavy digitálnych a analógových signálov; operácie s vektormi a maticami, aby ste opísali súradnicové systémy a pohyby robota v priestore; základy programovania na úrovni reprezentácie údajov, najjednoduchších algoritmov a konštrukcií riadenia a podobne na opísanie správania.
Nachádza sa to všetko v univerzitných kurzoch? Samozrejme, že áno. Avšak k zákonom Ohma/Kirchhoffa dostávame termodynamiku a teóriu poľa; okrem operácií s maticami a vektormi musíme rozumieť Jordanovým formám; v programovaní sa študuje polymorfizmus — témy, ktoré nie sú vždy potrebné na riešenie jednoduchej praktickej úlohy.
Univerzitné vzdelávanie je extenzívne — študent ide širokým frontom a často nevidí význam a praktickú hodnotu získaných poznatkov. Rozhodli sme sa zvrátiť paradigmu univerzitného vzdelávania STEM (z angl. Science, Technology, Engineering, Math) a vytvoriť program, ktorý sa zakladá na súvislostiach poznatkov, pričom predpokladá nárast úplnosti v budúcnosti, to znamená, že predpokladá intenzívne osvojenie predmetov.
Štúdium novej témy možno porovnať so spoznávaním určitej oblasti. A tu sú dve možnosti: buď máme pred sebou veľmi podrobnú mapu s obrovským množstvom detailov, ktoré je potrebné študovať (čo zaberie veľa času), aby sme pochopili, kde sa nachádzajú hlavné orientačné body a ako si navzájom súvisia; alebo môžeme využiť primitívny plán, na ktorom sú vyznačené iba hlavné body a ich vzájomné umiestnenie — taká mapa je dostatočná, aby sme sa mohli ihneď vydať správnym smerom, pričom detaily si upresníme na ceste.
Prístup intenzívneho vzdelávania STEM sme otestovali na zimnej škole, ktorú sme uskutočnili spoločne so študentmi MIT s podporou
Príprava materiálu
Prvou časťou programu školy bola týždenná výučba základných smerov, ktoré zahŕňali algebru, elektrické obvody, architektúru počítača, programovanie v Pythone a oboznámenie sa so systémom ROS (Robot Operating System).
Smerovania boli zvolené nie náhodne: doplňujúc sa navzájom, mali pomôcť študentom vidieť súvislosti medzi, na prvý pohľad, zdánlivo odlišnými vecami — matematikou, elektronikou a programovaním.
Samozrejme, hlavným cieľom nebolo prečítať množstvo prednášok, ale poskytnúť študentom možnosť aplikovať práve získané vedomosti v praxi.
V sekcii algebry sa študenti mohli procvičovať v operáciách s maticami a riešení systémov rovníc, ktoré sa ukázali byť užitočné pri štúdiu elektrických obvodov. Po zoznámení sa so štruktúrou tranzistora a logických prvkov postavených na jeho základe, žiaci mohli vidieť ich aplikáciu v štruktúre procesora, a po zvládnutí základov jazyka Python napísať program pre skutočného robota.

Duckietown
Jednou z úloh školy bola minimalizácia práce so simulátormi tam, kde to bolo možné. Preto bol pripravený veľký súbor elektronických schém, ktoré si študenti mali zostaviť na experimentálnej doske z reálnych komponentov a otestovať ich v praxi, pričom základom pre projekty bol vybraný Duckietown.
Duckietown je otvorený projekt, ktorý zahŕňa malé autonómne roboty nazývané Duckiebot a siete ciest, po ktorých sa pohybujú. Duckiebot je koliesková platforma vybavená mikropočítačom Raspberry Pi a jednou kamerou.
Na jeho základe sme pripravili súbor možných úloh, ako sú mapovanie ciest, vyhľadávanie objektov a zastavenie sa pri nich, ako aj mnohé ďalšie. Študenti mohli tiež navrhnúť vlastný problém a nielen napísať program na jeho riešenie, ale ho aj okamžite spustiť na reálnom robote.
Vyučovanie
Počas prednášky učitelia prednášali materiál pomocou vopred pripravených prezentácií. Niektoré hodiny boli nahrávané na video, takže mali študenti možnosť pozrieť si ich doma. Počas prednášok študenti využívali materiály na svojich počítačoch, kládli otázky, spoločně riešili úlohy a občas aj pri tabuli. Na základe práce bol vypočítaný rebríček každého študenta zvlášť v rôznych predmetoch.

Pozrime sa podrobnejšie na uskutočnenie hodín pre každý predmet. Prvým predmetom bola lineárna algebra. Študenti počas jedného dňa študovali vektory a matice, systémy lineárnych rovníc atď. Praktické úlohy boli koncipované v interaktívnom režime: navrhnuté úlohy vyriešili individuálne, pričom učiteľ a ostatní študenti poskytovali komentáre a nápovedy.

Druhým predmetom bola elektrina a jednoduché schémy. Študenti sa oboznámili so základmi elektrodynamiky: napätie, prúd, odpor, Ohmov zákon a Kirchhoffove zákony. Praktické úlohy sa čiastočne vykonávali v simulátore alebo sa realizovali na tabuli, ale viac času sa venovalo konštrukcii skutočných schém, ako sú logické schémy, oscilujúce obvody atď.

Ďalšou témou bola Architektúra počítača, ktorá je akýmsi mostom spájajúcim fyziku a programovanie. Študenti študovali fundamentálne základy, ktorých význam je skôr teoretický ako praktický. V rámci praktickej časti študenti samostatne navrhovali aritmeticko-logické obvody v simulátore a za vykonané úlohy získali body.
Štvrtý deň — prvý deň programovania. Ako programovací jazyk bol vybraný Python 2, pretože sa používa pri programovaní pod ROS. Tento deň bol organizovaný nasledujúcim spôsobom: učitelia prezentovali materiál, uvádzali príklady riešenia úloh, zatiaľ čo študenti ich počúvali, sedeli za počítačmi a opakovali to, čo učiteľ napísal na tabuľu alebo slidoch. Potom sa študenti snažili samostatne vyriešiť podobné úlohy, pričom výsledky boli neskôr hodnotené učiteľmi.
Piaty deň bol venovaný ROS: študenti sa zoznamovali s programovaním robotov. Celý školský deň študenti sedeli za počítačmi a spúšťali programový kód, o ktorom hovoril učiteľ. Boli schopní samostatne spustiť základné jednotky ROS, ako aj sa oboznámiť s projektom Duckietown. Po skončení tohto dňa boli študenti pripravení na projektovú časť školy — riešenie praktických úloh.

Popis vybraných projektov
Študenti mali možnosť spojiť sa do tímov po troch a vybrať si tému projektu. Nakoniec boli prijaté nasledujúce projekty:
1. Kalibrácia farieb. Duckiebot potrebuje kalibráciu kamery pri zmene podmienok osvetlenia, preto existuje úloha automatickej kalibrácie. Problém je v tom, že rozsahy farieb sú veľmi citlivé na osvetlenie. Účastníci implementovali utilitu, ktorá by v rámci snímky zvýraznila požadované farby (červenú, bielu a žltú) a vytvorila rozsahy pre každú farbu vo formáte HSV.
2. Duck Taxi. Myšlienka tohto projektu spočíva v tom, že Duckiebot môže zastaviť pri určitom objekte, vziať ho a pokračovať po určitom trase. Ako objekt bola zvolená jasne žltá kačka.

3. Tvorba grafu ciest. Existuje úloha vytvorenia grafu ciest a križovatiek. Cieľom tohto projektu je vytvoriť graf ciest bez poskytnutia apriorných údajov o prostredí pre Duckiebot, pričom sa opiera len o dáta z kamery.
4. Hliadkový automobil. Tento projekt bol vymyslený samotnými študentmi. Navrhli vycvičiť jeden Duckiebot, „hliadkový“, aby sledoval iný — „porušovateľa“. Na to bol použitý mechanizmus rozpoznávania cieľa pomocou ArUco-markera. Keď je rozpoznávanie dokončené, „porušovateľovi“ je zaslaný signál o ukončení činnosti.

Kalibrácia farieb
Cieľom projektu Color Calibration bola úprava rozsahu rozpoznávaných farieb značkovania na nové podmienky osvetlenia. Bez týchto úprav bolo rozpoznávanie stop-línií, deliacich čiar a hraníc ciest nesprávne. Účastníci navrhli riešenie založené na predspracovaní vzorov farieb značkovania: červenej, žltej a bielej.
Pre každú z týchto farieb bol stanovený predbežný rozsah HSV alebo RGB hodnôt. S použitím tohto rozsahu sa na snímke nachádzajú všetky oblasti, ktoré obsahujú vhodné farby, a z nich sa vyberá najväčšia. Táto oblasť je považovaná za farbu, ktorú je potrebné zapamätať. Následne sa používajú štatistické vzorce, ako je výpočet priemeru a smerodajnej odchýlky na posúdenie nového farebného rozsahu.
Tento rozsah je zapísaný do konfiguračných súborov kamery Duckiebot a môže byť využitý v budúcnosti. Opísaný prístup bol aplikovaný na všetky tri farby, pričom nakoniec formoval rozsahy pre každú z farieb značkovania.
Testy ukázali takmer dokonalé rozpoznávanie línií značkovania, okrem tých prípadov, keď sa na materiály značkovania používala lesklá páska, ktorá tak silno odrážala zdroje osvetlenia, že pod uhlom pohľadu kamery sa zdalo, že značka je biela bez ohľadu na jej pôvodnú farbu.

Duck Taxi
Projekt Duck Taxi predpokladal vytvorenie algoritmu na vyhľadávanie pasážera kačky v meste a následné jeho prepravenie na požadované miesto. Účastníci rozdelili túto úlohu na dve: detekciu a pohyb v grafe.
Študenti uskutočnili detekciu kačky, pričom predpokladali, že kačka je akákoľvek oblasť na snímke, ktorú je možné rozpoznať ako žltú, s červeným trojuholníkom ( zobákom) na nej. Akonáhle sa takáto oblasť objaví na nasledujúcej snímke, robot by sa mal priblížiť k nej a potom sa na niekoľko sekúnd zastaviť, napodobňujúc pristátie pasažiera.
Následne, so zastavaným grafom ciest celého duckietown a pozíciou robota, ako aj so zadaním cieľového bodu, účastníci konštruujú cestu z miesta odchodu do bodu příjmu, pričom používajú Dijkstra algoritmus na vyhľadávanie ciest v grafe. Výstup sa prezentuje vo forme súboru príkazov — odbočenia na každom z nasledujúcich križovatiek.

Graf ciest
Cieľom tohto projektu bolo vytvorenie grafu — siete ciest v Duckietown. Uzlami výsledného grafu sú križovatky a hranami — cesty. Na tento účel musí Duckiebot preskúmať mesto a analyzovať svoju trasu.
Počas práce na projekte bola zvážená, ale nakoniec odmietnutá myšlienka robiť vážený graf, v ktorom náklad hrany je určený vzdialenosťou (časom na prekonanie) medzi križovatkami. Realizácia tejto myšlienky bola príliš pracná a v rámci školy by na ňu nebolo dosť času.
Keď sa Duckiebot dostane k ďalšej križovatke, vyberie si cestu, ktorá vychádza z križovatky a po ktorej ešte nešiel. Keď sú všetky cesty na všetkých križovatkách prejdú, v pamäti robota zostane vytvorený zoznam susednosti križovatiek, ktorý sa pomocou knižnice Graphviz prevedie na obrázok.
Navrhnutý algoritmus účastníkov nie je vhodný pre ľubovoľné Duckietown, ale dobre fungoval na malom meste pozostávajúcom zo štyroch križovatiek, ktoré sa používalo v rámci školy. Myšlienka bola doplniť každú križovatku ArUco-markerom, ktorý obsahuje identifikátor križovatky, aby sa sledoval poradie prechodu križovatkami.
Schéma fungovania vyvinutého algoritmu účastníkmi je znázornená na obrázku.

Patrol Car
Cieľom tohto projektu je vyhľadávať, prenasledovať a zadržať porušovateľa v Duckietown. Patrol bot sa musí pohybovať po vonkajšom kruhu cesty v meste a hľadať vopred známeho porušovateľa. Po jeho objavení by mal patrolný robot sledovať porušovateľa a donútiť ho zastaviť.
Práca začala hľadaním myšlienky detekcie robota v zábere a jeho rozpoznávania ako porušovateľa. Tím navrhol vybaviť každého robota v meste vzadu jedinečným markerom — rovnako ako skutočné automobily majú štátne registračné čísla. Na tento účel boli vybrané ArUco-mariery. Tieto sa už predtým používali v Duckietown, pretože s nimi je ľahké pracovať a umožňujú určiť orientáciu markera v priestore a vzdialenosť k nemu.
Ďalej bolo potrebné urobiť tak, aby patrolový robot sa pohyboval striktne po vonkajšom okruhu bez zastavení na križovatkách. Predvolene Duckiebot sa pohybuje v jazdnom pruhu a zastavuje na stop línii. Potom pomocou dopravných značiek určuje konfiguráciu križovatky a činí rozhodnutie o smere jazdy. Za každý z opísaných krokov zodpovedá jeden zo stavov konečného automatu robota. Aby sa zbavil zastavení na križovatke, tím zmenil automat stavov tak, aby pri priblížení k stop línii robot okamžite prešiel do stavu prechodu cez križovatku priamo.
Nasledujúcim krokom bolo riešenie úlohy zastavenia robota-porušovateľa. Tím predpokladal, že patrolový robot môže mať prístup cez SSH k každému z robotov v meste, teda mať určitú informáciu o tom, aké údaje pre autorizáciu a aký id má každý robot. Takže po zistení porušovateľa, patrolový robot začal sa pripájať cez SSH k robotovi-porušovateľovi a vypínal jeho systém.
Po potvrdení toho, že príkaz na vypnutie bol vykonaný, sa patrolový robot tiež zastavil.
Algoritmus práce patrolového robota možno predstaviť vo forme nasledujúcej schémy:

Práca na projektoch
Práca bola organizovaná v formáte podobnom Scrum: každé ráno študenti plánovali úlohy na aktuálny deň a večer sa hlásili o vykonanej práci.
V prvý a záverečný deň študenti pripravili prezentácie, opisujúce stanovenú úlohu a spôsoby jej riešenia. Aby sa študentom pomohlo dodržať vybrané plány, v miestnostiach, kde prebiehala práca na projektoch, neustále boli prítomní učitelia z Ruska a Ameriky, ktorí odpovedali na otázky. Komunikácia prebiehala prevažne v anglickom jazyku.
Výsledky a ich prezentácia
Práca na projektoch trvala jeden týždeň, po uplynutí ktorého študenti predstavili svoje výsledky. Všetci pripravili prezentácie, v ktorých hovorili, čo sa naučili v tejto škole, aké najdôležitejšie lekcie si odniesli, čo sa im páčilo alebo nepáčilo. Po tom každá tím predstavila svoj projekt. Všetky tímy zvládli stanovené úlohy.
Tím, ktorý vykonáva kalibráciu farieb, dokončil prácu na projekte rýchlejšie ako ostatní, takže sa im podarilo pripraviť aj dokumentáciu k ich programu. A tím, ktorý sa zaoberal grafom ciest, sa snažil zdokonaliť a opraviť svoje algoritmy aj v posledný deň pred demonštráciou projektu.

Záver
Po ukončení školy sme požiadali študentov, aby zhodnotili uskutočnené aktivity a odpovedali na otázky o tom, do akej miery škola spĺňala ich očakávania, aké zručnosti nadobudli atď. Všetci študenti uviedli, že sa naučili pracovať v tíme, dávať si úlohy a plánovať svoj čas.
Študentom taktiež ponúkli zhodnotiť užitočnosť a náročnosť absolvovaných kurzov. A tu sa vytvorili dve skupiny hodnotení: pre niektorých kurzy nepredstavovali veľkú námahu, zatiaľ čo iní ich hodnotili ako maximálne ťažké.
To znamená, že škola si zaujala správnu pozíciu, zostávajúc prístupná pre nováčikov v danej oblasti, ale aj poskytujúc materiály na opakovanie a upevnenie pre skúsených študentov. Treba poznamenať, že kurz programovania (Python) bol prakticky všetkými označený ako nenáročný, ale užitočný. Najnáročnejším sa podľa študentov ukázal kurz „Architektúra EVM“.
Keď sa študentov opýtali na nedostatky a prednosti školy, mnohí odpovedali, že sa im páčil zvolený štýl výučby, v rámci ktorého pedagógovia promptne a individuálne poskytovali pomoc a odpovedali na vznikajúce otázky.
Študenti tiež uviedli, že sa im páčilo pracovať v režime každodenného plánovania svojich úloh a samostatne si stanovovať termíny. Ako nedostatky študenti uviedli nedostatok poskytnutých vedomostí, ktoré potrebovali pri práci s botom: pri pripojení, porozumení základom a princípom jeho fungovania.
Takmer všetci študenti uviedli, že škola prekonala ich očakávania, čo svedčí o správnom výbere smeru organizácie školy. Tým pádom by sa mali zachovať všeobecné zásady pri organizovaní nasledujúcej školy, pričom by sa mali zohľadniť a pokiaľ je to možné odstrániť nedostatky, ktoré uviedli študenti a pedagógovia, možno zmenou zoznamu kurzov alebo času ich vyučovania.
Autori článku: tím v
P.S. Náš firemný blog má nové meno. Teraz sa bude venovať vzdelávacím projektom spoločnosti JetBrains.
Zdroj: habr.com
