Гоночный робомобиль врезался в стену из-за присвоения одной переменной NaN
Робомобиль Roborace, беспилотных автогонок в рамках этапов Формулы Е, врезался в бетонную стену во время прямой трансляции в Twitch. Инженеры из Сингапурского технологического института объяснили, почему все пошло не так.
Один из четырех инженеров опубликовал комментарий на Reddit. В нем говорится, что, фактически, неисправность произошла задолго до момента аварии, на этапе инициализации, который предназначен для вывода машины из боксов на линию старта/финиша. При этом во время прохождения пробного круга машиной управляет человек. Круг инициализации является стандартной процедурой для Roborace, пояснил инженер.
По его словам, во время этого круга инициализации «что-то произошло, и это, по-видимому, привело к тому, что сигнал рулевого управления перешел на NaN, а затем рулевое управление заблокировалось на максимальном уходе вправо». И, когда робомобиль получил команду стартовать, ускорение пошло по обычному пути, но рулевое управление было заблокировано.
NaN (Not a Number) — неопределенное значение, выводимое программой, которое не является действительным числом.
Инженер подтвердил, что телеметрия транспортного средства показала неверные данные, однако они не были отмечены как недействительные и были пропущены операторами транспортных средств.
«По иронии судьбы значение NaN действительно отображалось на мониторах телеметрии, но оно обнаруживалось наряду с 1,5 тыс. других значений. Обычно операторы смотрели только на индикаторы, указывающие на отсутствие сбоев, а в нашем случае на все индикаторы были зелеными», — написал инженер.
Он объяснил, что проверки внедрили для наиболее распространенных сценариев отказа, а данный сценарий впервые проявился только во время старта, и не рассматривался на этапе анализа.
Если верить инженеру, то управление робомобилем написано на Matlab, а авария была вызвана тем, как программа обрабатывает ошибки с NaN.
См. также: