Городские исследователи: как роботы Яндекса учатся понимать мир вокруг себя

Как инженеры учат роботов мыслить, принимать решения и ориентироваться в непредсказуемой городской среде? Узнали об этом у Дэвида Латкина — руководителя команды восприятия робота-доставщика в Яндексе

Расскажи, как роботы Яндекса видят и слышат город

Чтобы робот мог полноценно оценить окружающую обстановку, мы установили на него сенсоры трёх типов: камеры, лидар и радары.

Сначала о камерах. Всего их пять, четыре из которых — fisheye (широкоугольные камеры, которые видят на 170–180°). Они находятся вокруг робота — спереди, слева, справа и сзади — и дают панорамную картину окружения на 360°, без слепых зон. Пятая камера установлена сверху, мы называем её башенной. Она детектирует дальние объекты, например светофоры. Это помогает роботу распознать сигнал и понять, можно ли пересекать дорогу.

Artboard 33 copy 3.webp

Artboard 33 copy 2.webp

Лидар, стоящий на роботе, — это оптический сенсор, который использует 64 лазерных луча и принцип времени пролёта (Time-of-Flight) отражённого сигнала. Каждый луч последовательно испускается под разными углами (через вращающуюся призму, зеркало или блок лазеров), а по возвращённому отражению сенсор рассчитывает расстояние до объекта и строит точную 3D-модель окружения.

Радар функционирует в связке с лидаром. Он применяет радиоволны и принцип Доплера для измерения скорости объектов на дистанции до 150 метров. Это особенно полезно, например, когда робот приближается к пешеходному переходу. Благодаря радарам можно заранее обнаружить приближающиеся транспортные средства и оценить их скорость.

Artboard 33 copy.webp

А как он определяет, что ему нужно делать в разных ситуациях на дороге?

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

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

Статика. Это стены домов, клумбы, ямы, столбы и всё то, что не двигается и что нужно объезжать. Взаимодействие со статикой составляет основную часть работы робота. Статика представлена внутри робота в виде «карты занятости». На ней понятно, где находится тот или иной тип препятствия, отражены его габариты и особенности. Благодаря этой карте робот строит безопасный для движения маршрут.

Совмещая информацию об агентах и карту занятости, робот понимает, как ему двигаться, чтобы органично вписаться в городскую среду.

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

Artboard 33.webp

Очень интересно! А по какому алгоритму думает робот, когда наступает этап принятия решения?

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

Потом робот смотрит на остальных пешеходов и животных — и делает вывод о том, помешает ли он кому-то при движении.

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

Чтобы принять окончательное решение, робот просчитывает потенциальные столкновения или коллизии с другими участниками движения. Если есть вероятность, что это произойдёт, он остаётся стоять или начинает искать альтернативные маршруты. Робот начинает двигаться, только когда понимает, что его движение будет безопасным по всем параметрам.

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

Как робот понимает, что ситуация безопасная? Вы заранее загружаете определённые правила?

Да, мы сами прописываем, какие объекты должны быть в приоритете, и зашиваем все правила, по которым робот должен принимать решения. У самого робота инструмента принятия решения нет.

Когда нужно предугадать тип и траекторию движения агентов и распознать, что находится вокруг робота, используется ИИ. Но мы не используем его для определения безопасной или опасной ситуации, так как не можем до конца быть уверены, какое решение примет робот. Так как для робота не существует понятий «хорошо» и «плохо», всегда есть риск, что он может в самостоятельных поисках наилучшего решения прийти к выводу, не соответствующему социальным нормам.

Как проходит тестирование робота и алгоритмов?

Тестирование — это необходимый этап, гарантирующий безопасность робота и его окружения. Только тесты дают понимание того, как модель будет работать в реальном мире. Конечно, каждая новая ML-модель пишется с целью улучшить навыки роботов-доставщиков, но всегда нужно себя проверять. И часто находятся краевые случаи, которые всплывают только на практике.

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

Мы берём несколько роботов и смотрим, как модель реагирует на типовые случаи. Когда этот этап закончен — внедряем новое решение, как мы говорим, «на флот». Сначала мы используем A/B-тестирование: применяем изменения к части роботов, работающих в реальном мире. Потом смотрим, всё ли хорошо. И только затем распространяем решение на всех роботов.

Как решаются вопросы этики — например, понимание жестов людей или распознавание ситуаций, когда лучше уступить дорогу?

Сейчас модели настроены так, чтобы робот мог максимально безопасно доставить заказ. Технически мы можем дать ему возможность распознавать, например, приветственные жесты людей. Но сейчас все ресурсы команды сконцентрированы на том, чтобы роботы-доставщики идеально справлялись со своей основной функцией — доставкой. Это главная задача робота, и она должна выполняться на все сто процентов.

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

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

Планируется ли обучить роботов новым навыкам в ближайшие год-два?

На пути следования робота-доставщика могут встречаться глубокие сугробы, открытые люки, ямы, ремонтные работы. Мы разрабатываем модель, которая будет помогать роботу строить альтернативные маршруты, если он видит затруднение на дороге. Мы хотим дать роботам навык лучше избегать тех мест, куда не стоит ехать, более точно объезжать потенциально опасные объекты.

Как думаешь, какую роль будут играть роботы? Станут ли они полноценными участниками городской жизни?

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

Я не думаю, что роботизация опасна в плане ограничения количества рабочих мест. Люди переквалифицируются в другие области. Ведь именно это произошло после промышленной революции XVIII–XIX веков. Более того, сейчас я вижу серьёзный дефицит рабочей силы.

Чем инженер по обучению робота отличается от классического разработчика софта?

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

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

Что нужно знать, чтобы участвовать в создании таких систем?

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

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

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

Вау, здорово! А что нужно сделать, чтобы стать ML-инженером в робототехнике?

Если более подробно говорить о базе знаний, которой должен обладать такой специалист, я бы выделил несколько, на мой взгляд, обязательных пунктов:

  • Фундаментальные знания математики, статистики, теории вероятностей и основных алгоритмов машинного обучения.

  • Языки программирования. Например, Python для быстрого прототипирования и C++ для производительных систем.

  • Ключевые фреймворки, например PyTorch, и системы, которые применяются в робототехнике, — ROS, Gazebo.

  • Принципы работы компьютерного зрения, обработка сигналов и методы SLAM. Это позволит решать задачи навигации, распознавания объектов и работы с разнородными сенсорными данными.

Ещё важно иметь практический опыт участия в реальных или симуляционных проектах, например хакатонах и профильных конкурсах. Можно поискать стажировки и небольшие вакансии в компаниях, занимающихся робототехникой. А также не забыть создать портфолио (GitHub, публикации, публичные выступления) и поддерживать контакт с профессиональным сообществом, чтобы знать новейшие алгоритмы и технологии.