V svetu inženirskega izobraževanja obstaja veliko odličnih tečajev, vendar pogosto program usposabljanja ima eno resno pomanjkljivost — pomanjkanje dobre povezanosti med različnimi temami. Morda bi kdo ugovarjal: kako to že?
Ko se oblikuje program usposabljanja, se za vsak tečaj določijo predpogoji in jasen vrstni red, v katerem je treba študirati discipline. Na primer, da bi sestavili in programirali preprost mobilni robot, je potrebno poznati nekaj mehanike za ustvarjanje njegove fizične konstrukcije; osnove električnosti na nivoju Ohmovih/Kirhgoffovih zakonov, predstave digitalnih in analogen signalov; operacije z vektorji in matrikami, da bi opisali koordinatne sisteme in premikanje robota v prostoru; osnove programiranja na nivoju predstavitev podatkov, preprostih algoritmov in konstrukcij prenosa nadzora itd. za opis obnašanja.
Ali je vse to na univerzitetnih tečajih? Seveda je. Vendar pa k Ohmovim/Kirhgoffovim zakonom pridobimo termodinamiko in teorijo polja; poleg operacij z matrikami in vektorji se je treba spopasti z Jordanovimi oblikami; v programiranju se učiti o polimorfizmu — teme, ki niso vedno potrebne za reševanje preproste praktične naloge.
Univerzitetno usposabljanje je ekstenzivno — učenec gre široko in pogosto ne vidi smisla ter praktičnega pomena znanja, ki ga pridobi. Odločili smo se, da obrnemo paradigmo univerzitetnega usposabljanja STEM (znanost, tehnologija, inženirstvo, matematika) in oblikujemo program, ki temelji na povezanosti znanja, s čimer dopuščamo prihodnje dopolnjevanje, torej omogočamo intenzivno usvajanje predmetov.
Učenje nove oblasti može se uporediti s istraživanjem nekog terena. Tu postoje dve opcije: ili imamo vrlo detaljnu mapu sa ogromnim brojem detalja koje treba proučiti (a to zahteva mnogo vremena), kako bismo razumeli gde se nalaze osnovne tačke i kako se one međusobno odnose; ili možemo koristiti jednostavan plan koji označava samo glavne tačke i njihovo međusobno raspoređivanje — takva mapa je dovoljna da odmah počnemo da se krećemo u pravom smeru, precizirajući detalje tokom puta.
Pristup intenzivnom učenju STEM testirali smo na zimskoj školi koju smo organizovali zajedno sa studentima MIT uz podršku
Priprema materijala
Prvi deo programa škole uključivao je nedelju dana časova o osnovnim oblastima, koje su uključivale algebru, električne krugove, arhitekturu računara, programiranje u Pythonu i upoznavanje sa ROS (Robot Operating System).
Oblasti su izabrane ne slučajno: dopunjujući se, trebalo je da pomognu studentima da vide povezanost između, naizgled, vrlo različitih stvari — matematike, elektronike i programiranja.
Naravno, osnovni cilj nije bio da se održi puno predavanja, već da se studentima omogući da sami primene tek stečeno znanje u praksi.
U okviru algebre, studenti su mogli da vežbaju operacije sa matricama i rešavanje sistema jednačina, koje su bile korisne pri studiranju električnih krugova. Učeći o strukturi tranzistora i logičkim elementima zasnovanim na njemu, učenici su mogli da vide njihovu primenu u strukturi procesora, a nakon učenja osnova programskog jezika Python, napisali su program za pravog robota.

Duckietown
Jedan od zadataka škole bio je minimizovati rad sa simulatorima gde god je to moguće. Stoga je pripremljen veliki skup električnih sklopova koje su studenti trebali da sastave na maketi iz pravih komponenti i da ih testiraju u praksi, dok je kao baza za projekte odabran Duckietown.
Duckietown je odprt projekt, ki vključuje majhne avtonomne robote, imenovane Duckiebots, in omrežja poti, po katerih se premikajo. Duckiebot je kolesna platforma, opremljena z mikroračunalnikom Raspberry Pi in eno kamero.
Na tej osnovi smo pripravili niz možnih nalog, kot so gradnja zemljevida poti, iskanje predmetov in ustavljanje blizu njih, ter še vrsto drugih. Prav tako so lahko študenti predlagali svoj problem in ne le napisali program za njegovo rešitev, ampak tudi takoj zagnali na pravem robotu.
Učenje
Med predavanjem so predavatelji predstavljali material z uporabo vnaprej pripravljenih predstavitev. Nekatera predavanja so bila posneta na video, tako da so imeli študenti možnost, da jih doma ogledajo. Med predavanji so študenti uporabljali materiale na svojih računalnikih, postavljali vprašanja, reševali naloge v skupinah in posamezno, včasih tudi pri tabli. Na podlagi dela je bil izračunan ločen rezultat za vsakega študenta po različnih predmetih.

