Перейти к содержимому

Статья

INAV JavaScript и Programming Framework: сложные сценарии

Архитектура сложной автоматики INAV: границы между Logic Conditions и JavaScript, наблюдаемое состояние, ограничения выполнения и безопасный откат.

Редакция WARPfly2 мин чтения0 просмотров

Скрипт не должен превращать полётный контроллер в непрозрачный набор исключений. Programming Framework подходит для декларативных условий и действий, JavaScript — для логики, которую трудно выразить простой таблицей. Чем сложнее сценарий, тем важнее ограничить его полномочия и сделать состояние наблюдаемым.

INAV JavaScript и Programming Framework: сложные сценарии — обложка WARPfly
INAV JavaScript и Programming Framework: сложные сценарии — обложка WARPfly. Оригинальная графика WARPfly.

Проведи границу ответственности

Оставь базовую стабилизацию, ARM, failsafe и критичные ограничения штатной прошивке. Скрипту передавай только функцию, которую можно отключить без потери ручного управления. Если отказ JavaScript способен остановить мотор или заблокировать takeover, архитектуру нужно пересмотреть.

INAV JavaScript и Programming Framework: сложные сценарии — карта материала
INAV JavaScript и Programming Framework: сложные сценарии — карта материала. Оригинальная графика WARPfly.

Опиши конечный автомат

Вместо цепочки скрытых условий задай состояния: Idle, ArmedReady, Active, Degraded, Cancelled. Для каждого укажи разрешённые входы, переходы, таймаут и действие по умолчанию. Один вход не должен одновременно означать команду пилота и подтверждение датчика.

Контролируй данные

  • проверяй диапазон, единицы и свежесть каждого значения;
  • вводи hysteresis для шумного порога;
  • ограничивай частоту действий и объём вычислений;
  • не считай ноль универсальным признаком отсутствия данных;
  • логируй причину перехода, а не только новое состояние.

Тестируй слой за слоем

  1. Проверь чистые вычисления на фиксированных входах.
  2. Подключи реальные переменные без выполнения действия.
  3. Имитируй границы, пропуск данных и перезапуск.
  4. Запусти в SITL и повтори сценарий несколько раз.
  5. На аппаратном стенде оставь выходы безопасными.
  6. В полёте начни с наблюдения и ручного takeover.

Подготовь откат

Версионируй скрипт вместе с совместимой версией INAV и конфигурацией. Сохрани рабочий backup без сценария и отдельный переключатель отключения функции. После обновления прошивки запускай полный набор тестов: API и доступные действия могут меняться.

Профессиональный сценарий объясним по логу: видно входы, состояние, решение и результат. Если причину срабатывания можно восстановить только чтением кода после аварии, наблюдаемости недостаточно.

Рецензируй как лётную конфигурацию

Перед выпуском другой человек должен по описанию перечислить все состояния, переходы и ручной выход, а затем воспроизвести тесты без подсказок автора. Проверяй несовместимые одновременные условия и порядок загрузки. Если небольшая правка JavaScript требует нового допущения о безопасности, обнови документацию и повтори всю лестницу, начиная с SITL.

История изменений должна связывать версию сценария с конкретным набором проверок и логов.

Была ли статья полезна?

#INAV JavaScript#Programming Framework#Logic Conditions#автоматика#state machine#rollback

Примените знания на практике

Подберите совместимые комплектующие или изучите готовые сборки пилотов.