В света на инженерното образование съществува много отлични курсове, но често програмата за обучение, базирана на тях, притежава един сериозен недостатък — липса на добра свързаност между различните теми. Може да се възрази: как така?
Когато се създава програма за обучение, за всеки курс се посочват предизвикателствата и ясният ред, в който трябва да се изучават дисциплините. Например, за да сглобите и програмирате примитивен мобилен робот, трябва да знаете малко механика за създаването на неговата физическа конструкция; основите на електричеството на ниво закони на Ом/Кирхгоф, представяне на цифрови и аналогови сигнали; операции с вектори и матрици, за да опишете координатни системи и движението на робота в пространството; основите на програмирането на ниво представяне на данни, най-простите алгоритми и конструкции за предаване на контрол и т.н. за описание на поведението.
Има ли всичко това в университетските курсове? Разбира се, че има. Въпреки това, към законите на Ом/Кирхгоф получаваме термодинамика и теория на полето; освен операциите с матрици и вектори, трябва да се разберат и формите на Жордан; в програмирането изучаването на полиморфизъм — теми, които не винаги са необходими за решаването на проста практическа задача.
Университетското обучение е екстензивно — учащият се преминава през много предмети и често не вижда смисъл и практическо значение в знанията, които получава. Ние решихме да променим парадигмата на университетското обучение STEM (от научните области Наука, Технология, Инженерство, Математика) и да създадем такава програма, която се основава на свързаността на знанията, допускаща разширяване на обхвата в бъдеще, тоест предвиждаща интензивно усвояване на предметите.
Изучаването на нова предметна област може да се сравни с изследване на определена местност. Има два варианта: или пред нас стои много подробна карта с огромно количество детайли, които трябва да изучим (а това отнема време), за да разберем къде се намират основните ориентири и как те се свързват помежду си; или можем да използваме примитивен план, на който са обозначени само основните точки и тяхното взаимно разположение — такава карта е достатъчна, за да започнем да се движим в правилната посока, уточнявайки детайлите по време на движение.
Подходът на интензивно обучение STEM бе реализиран на зимната школа, която проведохме съвместно със студенти от MIT с подкрепата на
Подготовка на материала
Първата част от програмата на школата бе седмица занятия по основни направления, включващи алгебра, електрически вериги, архитектура на компютъра, програмиране на Python и запознаване с ROS (Robot Operating System).
Направленията бяха избрани не случайно: те трябваше да се допълват, за да помогнат на студентите да видят връзката между, привидно различни, на пръв поглед неща — математиката, електрониката и програмирането.
Разбира се, основната цел не бе да се прочетат много лекции, а да се даде възможност на студентите сами да приложат току-що придобитите знания на практика.
В секцията по алгебра студентите можеха да се упражняват в операции с матрици и решаване на системи уравнения, които бяха полезни при изучаването на електрически вериги. Научавайки за устройството на транзистора и логическите елементи, изградени на неговата основа, учащите се можеха да видят тяхното приложение в устройството на процесора, а след като изучат основите на Python, да напишат програма за реален робот.

Duckietown
Една от задачите на школата беше минимизирането на работата със симулатори, където е възможно. Затова бе подготвен голям комплект електронни схеми, които студентите трябваше да сглобят на макетна платка с реални компоненти и да тестват на практика, а като основа за проектите бе избран Duckietown.
Duckietown — това е открит проект, включващ малки автономни роботи, наречени Duckiebot, и мрежи от пътища, по които те се движат. Duckiebot представлява колёсна платформа, оборудвана с микрокомпютър Raspberry Pi и една камера.
На базата на него подготвихме набор от възможни задачи, като изграждане на карта на пътища, търсене на обекти и спиране до тях, както и редица други. Освен това, студентите можеха да предложат собствен проблем и не само да напишат програма за неговото решение, но и незабавно да я стартират на реален робот.
Преподаване
По време на лекцията преподавателите представяха материала, използвайки предварително подготвени презентации. Някои занятия се записваха на видео, така че студентите да имат възможност да ги гледат у дома. По време на лекциите студентите използваха материали на своите компютри, задаваха въпроси, решаваха задачи заедно и самостоятелно, понякога на дъската. На базата на резултатите от работата беше изчислен рейтингът на всеки студент по различни предмети.

