Причины аварии Вольво с автопилотом от Убера
Два года назад при тестировании беспилотного автомобиля Вольво, с начинкой от Убера, приключился наезд на пешехода со смертельным финалом. Версий и вопросов тогда было множество, но в конце 2019 был опубликован подробный отчёт произошедшего, с причинами, выводами и списком исправлений по итогам расследования. В настоящее время беспилотные поездки продолжаются.
Оказалось, что оборудование машин радарами, камерами и качественными лидарами (что-то типа радара, но для построения трёхмерной карты пространства) не особо помогает, если это всё управляется софтом. Виноваты оказались программисты.
Система обеспечения безопасности работала так: сканировалось пространство вокруг автомобиля, замечались, категоризировались объекты, вычислялась их траектория движения и, исходя из этого, принималось решение о том, как реагировать автомобилю.
В теории всё замечательно, но авария всё равно случилась. Почему же это произошло?
Процитирую кусок отчёта с посекундным описанием происшествия, которое, напомню, произошло в темноте, на участке скоростного шоссе, где нет ни переходов, ни светофоров. Пешеход двигался поперёк шоссе, переходя дорогу слева направо, и катил рядом с собой велосипед.
За 5.6 секунд до столкновения он был замечен радаром и отнесён к категории “автомобиль”.
5.2 секунды. Обнаружен лидаром, категория “другое”. Так как это было первое обнаружение, без какой-то истории, то предполагаемый путь и скорость пока неизвестны, поэтому “неподвижный”.
4.2 секунды. Присвоена категория “автомобиль”. Так как категория объекта изменилась, софт считает это другим препятствием, и путь предположить не может. Снова “неподвижный”.
3.9 секунды. Опять “автомобиль”. Вычислен путь, объект отнесён к автомобилям, движущимся в левом ряду.
2.7 секунды. За это время несколько раз меняется категория с “автомобиль” на “другое” и обратно. Каждая смена сбрасывает историю и автопилот считает объект неподвижным.
2.6 секунды. Категория: “велосипед”.
2.5 секунды. Опять “велосипед”, трассировка пути говорит, что велосипедист едет в левом ряду и не пересекает путь автомобиля.
1.5 секунды. “Другое”. Новый неподвижный объект, на этот раз, частично на полосе следования автомобиля. Автопилот реагирует - принимает решение объехать препятствие справа.
1.2 секунды. “Велосипед”, неподвижный, прямо перед автомобилем. Уже не объехать. Автопилот сравнивает расстояние до препятствия, текущую скорость, рассчитывает, насколько агрессивный манёвр придётся теперь предпринять для избежания аварии и приходит к выводу, что слишком сильно придётся крутить руль и давить на педальки. “Опасность”.
Реагирование на “опасность”, по задумке разработчиков, должно быть таким: выключить на 1 секунду механизм принятия решений, и ничего не делать. Почему так? Чтобы предотвратить множественные ложно-положительные срабатывания системы и избежать экстремального маневрирования, которое без такого “засыпания” происходило слишком уж часто.
0.2 секунды. Система просыпается. “Велосипед”, движется по полосе, прямо перед автомобилем. Всё ещё “опасность”. Торможение уже никак не поможет избежать столкновения. А в ситуациях, когда аварии не избежать, робот обучен даже не пытаться резко тормозить, а начать потихоньку сбрасывать скорость и подать звуковой сигнал пилоту.
0.02 секунды. Оператор берёт управление на себя и пытается объехать пешехода.
Удар.
0.7 секунд после столкновения. Водитель останавливает автомобиль.
За все 6 секунд система ни разу не классифицировала препятствие, как пешехода, так как поблизости не было переходов, и пешеходу просто неоткуда было взяться, по её мнению.
По итогам разбора ситуации, софт, конечно, допилили. Убрали задержку в 1 секунду, научили следить за траекторией движения объекта, даже если меняется его категоризация. Включили применение аварийного торможения, даже если аварии избежать всё равно не удастся. А сколько там ещё багов осталось?