Журнал / герои

Походка робота-футболиста

Алексей Козинов из группы разработки автостратегий Яндекса рассказывает об учёбе в МФТИ и дипломной работе. В ней он применил reinforcement learning, чтобы в симуляторе обучить ходьбе модель самодельного робота.

Из Майкопа в Москву

Я родился в небольшом городе Майкопе в Республике Адыгея. В школе занимался в кружке по математике и программированию. У кружка была летняя школа, куда с лекциями и олимпиадами приезжал Андрей Михайлович Райгородский. Знакомство с известным математиком меня вдохновило, захотелось стать таким же классным и увлечённым. Поэтому, когда настало время выбирать вуз, я выбрал МФТИ. Поступить удалось благодаря участию в олимпиадах: на двух из них я стал призёром, и это зачли при поступлении.

Учиться в МФТИ оказалось сложно, но в кружке нас морально готовили к тому, что  учёба — это постоянное движение от незнания к знанию. Думаю, главное — первые два года, они закладывают важный фундамент; потом уже можно смотреть на то, что более интересно, искать свою область. На первых курсах университета я не представлял, чем буду заниматься, тем более не разбирался в машинном обучении. Но к третьему курсу я уже понимал, что такое работа в ML, и знал, какие задачи мне интересны.

Робофутбол

В начале третьего курса я увидел объявление о наборе в клуб робофутбола. Нужно было писать с нуля алгоритм для роботов-футболистов на любом языке программирования. Я выбрал С++. Руководителем кружка был мой будущий руководитель диплома — Сергей Семендяев.

Когда я пришёл, нам показали робота NAO шестой версии и поставили амбициозную цель: попасть на соревнования RoboCup. Стандартного софта, установленного в роботе, недостаточно для игры в футбол, но его можно запрограммировать на выполнение разных задач — в роботов встроены микрофон и динамик, они могут слушать, говорить, двигать руками и ходить.

Для участия в международных соревнованиях нужно собрать команду роботов и научить их забивать голы с помощью алгоритмов. По правилам команда состоит из вратаря и трёх футболистов. Перед началом игры роботов подключают к Wi-Fi, а компьютер судьи посылает сигнал о том, что игра началась. Дальше всё целиком зависит от самих футболистов, управлять ими удалённо запрещено. Всем, кто готовил роботов к соревнованиям, остаётся только наблюдать и переживать за своё творение — ответственный и очень нервный момент. Участие в соревнованиях дало мне многое: я побывал в Австралии на финале игр, попробовал себя в роли капитана — управлял командой разработки, учился ставить задачи и расставлять приоритеты. 

В Яндекс я попал тем же летом, когда проходили соревнования — в июне участвовал в контесте Академии Яндекса по машинному обучению и занял второе место. Меня позвали на собеседование, и в августе я уже начал стажировку. Сейчас я аналитик-разработчик в команде автостратегий рекламы Поискового портала: мы помогаем рекламодателю эффективно расходовать бюджет. Я занимаюсь аналитикой и продуктовыми задачами, провожу эксперименты, по результатам которых мы принимаем решения в сервисе. Например, какое распределение бюджета по дням недели нужно выбрать, чтобы было больше конверсий.

Диплом про роботов

В лаборатории, которая готовила роботов, было две команды: одна готовила ПО для готовой модели NAO — антропоморфного робот компании Aldebaran Robotics, — а вторая разбиралась с конструкцией робота, собранного из разрозненных деталей. У второй команды также был отдельный проект со школьниками — они писали алгоритм ходьбы для маленького робота Kondo. Kondo — это робот, у которого можно менять составные части, например, поставить более прочные детали или заменить подошву ног для большей устойчивости. Школьники его немного улучшили для своих задач, но процессор остался «родной». Мне захотелось попробовать создать свой движок ходьбы, построенный не на последовательности действий, а на модели машинного обучения. Я выбрал это в качестве темы диплома и начал работу. 

Моей главной целью стало настроить машинное обучение на компьютерной модели Kondo и добиться результата, который можно масштабировать на другие модели. То, что в роботе можно менять конструкцию, отразилось на условиях задачи: нужно было обучить нейронную сеть адаптироваться к изменениям, чтобы робот мог каждый раз, когда его конструкцию доработали, заново учиться ходить. Алгоритм я создавал и тестировал в симуляторе: взял точную модель робота и виртуальную среду, которая воспроизводит футбольное поле и подчиняется законам физики — учитывает силу притяжения и трение моторов в роботе. Такой формат работы позволяет ускорить процесс обучения.