Нека разгледаме провеждането на занятия по всеки предмет по-подробно. Първият предмет беше линейна алгебра. Студентите изучаваха вектори и матрици, системи от линейни уравнения и т.н. Практическите задания бяха структурирани в интерактивен режим: предложените задачи се решаваха индивидуално, а преподавателят и другите студенти даваха коментари и подсказки.

Вторият предмет — електричество и прости схеми. Студентите изучиха основите на електродинамиката: напрежение, ток, съпротивление, закон на Ом и закони на Кирхгоф. Практическите задания частично се изпълняваха в симулатор или на дъската, но по-голямата част от времето беше отделена за изграждане на реални схеми, като логически схеми, колебателни контури и т.н.

Следващата тема — Архитектура на компютрите — в известен смисъл е мост, свързващ физиката и програмирането. Студентите изучаваха основите, чиято стойност е по-скоро теоретична, отколкото практическа. Като практика студентите самостоятелно проектираха аритметично-логически схеми в симулатор, за изпълнените задания получиха точки.
Четвърти ден — първият ден на програмирането. За програмен език беше избран Python 2, тъй като той се използва в програмирането под ROS. Този ден беше организиран по следния начин: преподавателите обясняваха материала, даваха примери за решаване на задачи, докато студентите ги слушаха, седейки пред компютрите си, и повтаряха написаното от преподавателя на дъската или слайда. След това учащите се решаваха подобни задачи самостоятелно, а решенията им бяха оценени от преподавателите.
Петият ден беше посветен на ROS: момчетата се запознаваха с програмирането на роботи. През целия учебен ден студентите седяха пред компютрите, изпълнявайки програмния код, за който разказваше преподавателят. Те успяха самостоятелно да стартират основните единици на ROS, както и се запознаха с проекта Duckietown. В края на този ден студентите бяха готови да започнат проектната част на училището — решаването на практическите задачи.

Описание на избраните проекти
На студентите беше предложено да се обединят в отбори от трима души и да изберат тема за проекта. В крайна сметка бяха приети следните проекти:
1. Калибриране на цветове. Duckiebot се нуждае от калибриране на камерата при промяна на условията на осветление, затова съществува задача за автоматично калибриране. Проблемът е, че диапазоните на цветовете са много чувствителни към осветлението. Участниците реализираха утилита, която да открива изискваните цветове на кадъра (червен, бял и жълт) и да изгражда диапазони за всеки от цветовете във формат HSV.
2. Duck Taxi. Идеята на този проект е Duckiebot да може да спре до определен обект, да го вземе и да следва определен маршрут. Обектът, който избраха, беше ярко жълта уточка.

3. Изграждане на граф на пътища. Съществува задача за изграждане на граф на пътищата и кръстовищата. Целта на този проект е да се създаде граф на пътищата без предоставяне на предварителни данни за околната среда на Duckiebot, основан само на данните от камерата.
4. Патрулна кола. Този проект беше измислен от самите студенти. Те предложиха да научат един Duckiebot, "патрул", да преследва друг — "нарушител". За това беше използван механизъм за разпознаване на целта по ArUco маркер. В момента, в който разпознаването приключи, на "нарушителя" се изпраща сигнал за приключване на работата.

