In de wereld van technische opleidingen zijn er veel uitstekende cursussen, maar vaak heeft het opleidingsprogramma dat erop is gebaseerd ƩƩn ernstig nadeel ā een gebrek aan goede samenhang tussen verschillende onderwerpen. Men kan verweren: hoezo?
Wanneer een opleidingsprogramma wordt opgesteld, worden voor elke cursus de vereiste voorkennis en een duidelijke volgorde van de te bestuderen disciplines aangegeven. Bijvoorbeeld, om een primitieve mobiele robot te assembleren en te programmeren, moet je een beetje mechanica weten voor het creƫren van zijn fysieke constructie; basiskennis van elektriciteit op het niveau van de wetten van Ohm/Kirchhoff; begrip van digitale en analoge signalen; vector- en matrixoperaties om coƶrdinatiesystemen en de beweging van de robot in de ruimte te beschrijven; basis programmeringsvaardigheden op het niveau van datavoorstelling, de eenvoudigste algoritmen en controlestructuren, enzovoorts om het gedrag te beschrijven.
Is dit alles aanwezig in universitaire cursussen? Natuurlijk is dat het geval. Maar naast de wetten van Ohm/Kirchhoff komen we thermodynamica en veldtheorie tegen; naast matrix- en vectoroperaties moet men zich verdiepen in Jordanvormen; in programmeren wordt polymorfisme bestudeerd ā onderwerpen die niet altijd nodig zijn om een eenvoudige praktische taak op te lossen.
Universitair onderwijs is extensief ā de student gaat breed en ziet vaak niet de zin en praktische waarde van de kennis die hij/zij verwerft. Wij hebben besloten de paradigma van universitair STEM-onderwijs (Science, Technology, Engineering, Math) om te draaien en een programma te creĆ«ren dat is gebaseerd op de samenhang van kennis, met de mogelijkheid om in de toekomst diepgang te verkennen, dat wil zeggen dat er intensief wordt gewerkt aan de onderwezen onderwerpen.
Het verkennen van een nieuw vakgebied kan worden vergeleken met het verkennen van een bepaald gebied. Er zijn twee mogelijkheden: ofwel hebben we een zeer gedetailleerde kaart met een enorme hoeveelheid details die bestudeerd moeten worden (wat veel tijd kost) om te begrijpen waar de belangrijkste oriĆ«ntatiepunten zich bevinden en hoe deze zich tot elkaar verhouden; of we kunnen gebruikmaken van een eenvoudige plattegrond waarop alleen de belangrijkste punten en hun onderlinge ligging zijn aangegeven ā zo'n kaart is voldoende om meteen in de juiste richting te gaan, terwijl we details verderop verfijnen.
We hebben de intensieve STEM-leermethode uitgeprobeerd op de winter school die we samen met studenten van MIT hebben georganiseerd met de steun van
Materiaalvoorbereiding
De eerste fase van het schoolprogramma was een week van lessen over de belangrijkste onderwerpen, waaronder algebra, elektrische circuits, computerarchitectuur, programmeren in Python en kennismaking met ROS (Robot Operating System).
De onderwerpen zijn niet toevallig gekozen: door elkaar aan te vullen, moesten ze de studenten helpen de verbinding te zien tussen schijnbaar verschillende zaken ā wiskunde, elektronica en programmeren.
Natuurlijk was het belangrijkste doel niet om veel lezingen te geven, maar de studenten de mogelijkheid te bieden om de net verworven kennis in de praktijk toe te passen.
In het algebra-gedeelte konden studenten oefenen met matrixbewerkingen en het oplossen van vergelijkingssystemen, wat nuttig was bij het bestuderen van elektrische circuits. Door te leren over de werking van transistors en de logische elementen die daarop zijn gebaseerd, konden studenten hun toepassing in de opbouw van een processor zien, en na het leren van de basis van de programmeertaal Python, een programma voor een echte robot schrijven.

Duckietown
Een van de doelstellingen van de school was het minimaliseren van het gebruik van simulators waar mogelijk. Daarom is er een uitgebreide set elektrische schakelingen voorbereid die studenten op een breadboard met echte componenten moesten bouwen en in de praktijk moesten testen, en voor de projecten werd Duckietown als basis gekozen.
Duckietown is een open project dat bestaat uit kleine autonome robots, genaamd Duckiebots, en netwerken van wegen waarover ze zich verplaatsen. De Duckiebot is een wielenplatform dat is uitgerust met een Raspberry Pi microcomputer en een camera.
Op basis hiervan hebben we een reeks mogelijke taken voorbereid, zoals het bouwen van wegenkaarten, het zoeken naar objecten en stoppen in de buurt daarvan, en nog veel meer. Ook konden studenten hun eigen probleem voorstellen en niet alleen een programma schrijven om het op te lossen, maar het ook direct uitvoeren op een echte robot.
Onderwijs
Tijdens de les gaven de docenten de stof weer, gebruik makend van vooraf voorbereide presentaties. Sommige lessen werden op video opgenomen, zodat studenten ze thuis konden bekijken. Gedurende de lessen maakten studenten gebruik van materialen op hun computers, stelden ze vragen, losden ze problemen gezamenlijk en individueel op, soms aan het bord. Op basis van het resultaat werd een ranking van elke student afzonderlijk berekend voor verschillende vakken.