Poglejmo izvedbo predavanj za vsak predmet bolj podrobno. Prvi predmet je bila linearna algebra. Študenti so v enem dnevu preučevali vektorje in matrice, sisteme linearnih enačb in podobno. Praktične naloge so bile zasnovane v interaktivnem načinu: predlagane naloge so se reševale individualno, predavatelj in drugi študenti pa so dajali komentarje in nasvete.

Drugi predmet je bila elektrika in osnovne sheme. Študenti so spoznali osnove elektrodinamike: napetost, tok, upornost, Ohmov zakon in Kirchhoffova pravila. Praktične naloge so se deloma izvajale v simulatorju ali na tabli, vendar je bilo več časa namenjenega gradnji dejanskih shem, kot so logične sheme, nihajne zanke in podobno.

Naslednja tema je arhitektura računalnikov, ki je v nekem smislu most, povezovanje fizike in programiranja. Študenti so preučevali temeljno osnovo, katere pomen je bolj teoretičen kot praktičen. V okviru prakse so študenti samostojno načrtovali aritmetično-logične sheme v simulatorju in prejeli točke za opravljene naloge.
Četrti dan — prvi dan programiranja. Kao programski jezik odabran je Python 2, jer se upravo on koristi u programiranju pod ROS-om. Ovaj dan je bio organiziran na sljedeći način: predavači su objašnjavali materijal, davali primjere rješavanja zadataka, dok su studenti bili prisutni za računalima i ponavljali ono što je predavač napisao na ploči ili slajdu. Nakon toga su učenici samostalno rješavali slične zadatke, a rješenja su kasnije ocijenjena od strane predavača.
Peti dan bio je posvećen ROS-u: studenti su se upoznavali s programiranjem robota. Cijeli školski dan studenti su bili za računalima, pokrećući programski kod koji je objašnjavao predavač. Uspjeli su samostalno pokrenuti osnovne jedinice ROS-a, a također su se upoznali s projektom Duckietown. Na kraju ovog dana, studenti su bili spremni započeti projektni dio škole — rješavanje praktičnih zadataka.

Opis odabranih projekata
Studentima je predloženo da se udruže u timove od po tri osobe i odaberu temu projekta. Na kraju su prihvaćeni sljedeći projekti:
1. Kalibracija boja. Duckiebot treba kalibraciju kamere pri promjeni uvjeta osvjetljenja, pa postoji zadatak automatske kalibracije. Problem je u tome što su rasponi boja vrlo osjetljivi na osvjetljenje. Sudionici su razvili alat koji bi isticao potrebne boje (crvenu, bijelu i žutu) na slici i gradio raspon za svaku od boja u HSV formatu.
2. Duck Taxi. Ideja ovog projekta je da Duckiebot može stati uz neki objekt, pokupiti ga i slijediti neki put. Kao objekt odabrana je jarko žuta patka.

3. Izrada grafova cesta. Postoji zadatak izrade grafova cesta i raskrižja. Cilj ovog projekta je izraditi graf cesta bez pružanja apriornih podataka o okolini za Duckiebot, oslanjajući se samo na podatke s kamere.
4. Patrola. Ovaj projekt osmisle su sami studenti. Predložili su da se pouči jedan Duckiebot, 'patrolni', da prati drugog — 'prekršitelja'. Za to je korišten mehanizam prepoznavanja cilja pomoću ArUco-markera. Kada prepoznavanje završi, 'prekršitelju' se šalje signal o završetku rada.

