Гоночный робомобиль врезался в стену из-за присвоения одной переменной NaN

?v=1


Робомобиль Roborace, беспилотных автогонок в рамках этапов Формулы Е, врезался в бетонную стену во время прямой трансляции в Twitch. Инженеры из Сингапурского технологического института объяснили, почему все пошло не так.

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

По его словам, во время этого круга инициализации «что-то произошло, и это, по-видимому, привело к тому, что сигнал рулевого управления перешел на NaN, а затем рулевое управление заблокировалось на максимальном уходе вправо». И, когда робомобиль получил команду стартовать, ускорение пошло по обычному пути, но рулевое управление было заблокировано.

NaN (Not a Number) — неопределенное значение, выводимое программой, которое не является действительным числом.

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

«По иронии судьбы значение NaN действительно отображалось на мониторах телеметрии, но оно обнаруживалось наряду с 1,5 тыс. других значений. Обычно операторы смотрели только на индикаторы, указывающие на отсутствие сбоев, а в нашем случае на все индикаторы были зелеными», — написал инженер.

Он объяснил, что проверки внедрили для наиболее распространенных сценариев отказа, а данный сценарий впервые проявился только во время старта, и не рассматривался на этапе анализа.

Если верить инженеру, то управление робомобилем написано на Matlab, а авария была вызвана тем, как программа обрабатывает ошибки с NaN.

См. также:

© Habrahabr.ru