Laten we de lessen voor elk vak in meer detail bekijken. Het eerste vak was lineaire algebra. Studenten bestudeerden op ƩƩn dag vectoren en matrices, systemen van lineaire vergelijkingen, enzovoorts. De praktische opdrachten waren interactief: voorgestelde taken werden individueel opgelost, terwijl de docent en andere studenten opmerkingen en tips gaven.

Het tweede vak was elektriciteit en eenvoudige circuits. Studenten bestudeerden de basisprincipes van elektrodynamica: spanning, stroom, weerstand, de wet van Ohm en de wetten van Kirchhoff. De praktische opdrachten werden gedeeltelijk in een simulator uitgevoerd of aan het bord gedaan, maar er werd meer tijd besteed aan het bouwen van echte circuits, zoals logische circuits, oscillatorkringen, en dergelijke.

Het volgende onderwerp ā Computerarchitectuur ā is in zekere zin een brug die natuurkunde en programmeren verbindt. Studenten bestudeerden de fundamentele basis, waarvan de betekenis eerder theoretisch dan praktisch is. Als praktijk hebben studenten zelf reken- en logische circuits ontworpen in een simulator en voor de uitgevoerde opdrachten punten ontvangen.
De vierde dag - de eerste dag programmeren. De programmeertaal die gekozen werd, was Python 2, omdat deze gebruikt wordt voor programmeren onder ROS. Deze dag was als volgt opgebouwd: de docenten legden de stof uit en gaven voorbeelden van het oplossen van problemen, terwijl de studenten naar hen luisterden, achter computers zaten en herhaalden wat de docent op het bord of de dia schreef. Daarna losten de leerlingen vergelijkbare problemen zelfstandig op, en de oplossingen werden beoordeeld door de docenten.
De vijfde dag was gewijd aan ROS: de jongens maakten kennis met robotprogrammeren. Tijdens de hele schooldag zaten de studenten achter computers en voerden zij de code uit die de docent uitlegde. Ze konden de basiseenheden van ROS zelfstandig opstarten en maakten ook kennis met het Duckietown-project. Aan het einde van deze dag waren de studenten klaar om te beginnen aan het projectgedeelte van de school - het oplossen van praktische problemen.

Beschrijving van de gekozen projecten
De studenten kregen de gelegenheid om in teams van drie personen samen te werken en een onderwerp voor hun project te kiezen. Uiteindelijk werden de volgende projecten aangenomen:
1. Kleurkalibratie. De Duckiebot heeft kalibratie van de camera nodig bij veranderende lichtomstandigheden, daarom is er de taak van automatische kalibratie. Het probleem is dat de kleurenspectra erg gevoelig zijn voor belichting. De deelnemers hebben een tool ontwikkeld die de vereiste kleuren (rood, wit en geel) uit het beeld haalt en de spectrums voor elke kleur in het HSV-formaat opbouwt.
2. Duck Taxi. Het idee van dit project is dat de Duckiebot kan stoppen bij een object, het oppakken en een bepaalde route volgen. Als object werd een heldere gele eend gekozen.

3. Bouw van een wegenkaart. Er bestaat de taak om een wegen- en kruispuntkaart te bouwen. Het doel van dit project is om een wegenkaart op te bouwen zonder voorafgaande gegevens over de omgeving voor de Duckiebot, uitsluitend gebaseerd op gegevens van de camera.
4. Patrouilleauto. Dit project werd bedacht door de studenten zelf. Ze stelden voor om een Duckiebot, "patrouille", te leren achter een andere - "overtreder" - aan te gaan. Hiervoor werd een doelherkenningsmechanisme gebruikt gebaseerd op ArUco-markers. Zodra de herkenning is voltooid, ontvangt de "overtreder" een signaal dat de operatie is beƫindigd.