Из управляющей программы, которая играет в футбол, я вытащил кусок кода, отвечающий за функцию ходьбы. Дальше при помощи машинного обучения создал объект, который управляет роботом, — пока ещё не обученную нейронную сеть — и проверил, что робот воспринимает её сигналы.

Отдельная сложность состояла в том, чтобы создать в виртуальной среде достаточно простую модель робота, потому что чем сложнее модель, тем дольше её обучать. Нужно было сделать модель робота из примитивных форм, но так, чтобы она обладала теми же свойствами центра массы, веса отдельных частей и длин, что и реальный прототип.

Итак, симулятор был готов, и я начал его обучение. Принцип алгоритма, который я выбрал, строится на таких основаниях:

— Агент — управляющая программа.

— Среда — это робот с полем.

— Взаимодействие: агент отправляет сигнал роботу, робот меняет своё состояние, анализирует, насколько хорошо всё прошло, и награждает себя за положительный результат.

Сложность возникла с функцией награды, потому что в ней нужно было учесть критерии оптимальной ходьбы. Как понять, что робот хорошо ходит? Сначала я просто ориентировался на пройденное расстояние, но иногда робот вёл себя как читер и прыгал — он же ищет оптимальный вариант, даже если этот вариант кажется нечестным. Получалось быстро добиться награды, но в реальности такой робот просуществовал бы недолго — развалился бы от постоянных ударов о поверхность. Постепенно я стал поощрять робота за такие параметры, как устойчивость, скорость, гладкость ходьбы, и всё это формализовал. Мне помог мой научный руководитель — он подсказал некоторые физические нюансы.

На обучение повлияло и то, что я тестировал робота в виртуальной среде. Например, модель робота могла повернуть стопу боком и поехать на ней, как на колесе. Реальный робот так не сделает, так как просто сломается от непомерной нагрузки на сустав, но в виртуальном мире ему всё сходило с рук. Пришлось зафиксировать в функциях награды и такие ограничения. В итоге робот научился двигаться так, что это было похоже на походку. Я пошёл дальше: начал усложнять среду и добавлять в неё препятствия, например, запускал мяч, который ударялся о робота, и добивался того, чтобы он останавливал робота, но не сбивал с толку. Мяч симулировал внезапное смещение центра тяжести и учил робота удерживать равновесие в непредсказуемой ситуации. В футболе такое бы точно пригодилось.

Функцию награды я старался сделать максимально отвлечённой от текущей конструкции робота, чтобы в случае изменений в конструкции эту функцию можно было бы сильно не переписывать, а просто изменить несколько параметров. Все их я привязал к модели робота, например, изменял угол мотора и нормировал на возможный диапазон изменения этого угла. 

Поначалу работа над дипломом не отнимала много времени, но позже потребовала активного включения: пришлось заниматься по вечерам и выходным. В общей сложности на проект ушло три месяца.

Итоги

Когда я начал работу над дипломом, то думал, что труднее всего будет с самой моделью машинного обучения — нейронной сетью. Но в итоге я взял готовую архитектуру и метод обучения и подобрал параметры. Главная трудность была в том, чтобы всё правильно настроить и довести до результата. Научиться применять инструменты оказалось сложнее, чем искать их.

Сейчас ко мне время от времени обращаются ребята из лаборатории: они собирают большого робота и решают для него аналогичную задачу. Моя работа им помогла и показала, что это возможно. В целом направление адаптивной ходьбы активно развивается в робототехнике. Например, у Boston Dynamics есть двуногий робот, который бегает, прыгает и делает сальто. 

В робототехнике можно начать экспериментировать, даже если у вас нет физического робота — достаточно найти симулятор. В некоторых из них уже есть стандартные модели роботов, для которых написаны базовые алгоритмы. Одна из интересных задач, на которую можно посоветовать обратить внимание тем, кого интересует ML в робототехнике, — оценка энергетических затрат на движение робота при его проектировании. В робототехнике много возможностей для того, чтобы проявить фантазию. Заниматься всем этим очень интересно, но я сейчас решил сконцентрироваться на рабочих задачах.