Duckietown — это игрушечная модель города с машинками, которые перемещаются по ней автономно. Оснащенные компьютером, небольшие автомобили могут самостоятельно двигаться, реагировать на сигналы светофора и разъезжаться на перекрестках. Впервые Duckietown построили в Массачусетском технологическом институте, а сейчас такую же модель создают студенты и школьники в петербургском Computer Science Center.
Как игрушечный город помогает разрабатывать технологии для реальных автомобилей, почему роботы теряются в пространстве в разную погоду и время года, что необходимо, чтобы по городу начал ездить беспилотный транспорт и как проект связан с глобальной наукой? Об этом «Бумаге» рассказал основатель проекта в России Кирилл Кринкин.
Кирилл Кринкин
Руководитель лаборатории алгоритмов мобильных роботов JetBrains Research, заведующий кафедрой МОЭВМ в ЛЭТИ
Почему появился Duckietown и как устроены игрушечные автономные машины
В 2016 году Массачусетский технологический институт (MIT) получил грант на разработку автопилотов для автомобилей. У исследователей возникла мысль, что одно и то же программное обеспечение будет работать как на реальных, так и на игрушечных автомобилях, которые можно научить автономно действовать в условиях модельного города. Так был создан студенческий проект Duckietown.
Преподаватели из MIT собрали группу студентов с разными навыками и поставили задачу построить игрушечный город, в котором автомобили ездят полностью автономно. Студенты получили коробки с железками, микросхемами, контроллерами и собрали машины.
Затем на каждую был установлен контроллер, управляющий колесами, и миниатюрный компьютер на базе Raspberry Pi — так машина научилась ездить.
Следующий шаг: на этот маленький компьютер была установлена Robot Operating System (ROS). Это набор инструментов для различных робототехнических решений — как индустриальных, так и игрушечных. Так у каждого студента появился автономный мобильный робот, названный «Дакибот».
Дальше задачи разделили: одна группа студентов занялась разработкой алгоритмов поиска дорожной разметки, другая — алгоритмами распознавания сигналов светофора, а кому-то нужно было разработать протокол, благодаря которому автомобили «договариваются» о порядке движения на перекрестках. За год студенты решили базовые задачи автономного движения по дороге с разметкой.
В феврале я встретился с Лиамом Паулом (одним из авторов проекта Duckietown — прим. «Бумаги») и спросил, что нужно сделать, чтобы в рамках этого проекта заниматься исследованиями автономного движения автомобилей в России. Он сказал: «Ничего, организовывай, нет проблем».
Вначале мы с двумя студентами из ЛЭТИ и АУ попробовали быстро пройти тот же путь, что и студенты MIT в прошлом семестре: с нуля построили одну машину, дорогу, среду, запустили и отладили базовые алгоритмы. От MIT взяли основную идею, описания и исходные коды.
В 2017 году мы запустили курс в Computer Science Center, на котором студенты и школьники создали уже полномасштабный модельный город с десятком автономных «дакиботов» и решили несколько новых алгоритмических задач.
Можно провести аналогию Duckietown с Linux: когда исходный код этой ОС был впервые опубликован, то возможностей у нее было совсем мало. Но все, кто был заинтересован в появлении новых функций, стали добавлять в этот проект свои разработки. Здесь та же самая идея, только цель — стандартная открытая платформа для автономной навигации и беспилотного транспорта. И мы включились в этот проект: освоили то, что есть, и начали добавлять новые функции.
Duckietown задуман таким образом, что порог входа для работы с ним очень низкий: не нужно пять лет учиться в университете, можно быть даже школьником, чтобы разобраться с базовыми вещами. Любой, кому интересна эта тема, может подключиться к проекту, начать что-то создавать и сразу видеть результат своих усилий.
Как роботы ориентируются в пространстве
Автономный автомобиль — это робот, который должен уметь решать нерешаемую задачу — ориентироваться в неизвестных ему условиях и самостоятельно действовать. Сейчас на это способен только человек, и многие исследователи мечтают создать автономные алгоритмы.
Существует пласт задач SLAM — Simultaneous Localization and Mapping (метод одновременной локализации и построения карты — прим. «Бумаги»), общая постановка которых очень простая. Есть мобильный робот с набором сенсоров — например, камера, дальномер. Робота помещают в неизвестное ему окружение, и он, глядя на показания сенсоров, как-то перемещается и одновременно решает две задачи: строит карту пространства и определяет свои координаты на этой карте.
Если взять хороший робот-пылесос и поставить его в комнату, то, сделав ряд перемещений, он поймет, как устроено пространство и сможет построить карту и свой маршрут. Но этого почти всегда недостаточно, потому что в комнате есть какие-то объекты, которые тоже необходимо распознавать и реагировать на их появление.
Аналогичная задача относится также и к машинам: автомобиль едет, уточняет карту, локализует себя в ней — для этого у него есть маркеры, которые автономная система навигации может распознавать. Например, «дакибот» смотрит прежде всего на разметку. Если он ее видит, то думает: «Окей, я где-то на полосе, надо ехать параллельно этой линии». Но глобальную карту он пока строить не умеет.
Но задача ведь не в том, чтобы просто двигаться по полосе, — надо управлять. Иногда есть стоп-линии или препятствия, и машина должна реагировать на возникающие обстоятельства. Она «смотрит» сенсорами на мир, видит, например, стоп-линию и останавливается. Анализирует, как устроен перекресток, есть ли там светофор или другие машины, как можно разъехаться. Далее ей необходимо спланировать траекторию, которая позволит проехать перекресток и снова попасть на полосу.
Если говорить про автономное вождение глобально, то у реальных автомобилей есть более мощные помощники — например, система GPS. Но она дает неточные координаты, разница иногда достигает 3–5 метров, а на дороге это может быть встречная полоса. Поэтому GPS недостаточно. Есть электронные карты, которые загружает навигатор, но бывают проблемы: тут перекопали, тут знак поставили — в картах это не отражается мгновенно.
Duckietown интересен тем, что здесь фокус именно на автономности — нет никакой внешней системы. Многие проекты по навигации подразумевают, что рядом стоит какой-то мощный сервер, наблюдает и управляет всем. Здесь же каждая машина полностью автономна.
Какой должна быть инфраструктура для автономных автомобилей
Инфраструктура, конечно, помогает, хотя на 100 процентов она не решит задачи автономного вождения. Для начала посмотрим, в чем же сложность локализации на местности. Возьмем, к примеру, навигацию внутри помещения: мобильный робот передвигается, смотрит на стену, на измерения своих датчиков и локализует себя с ошибкой из-за погрешности данных. Поправить эту ошибку можно, находя определенные точки в измерениях, скажем, на картинке с камеры.
Но и здесь не всё гладко. Например, я смотрю на стену, вижу какие-то неровности, но солнце начало светить с другой стороны — и я эти неровности уже не вижу, а вижу что-то другое. Подавляющее большинство алгоритмов страдает отсутствием робастности: робот попадает в точку, в которой уже был раньше, но распознать ее не может. Условия наблюдения изменились — и он думает, что попал в другую часть пространства.
На улице утро, вечер, лето, осень. Зимой снегом всё засыпано, осенью — листьями. Дождь пошел — всё выглядит совсем по-другому. Как это распознать? Инфраструктура способна помочь таким образом: можно разметить пространство искусственными метками, например, QR-кодами, которые внутри себя содержат точные координаты. Тогда беспилотный автомобиль видит QR-код, считывает координаты и может накопленную ошибку радикально поправить.
У человека есть очень важная способность, которой пока нет у роботов: он хорошо распознает образы — например, предметы. Я смотрю на стул и знаю, что это стул. Мне этого достаточно, чтобы понять его форму, представить, что внизу есть ножки, понять, на каком он от меня расстоянии. У меня трехмерная модель в голове. А у робота ее нет — он ее строит, глядя на плоскую картинку, которая выглядит по-разному с разных точек зрения.
Есть еще одна задача, которая, может быть, скоро будет решена. Существует класс алгоритмов Structure From Motion (SFM) — это выявление структуры пространства из наблюдений при движении. Можно наблюдать за особыми точками объектов и восстанавливать их структуру. В решении этой задачи помогут методы машинного обучения, расцвет которых мы сейчас наблюдаем. Нейронные сети способны достаточно хорошо узнавать образы, а значит, и помогать в ориентации в реальном окружении. Сейчас для их обучения накоплено довольно много исходных данных.
Технически создать инфраструктуру, которая поможет беспилотным автомобилям уверенно себя чувствовать в городской среде, довольно просто. Можно, например, выделить отдельные полосы для таких машин. Сделать это совсем несложно даже сейчас. Но задача, которую еще предстоит решить, это научить автомобиль перемещаться в неизвестном динамическом окружении, исходя из дорожной ситуации.
Как игрушечные машины связаны с глобальной наукой
Duckietown — это реальные технологии, именно в этом прелесть проекта. Всё, что используется в индустрии, используется и здесь. Кроме того, если «снаружи» проекта появился какой-то новый метод, алгоритм, почему бы его не попробовать в Duckietown. Нет никаких ограничений. А если этот новый алгоритм еще и с открытым исходным кодом, то его вообще можно взять и интегрировать.
Проект Duckietown можно рассматривать как площадку для экспериментов. Если выходит какая-то новая научная статья — можно реализовать ее положения здесь. Или, наоборот, если в проекте возникает что-то принципиально новое, то можно оформить это в статью, представить на конференции и опубликовать. Одна из целей проекта — делать на его основе исследования и создавать научные работы.
Если говорить про ценность Duckietown для студентов, которые в нем участвуют, то они могут быть уверенными в том, что их знания соответствуют переднему краю технологий.