Kleurkalibratie
Het doel van het Color Calibration-project was het aanpassen van het bereik van herkenbare kleuren van het wegdek aan de nieuwe lichtomstandigheden. Zonder dergelijke aanpassingen werd de herkenning van stoplijnen, scheidingslijnen en weggrenzen onnauwkeurig. De deelnemers stelden een oplossing voor op basis van de voorbewerking van kleurensjablonen: rood, geel en wit.
Voor elk van deze kleuren is een vooraf bepaald bereik van HSV- of RGB-waarden ingesteld. Met behulp van dit bereik worden in het beeld alle gebieden gevonden die geschikte kleuren bevatten, en het grootste daarvan wordt geselecteerd. Dit gebied wordt beschouwd als de kleur die moet worden onthouden. Vervolgens worden statistische formules gebruikt, zoals het berekenen van het gemiddelde en de standaarddeviatie, om het nieuwe kleurenspectrum te beoordelen.
Dit bereik wordt opgeslagen in de configuratiebestanden van de Duckiebot-camera en kan later worden gebruikt. De beschreven aanpak werd toegepast op alle drie kleuren, waardoor bereiken werden gevormd voor elke kleur van het wegdek.
Tests toonden bijna perfecte herkenning van markeringen, behalve in die gevallen waarin glanzende tape als markeringsmateriaal werd gebruikt, waardoor het zoveel lichtreflecties veroorzaakte dat de markeringen vanuit de cameraperspectief wit leken, ongeacht hun oorspronkelijke kleur.

Duck Taxi
Het Duck Taxi-project hield in dat een algoritme werd ontwikkeld om een passagiersduif in de stad te vinden en deze naar een gewenste locatie te vervoeren. De deelnemers deelden deze taak op in twee delen: detectie en navigatie door de grafen.
De studenten voerden de detectie van de duif uit, uitgaande van de veronderstelling dat een duif elk gebied op het beeld is dat kan worden herkend als geel, met daarop een rode driehoek (de snavel). Zodra een dergelijk gebied in een nieuw beeld wordt ontdekt, moet de robot er naartoe rijden en vervolgens een paar seconden stoppen om de landing van de passagier te imiteren.
Vervolgens bouwen de deelnemers, met een vooraf ingesteld wegenkaart van heel Duckietown en de positie van de robot, en ook met het bestemmingspunt als input, een route van het vertrekpunt naar de bestemming, gebruikmakend van het Dijkstra-algoritme voor paden in de graaf. De uitvoer wordt gepresenteerd in de vorm van een set commando's - afslag bij elk volgend kruispunt.

Graf van Wegen
Het doel van dit project was het bouwen van een grafiek - een netwerk van wegen in Duckietown. De knooppunten van de resulterende graf zijn de kruispunten, en de boogjes zijn de wegen. Hiervoor moet de Duckiebot de stad verkennen en zijn route analyseren.
Tijdens de uitvoering van het project werd het idee om een gewogen grafiek te maken, waarbij de kosten van een rand worden bepaald door de afstand (de tijd om het te overbruggen) tussen de kruispunten, overwogen maar vervolgens verworpen. De implementatie van dit idee bleek te arbeidsintensief en er was niet genoeg tijd tijdens de school.
Wanneer de Duckiebot bij een nieuw kruispunt komt, kiest hij de weg die van het kruispunt afgaat en waar hij nog niet eerder op is gereden. Wanneer alle wegen op alle kruispunten zijn afgelegd, blijft er een geformeerde aangrenzende lijst van kruispunten in het geheugen van de bot, die wordt omgezet in een afbeelding met behulp van de Graphviz-bibliotheek.
Het algoritme dat door de deelnemers is voorgesteld, is niet geschikt voor willekeurige Duckietown, maar werkte goed in een kleine stad met vier kruispunten die binnen de school werd gebruikt. Het idee was om elk kruispunt te voorzien van een ArUco-marker met een identificatienummer voor het kruispunt, om de volgorde van het passeren van de kruispunten te volgen.
Het werkingsschema van het algoritme dat door de deelnemers is ontwikkeld, is weergegeven in de afbeelding.

Patrouillewagen
Het doel van dit project is het opsporen, achtervolgen en aanhouden van de overtreder-bot in de stad Duckietown. De patrouillebot moet rond het externe ringweg van de stad rijden op zoek naar de vooraf bekende overtreder-bot. Na het ontdekken van de overtreder moet de patrouillebot de overtreder volgen en deze laten stoppen.
Het werk begon met het zoeken naar een idee voor het detecteren van de bot in een frame en het herkennen van de overtreder daarin. Het team stelde voor om elke bot in de stad van achteren te voorzien van een unieke marker - net zoals echte voertuigen registratieplaten hebben. Hiervoor werden ArUco-markers gekozen. Deze waren eerder al in Duckietown gebruikt, omdat ze eenvoudig te gebruiken zijn en het mogelijk maken om de oriƫntatie van de marker in de ruimte en de afstand er toe te bepalen.
Daarna was het nodig om ervoor te zorgen dat de patrouillebot zich strikt langs de buitenste cirkel bewoog zonder te stoppen op kruispunten. Standaard beweegt de Duckiebot in een rijstrook en stopt bij de stoplijn. Vervolgens bepaalt hij met behulp van verkeersborden de configuratie van het kruispunt en maakt een keuze over de doorgang. Elk van de beschreven fasen wordt beheerd door een van de toestanden van de eindige automaat van de robot. Om te voorkomen dat hij stopt op het kruispunt, heeft het team de toestandsautomaat aangepast zodat de bot bij het naderen van de stoplijn onmiddellijk overgaat naar de toestand van het rechtdoor gaan bij het kruispunt.
De volgende stap was het oplossen van het probleem van het stoppen van de overtredende bot. Het team ging ervan uit dat de patrouillebot via SSH toegang heeft tot elke bot in de stad, dus informatie heeft over welke gegevens voor authenticatie nodig zijn en welk ID elke bot heeft. Nadat de overtredende bot was gedetecteerd, begon de patrouillebot zich via SSH te verbinden met de overtredende bot en schakelde zijn systeem uit.
Na de bevestiging dat het stopcommando was uitgevoerd, stopte de patrouillebot ook.
Het werkingsalgoritme van de patrouillerobot kan worden weergegeven in de volgende schema:

