Nel mondo dell'ingegneria educativa ci sono molti ottimi corsi, ma spesso il programma formativo basato su di essi presenta un serio difetto: la mancanza di una buona coerenza tra i vari argomenti. Si potrebbe obiettare: come è possibile?
Quando si crea un programma di studi, per ogni corso vengono indicati i prerequisiti e un ordine chiaro in cui studiare le discipline. Ad esempio, per assemblare e programmare un semplice robot mobile, è necessario avere alcune conoscenze di meccanica per realizzarne la struttura fisica; nozioni di elettricità a livello delle leggi di Ohm/Kirchhoff, rappresentazione di segnali digitali e analogici; operazioni con vettori e matrici per descrivere i sistemi di coordinate e i movimenti del robot nello spazio; basi di programmazione a livello di rappresentazione dei dati, semplici algoritmi e strutture di controllo, ecc. per descrivere il comportamento.
C'è tutto questo nei corsi universitari? Certo che sì. Tuttavia, accanto alle leggi di Ohm/Kirchhoff, studiamo la termodinamica e la teoria del campo; oltre alle operazioni con matrici e vettori, dobbiamo affrontare le forme di Jordan; in programmazione si studia il polimorfismo — argomenti che non sono sempre necessari per risolvere un semplice problema pratico.
L'istruzione universitaria è estensiva: lo studente affronta un ampio ventaglio di argomenti e spesso non percepisce il senso e l'importanza pratica delle conoscenze acquisite. Abbiamo deciso di ribaltare la paradigmi dell'istruzione STEM (Scienze, Tecnologia, Ingegneria, Matematica) universitaria e di creare un programma che si basi sulla connessione delle conoscenze, consentendo un accumulo di completezza in futuro, cioè implicando un'intensa padronanza delle materie.
Studiare un nuovo campo di conoscenza è come esplorare un territorio. Ci sono due opzioni: o abbiamo una mappa molto dettagliata con un'enorme quantità di informazioni da esplorare (che richiede tempo) per capire dove si trovano i punti di riferimento principali e come si relazionano tra loro; oppure possiamo utilizzare una mappa primitiva, che segna solo i punti principali e la loro disposizione reciproca. Questa mappa è sufficiente per iniziare subito a muoversi nella giusta direzione, chiarendo i dettagli lungo il percorso.
Il nostro approccio all'apprendimento intensivo STEM è stato testato durante la winter school che abbiamo condotto in collaborazione con gli studenti del MIT, supportati da
Preparazione del materiale
La prima parte del programma della scuola è consistita in una settimana di lezioni sui principali argomenti, che includevano algebra, circuiti elettrici, architettura del computer, programmazione in Python e un'introduzione a ROS (Robot Operating System).
Le direzioni sono state scelte non a caso: complementandosi a vicenda, dovevano aiutare gli studenti a vedere il collegamento tra cose che sembravano diverse a prima vista — matematica, elettronica e programmazione.
Certo, l'obiettivo principale non era leggere molte lezioni, ma dare la possibilità agli studenti di applicare praticamente le conoscenze appena acquisite.
Nella sezione di algebra, gli studenti potevano esercitarsi nelle operazioni con le matrici e nella risoluzione dei sistemi di equazioni, utili nello studio dei circuiti elettrici. Apprendendo il funzionamento del transistor e degli elementi logici basati su di esso, gli studenti potevano vedere la loro applicazione nella realizzazione del processore, e dopo aver studiato le basi del linguaggio Python, scrivere un programma per un robot reale.

Duckietown
Uno degli obiettivi della scuola era minimizzare l'uso dei simulatori dove possibile. Pertanto, è stato preparato un ampio set di schemi elettrici che gli studenti dovevano assemblare su una breadboard con componenti reali e testare praticamente, e come base per i progetti è stata scelta Duckietown.
Duckietown — un progetto open-source che comprende piccoli robot autonomi chiamati Duckiebot e una rete stradale su cui si muovono. Duckiebot è una piattaforma su ruote equipaggiata con un microcomputer Raspberry Pi e una fotocamera.
Sulla sua base abbiamo preparato un insieme di compiti possibili, come la costruzione di una mappa stradale, la ricerca di oggetti e l'arresto vicino a essi, oltre a molte altre attività. Gli studenti potevano anche proporre i propri problemi e non solo scrivere un programma per risolverli, ma anche eseguirlo immediatamente su un robot reale.
Insegnamento
Durante la lezione, gli insegnanti presentavano il materiale utilizzando presentazioni preparate in anticipo. Alcune lezioni sono state registrate in video, offrendo agli studenti la possibilità di rivederle a casa. Durante le lezioni, gli studenti utilizzavano il materiale sui propri computer, facevano domande, risolvevano problemi insieme e individualmente, a volte anche alla lavagna. Alla fine delle attività è stata calcolata una classifica per ogni studente nei diversi soggetti.

