Автомобиль также был способен сравнивать список заранее определенных стационарных объектов с предметами вокруг себя, чтобы определить, какие из них могут прийти в движение. Если узкий цилиндрический объект находится в той же точке, что и на предыдущих сканах, – скорее всего это фонарный столб. Если же он появился только на самом последнем снимке, это может оказаться человек, и на него следует обратить внимание.
С помощью трехмерных карт можно отличать прерывистую осевую линию от сплошной – инженеры Google называли это «картой уровня разметки», и она указывала автомобилю коридоры, по которым он мог безопасно двигаться, а также полосы, в которых, скорее всего, будут держаться другие автомобили и движущиеся объекты. Карты были полезны и в случае блокировки полосы, например, грязью или снегом. «С помощью карт распознавание препятствий становится надежнее, – говорит Монтемерло. – Они дают возможность понять, находится ли предмет на дороге или в стороне от нее».
Наконец, с помощью заранее снятых карт автомобиль Chauffeur с высокой надежностью распознавал сложные, но важные элементы окружающего мира – например, светофоры.
«Скажем, вам известно, что в конкретной точке вчера находился светофор, – объясняет Монтемерло те возможности, которые дает автомобилю хорошая карта. – Скорее всего, сегодня он на том же месте. Таким образом, вместо того чтобы искать светофор по всей картинке, можно сконцентрироваться только на ее определенных участках. Это невероятно важно».
Если самоуправляемая машина вынуждена полагаться только на собственные датчики, ей очень сложно идентифицировать светофоры – отчасти поэтому светофоры отсутствовали на трассе DAPPA Urban Challenge. «У автобусов на корме красные огни, – говорит программист проекта Chauffeur Натаниель Фэрфилд. – Но от этого они не становятся светофорами, верно? Иногда их и люди с трудом различают. Что, если ты едешь по незнакомой местности? Иногда люди понимают сигналы неправильно. Ты видишь зеленый свет, но тебе нужно повернуть налево. Нужно ли именно здесь ждать, пока загорится стрелка? Если ты не знаешь местности, трудно правильно понимать сигналы».
Идентифицировать светофор и правильно интерпретировать его сигналы становится гораздо проще, если самоуправляемый автомобиль может обратиться к заранее снятому трехмерному изображению дороги, по которой движется, – оно безошибочно скажет, куда и на что следует смотреть.
«И тогда можно определить семантику данного конкретного светофора, – объясняет Фэрфилд. – Что именно он означает? На какие полосы распространяются его сигналы? Относятся ли они к полосе, выделенной для поворота налево? Это очень большое подспорье».
Нанести на карту каждый светофор, каждый знак остановки, каждую полосу для поворота налево кажется невероятно сложной задачей; так оно и есть. Но вы же помните, что в проектах Street View и Ground Truth уже делались аналогичные снимки для этих же дорог. Зная, что это технически возможно, Монтемерло, Фэрфилд, Урмсон и остальные разработчики решили исходить из предположения, что отметить расположение всех светофоров на всех необходимых трассах тоже скорее всего возможно.
Теперь требовалось, собственно, изготовить робота. Это была задача Левандовски, и он подошел к ней так же, как к постройке Pribot для доставки пиццы на Трежер-Айленд. По углам машины он установил четыре акустических радара, которые должны были предупреждать машину о близких препятствиях. Автомобиль был оснащен приемником GPS, снабжавшим его точными координатами, и датчиками вращения колес, отслеживавших его движение с очень высокой степенью точности. Необходимое компьютерное оборудование, занимавшее когда-то весь багажник Chevrolet Tahoe, теперь было настолько компактным, что уместилось в отсеке для запасного колеса Prius. Но сердцем системы был лидар фирмы Velodyne, напоминавший вращающееся на крыше машины «ведерко» из KFC. Лидар представлял собой пучок из 64 лазерных излучателей, осуществляющих 15 млн измерений в секунду в 360 градусах вокруг автомобиля.
Разработку программного обеспечения, которое должно было контролировать все аспекты поведения машины, начали с кода для Junior, написанного стэнфордской командой Труна. Модифицировать его пришлось очень существенно. Одним из первых усовершенствований, внесенных разработчиками на этот раз, была возможность управлять машиной со смартфона: чтобы она начала ускоряться, достаточно было наклонить аппарат вперед, чтобы тормозить – назад. Разработка и тестирование системы, отвечавшей за автономное управление Prius, требовали проводить в машине по многу часов за раз, сначала за написанием кода, затем – за его загрузкой в Prius. После этого нужно было проконтролировать, как изменения влияют на поведение машины на дороге. Так проходили долгие часы: написание кода, пробная поездка, все сначала. Полигоном была выбрана верхняя гравийная парковка возле арены Shoreline Amphiteatre в Маунтин-Вью, отделенной от штаб-квартиры Google всего одной недлинной аллеей. Долгов больше других работал в машине, подчас – до поздней ночи. Как-то раз, около трех часов ночи, Долгов сидел в Prius, отлаживая код. Подняв глаза, он заметил приближающуюся полицейскую машину. «Как поживаете, офицер?» – поинтересовался Долгов у полицейского на своем английском с русским акцентом. И тут к нему внезапно пришло понимание, что проект самоуправляемого автомобиля, проект настолько секретный, что о нем знают очень немногие даже в высшем эшелоне управления Google, рискует выплыть наружу.
«Что вы тут делаете?» – спросил полицейский, и Долгов просто улыбнулся и объяснил, что тестирует технологию для Google. В Маунтин-Вью этого, слава богу, достаточно, чтобы удовлетворить любопытство офицера полиции.
Чтобы научить автомобиль-робот водить, нужно с нуля привить ему навыки, которыми обладает человек: взять, к примеру, тщательно выверенную последовательность действий при нажатии педали тормоза. Большинство водителей никогда не давят резко на педаль что есть силы. Наоборот, они наращивают усилие постепенно, мягко вводя машину в режим замедления, постепенно нарастающего до момента полной остановки – и тогда водитель снимает усилие мгновенно. Долгов воспроизвел в программном обеспечении Chauffeur подобную кривую.
Далее возникает проблема постоянного подруливания на дороге, которое знакомо любому водителю из его собственного опыта. Никто не держится неподвижно в центре своей полосы, вместо этого он (или она) все время слегка «плавает» внутри нее под действием тысячи внешних факторов. Машины, припаркованные у правой обочины, заставляют сместиться влево. Приближающиеся по встречной – вправо. Мелкая коррекция траектории проводится много раз в минуту и является необходимым условием того, что пассажиры чувствуют себя в безопасности.
Один из заездов Prius, в котором машина показала обнадеживающие результаты, проходил на летном поле Федерального аэродрома Моффетт, всего в нескольких минутах к востоку от кампуса Google. Как только Prius научился без проблем кататься по взлетно-посадочной полосе аэропорта, Урмсон решил, что пора выводить машину на дороги общего пользования. Но было ли это, по крайней мере, законно? Адвокаты компании внимательно исследовали законодательство штата в части дорожного движения и обнаружили, что оно не запрещает компьютеру управлять автомобилем. Закон безоговорочно требовал, чтобы человек находился в водительском кресле, но ни слова не говорил о том, что тот должен управлять автомобилем.
В мае 2009 года Урмсон выбрал участок дороги общего пользования для первого испытания Prius – центральную автомагистраль Маунтин-Вью. Довольно логичный ыбор: она была прямой, содержалась в хорошем состоянии, и посередине ее тянулся широкий бульвар, надежно изолирующий робота от встречного трафика. Ради безопасности других водителей Урмсон организовал сопровождение Prius несколькими машинами, следовавшими за ним сзади и образовывавшими барьер между роботом и остальными участниками движения. Долгов занял место на пассажирском сиденье, Урмсон вывел машину на магистраль, активировал систему автоматического управления – и обнаружил, что машина безостановочно мечется по полосе. Любой незначительный ориентир: фонарный столб, почтовый ящик, знак парковки – заставлял ее рыскать то вправо, то влево.
Во время подготовки к DARPA Urban Challenge на подобные вещи не обращали внимания, потому что автономные автомобили не были рассчитаны на перевозку пассажиров. Но в проекте Chauffeur их комфорт и безопасность превратились в обязательное условие. Долгов внес небольшие изменения в код, в основном сводившиеся к запрету Prius смещаться внутри полосы, кроме случаев реагирования на стационарные препятствия в непосредственной близости от себя. На следующий день они снова выехали на дорогу. Правка сделала свое дело: ехать стало значительно удобнее. «Незаметно для себя мы проехали одну милю, а затем и десять», – вспоминает Урмсон.
Потом за спиной остались и сто, и тысяча миль. Тогда, весной 2009 года, стало очевидно, что таким образом группа пытается избежать по-настоящему трудной задачи – Larry1K, маршрутов примерно по 160 км каждый, предложенных Пейджем и Брином в качестве проверки возможностей машины. «Наступил момент, когда мы сказали друг другу: давайте попробуем», – вспоминает Урмсон. Первой трассой они выбрали участок Тихоокеанского шоссе (Pacifc Coast Highway) от Кармел-бай-те-Си до Сан-Луис-Обиспо. На первый взгляд он мог показаться самым опасным: на некоторых его участках все время дул сильный ветер с гор, при этом с одной стороны дорога была ограничена вертикальной скалой, а с другой – легким ограждением или просто стальной полосой. Больше ничто не отделяло машину от многометрового обрыва – и волн Тихого океана далеко внизу.
Но Урмсон предположил, что на самом деле задача относительно проста. Дорога содержалась в хорошем состоянии, с четкой разметкой. Многие участки – прямые с относительно слабым движением. На шоссе почти не было перекрестков – а следовательно, и светофоров. Пока машина держится между белой и желтой линиями разметки, понял Урмсон, все должно быть в порядке. «По сути, нужно было просто все время ехать в своей полосе, остановиться на паре светофоров – вот и все», – говорит Урмсон, который тем не менее признавал, что любая ошибка была чревата роковым падением со скал в Тихий океан: «Было интересно и страшно одновременно».
После того как по дороге прошел автомобиль со сканирующим оборудованием, Долгов обработал результаты специальным программным обеспечением, прокладывающим точную траекторию для Prius. Иными словами, оно рассчитывало, в какой точке должен находиться автомобиль в любом месте дороги. Затем Долгов и его жена Анна, работавшая в Chauffeur в группе тестирования, сели в машину и отправились вдоль побережья. Долгов вел, а Анна корректировала найденную программой траекторию. Если ей казалось, что расчетная точка находится слишком близко к краю дороги, Анна простым нажатием кнопки на клавиатуре ноутбука смещала ее вправо или влево в пределах десяти сантиметров.
Во время первой попытки Prius преодолеть трассу в машине находились Урмсон, Долгов и Левандовски. Они выехали утром. Буквально через несколько миль стало очевидно, что та часть кода, которая отвечает за торможение перед входом в поворот, нуждается в правке. Долгов написал его таким образом, что до вершины кривой машина не тормозила вообще. В результате она входила в поворот слишком быстро, затем резко тормозила и черепашьим темпом проходила вторую половину – мягко говоря, пугающее поведение на извилистой дороге вдоль тихоокеанского побережья. На каждом повороте Урмсон сжимал кулаки так, что белели костяшки. Но все трое сопротивлялась искушению отключить автопилот: для боевого духа команды было бы очень хорошо пройти один из десяти маршрутов с первой попытки. Со временем Prius нагнал медленно движущийся грузовик с пивом, и, когда тот тормозил на поворотах, робот тоже замедлялся, потому что был запрограммирован держать дистанцию. Пройдя довольно большое расстояние, Prius уперся в участок, где велись ремонтные работы и движение регулировал один из рабочих. Сигналы регулировщика представляли собой одну из сложнейших задач для автономных автомобилей. Дополнительное затруднение заставило Урмсона отключить автопилот и взять управление на себя.
Они не сдались. Наоборот, они вернулись на старт. Долгов поправил код так, чтобы Prius заблаговременно сбрасывал скорость на участке перед вершиной кривой. Во второй половине того же дня они предприняли вторую попытку. Новое поведение машины в поворотах воспринималось гораздо спокойнее. Когда они достигли точки, где при первой попытке был отключен автопилот, у дорожных рабочих уже закончился рабочий день. Для движения были открыты две полосы, как положено, и регулировщика уже не было. Со второй попытки они благополучно достигли Сан-Луис-Обиспо. 212 км извилистой дороги по обрыву над океаном – и машина проекта Chauffeur прошла их в полностью автономном режиме.
Первый маршрут Larry1K был позади. «Мы говорили о том, какое это большое достижение, – вспоминает Урмсон, – о том, какое это чувство: видеть, на что способна твоя технология… Мы испытывали скорее восторг, чем облегчение».
В тот день он, Долгов и Левандовски заночевали в Сан-Луис-Обиспо. Они отправились в ресторан отпраздновать успех. «Мы ставили себе эти цели, – вспоминает их ликование Долгов, – но понятия не имели, как их достичь. Внезапно мы осознали, что первая из них позади. Это дало нам огромный заряд энергии и добавило энтузиазма».
Пессимисты в группе не придали особого значения их достижению. Нечему радоваться, сказали они. Дорога простая. Достаточно было держаться в своей полосе и проехать три светофора. Реальное вождение в городе гораздо сложнее, особенно если принять во внимание пешеходов и домашних животных.
Поэтому для второй попытки Урмсон постарался выбрать более сложную трассу. Он остановился на маршруте Larry1K, почти все время проходившем по исторической Эль-Камино[57], длина которой сотни километров; в испанский период она соединяла двадцать одну испанскую миссию, растянувшись от Нижней Калифорнии до северной оконечности Сан-Франциско. Маршрут Larry1K начинался от аэропорта Сан-Хосе. В Маунтин-Вью он сворачивал с Эль-Камино и петлял между зданиями в кампусе Google. В Пало-Альто он подобным же образом проходил через кампус Стэнфордского университета и центр города, а дальше к северу возвращался на Эль-Камино, по которой и следовал дальше, огибая Сан-Франциско с юга. На этом маршруте светофоров было больше двух сотен. Урмсона больше всего волновал центр Пало-Альто. Припаркованные под углом к тротуару машины, пытающиеся от него отъехать, погруженные в свои телефоны пешеходы, пролетающие на красный свет велосипедисты – каждое из этих событий трудно предсказать даже живому человеку за рулем. Автономному автомобилю это еще сложнее. «Я помню, как люди говорили мне: это пустая трата времени, зачем мы вообще этим занимаемся? – вспоминает Урмсон. – Но практика показала, что в данном случае просто взять и попытаться было едва ли не лучшим из принятых нами когда-либо решений».
В центре Пало-Альто Prius ошибся примерно пять или шесть раз. Машина не пропустила пешехода и выезжавший задним ходом с парковки автомобиль. Каждый раз Урмсону приходилось отключать автопилот и управлять самому, а Долгов и другие программисты потом работали над проблемой и исправляли код таким образом, чтобы в следующий раз машина уступила бы дорогу пешеходу, а увидев сдающий задним ходом автомобиль, остановилась. «Мы перешли от набора абстрактных задач к совершенно конкретным: вот четыре случая, когда машина ошиблась. Давайте прилагать силы именно к ним, – говорит Урмсон. – Есть вещи, которые мы можем взять и исправить. Мы не можем исправить все. Достаточно привести в порядок только эти конкретные пункты – и мы повторяем заезд».
Команда встречалась каждый понедельник в 11:30, чтобы выяснить, насколько они продвинулись вперед и на чем следует сконцентрировать усилия на следующей неделе, чтобы улучшить возможности машины. Одной из проблем, с которыми им пришлось столкнуться, была неспособность программы предсказывать поведение пешеходов. Например, если пешеход оказывался стоящим на перекрестке справа от машины, она могла продолжить движение, потому что не понимала, что он сейчас шагнет под нее. Кроме того, машина пыталась всегда держаться возле середины полосы, что приводило к определенным трудностям, если та по ширине вмещала два автомобиля. Когда автомобиль-робот ждал на перекрестке возможности повернуть, подъезжавшие сзади машины с людьми за рулем парковались в пространстве между ним и краем проезжей части, мешая ему. Поэтому понадобилось еще одно изменение в программном обеспечении, разрешающее роботу перемещаться внутри полосы в зависимости от обстановки. Действуя таким образом, преодолеть Эль-Камино из списка Larry1K удалось примерно за месяц.
Еще одну задачу Пейджа удалось решить относительно быстро – проехать все мосты в области залива Сан-Франциско. Сложность заключалась не в мостах – благодаря четкой разметке они оказались вполне преодолимыми, – а в очень узкой дороге в Бельведер-Коув, в северной части залива Сан-Франциско. Там есть улица Бич-роуд, начинающаяся от яхт-клуба Сан-Франциско, которая сначала поднимается в гору, а затем петляет вдоль побережья, скрытая навесом из крон деревьев, кустов рододендрона и другой растительности, – причем от воды ее отделяет только узкая полоска домов ценой во много миллионов долларов каждый. Несмотря на то что Бич-роуд была узкой, на ней парковались. Проехав по ней впервые, Долгов и Урмсон растерялись: эта улица, конечно, односторонняя? Из-за припаркованных автомобилей разъехаться на ней было совершенно невозможно. Однако после нескольких попыток они выяснили на собственном опыте, что движение разрешено в обоих направлениях. Чтобы робот мог преодолеть ее, даже когда навстречу ему движется другой автомобиль, программистам пришлось научить Prius приему, распространенному в Европе: съезжать в сторону, прижиматься к обочине на широком участке дороги и ждать, пока проедет встречный автомобиль. Позже, во время заезда, когда робот смог проехать по Бич-роуд, они наткнулись на другую проблему: пункты оплаты при въезде на мост. Размеченный ими маршрут для Prius говорил, что машина должна проехать через строго определенные ворота, которые оказались закрыты. К счастью, во время следующей попытки они были открыты, и еще один пункт задачи Larry1K был выполнен.