În lumea educației inginerești există multe cursuri excelente, dar adesea programul de învățare construit pe ele are un dezavantaj serios — lipsa unei bune coerențe între diferitele teme. Ar putea fi contestat: cum așa?
Când se formează programul de învățare, pentru fiecare curs se indică prerogativele și o ordine clară în care trebuie studiate disciplinele. De exemplu, pentru a asambla și a programa un robot mobil primitiv, este necesar să știm puțin despre mecanică pentru a crea construcția sa fizică; noțiuni de electricitate la nivelul legilor lui Ohm/Kirchhoff, reprezentarea semnalelor digitale și analogice; operații cu vectori și matrici pentru a descrie sistemele de coordonate și deplasările robotului în spațiu; noțiuni de programare la nivelul reprezentării datelor, celor mai simple algoritmi și structuri de control și așa mai departe pentru a descrie comportamentul.
Există toate acestea în cursurile universitare? Desigur. Totuși, la legile lui Ohm/Kirchhoff primim termodinamică și teoria câmpului; pe lângă operațiile cu matrici și vectori, trebuie să ne descurcăm și cu formele Jordan; în programare să studiem polimorfismul — teme care nu sunt întotdeauna necesare pentru a rezolva o sarcină practică simplă.
Învățământul universitar este extensiv — studenții progresează pe un front larg și adesea nu văd sensul și relevanța practică a cunoștințelor pe care le dobândesc. Am decis să răsturnăm paradigma învățământului universitar STEM (din engleză, știință, tehnologie, inginerie, matematică) și să creăm un program care se bazează pe coerența cunoștințelor, permițând acumularea de profunzime în viitor, adică implicând o învățare intensă a subiectelor.
Studying a new subject area can be compared to exploring a certain territory. There are two options here: either we have a very detailed map with a huge amount of details that need to be studied (and this takes a lot of time) to understand where the main landmarks are and how they relate to each other; or, we can use a simple plan that only marks the main points and their mutual positioning — such a map is sufficient to immediately start moving in the right direction, clarifying details along the way.
We tested the intensive STEM learning approach at a winter school that we held in collaboration with MIT students, supported by
Material Preparation
The first part of the school program consisted of a week of classes covering fundamental topics, including algebra, electrical circuits, computer architecture, programming in Python, and an introduction to ROS (Robot Operating System).
The topics were chosen deliberately: they were meant to complement each other, helping students see the connection between seemingly different things — mathematics, electronics, and programming.
Of course, the primary goal was not to give many lectures but to allow students to apply the knowledge they had just gained in practice.
In the algebra section, students could practice operations with matrices and solving systems of equations, which were useful in studying electrical circuits. After learning about the structure of transistors and logical elements built on them, students could see their application in the design of a processor, and after studying the basics of the Python language, write a program for a real robot.

Duckietown
One of the school's tasks was to minimize the work with simulators where possible. Therefore, a large set of electronic circuits was prepared for the students to assemble on a breadboard from real components and test them in practice, with Duckietown chosen as the base for projects.
Duckietown este un proiect deschis, care include roboți autonomi mici numiți Duckiebot și rețelele de drumuri pe care aceștia se deplasează. Duckiebot este o platformă pe roți, echipată cu un microcomputer Raspberry Pi și o cameră.
Pe baza acestuia, am pregătit un set de sarcini posibile, cum ar fi construirea unei hărți a drumurilor, localizarea obiectelor și oprirea lângă acestea, printre altele. De asemenea, studenții au putut propune propria problemă și nu doar să scrie un program pentru a o rezolva, ci și să îl execute imediat pe un robot real.
Predare
În timpul prelegerii, instructorii au prezentat materialul folosind prezentări pregătite anterior. Unele cursuri au fost înregistrate video, astfel că studenții au avut ocazia să le vizioneze acasă. Pe parcursul cursurilor, studenții au folosit materiale pe computerele lor, au pus întrebări, au rezolvat exerciții împreună și individual, uneori la tablă. Ca rezultat al activității, a fost calculat un clasament pentru fiecare student în parte pe diferite discipline.

Să examinăm desfășurarea cursurilor în fiecare disciplină mai detaliat. Prima disciplină a fost algebra liniară. Studenții au studiat pe parcursul unei zile vectorii și matricile, sistemele de ecuații liniare etc. Sarcinile practice au fost concepute într-un mod interactiv: problemele propuse erau rezolvate individual, iar instructorul și ceilalți studenți ofereau comentarii și sugestii.