Werken aan projecten
Het werk was georganiseerd in een format vergelijkbaar met Scrum: elke ochtend planden de studenten de taken voor de huidige dag en rapporteerden 's avonds over het uitgevoerde werk.
Op de eerste en laatste dagen bereidden de studenten presentaties voor waarin ze de gestelde taak en de manieren waarop deze opgelost kon worden beschrijven. Om de studenten te helpen de gekozen plannen te volgen, waren er voortdurend docenten uit Rusland en Amerika aanwezig in de kamers waar aan projecten werd gewerkt, die vragen beantwoordden. De communicatie vond voornamelijk in het Engels plaats.
Resultaten en hun demonstratie
Het werken aan projecten duurde een week, aan het einde waarvan de studenten hun resultaten presenteerden. Iedereen bereidde presentaties voor waarin ze vertelden wat ze tijdens deze school hadden geleerd, welke lessen het belangrijkst waren, wat ze leuk of niet leuk vonden. Vervolgens presenteerde elk team zijn project. Alle teams slaagden in de gestelde taken.
Het team dat verantwoordelijk was voor de kleurcalibratie voltooide het project sneller dan anderen, waardoor ze ook de documentatie voor hun programma konden voorbereiden. Het team dat zich bezighield met de wegennetwerken probeerde zelfs op de laatste dag voor de projectdemonstratie hun algoritmes verder te verbeteren en te corrigeren.

Conclusie
Na de afronding van de school vroegen we de studenten om de recente activiteiten te evalueren en vragen te beantwoorden over in hoeverre de school aan hun verwachtingen voldeed, welke vaardigheden ze hadden verworven, enzovoort. Alle studenten gaven aan dat ze hadden geleerd om in teamverband te werken, taken te verdelen en hun tijd te plannen.
Studenten werd ook gevraagd om de nuttigheid en moeilijkheid van de gevolgde cursussen te beoordelen. Hieruit ontstonden twee groepen beoordelingen: voor sommigen waren de cursussen niet bijzonder uitdagend, terwijl anderen ze als zeer moeilijk beoordeelden.
Dit betekent dat de school de juiste positie heeft ingenomen, toegankelijk voor nieuwkomers in het vakgebied, maar ook materiaal biedt voor herhaling en versterking voor ervaren studenten. Het is vermeldenswaard dat de programmeercursus (Python) door bijna iedereen als niet moeilijk, maar nuttig werd beoordeeld. Het moeilijkste was, volgens de studenten, de cursus 'Architectuur van computers'.
Toen studenten werden gevraagd naar de nadelen en voordelen van de school, antwoordden velen dat ze de gekozen onderwijsmethode waardeerden, waarin docenten snel en persoonlijk ondersteuning boden en vragen beantwoordden.
Bovendien gaven studenten aan dat ze het prettig vonden om dagelijks hun taken te plannen en zelf deadlines vast te stellen. Als nadelen noemden de studenten de tekortkoming van de aangeboden kennis die nodig was bij het werken met de bot: met betrekking tot aansluiten, en het begrijpen van de basisprincipes en werkwijzen.
Bijna alle studenten gaven aan dat de school hun verwachtingen overtrof, wat wijst op de juiste richtingen bij de organisatie van de school. Daarom moeten de algemene principes bij de organisatie van de volgende school behouden blijven, waarbij rekening wordt gehouden met en waar mogelijk de tekortkomingen die studenten en docenten hebben genoemd, wellicht het cursusaanbod of de lesperioden wijzigen.
Auteurs van het artikel: het team in
P.S. Onze corporate blog heeft een nieuwe naam. Het zal nu gewijd zijn aan de educatieve projecten van het bedrijf JetBrains.
Bron: habr.com