Калибриране на цветове
Целта на проекта Color Calibration беше корекция на диапазона на разпознаваемите цветове на маркировката спрямо новите условия на осветление. Без тези корекции разпознаването на стоп линиите, разделителите на лентите и границите на пътя ставаше некоректно. Участниците предложиха решение, основано на предварителна обработка на шаблоните на цветовете на маркировката: червен, жълт и бял.
За всеки от тези цветове е зададен предварителен диапазон от HSV или RGB стойности. С използването на този диапазон във файла се намират всички области, съдържащи подходящи цветове, и от тях се избира най-голямата. Тази област се приема за цвят, който трябва да бъде запомнен. След това се използват статистически формули, като изчисляване на средната стойност и стандартното отклонение, за да се оцени новият цветен диапазон.
Този диапазон се записва във файловете за конфигурация на камерата Duckiebot и може да бъде използван в бъдеще. Описаният подход беше приложен към всичките три цвята, в крайна сметка формирайки диапазони за всеки от цветовете на маркировката.
Тестовете показаха почти перфектно разпознаване на маркировъчните линии, освен в случаите, когато материалите за маркировка бяха лъскава лента, която толкова силно отразяваше източниците на осветление, че под ъгъла на видимост на камерата маркировката изглеждаше бяла, независимо от първоначалния й цвят.

Duck Taxi
Проектът Duck Taxi предвиждаше изграждането на алгоритъм за търсене в града на пате-пътник, а след това и нейното транспортиране до необходимата точка. Участниците разделиха тази задача на две: детекция и движение по графа.
Студентите извършиха детекция на патето, предполагаща, че пате е всяка област на кадъра, която може да бъде разпозната като жълта, с червен триъгълник (клюн) на нея. След като такава област се открие на текущия кадър, роботът трябва да се приближи към нея и после да спре за няколко секунди, имитирайки кацането на пътника.
След това, с предварително записаната в паметта графа на пътищата в Duckietown и местоположението на бота, а също така, получавайки пунктовете за задаване на входните данни, участниците изграждат маршрут от началната точка до точката на пристигане, използвайки алгоритъм на Дейкстра за намиране на пътища в графа. Изходните данни се представят под формата на набор от команди — завои на всяко от следващите кръстовища.

Graph of Roads
Целта на този проект беше създаването на граф — мрежа от пътища в Duckietown. Възловите точки на получения граф са кръстовища, а ребрата — пътища. За тази цел Duckiebot трябва да изследва града и да анализира своя маршрут.
В хода на работата по проекта беше разгледана, но след това отхвърлена идеята за създаване на тежестен граф, в който стойността на реброто се определя от разстоянието (времената за преодоляване) между кръстовищата. Реализацията на тази идея се оказа твърде трудоемка и нямаше да е възможно да се изпълни в рамките на училище.
Когато Duckiebot стигне до следващото кръстовище, той избира пътя, излизащ от кръстовището, по който все още не е преминал. Когато всички пътища на всички кръстовища са обходени, в паметта на робота остава формиран списък на съседството на кръстовищата, който се преобразува в изображение с помощта на библиотеката Graphviz.
Предложеният от участниците алгоритъм не е подходящ за произволен Duckietown, но работеше добре в малък град, състоящ се от четири кръстовища, използван в рамките на училище. Идеята беше да се допълни всяко кръстовище с ArUco-маркер, съдържащ идентификатор на кръстовището, за да се проследи редът на преминаване през кръстовищата.
Схемата на работа на разработения от участниците алгоритъм е показана на рисунка.

Patrol Car
Целта на този проект е откритие, преследване и задържане на нарушител на робота в града Duckietown. Патрулният бот трябва да се движи по външния кръг на пътя в града, търсейки предварително известния нарушител. След откритие на нарушителя, патрулният бот трябва да следва нарушителя и да го принуди да спре.
Работата започна с търсене на идея за детекция на бота на кадъра и разпознаване на нарушителя в него. Отборът предложи да се оборудва всеки бот в града отзад с уникален маркер — подобно на реалните автомобили с регистрационни номера. За целта бяха избрани ArUco-маркери. Те вече са използвани в duckietown, тъй като с тях е лесно да се работи и те позволяват да се определи ориентацията на маркера в пространството и разстоянието до него.
Следващият етап беше да се осигури, че патрулният робот се движи строго по външния кръг без спиране на кръстовища. По подразбиране Duckiebot се движи в лентата и спира на стоп линията. След това, с помощта на пътни знаци, той определя конфигурацията на кръстовището и взима решение за посоката на преминаване. За всеки от описаните етапи отговаря едно от състоянията на крайния автомат на робота. За да се избегне спирането на кръстовището, екипът промени автомата на състояния, така че при приближаване към стоп линията, роботът веднага преминава в състояние на преминаване през кръстовището направо.
Следващата стъпка беше решението на задачата със спирането на нарушителя. Екипът предположи, че патрулният робот може да има достъп по SSH до всеки от роботите в града, тоест да има определена информация за това, какви данни за удостоверяване и какъв идентификатор има всеки робот. Така, след откритие на нарушителя, патрулният робот започна да се свързва по SSH с робота-нарушител и да изключва неговата система.
След потвърждение, че команда за изключване е била изпълнена, патрулният робот също спираше.
Алгоритъмът за работа на патрулния робот може да бъде представен под формата на следната схема:

Работа по проекти
Работата беше организирана в формат, подобен на Scrum: всяка сутрин студентите планираха задачите за текущия ден, а вечерта отчитаха свършената работа.
В първия и последен ден студентите подготвиха презентации, описващи поставената задача и начините за нейното решаване. За да помогнат на студентите да следват избраните планове, в стаите, където се работеше по проектите, постоянно присъстваха преподаватели от Русия и Америка, които отговаряха на въпроси. Общуването се извършваше предимно на английски език.
Резултати и тяхната демонстрация
Работата по проектите продължи една седмица, след която студентите представиха своите резултати. Всеки подготви презентации, в които разказаха какво са научили в тази школа, какви най-важни уроци са извлекли, какво им е харесало или не. След това всяка група представи своя проект. Всички екипи се справиха със поставените задачи.
Екипът, реализиращ калибрирането на цветове, завърши работата по проекта по-бързо от другите, затова успя да подготви и документацията към своята програма. А екипът, занимаващ се с графа на пътищата, дори в последния ден преди демонстрацията на проекта се опитваше да доработи и коригира своите алгоритми.

Заключение
След завършването на гимназията помолихме студентите да оценят проведените активности и да отговорят на въпросите за това, доколко училището отговаря на техните очаквания, какви умения са придобили и т.н. Всички студенти отбелязаха, че са научили да работят в екип, да разпределят задачи и да планират времето си.
На студентите също така беше предложено да оценят полезността и сложността на преминатите курсове. И тук се формираха две групи оценки: за едни курсовете не представляваха голямо затруднение, а другите ги оцениха като максимално сложни.
Това означава, че училището е заело правилна позиция, оставайки достъпно за новаците в конкретната област, но също така предоставяйки материали за преговор и затвърдяване на опитните студенти. Трябва да се отбележи, че курсът по програмиране (Python) практически от всички беше оценен като несложен, но полезен. Най-труден, според студентите, се оказа курсът „Архитектура на компютърните системи“.
Когато студентите бяха попитани за недостатъците и предимствата на училището, много от тях отговориха, че им е харесал избраният стил на преподаване, в рамките на който преподавателите бързо и индивидуално предоставяха помощ и отговаряха на възникналите въпроси.
Още учащите отбелязаха, че им е харесало да работят в режим на ежедневно планиране на задачите си и сами да определят крайни срокове. Като недостатъци студентите отбелязаха недостиг на предоставените знания, които бяха необходими при работата с бота: при свързването, разбирането на основите и принципите на неговата работа.
Практически всички студенти отбелязаха, че училището е надминало техните очаквания, а това говори за правилно избраната насока на организацията на училището. Следователно, трябва да се запазят основните положения при организирането на следващото училище, като се вземат предвид и по възможност се устранят недостатъците, които студентите и преподавателите отбелязали, вероятно променяйки списъка с курсове или времето им на преподаване.
Автори на статията: екипът в
P.S. Нашият корпоративен блог получи ново име. Сега той ще бъде посветен на образователни проекти на компанията JetBrains.
Източник: habr.com