A doua disciplină este electricitatea și circuitele simple. Studenții au învățat elementele de bază ale electrodinamicii: tensiune, curent, rezistență, legea lui Ohm și legile lui Kirchhoff. Sarcinile practice au fost realizate parțial în simulator sau executate la tablă, dar s-a acordat mai mult timp construirii circuitelor reale, cum ar fi circuitele logice, circuitele oscilante etc.

Următoarea temă este Arhitectura computerelor — într-un anumit sens, un pod între fizică și programare. Studenții au studiat baza fundamentală, a cărei semnificație este mai degrabă teoretică decât practică. Ca parte a practicii, studenții au proiectat singuri circuite aritmetico-logice în simulator, obținând puncte pentru sarcinile realizate.
A patra zi este prima zi de programare. Limbajul de programare ales a fost Python 2, deoarece acesta este utilizat în programarea sub ROS. Această zi a fost structurată astfel: profesorii au prezentat materialul și au oferit exemple de soluționare a problemelor, în timp ce studenții îi ascultau, stând la computere și repetând ceea ce profesorul a scris pe tablă sau pe slide. Apoi, studenții au rezolvat probleme similar, iar soluțiile au fost evaluate de profesori.
Ziua a cincea a fost dedicată ROS: studenții s-au familiarizat cu programarea roboților. Întreaga zi de studiu, studenții au stat la computere, rulând codul despre care a vorbit profesorul. Au reușit să lanseze singuri unitățile de bază ROS și, de asemenea, s-au familiarizat cu proiectul Duckietown. La sfârșitul acestei zile, studenții erau pregătiți să înceapă partea de proiect a școlii — soluționarea problemelor practice.

Descrierea proiectelor alese
Studenții au fost invitați să formeze echipe de câte trei persoane și să aleagă un subiect pentru proiect. În cele din urmă au fost acceptate următoarele proiecte:
1. Calibrarea culorilor. Duckiebot are nevoie de calibrarea camerei când condițiile de iluminare se schimbă, prin urmare există sarcina calibrării automate. Problema este că intervalele de culori sunt foarte sensibile la iluminare. Participanții au implementat un utilitar care ar evidenția pe cadru culorile necesare (roșu, alb și galben) și ar construi intervale pentru fiecare din culori în format HSV.
2. Duck Taxi. Ideea acestui proiect este ca Duckiebot să se poată opri lângă un anumit obiect, să-l ia și să urmeze un anumit traseu. Obiectul ales a fost o rață galbenă strălucitoare.

3. Construirea unui graf de drumuri. Există sarcina de a construi un graf de drumuri și intersecții. Scopul acestui proiect este de a construi un graf de drumuri fără a oferi date apriorice despre mediu pentru Duckiebot, bazându-se doar pe datele de la cameră.
4. Mașină de patrulare. Acest proiect a fost inventat de studenți. Ei au propus să învețe un Duckiebot, numit „patrulă”, să-l urmărească pe altul — „infractor”. Pentru aceasta a fost folosit un mecanism de recunoaștere a țintei prin markerul ArUco. Odată ce recunoașterea este finalizată, „infractorului” i se trimite un semnal de finalizare a lucrării.

Calibrarea Culorilor
Scopul proiectului Color Calibration a fost corectarea intervalului de culori recunoscute de marcaj în condiții de iluminare noi. Fără astfel de corecturi, recunoașterea liniilor de oprire, a separatorilor de benzi și a marginilor drumului devenea incorectă. Participanții au propus o soluție bazată pe preprocesarea șabloanelor de culori de marcaj: roșu, galben și alb.
Pentru fiecare dintre aceste culori a fost definit un interval preliminar de valori HSV sau RGB. Folosind acest interval, pe cadru sunt identificate toate zonele care conțin culori corespunzătoare, iar din acestea este selectată cea mai mare. Această zonă este acceptată ca fiind culoarea care trebuie memorată. Ulterior, sunt utilizate formule statistice, cum ar fi calculul mediei și deviației standard, pentru a evalua noul interval de culoare.
Acest interval este înregistrat în fișierele de configurare ale camerei Duckiebot și poate fi utilizat ulterior. Abordarea descrisă a fost aplicată celor trei culori, formând în final intervale pentru fiecare dintre culorile de marcaj.
Testele au arătat o recunoaștere aproape perfectă a liniilor de marcaj, cu excepția cazurilor în care materialele de marcaj utilizate erau benzi lucioase, care reflectau atât de mult sursele de iluminare încât, sub un anumit unghi de vedere al camerei, marcajul părea alb, indiferent de culoarea sa inițială.

