Курсовые и дипломы, 2016-2017
 Share
The version of the browser you are using is no longer supported. Please upgrade to a supported browser.Dismiss

 
View only
 
 
ABCDEF
1
НазваниеОписаниеТребуемые знания и навыкиСложностьПубликабельностьПримерный план
2
"Танчики роботов"Есть конструктор ТРИК (http://www.trikset.com/), который используется в обучении школьников основам программирования и кибернетики. Хочется сделать это обучение более интересным, заодно наработав кодовую базу для экспериментов в мультиагентных системах, управлении группой роботов и т.д. К нам обратились учителя из 419 лицея с просьбой помочь в создании ПО для следующего учебного стенда:
- есть "пересечённая местность" с препятствиями, возвышениями/впадинами и т.д. (как я понимаю, на первом этапе это комната с коробками)
- есть две команды роботов (3 на 3 или 5 на 5), каждый вооружён ИК-пушкой (просто направленный ИК-излучатель) и набором ИК-приёмников по сторонам. Если робот принимает одним из приёмников сигнал от ИК-излучателя, он считается "подбитым" и должен выключиться.
- задача --- подбить все роботы противника, при этом должен остаться "в живых" хотя бы один свой робот
- роботы должны действовать автономно, то есть общаться между собой они могут, но принимать команды от оператора --- нет
- возможны вариации правил для увеличения лулзов:
- не вешать спереди ИК-приёмник, типа лобовая броня непробиваема
- роботы могут общаться со своим компьютером, который вне поля боя (+ возможно получение данных с камеры над полем боя, опционально)
- хитпойнты, дамаг, экспа, you name it. но только после реализации базовой версии
- игра с роботами, управляемыми человеком
Собственно, задача --- создание библиотеки или набора библиотек, и программы-раннера, в которую можно запихать алгоритм поведения (написанный в терминах оной библиотеки), чтобы она обеспечивала исполнение этого алгоритма и не давала нарушать "правила игры" (например, вырубала робот при подбитии). Алгоритм, скорее всего, будет представлять собой скрипт на JavaScript, а раннер переиспользовать код TrikRuntime (https://github.com/trikset/trikRuntime). Библиотека должна включать в себя, как минимум, низкоуровневые команды (типа управления моторами, датчики и т.д., это всё и так предоставляет TrikRuntime), должны также поддерживаться и высокоуровневые команды (средства работы с картой местности, движение по маршрутным точкам, передача/приём целеуказания, formation movement, collision avoidance и т.д., чем больше высокоуровневого поведения будет реализовано в библиотеке, тем проще будет школьникам писать алгоритмы битвы, и думать о тактике, а не о том, как не застрять в стенке). Поэтому работа предполагается на несколько человек, каждый из которых делает свою часть функциональности. Полезно почитать что-нибудь про Subsumption Architecture и, если хотим Науки, про Behaviour Networks, сети Петри и вообще управление группой роботов.

Результаты, кстати, переиспользуемы в робофутболе.

Дополнительный бонус --- визуальный предметно-ориентированный язык программирования тактики команды на базе TRIKStudio.
C++, Qt, Linux (на уровне некоторых навыков пользования), умение читать по-английски, некоторое представление о JavaScript будет плюсом.1-6 курсы, но обязательно нужен старший программист/архитектор курса минимум с третьего.

В базовом варианте должна уметь только регистрировать попадания, так что делается за один вечер, потенциал развития темы бесконечен (вплоть до колонизации Солнечной системы роем самореплицирующихся роботоспутников, задачи там примерно такие же).
При должном уровне исполнения и развитости темы --- на топовые робототехнические конфы (ICRA, IROS), образовательные конфы (GCER, RiE), при, мм, ожидаемом уровне исполнения докладывабельно на любой студенческой конференции (СПИСОК, SEIM, политех), может, SYRCoSE. Возможно несколько работ --- "генеральская" статья про стенд, обзор принципов управления группами роботов, частные статьи про решения каждой из подзадач, статья про важность в образовательном процессе совместно с учителями, статья про то, как студпроект помогает готовить специалистов на матмехе и развивать сотрудничество студентов со школьниками совместно со мной на АПКИТ или куда-то туда. Отдельно публицистическая статья на учительскую конфу весной в 239.- знакомство с TRIK и trikRuntime (https://github.com/trikset/trikRuntime/wiki), настройка рабочего окружения, написание первого скрипта на JavaScript и программы на C++
- чтение статей про Subsumption Architecture и ещё парочки, для погружения в предметную область
- пинание научника асчёт материальной базы (нужен ИК-излучатель и ИК-приёмник, их должны закупить в 419 школе, если нет, можно купить самим/на деньги JetBrains)
- совместная разработка архитектуры ПО на роботе
- работа с ИК-излучателем и ИК-приёмниками
- обязательная регистрация попадания
- возможно, нотификация компьютера-судьи о попадании
- общая архитектура библиотеки элементарных действий
- плагинная система для стратегий (?)
- плагинная система для базовых алгоритмов
- разработка первого прототипа системы
- параллельно чтение статей про групповое взаимодействие роботов, доклад на семинаре кафедры, обзорная статья, зимний отчёт по курсовой работе
- разделение на подзадачи
- collision avoidance
- formation movement
- SLAM
- движение по вэйпойнтам
- обнаружение цели и атакующие маневры
- групповая атака (например, "вилка")
- оборонительные маневры
- симулятор и тулы для отладки алгоритмов
- пробные стратегии
- если появятся вопросы в духе "что такое ПИД-регулятор?", пройти между делом онлайн-курс по основам робототехники на степике
- по мере реализации --- создание визуального языка (либо на базе Dataflow-языка Зимина, либо на Control Flow-языке классической трикстудии)
- обкатка на реальных роботах и на реальном полигоне, отладка
- оформление результатов в виде статей на студенческие конфы
- реальные игры
- защита курсовой/диплома
- летняя школа с доводкой стенда
- игра на осеннем робофинисте (в том числе, и против зрителей)
- ???
- PROFIT
3
РобофутболТребуется форкнуть и посопровождать проект https://github.com/roboime/ssl-vision, также переписать на С++ и оформить в виде переиспользуемой библиотеки некоторые алгоритмы, которые кибернетики пишут на матлабе. Вообще, речь идёт про http://www.robocup2016.org/en/leagues/robocup-soccer/small-size/, хочется организовать эти соревнования в России, для этого надо выставить хотя бы три-четыре команды на следующий год на Робофинист, для этого надо, в частности, подготовить ПО, как серверное (это SSL Vision), так и клиентское (это тоже библиотека элементарных действий, как в "танчиках", чтобы команды не долбались с низкоуровневыми задачами, а решали вопросы тактики). Кибернетики программировать не умеют, SSL Vision тоже так себе в плане качества исполнения (хотя архитектура там ничего так), так что грамотный C++/Qt-программист может принести много пользы всему мировому робофутбольному сообществу. Дополнительный бонус за визуальный язык и вообще технологию на базе TRIK Studio, позволяющую высокоуровнево описывать стратегию игры, чтобы любой школьник мог запрограммировать команду.С++, Qt, знакомство с OpenCV будет плюсом. Linux желательно, но не обязательно (по крайней мере, для SSL Vision). Matlab желательно.2-4 курсы, может быть и магистерской, если развивать в направлении мультиагентности и полностью автономного футбола (то есть без камеры, роботы всё делают сами). На первом этапе эта задача на одного C++-программиста с архитектурными навыками, с перспективой развития в большой студпроект с общей с "танчиками" кодовой базой.

Необходимо взаимодействие с кибернетиками, потому что я робофутбол видел лишь издали и даже не смогу адекватно поставить задачу без их помощи.
Фиксы и новая функциональность к SSL Vision --- скорее нет, чем да, зато продвинутый робофутбол --- скорее да, чем нет. В плане публикабельности перспективы те же, что и у "танчиков", то есть очень даже высокие, но целиться надо сразу высоко, на мультиагентность и групповое взаимодействие.- познакомиться с SSL Vision и пообщаться с кибернетиками (Илья Широколобов и его аспиранты)
- познакомиться с OpenCV и работой с вебкой (написать какое-нить игрушечное приложение типа детекции объекта в кадре)
- договориться, на чём экспериментировать в плане реального железа, ТРИК или Lego, в любом случае познакомиться с матчастью и научиться её программировать
- почитать статьи про то, как люди решают задачи робофутбола (у меня есть штуки три, но они про формальные методы в робофутболе, в основном про сети Петри, наверняка етсь более прикладные), написать отчёт, сдать его как зимнюю курсовую, может быть, оформить как статью, пусть лежит до весны
- делать то, что попросят кибернетики с SSL Vision (например, у них что-то с захватом с камер не складывалось)
- переписать часть серверных алгоритмов на плюсы, чтобы работало побыстрее (например, определение координат робота, с веб-камерой это не совсем тривиально, но кибернетики вроде как умеют, но на матлабе).
- придумать архитектуру типового клиента (то бишь приложения, которое крутится тое на сервере, внезапно, и управляет действиями одной команды, получая от SSL Vision координаты игроков и мяча)
- реализовать заглушку клиента
- реализовать элементарные действия, типа движения в заданные координаты (это вроде как есть, но на матлабе)
- реализовать пробный клиент
- написать про это дело статью, выступить на весенней студенческой конфе
- защитить курсовую/диплом
- в летней школе допилить стенд до работающего состояния, вместе с кибернетиками образовать команду, готовиться к соревнованиям осенью, помогать другим командам (видимо, ИТМО, 239, 419 лицей и т.д.)
- выиграть Робофинист (в сделанных самими же соревнованиях, ага)
- поехать на Robocup и выиграть там
- написать статью на международную конфу (ICRA, IROS) про то, как вы это сделали
4
Набор компонентов для быстрого создания визуальных языков на .NET (QReal done right)- библиотеки для:
- внутреннего представления графов
- отображения графов
- редактирования графов
- (поверх GraphX или MSAGL)
- GraphX или MSAGL это всё умеют, надо сделать демо-язык типа языка программирования роботов или сетей Петри, чтобы попробовать
- метасредства (граф модели, граф метамодели, автоматическая генерация редактора)
- графовые грамматики для интерпретации и трансформаций
- генерация кода (T4?)
- ограничения и верификация
- нечёткий матчинг, поиск паттернов и всё такое
- интеграция с существующими системами и стандартами
- "наукообразное" ядро системы на F# (?)
- переиспользуемость каждой отдельной компоненты (графы и визуальные языки даже для третьеклассников, пишуших свои первые крестики-нолики на WinForms, перетащил контрол, написал конфиг --- профит)
- перспективы развития до всяких модных штук типа Deep Metamodeling и т.д.
C#, F#2-6 курсы, тут много технической работы и, пока она не сделана, мало науки. Зато задача легко разделяется на независимые подзадачи. Опять-таки, нужен боец, который не боится архитектуры."Yet another DSM platform" сама по себе плохо публикуема (но на студенческие конференции хорошо пойдёт), если сделаем что-то интересное на базе этой платформы (например, метамоделирование на лету), можно съездить на топовые конфы типа MODELS.- написать несколько игрушечных прототипов визуальных редакторов на существующих библиотеках, но не просто визуализировать графы (что они, очевидно, умеют делать хорошо), а то, что нам надо --- возможность назначать вершинам и рёбрам разные свойства, редактировать их прямо на сцене, быть может, вкладывать одни элементы в другие, ресайзить, добавлять динамически текстовые метки и т.д.
- спроектировать (с моей помощью, естественно) "идеальную" систему. для этого придётся сначала изучить архитектуру QReal и ещё нескольких аналогичных штук, статьи, которые надо почитать, есть
- написать "ядро" системы --- менеджер плагинов, репозиторий, редактор, GUI
- писать элементы функциональности, желательно в виде плагинов: инфраструктуру для генераторов, проверялку ограничений, движок интерпретации и т.д.
- писать языки на основе этой штуки --- язык программирования роботов, сетей Петри, метаредактор, редактор ограничений
- писать статьи
- в идеале, такая система должна сама разрабатываться с помощью себя --- то есть сделать DSL, который бы помогал описывать систему, и генерить но нему код самой системы
5
ReSharper для F#Аудучинок и Кириленко этим будут заниматься, скорее всего
6
Kerbal Space Program + QRealЭта тема близка к образовательной робототехнике, но, поскольку реальные роботы есть не у всех, можно ещё что-нить программировать. Kerbal Space Program в этом плане можно считать просто большой и навороченной моделью робота. Хорош он тем, что имеет довольно удобный интерфейс для написания плагинов, кучу существующих плагинов, так что должен позволить организовать взаимодействие с TRIK Studio по чему-то вроде RPC. Если нет, можно генерить код по визуальному языку, описывающему в событийном стиле поведение ракеты, для плагина KOS. Потом можно подготовить набор задач на программирование + теорию управления, типа полёта на заданной высоте, автоматической посадки, автоматической отработки манёвра и получить готовое образовательное решение, от которого школьники будут в восторге. Основной научный смысл, конечно --- очередное доказательство применимости DSM-подхода для end-user-программирования и вообще, использования "маленьких языков" в неожиданных местах. Кербал не очень принципиален, любая игра, позволяющая внутриигровое программирование, подойдёт (например, Space Engineers, но тогда мне нужна новая видеокарта).C#, Kerbal Space Program, умение разбираться в документации2-3 курсыНа студенческую конфу, но если поставить эксперимент на школьниках (с этим, я думаю, согласятся помочь 419 лицей или 239), то может пройти в более интересное место. - разобраться с тем, как писать плагины к KSP --- пройти туториал, посмотреть на KOS
- почитать диплом Зимина, разобраться с тем, как делать плагины для QReal (есть доки на вики)
- выбрать схему интеграции KSP и QReal
- сделать прототип, который позволяет по кнопке в QReal запускать ракету в KSP (либо генерить код и запускать его уже по кнопке в KSP)
- итеративно делать язык, может даже несколько (императивный и событийный стиль)
- сделать набор примеров
- написать статей по этому делу
7
Скачивалки с разных облачных хранилищЭто нужно для цифровой криминалистики, работа в сотрудничестве с компанией BelkaSoft. Общая задача такая --- ловят подозреваемого, отнимают у него всё цифровое оборудование и, по постановлению суда, пытаются извлечь из него как можно больше информации --- может, он в Google Calendar сделал пометку в духе "16:00 --- убийство". Если нет, то интересны его социальные связи (свидетели, соучастники), документы, которые могут быть полезны при расследовании, сетевая активность (посты, комментарии), фотки, сетевые бэкапы, короче, всё, что можно законно извлечь. Причём, что делает задачу более интересной, следователи не всегда знают логин-пароль от аккаунтов подозреваемого, так что надо уметь работать с токенами, куками, перехваченным трафиком и прочими подобного рода вещами.
Сейчас задача довольно конкретная --- сделать скачивание всей доступной информации из Dropbox, по логину/паролю и по авторизационному токену, которым авторизуется клиент Dropbox. То же для YouTube (там клиента нет, но используется протокол OAuth, токен можно перехватить в трафике браузера).
Наверное, было бы интересно то же для GitHub --- все репозитории качать не надо, но получать список watched, starred и т.д. может быть полезно
C#, умение читать английскую документацию1-2 курсыНет, по крайней мере без помощи Белкасофта. Потенциально можно попробовать прикрутить машинное обучение, которое ранжировало бы гигабайты информации из разных облаков по степени подозрительности, тогда это было бы вполне публикабельно, но никто не знает, как это делать. В идеале вообще хочется что-то вроде Minority Report, запихиваем логин-пароль в программу, она всё качает, пихает в нейросеть и говорит, преступник это или нет.- будет некий кусок кода от BelkaSoft, где будут абстрактные классы, от которых каждый скачиватель должен наследоваться (поскольку скачиватели должны уметь отменять закачку и сообщать прогресс), с ним надо разобраться
- читать документацию на выбранное облачное хранилище, проходить туториалы
- реализовать
8
.NET Core на ТРИКПридётся потерпеть до первого квартала 2017 года, по всей видимости :(
https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap
9
ROS + QRealВзял Кирилл Никольский, применение ROS конкретно к робофутболу или танчикам роботов тоже пока занято
10
Метатехнологические аспекты WMPЕсть ещё один QReal Done Right, называется Web Modeling Project (WMP, https://github.com/qreal/wmp), который сейчас находится в состоянии разработки ядра, инфраструктуры и редактора. Когда он это состояние пройдёт (да на самом деле, уже, в большей или меньшей степени), там надо будет реализовывать фичи, необходимые любой DSM-платформе:
- метаредактор,
- задание правил генерации,
- задание исполнимой семантики,
- рефакторингов,
- жестов мышью
- и т.д. и т.п.,
- метамоделирование на лету
TypeScript/JavaScript, Java2-4 курсыОпять-таки, "Yet another DSM platform" хороша для студенческой конференции типа СПИСОК, основной профит в плане публикаций --- когда всё более-менее готово и можно экспериментировать с разными способами задания визуальных языков (то же метамоделирование на лету, например) и поддержкой всякой нетрадиционной функциональности (паттерн матчинг, например)- помочь бойцам доделать ядро, заодно разобраться в существующей архитектуре и кодовой базе проекта
- почитать статей про то, как делаются штуки типа метаредакторов, что это такое и зачем нужно
- спроектировать и реализовать выбранный компонент
11
Проверка стайлгайда с помощью машинного обученияУже сделали в джетах и даже внедрили в CLion. Возможно, всё равно интересно в контексте HwProj.

Вообще машинное обучение в программировании применять довольно странно, потому что там статистические методы, а код --- формальная штука. Но не всё формально, например, стайлгайд --- если аккуратно выписать все правила, которыми руководствуются программисты в большом проекте, в виде докумета, он получится на несколько десятков страниц, и то будет неполным. Зато в большом проекте уже полно кода, который этому стайлгайду более-менее соответствует. Можно выделить стайлгайд-related признаки, обучить нейросеть (или что получится), и заставить её классифицировать новые коммиты --- соответствуют они стайлгайду или нет. Как предварительный фильтр перед ревью было бы очень в тему, особенно при проверке домашек. Проблема в том, что я почти без идей как это делать.
Некоторые знания в Machine Learning3-4 курсыЯ таких публикаций не видел, хотя и не эксперт в области. Думаю, что если получится хорошо, примут куда угодно. JetBrains это было бы интересно, кстати, могут принять в кодовую базу какого-нить из их тулов.- обзор существующих решений на эту тему
- обзор методов реализации (нейросети, HMM, опорные вектора и т.д.)
- придумать и реализовать классификатор
- протестировать на репозиториях на гитхабе
- повторить
http://cs407921.userapi.com/v407921413/767/EWzQJ-nABpg.jpg
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Loading...
 
 
 
Семестровые, курсовые, дипломы, магистерские
 
 
Main menu