Esaminiamo più da vicino lo svolgimento delle lezioni per ciascuna materia. La prima materia è stata l'algebra lineare. Gli studenti, in un giorno, hanno studiato vettori e matrici, sistemi di equazioni lineari, ecc. Gli esercizi pratici sono stati realizzati in modalità interattiva: i problemi proposti venivano risolti individualmente, mentre il docente e gli altri studenti davano commenti e suggerimenti.

La seconda materia riguarda l'elettricità e i circuiti semplici. Gli studenti hanno appreso le basi dell'elettrodinamica: tensione, corrente, resistenza, legge di Ohm e leggi di Kirchhoff. Gli esercizi pratici sono stati parzialmente svolti in un simulatore o eseguiti alla lavagna, ma è stato dedicato più tempo alla costruzione di circuiti reali, come circuiti logici, circuiti oscillanti, ecc.

Il tema successivo è l'architettura dei computer, che in un certo senso funge da ponte tra fisica e programmazione. Gli studenti hanno studiato le basi fondamentali, il cui significato è più teorico che pratico. Come pratica, gli studenti hanno progettato autonomamente circuiti aritmetico-logici nel simulatore e hanno ricevuto punti per i compiti svolti.
Il quarto giorno è stato dedicato al primo giorno di programmazione. Come linguaggio di programmazione è stato scelto Python 2, poiché è quello utilizzato nella programmazione per ROS. La giornata è stata strutturata in questo modo: gli insegnanti spiegavano il materiale, portando esempi di risoluzione dei problemi, mentre gli studenti ascoltavano, seduti ai computer, e ripetevano ciò che l'insegnante aveva scritto sulla lavagna o nelle diapositive. Successivamente, gli studenti hanno risolto problemi simili in autonomia, e le soluzioni sono state valutate dai docenti.
Il quinto giorno è stato dedicato a ROS: i ragazzi si sono avvicinati alla programmazione di robot. Durante l'intera giornata di lezione, gli studenti erano seduti ai computer, eseguendo il codice software di cui parlava l'insegnante. Sono riusciti a lanciare autonomamente le unità principali di ROS e hanno anche conosciuto il progetto Duckietown. Alla fine di questa giornata, gli studenti erano pronti per iniziare la parte progettuale della scuola, affrontando compiti pratici.

Descrizione dei progetti scelti
Agli studenti è stato chiesto di unirsi in gruppi di tre persone e scegliere un tema per il progetto. In conclusione, sono stati accettati i seguenti progetti:
1. Calibrazione dei colori. Duckiebot necessita di calibrazione della telecamera quando cambiano le condizioni di illuminazione, quindi è in corso un progetto di calibrazione automatica. Il problema è che le gamme di colori sono molto sensibili all'illuminazione. I partecipanti hanno realizzato un'utility che evidenzia nel fotogramma i colori richiesti (rosso, bianco e giallo) e costruisce le gamme per ciascun colore in formato HSV.
2. Duck Taxi. L'idea di questo progetto è che Duckiebot possa fermarsi vicino a un oggetto, raccoglierlo e seguire un determinato percorso. L'oggetto scelto è un'anatra gialla brillante.

3. Costruzione del grafo stradale. Esiste il compito di costruire un grafo delle strade e degli incroci. L'obiettivo di questo progetto è costruire un grafo stradale senza fornire dati a priori sull'ambiente per Duckiebot, basandosi solo sui dati della telecamera.
4. Auto di pattuglia. Questo progetto è stato ideato dagli stessi studenti. Hanno proposto di insegnare a un Duckiebot, il "pattugliatore", a inseguire un altro — il "trasgressore". A questo scopo è stato utilizzato un meccanismo di riconoscimento del bersaglio tramite un marker ArUco. Una volta completato il riconoscimento, al "trasgressore" viene inviato un segnale di fine operazione.