Duck Taxi
Proiectul Duck Taxi prevedea construirea unui algoritm de căutare pentru a localiza rața-pasager în oraș și apoi transportul ei la punctul necesar. Participanții au împărțit această sarcină în două: detecția și mișcarea prin graf.
Studenții au realizat detecția raței, presupunând că rața este orice zonă din cadru care poate fi recunoscută ca fiind galbenă, cu un triunghi roșu (ciocul) pe ea. Odată ce o astfel de zonă este descoperită pe un cadru, robotul trebuie să se apropie de ea și apoi să se oprească câteva secunde, imitând aterizarea pasagerului.
Apoi, având în memorie un graf predefinit al drumurilor din întreg Duckietown și poziția botului, precum și, primind ca date de intrare punctul de destinație, participanții construiesc un traseu din punctul de plecare în punctul de sosire, utilizând algoritmul Dijkstra pentru a căuta căile în graf. Ieșirile sunt prezentate sub formă de set de comenzi - viraje la fiecare dintre următoarele intersecții.

Graf de Drumuri
Scopul acestui proiect a fost construirea unui graf - o rețea de drumuri în Duckietown. Nodurile graf-ului rezultat sunt intersecțiile, iar arcele reprezintă drumurile. Pentru aceasta, Duckiebot trebuie să exploreze orașul și să analizeze traseul său.
În cursul lucrului asupra proiectului, a fost luată în considerare, dar apoi abandonată, ideea de a realiza un graf ponderat, în care costul arcului este definit de distanța (timpul necesar pentru a o traversa) între intersecții. Implementarea acestei idei s-a dovedit prea laborioasă, iar timpul disponibil în cadrul școlii nu ar fi fost suficient.
Când Duckiebot ajunge la o nouă intersecție, el alege drumul care iese din intersecție pe care nu a mai parcurs-o. Odată ce toate drumurile de la toate intersecțiile sunt parcurse, în memoria botului rămâne o listă de adiacență a intersecțiilor, care este transformată într-o imagine prin intermediul bibliotecii Graphviz.
Algoritmul propus de participanți nu este potrivit pentru un Duckietown arbitrar, dar a funcționat bine într-un oraș mic format din patru intersecții, utilizat în cadrul școlii. Ideea era de a completa fiecare intersecție cu un marker ArUco, conținând identificatorul intersecției, pentru a urmări ordinea de trecere prin intersecții.
Schema de lucru a algoritmului dezvoltat de participanți este prezentată în imagine.

Patrula
Scopul acestui proiect este căutarea, urmărirea și capturarea botului infractor în orașul Duckietown. Botul-patrulă trebuie să circule pe inelul exterior al drumului din oraș în căutarea unui bot infractor cunoscut. După ce infractorul este descoperit, botul-patrulă trebuie să urmărească infractorul și să-l constrângă să se oprească.
Lucrările au început cu căutarea unei idei pentru detectarea botului în cadru și recunoașterea infractorului. Echipa a propus echiparea fiecărui bot din oraș, în spate, cu un marker unic - la fel cum mașinile reale au numere de înmatriculare. Pentru aceasta, au fost alese marcare ArUco. Acestea au fost utilizate anterior în Duckietown, deoarece sunt ușor de utilizat și permit determinarea orientării markerului în spațiu și distanța până la acesta.
Apoi, a fost necesar să se facă astfel încât robotul de patrulare să se miște strict pe circumferința exterioară fără opriri la intersecții. În mod implicit, Duckiebot se mișcă pe bandă și se oprește la linia de stop. Apoi, cu ajutorul semnelor de circulație, determină configurația intersecției și ia decizia cu privire la direcția de traversare a intersecției. Fiecare dintre etapele descrise este responsabilizată de unul dintre stările mașinii cu stări finite a robotului. Pentru a elimina opririle la intersecție, echipa a modificat mașina de stări astfel încât, la apropierea de linia de stop, robotul să treacă imediat în starea de traversare a intersecției în linie dreaptă.
Următorul pas a fost soluționarea problemei opririi robotului infractor. Echipa a făcut sugestia că robotul de patrulare poate avea acces prin SSH la fiecare dintre roboții din oraș, adică să aibă unele informații despre datele de autentificare și ce id are fiecare robot. Astfel, după detectarea infractorului, robotul de patrulare a început să se conecteze prin SSH la robotul infractor și să îi oprească sistemul.
După confirmarea faptului că comanda de oprire a fost executată, robotul de patrulare trebuia, de asemenea, să se oprească.
Algoritmul de funcționare al robotului de patrulare poate fi reprezentat sub forma următoarei scheme:

