Привет, меня зовут Антон Чистяков. Пару лет назад я работал в хелпдеске Яндекса и даже писал здесь про то, как мы придумали вендомат с аксессуарами. Теперь отвечаю за сборку беспилотных автомобилей и роботов-доставщиков. Под катом расскажу, как мы делаем простые машины беспилотными: от момента покупки авто и выбора имени до сборки и калибровки, на которых всё, впрочем, не заканчивается.
Шаг 1. Покупаем автомобиль
В 2019 году Яндекс и Hyundai Mobis заключили соглашение о сотрудничестве: договорились объединить усилия в разработке беспилотных автомобилей. Сейчас все наши машины — Hyundai Sonata 8-го поколения. Почему мы выбрали именно эту модель? Она оборудована всем, что нужно для программного управления рулём и ускорением. Hyundai Sonata, которые мы превращаем в беспилотные, ничем не отличаются от других автомобилей той же модели. Мы покупаем их в обычном дилерском центре. Но подготавливать оборудование — компьютер, комплект сенсоров, проводку — начинаем гораздо раньше. Чуть позже расскажу об этом этапе поподробнее.
После покупки все машины проходят стандартную процедуру постановки на учёт. Им выдают номера и СТС.
Это уже четвёртое поколение наших беспилотников. Как раз о нём Дмитрий Полищук рассказывал на YaC 2020:
Шаг 2. Выбираем автомобилю имя и зачисляем его в наш флот
Для учёта автомобиля в наших внутренних системах мы используем два параметра: его VIN-код и имя. Если перевести в IT-термины, VIN — это MAC-адрес, а имя машины — FQDN. Да-да, у каждой из наших машин есть своё имя. VIN-код слишком сложно запомнить, а госномер может измениться.
Сначала мы называли автомобили в честь героев сериала «Мир дикого запада»: Takoda, Kohana, Akecheta. Когда персонажи закончились, нам на помощь пришла нейросеть, которая сгенерировала 60 тысяч уникальных имён. Так появились Natelio, Keyro, Onipa.
Если встретите на дорогах наш беспилотник, без труда узнаете, как его зовут. Стикеры с именами мы наклеиваем всегда в одно и то же место: справа, под лобовое стекло.
Управлять немаленьким флотом беспилотников нам помогает обширная база данных. В ней хранится информация о каждой машине и событиях, которые с ней происходят. Это своего рода судовой или лабораторный журнал, где мы тщательно фиксируем логи всех поездок: отмечаем неисправности, храним фотографии, записываем изменения, следим за метриками по каждой отдельной машине и всему флоту в целом. Снова обращусь к IT-терминам — наша база очень похожа на ERP-систему.
Шаг 3. Переходим к сборке
Про процессы
Сборкой надо как-то управлять: считать метрики, выстраивать цепочки поставок, оптимизировать ресурсы. Мы делали несколько подходов к этой задаче, и самым эффективным из всех нам показался Scrum-фреймворк. Оказывается, он подходит не только для разработки ПО.
Каждый понедельник мы планируем задачи на неделю вперёд (по сути — устраиваем планирование спринта). Команду dev представляют механики и электрики; за Scrum-мастеров — менеджеры проектов; чтобы приоритизировать задачи и отработать гипотезы, подключаются заказчики.
Дальше всё тоже стандартно: выбираем задачи из бэклога и распределяем их между командами. Одновременно со сборкой машины, команда проводит эксперименты: например, улучшает качество сигнала модемов. Или модернизирует разъёмы для слива логов. Или оптимизирует систему очистки сенсоров.
В течение недели мы регулярно собираем в цеху летучки «на ногах» (daily standup). По пятницам подводим итоги. Story points только не ввели: не прижились они у механиков. Измеряем всё в часах.
Про технологии в целом
Каждый беспилотник собираем как Роллс-Ройс: вручную, стапельным методом. Это означает, что машина всё время стоит на месте, все необходимые узлы и агрегаты доставляют прямо к ней.
Цех беспилотных автомобилей
Мы выбрали этот подход осознанно: собираем очень маленькой серией, по пять машин, поэтому выстраивать даже полуавтоматический конвейер невыгодно. К тому же для конвейера важно, чтобы конфигурация автомобиля не изменялась, а мы всё-таки экспериментируем и можем менять расположение элементов внутри машины, добавлять или исключать элементы из конечной конфигурации.
После покупки и занесения в базу, будущие беспилотники отправляются в наш цех в Москве. Первое, что мы с ними делаем — оклеиваем фирменной ливреей Self-driving car.
Далее полностью разбираем весь салон, включая обшивку потолка и багажника. Чтобы превратить машину в беспилотник, необходимо протянуть почти 200 метров различных проводов от её
Одновременно усиливаем шумо- и виброизоляцию багажника, заодно заглушаем гул системы охлаждения — простое, но очень важное улучшение. Мы используем беспилотники в качестве такси, а значит, должны позаботиться о комфорте клиентов.
Помните, я говорил, что сборка беспилотника начинается ещё до покупки подходящего автомобиля? Чтобы ускорить сборку, мы готовим комплектующие и собираем основные узлы ещё до того, как к нам приедет очередная Sonata.
Большую часть комплектующих мы разрабатываем самостоятельно. Для быстрого прототипирования и экспериментов мы изготавливаем некоторые детали своими силами: в нашем распоряжении несколько 3D-принтеров разных типов и размеров, токарный станок и фрезерный трёхосевой станок с ЧПУ. После продолжительной серии тестов мы заказываем серийные детали на внешних производственных площадках со строгим соблюдением стандартов, нормативов и контролем качества.
Под обшивкой каждой машины прячется множество электронных устройств: камеры, лидары, радары, вычислители, система охлаждения, сетевое оборудование, электрические платы с различными входами и выходами. Обо всём этом подробно рассказывал Виталий Подколизин, не буду повторяться.
Корпуса для собственных плат мы также разрабатываем самостоятельно, часть покупных плат перекорпусируем. Например, один из нужных нам свитчей поставляют только в большом стоечном исполнении. Сама плата при этом занимает 60% корпуса. Замена оболочки в подобных ситуациях помогает нам не только сэкономить пространство (напоминаю, мы размещаем всё оборудование в багажнике обычного автомобиля), но и установить дополнительное охлаждение. Места мало, тепла выделяется много: воздух не должен застаиваться внутри корпуса. Приятный бонус — оборудование в одинаковых лаконичных корпусах выглядит стильно.
Пора установить силовую часть. Машина потребляет до 2 кВт∙ч. Львиная доля электроэнергии приходится на вычислитель, внутри которого трудятся два серверных процессора и три мощные видеокарты. Фактически каждая наша машина — миниатюрный центр обработки данных. Все вычисления происходят на борту автомобиля, он полностью автономен.
Бортовой компьютер в багажнике
Багажник после установки оборудования
Чтобы беспилотная часть машины могла продолжать функционировать длительное время, мы комплектуем автомобиль двумя дополнительными батареями, от которых питается вся электрическая сеть. К слову, энергопотребление всего беспилотного оборудования меньше, чем у штатных узлов и агрегатов. Упаковываем провода в аккуратные жгуты и разводим по всей машине. Подключения — только разъёмные и рассчитанные именно на автомобиль: чтобы выдерживали вибрации и многократные включения и отключения.
Главное в машине — это безопасность. На всю электронику нижнего уровня — включая устройство, которое подаёт управляющие сигналы автомобилю, — приходят две независимые линии питания. Мы контролируем обе из них. В случае отклонений хотя бы в одной линии машину просто не удастся перевести в автономный режим.
Монтируем заранее собранные узлы, хранившиеся на складе готовых изделий, и подключаем. Тестируем все системы, прежде чем вернуть машине привычный вид.
Автомобиль до и после установки фендера
Устройство фендера с боковым лидаром
Завершаем сборку установкой сенсор-бокса на крышу машины.
Про сенсор-бокс в частности
Большой белый багажник с башней на крыше — тот самый сенсор-бокс. Внутри него собрано самое большое количество «органов зрения». А вообще, чтобы беспилотник мог «видеть» всё, что его окружает, на машину устанавливается три вида сенсоров:
- Четыре лидара: лидар собственной разработки на крыше, эквивалентный 90-лучевому; два 16-лучевых на крыльях; один 16-лучевой в передней части автомобиля.
- Шесть радаров: четыре на крыше в сенсор-боксе; два на крыльях.
- Камеры. Их на машине десять штук: четыре на крыше в сенсор-боксе, три внутри под лобовым стеклом, две на крыльях и одна спереди под решёткой радиатора.
Передний лидар
Передний лидар имеет складную конструкцию и в случае механического воздействия уходит во внутреннюю часть автомобиля. В беспилотниках предыдущего поколения все эти сенсоры соединялись проводами с вычислителем. Это было не очень практичное решение: появлялся большой жгут кабелей, который надо было тащить до багажника через полмашины. В четвёртом поколении большую часть этих проводов терминируем уже внутри герметичного сенсор-бокса и соединяем с багажником единым оптическим кабелем.
Сенсор-бокс и лидар Яндекса
Мы живём не в самом благоприятном климате: у нас выпадают все возможные виды осадков, да и резкие перепады температуры не редкость. Всё это загрязняет наши сенсоры и мешает машине «видеть». Поэтому мы разработали специальную систему очистки, которая подаёт на лидар и камеры воздух и воду в правильной пропорции. Радары умеют видеть через закрытые кожухи, скрыты внутри крыши и в очистке не нуждаются.
Компрессор, резервуар для воды, баллон со сжатым воздухом, гидравлическую и пневматическую трассы, из которых состоит система очистки, наши конструкторы сумели уместить в сенсор-боксе на крыше автомобиля. А дизайнеры постарались, чтобы всё это выглядело стильно.
◼︎ Гермобокс с электроникой
◼︎ Система очистки сенсоров
◼︎ Радары
◼︎ Камеры
Шаг 4. Калибруем
Важный этап создания беспилотника — калибровка. Это процедура нахождения некоторых внутренних параметров сенсора и/или его положения относительно машины или другого сенсора.
Как я рассказывал чуть выше, каждая машина снабжена большим количеством самых разных сенсоров. Всем им необходимо работать синхронно, как одно целое, поставляя данные в вычислитель, который определяет логику поведения машины. Ведущий «орган зрения» беспилотника — лидар разработки Яндекса. Все остальные сенсоры мы калибруем относительно него. А он сам калибруется относительно кузова автомобиля.
Калибровка выглядит так: автомобиль перемещается по большому помещению с множеством шахматных досок, расположенных в форме круга и установленных под разным углом. Когда беспилотник накопит достаточно кадров окружающего его пространства с разных ракурсов, сенсоры, используя эти данные, синхронизируются между собой.
Процесс калибровки
Шаг 5. Сертифицируем
После всех наших вмешательств автомобиль уже нельзя назвать обычной Hyundai Sonata. Значит, надо удостовериться, что получившаяся модель надёжна и соответствует стандартам безопасности серийных автомобилей. Поэтому отправляем наши машины на сертификацию в «НАМИ-Фонд». Там беспилотники испытывают и выдают сертификат соответствия, который разрешает эксплуатировать их на дорогах общего пользования.
Шаг 6. Запускаем. Тестируем. В путь
Осталось «вдохнуть жизнь» в машину: установить на бортовой компьютер операционную систему и ещё раз протестировать все узлы, агрегаты и сенсоры. Мы используем UNIX-подобную ОС.
Почти всё. До момента, когда беспилотник можно будет выпускать на улицы города, осталось 400 км. Проезжая это расстояние на нашем специальном полигоне, машина докалибровывается под присмотром водителя-испытателя. Лидары «видят» более чем на 200 м, поэтому идеально точно настроить их в помещении при скоростях меньше 40 км/ч невозможно, требуется доработка «в бою». Вместе с этим мы ещё раз проверяем надёжность всех узлов и агрегатов.
Только после завершения всех тестов мы считаем машину полностью готовой к езде в автономном режиме.
Уже более трёх лет десятки наших беспилотных автомобилей ездят на полигоне Яндекса 24 часа в сутки 365 дней в году без человека за рулём. Останавливаются они, только чтобы заправиться.
С 2018 года мы активно тестируем технологию на городских улицах в Москве (в районе Хамовников и Мичуринского проспекта) и в других странах: США и Израиле. За это время наши автомобили проехали больше 16 млн километров в беспилотном режиме. Из самых свежих новостей — начало открытого тестирования в Ясенево, на которое может подать заявку любой человек старше 18 лет.
Автор: Чистяков Антон