Calibrazione del colore
L'obiettivo del progetto Calibrazione del colore era quello di adeguare la gamma di colori riconosciuti della segnaletica alle nuove condizioni di illuminazione. Senza tali regolazioni, il riconoscimento delle strisce di arresto, dei separatori di corsia e dei confini stradali diventava errato. I partecipanti hanno proposto una soluzione basata sulla pre-elaborazione dei pattern dei colori della segnaletica: rosso, giallo e bianco.
Per ciascuno di questi colori è stato definito un intervallo preliminare di valori HSV o RGB. Utilizzando questo intervallo, tutte le aree presenti nel frame che contengono colori appropriati vengono identificate e da esse viene selezionata la più grande. Questa area viene considerata il colore che deve essere memorizzato. Successivamente, si utilizzano formule statistiche, come il calcolo della media e della deviazione standard, per valutare il nuovo intervallo di colore.
Questo intervallo viene registrato nei file di configurazione della telecamera Duckiebot e può essere utilizzato in seguito. L'approccio descritto è stato applicato a tutti e tre i colori, formando alla fine gli intervalli per ciascun colore di marcatura.
I test hanno mostrato un riconoscimento quasi perfetto delle linee di marcatura, tranne nei casi in cui i materiali di marcatura utilizzati erano nastro lucido, che rifletteva così intensamente le fonti di luce che, dall'angolo di vista della telecamera, la marcatura appariva bianca indipendentemente dal suo colore originale.

Duck Taxi
Il progetto Duck Taxi prevedeva la creazione di un algoritmo di ricerca per il trasporto delle anatre-passeggeri in città, seguita dal loro trasferimento nel luogo desiderato. I partecipanti hanno suddiviso questo compito in due fasi: rilevamento e movimento nel grafo.
Gli studenti hanno realizzato il rilevamento dell'anatra, facendo l'assunzione che un'anatra è qualsiasi area nell'inquadratura che può essere riconosciuta come gialla, con un triangolo rosso (il becco) sopra di essa. Non appena un'area simile viene identificata nel fotogramma successivo, il robot deve avvicinarsi, quindi fermarsi per alcuni secondi, simulando l'imbarco del passeggero.
Dopo aver memorizzato in anticipo un grafo delle strade di tutto duckietown e la posizione del robot, e ricevuto come input il punto di destinazione, i partecipanti costruiscono un percorso dal punto di partenza al punto di arrivo, utilizzando l'algoritmo di Dijkstra per la ricerca dei percorsi nel grafo. I risultati vengono presentati sotto forma di un insieme di comandi — le svolte a ogni incrocio successivo.

Grafo delle Strade
L'obiettivo di questo progetto era costruire un grafo — una rete stradale in Duckietown. I nodi del grafo risultante sono gli incroci e gli archi — le strade. Per questo, Duckiebot deve esplorare la città e analizzare il suo percorso.
Durante il lavoro sul progetto è stata considerata, ma poi scartata, l'idea di creare un grafo pesato, in cui il costo dell'arco è determinato dalla distanza (tempo di percorrenza) tra gli incroci. L'attuazione di questa idea si è rivelata troppo laboriosa e non ci sarebbe stato tempo a disposizione all'interno del corso.
Quando Duckiebot arriva a un incrocio, sceglie la strada che esce dall'incrocio sulla quale non è ancora passato. Quando tutte le strade di tutti gli incroci sono state percorse, nella memoria del bot rimane un elenco di adiacenza degli incroci, che viene convertito in un'immagine tramite la libreria Graphviz.
L'algoritmo proposto dai partecipanti non è adatto per un Duckietown arbitrario, ma ha funzionato bene in una piccola città composta da quattro incroci, utilizzata nell'ambito di una scuola. L'idea era di completare ogni incrocio con un marker ArUco contenente l'identificativo dell'incrocio per monitorare l'ordine di attraversamento degli incroci.
Lo schema di funzionamento dell'algoritmo sviluppato dai partecipanti è mostrato nell'immagine.

Auto di pattuglia
L'obiettivo di questo progetto è individuare, inseguire e fermare un robot trasgressore nella città di Duckietown. Il robot di pattuglia deve muoversi lungo l'anello esterno della strada in città alla ricerca di un robot trasgressore noto. Una volta rilevato il trasgressore, il robot di pattuglia deve seguirlo e costringerlo a fermarsi.
Il lavoro è iniziato con la ricerca di un'idea per la rilevazione dei robot in un'immagine e il riconoscimento di un infrattore. Il team ha proposto di dotare ogni robot in città di un marcatore unico sul retro, proprio come le automobili reali hanno numeri di registrazione. Per questo sono stati scelti i marcatori ArUco. Questi erano già stati utilizzati in duckietown, poiché sono facili da gestire e consentono di determinare l'orientamento del marcatore nello spazio e la distanza da esso.
Successivamente, si è reso necessario fare in modo che il robot di pattuglia si muovesse rigorosamente attorno al cerchio esterno senza fermarsi agli incroci. Di default, il Duckiebot si muove nella corsia e si ferma alla linea di stop. Poi, utilizzando i segnali stradali, determina la configurazione dell'incrocio e decide la direzione da seguire. Ciascuna delle fasi descritte è gestita da uno stato dell'automa a stati del robot. Per eliminare le soste agli incroci, il team ha modificato l'automa degli stati in modo che, all'avvicinarsi alla linea di stop, il robot passasse immediatamente allo stato di attraversamento dell'incrocio in linea retta.
Il passo successivo è stato risolvere il problema della fermata del bot trasgressore. Si è ipotizzato che il bot di pattugliamento potesse avere accesso SSH a ciascuno dei bot in città, cioè avere alcune informazioni su quali dati di accesso e quale ID avesse ogni bot. Così, dopo aver scoperto il trasgressore, il bot di pattugliamento ha iniziato a connettersi tramite SSH al bot trasgressore e a spegnere il suo sistema.
Dopo aver confermato che il comando di spegnimento era stato eseguito, anche il bot di pattugliamento si fermava.
L'algoritmo di lavoro del robot di pattugliamento può essere rappresentato nella seguente schematizzazione:

Lavoro sui progetti
Il lavoro è stato organizzato in un formato simile allo Scrum: ogni mattina gli studenti pianificavano le attività per la giornata corrente e la sera riferivano sul lavoro svolto.
Nei primi e nell'ultimo giorno, gli studenti hanno preparato presentazioni che descrivono il compito assegnato e i metodi per risolverlo. Per assistere gli studenti nel seguire i piani scelti, nelle stanze dove si svolgeva il lavoro sui progetti erano sempre presenti insegnanti provenienti dalla Russia e dall'America, che rispondevano alle domande. La comunicazione avveniva prevalentemente in inglese.
Risultati e la loro dimostrazione
Il lavoro sui progetti è durato una settimana, al termine della quale gli studenti hanno presentato i loro risultati. Tutti hanno preparato presentazioni in cui hanno raccontato cosa hanno imparato in questa scuola, quali sono state le lezioni più importanti che hanno appreso, cosa è piaciuto o non è piaciuto. Successivamente, ogni squadra ha presentato il proprio progetto. Tutte le squadre hanno ottemperato ai compiti assegnati.
La squadra che implementa la calibrazione dei colori ha completato il lavoro sul progetto più rapidamente degli altri, quindi ha avuto il tempo di preparare anche la documentazione per il proprio programma. La squadra che si occupava del grafo stradale, anche l'ultimo giorno prima della dimostrazione del progetto, cercava di perfezionare e correggere i propri algoritmi.

Conclusione
Dopo la scuola, abbiamo chiesto agli studenti di valutare le attività svolte e di rispondere a domande su quanto la scuola corrispondesse alle loro aspettative, quali abilità avessero acquisito, ecc. Tutti gli studenti hanno sottolineato di aver imparato a lavorare in squadra, a suddividere i compiti e a pianificare il proprio tempo.
Agli studenti è stato anche chiesto di valutare l'utilità e la difficoltà dei corsi seguiti. Qui si sono formati due gruppi di valutazioni: per alcuni i corsi non hanno presentato molte difficoltà, mentre altri li hanno valutati come estremamente complessi.
Questo significa che la scuola ha trovato il giusto equilibrio, rimanendo accessibile ai principianti in un settore qualsiasi, pur offrendo materiali per il ripasso e il consolidamento per gli studenti più esperti. È importante notare che il corso di programmazione (Python) è stato praticamente considerato da tutti come semplice, ma utile. Secondo gli studenti, il corso più difficile è stato quello di "Architettura dei Computer".
Quando agli studenti è stato chiesto di indicare i pro e contro della scuola, molti hanno risposto che hanno apprezzato lo stile di insegnamento scelto, nel quale gli insegnanti fornivano assistenza in modo tempestivo e individuale, rispondendo alle domande sollevate.
Inoltre, gli studenti hanno sottolineato che hanno trovato utile lavorare in modalità di pianificazione quotidiana delle proprie attività e stabilire autonomamente le scadenze. Tra i difetti, gli studenti hanno evidenziato la mancanza di conoscenze fornite, necessarie per lavorare con il bot: nella connessione, comprensione delle basi e dei principi del suo funzionamento.
Quasi tutti gli studenti hanno affermato che la scuola ha superato le loro aspettative, il che indica che è stata scelta la direzione giusta per l'organizzazione della scuola. Pertanto, è importante mantenere i principi generali nell'organizzazione della prossima scuola, tenendo conto e, se possibile, eliminando i difetti segnalati da studenti e insegnanti, magari modificando l'elenco dei corsi o gli orari della loro erogazione.
Autori dell'articolo: il team in
P.S. Il nostro blog aziendale ha un nuovo nome. Ora sarà dedicato ai progetti educativi di JetBrains.
Fonte: habr.com