Lucrări la proiecte
Lucrările au fost organizate într-un format similar cu Scrum: în fiecare dimineață, studenții își planificau sarcinile pentru ziua respectivă, iar seara raportau despre munca realizată.
În prima și ultima zi, studenții au pregătit prezentări care descriau sarcina dată și modalitățile de rezolvare a acesteia. Pentru a ajuta studenții să urmeze planurile alese, în camerele unde se desfășura munca la proiecte se aflau constant profesori din Rusia și America, care răspundeau la întrebări. Comunicația se desfășura în principal în limba engleză.
Rezultatele și demonstrarea acestora
Lucrările la proiecte au durat o săptămână, timp în care studenții au prezentat rezultatele lor. Toți au pregătit prezentări în care au vorbit despre ce au învățat în această școală, care au fost cele mai importante lecții învățate, ce le-a plăcut sau nu le-a plăcut. După aceasta, fiecare echipă și-a prezentat proiectul. Toate echipele și-au îndeplinit sarcinile stabilite.
Echipa responsabilă de calibrarea culorilor a finalizat proiectul mai repede decât ceilalți, astfel încât au reușit să pregătească și documentația pentru programul lor. Echipa care s-a ocupat de grafurile de drum a continuat să îmbunătățească și să corecteze algoritmii până în ultima zi înainte de prezentarea proiectului.

Concluzie
După terminarea școlii, am rugat studenții să evalueze activitățile desfășurate și să răspundă la întrebări despre cât de mult s-a ridicat școala la nivelul așteptărilor lor, ce abilități au dobândit etc. Toți studenții au subliniat că au învățat să colaboreze, să își împartă sarcinile și să își planifice timpul.
Studenții au fost, de asemenea, invitați să evalueze utilitatea și dificultatea cursurilor parcurse. Aici s-au format două grupuri de evaluări: pentru unii, cursurile nu au fost foarte dificile, în timp ce alții le-au apreciat ca fiind extrem de complexe.
Aceasta înseamnă că școala a ocupat o poziție corectă, rămânând accesibilă pentru începători în diferite domenii, dar și oferind materiale pentru revizuire și consolidare pentru studenții mai experimentați. Este demn de remarcat că cursul de programare (Python) a fost considerat, de majoritatea, ca fiind simplu, dar util. Cel mai dificil, în opinia studenților, a fost cursul „Arhitectura calculatoarelor”.
Când studenții au fost întrebați despre dezavantajele și avantajele școlii, mulți au răspuns că le-a plăcut stilul de predare ales, în cadrul căruia profesorii ofereau rapid și individual ajutor și răspundeau la întrebările apărute.
De asemenea, studenții au subliniat că le-a plăcut să lucreze în regimul de planificare zilnică a sarcinilor și să stabilească singuri termene-limite. Printre dezavantaje, studenții au menționat lipsa cunoștințelor oferite care le erau necesare în lucrul cu robotul: la conectare, înțelegerea principiilor de bază și a modului de funcționare.
Practic toți studenții au remarcat că școala le-a depășit așteptările, ceea ce indică o direcție corect aleasă în organizarea școlii. Astfel, ar trebui păstrate principiile generale în organizarea viitoarei școli, având în vedere și, dacă este posibil, eliminând dezavantajele menționate de studenți și profesori, poate schimbând lista cursurilor sau programul lor.
Autorii articolului: echipa în
P.S. Blogul nostru corporativ are un nou nume. Acum va fi dedicat proiectelor educaționale ale companiei JetBrains.
Sursa: habr.com
