Сообщение grabbed zero system id for sb this is not allowed появляется в логах и консоли при работе с полётным стеком ArduPilot и связанным с ним ПО — чаще всего его замечают пользователи симулятора SITL или наземной станции при обмене данными по протоколу MAVLink. Суть проблемы: компонент системы получил или попытался использовать system id со значением ноль, что протоколом запрещено, поскольку ноль не является допустимым идентификатором системы в сети MAVLink.

Ошибка не означает аппаратную поломку дрона — это сбой конфигурации или порядка запуска компонентов. Однако пока она присутствует, связь между наземной станцией, автопилотом и вспомогательными скриптами может работать нестабильно или не устанавливаться вовсе. Ниже разберём, откуда берётся нулевой идентификатор и как безопасно устранить проблему.

Что означает system id в архитектуре MAVLink

В протоколе MAVLink каждый участник сети — автопилот, наземная станция, бортовой компьютер, скрипт-компаньон — имеет два идентификатора: sysid (идентификатор системы) и compid (идентификатор компонента). Корректные значения sysid лежат в диапазоне от 1 до 255. Значение 0 зарезервировано и считается недопустимым: пакеты с нулевым идентификатором источника отбрасываются или вызывают предупреждения вроде разбираемого.

Когда какой-либо компонент (в тексте ошибки обозначен сокращением sb) объявляет себя с нулевым sysid, остальные участники сети не могут корректно адресовать ему сообщения. Отсюда и формулировка «this is not allowed» — система фиксирует попытку использовать недопустимый идентификатор и отказывается её обрабатывать.

⚠️ Внимание: точное место появления сообщения (консоль SITL, журнал наземной станции, вывод скрипта) зависит от версии прошивки и используемого ПО. Сверяйте контекст ошибки с документацией именно вашей версии ArduPilot или симулятора.

Типичные сценарии появления ошибки

На практике сообщение чаще всего встречается в нескольких повторяющихся ситуациях. Определить свой сценарий — уже половина решения.

  • 🖥️ Запуск SITL-симуляции ArduPilot, когда скрипт или наземная станция подключается до полной инициализации автопилота.
  • 🔌 Подключение нескольких компонентов через MAVProxy или mavlink-router с конфликтующими или незаданными идентификаторами.
  • 📜 Собственный скрипт на pymavlink или dronekit, в котором при создании соединения не указан параметр source_system.
  • 🛰️ Телеметрическая связка, где один из модулей передаёт пакеты с некорректно сформированным заголовком.

Если ошибка возникла сразу после обновления прошивки или изменения параметров, вероятная причина кроется именно в конфигурации, а не в железе. Если же она появляется только при запуске определённого скрипта — начинать диагностику нужно с этого скрипта.

📊 Где вы столкнулись с ошибкой «grabbed zero system id for sb»?