Kalibracija boje
Cilj projekta Color Calibration bio je prilagoditi raspon prepoznatih boja oznaka novim uvjetima osvjetljenja. Bez tih prilagodbi, prepoznavanje linija zaustavljanja, razdjelnih linija i granica ceste postajalo bi netočno. Sudionici su predložili rješenje temeljen na prethodnoj obradi uzoraka boja oznaka: crvene, žute i bijele.
Za svaku od tih boja unaprijed je postavljen raspon HSV ili RGB vrijednosti. Koristeći taj raspon, na slici se pronalaze svi dijelovi koji sadrže odgovarajuće boje, a od njih se odabire najveći. Taj dio se uzima kao boja koju treba zapamtiti. Zatim se koriste statističke formule, poput izračuna srednje vrijednosti i standardne devijacije, kako bi se procijenio novi raspon boje.
Ovaj raspon se zapisuje u konfiguracijske datoteke kamere Duckiebot i može se koristiti kasnije. Opisani pristup primijenjen je na sve tri boje, čime su na kraju oblikovani rasponi za svaku od boja oznaka.
Testovi su pokazali gotovo savršeno prepoznavanje oznaka, osim u slučajevima kada su korišteni sjajni materijali za oznaku, koji su toliko odražavali izvore svjetlosti da je pod kutem gledanja kamere oznaka izgledala bijela neovisno o njenoj izvornom boji.

Duck Taxi
Projekt Duck Taxi podrazumijevao je izradu algoritma za pronalaženje putnika patke u gradu, a zatim njihovo prebacivanje na neophodnu točku. Sudionici su ovu zadaću podijelili na dva dijela: detekciju i kretanje kroz graf.
Studenti su izveli detekciju patke, pretpostavljajući da se patkom smatra svaki dio na slici koji se može prepoznati kao žut, s crvenim trokutom (kljunom) na njemu. Kada se takvo područje otkrije u sljedećem okviru, robot bi se trebao približiti, a zatim se zaustaviti na nekoliko sekundi, imitujući slijetanje putnika.
Nakon toga, s unaprijed pohranjenim grafom cesta cijelog duckietown-a i položajem robota, te primivši kao ulaznu informaciju odredište, sudionici grade put od točke polaska do točke dolaska, koristeći Dijkstrin algoritam za pretraživanje putanja u grafu. Izlazni podaci predstavljaju se kao set komandi — skretanja na svakom od narednih raskrižja.

Graf cesta
Cilj ovog projekta bio je izgradnja grafa — mreže puteva u Duckietownu. Čvorišta rezultantnog grafa su raskrsnice, a grane — putevi. Za to Duckiebot mora istražiti grad i analizirati svoju rutu.
Tokom rada na projektu razmatrana je, ali potom odbačena ideja o izradi težinskog grafa, gde bi cena grane bila određena udaljenošću (vremenom putovanja) između raskrsnica. Implementacija te ideje se pokazala previše zahtevnom, a vremena za to nije bilo unutar školskih okvira.
Kada Duckiebot stigne do sledeće raskrsnice, bira put koji izlazi iz raskrsnice, a kojim još nije prošao. Kada su svi putevi na svim raskrsnicama pređeni, u memoriji bota ostaje formirani spisak susednosti raskrsnica, koji se pretvara u sliku pomoću biblioteke Graphviz.
Predloženi algoritam od strane učesnika nije pogodan za proizvoljni Duckietown, ali je dobro funkcionisao u malom gradu sa četiri raskrsnice, koji je korišćen u okviru škole. Ideja je bila dodatno označiti svaku raskrsnicu ArUco markerom koji sadrži identifikator raskrsnice, kako bi se pratila brzina prolaska kroz raskrsnice.
Šema rada razvijenog algoritma od strane učesnika prikazana je na slici.

Patrolni automobil
Cilj ovog projekta je pronalaženje, praćenje i zadržavanje bota-prekršioca u gradu Duckietown. Patrolni bot treba da se kreće po spoljnim kolovozima grada u potrazi za unapred poznatim botom-prekršiocem. Nakon otkrivanja prekršioca, patrolni bot mora pratiti prekršioca i primorati ga da se zaustavi.
Rad je započet traženjem ideje za detekciju bota u kadru i prepoznavanje prekršioca. Tim je predložio da svaki bot u gradu bude opremljen jedinstvenim markerom pozadi — poput pravih automobila koji imaju registarske oznake. Za to su izabrani ArUco marker. Oni su već prethodno korišćeni u Duckietownu, jer su laki za korišćenje i omogućavaju određivanje orijentacije markera u prostoru i udaljenosti do njega.
Nato je bilo potrebno zagotoviti, da se patruljni bot giba strogo po zunanjem krogu brez ustavljanja na križiščih. Privzeto Duckiebot vozi v svoji pasu in se ustavi na črti za ustavitev. Nato s pomočjo prometnih znakov določi konfiguracijo križišča in se odloči o smeri prečkanja križišča. Vsaka od opisanych stopenj je odgovorna za eno od stanj končnega avtomata robota. Da bi se izognili ustavljanju na križišču, je ekipa spremenila avtomat stanj tako, da se je bot takoj po prihodu do črte za ustavitev preklopil v stanje prečkanja križišča naravnost.
naslednji korak je bilo reševanje naloge ustavitve kršitelja bota. Ekipa je predpostavila, da lahko patruljni bot dostopa po SSH do vsakega bota v mestu, kar pomeni, da ima določene informacije o tem, kateri podatki so potrebni za avtorizacijo in kateri id ima vsak bot. Tako je po odkritju kršitelja patruljni bot začel dostopati po SSH do kršitelja in izklapljati njegov sistem.
Po potrditvi, da je bila ukaz za izklop izveden, se je patruljni bot tudi ustavil.
Algoritem delovanja patruljnega robota lahko prikažemo v naslednji shemi:

Delo na projektih
Delo je potekalo v formatu, podobnem Scrum-u: vsako jutro so študenti načrtovali naloge za tekoči dan, zvečer pa poročali o opravljenem delu.
V prvi in končni dan so študenti pripravili predstavitve, ki so opisovale postavljeno nalogo in načine njenega reševanja. Da bi študentom pomagali slediti izbranim načrtom, so v prostorih, kjer so potekala dela na projektih, nenehno prisotni učitelji iz Rusije in Amerike, ki so odgovarjali na vprašanja. Komunikacija je potekala pretežno v angleščini.
Rezultati in njihova predstavitev
Delo na projektih je trajalo en teden, po katerem so študenti predstavili svoje rezultate. Vsi so pripravili predstavitve, v katerih so govorili, česa so se naučili v tej šoli, kakšne so bile najpomembnejše lekcije, ki so jih potegnili, ter kaj jim je bilo všeč ali ne. Nato je vsaka ekipa predstavila svoj projekt. Vse ekipe so se uspešno spopadle s postavljenimi nalogami.
Ekipa za kalibraciju boja završila je projekat brže od drugih, pa su uspeli da pripreme i dokumentaciju za svoj program. Ekipa koja se bavila grafom puteva čak je i poslednjeg dana pre prezentacije projekta pokušavala da doradi i ispravi svoje algoritme.

Zaključek
Nakon završetka škole, zamolili smo studente da ocene prethodne aktivnosti i odgovore na pitanja koliko je škola ispunila njihova očekivanja, koje su veštine stekli itd. Svi studenti su istakli da su naučili da rade u timu, raspodeljuju zadatke i planiraju svoje vreme.
Studentima je takođe ponuđeno da ocene korisnost i težinu prohodenih kurseva. I ovde su se formisale dve grupe ocena: jedni su smatrali da kursevi nisu predstavljali veliku teškoću, dok su drugi ocenili da su maksimalno teški.
To znači da je škola zauzela pravu poziciju, ostajući dostupna za početnike u određenoj oblasti, ali takođe pružajući materijale za ponavljanje i učvršćivanje znanja iskusnim studentima. Treba napomenuti da je kurs programiranja (Python) skoro jednoglasno ocenjen kao jednostavan, ali koristan. Najtežim, prema mišljenju studenata, pokazao se kurs "Arhitektura računarskih sistema."
Kada su studente pitali o nedostacima i vrlinama škole, mnogi su odgovorili da im se dopao izabrani stil podučavanja, u okviru kojeg su nastavnici brzo i individualno pružali pomoć i odgovarali na postavljena pitanja.
Takođe su učenici istakli da im se svidelo raditi u režimu svakodnevnog planiranja svojih zadataka i samostalno postavljati rokove. Kao nedostatak, studenti su ukazali na manjak znanja koje je bilo potrebno prilikom rada sa botom: prilikom povezivanja, razumevanja osnova i principa njegovog rada.
Gotovo svi studenti su napomenuli da je škola nadmašila njihova očekivanja, što ukazuje na ispravno odabranu organizacijsku orijentaciju škole. Na taj način, treba sačuvati opšta načela prilikom organizacije sledeće škole, uzimajući u obzir i, ako je moguće, otklanjajući nedostatke koje su istakli studenti i nastavnici, možda menjajući sadržaj kurseva ili vreme njihovog predavanja.
Autori članka: tim u
P.S. Naš korporativni blog ima novo ime. Sada će biti posvećen obrazovnim projektima kompanije JetBrains.
Izvor: habr.com
