Companion computer добавляет зрение, связь или высокоуровневое планирование, но не должен становиться скрытой единой точкой отказа. MAVLink routing доставляет сообщения между компонентами по system ID, component ID и известным адресам. Архитектуру нужно описать до запуска сервисов.

Нарисуй топологию
Укажи каждый узел: автопилот, companion, наземную станцию, камеру, радиомодем и сетевой мост. Для каждого запиши физический интерфейс, скорость, system/component ID, направления сообщений и владельца команд. Два узла с конфликтующими ID затрудняют маршрутизацию и диагностику.

Пойми правила routing
MAVLink router обучается адресам по входящим сообщениям и пересылает целевые или широковещательные сообщения согласно реализации. Не считай, что любой пакет автоматически попадёт во все интерфейсы. Проверяй конкретный router и endpoint. Loop между двумя мостами может умножить трафик.
Heartbeat — присутствие, не здоровье
Heartbeat сообщает, что компонент доступен и каков его тип/состояние. Он не доказывает качество датчика, актуальность алгоритма или способность выполнить команду. Задай таймаут отдельно для связи и отдельные health-показатели для функции companion. Потеря heartbeat не должна лишать пилота базового управления.
Управляй бюджетом канала
- выбери только необходимые сообщения и частоты;
- измеряй фактическую загрузку serial/UDP;
- приоритизируй управление и критичную телеметрию;
- ограничивай тяжёлые потоки логов и изображений отдельно;
- не лечи потери бесконечным повтором команд.
Проверь отказ каждого ребра
- Перезапусти companion, оставив автопилот включённым.
- Отключи GCS и затем восстанови соединение.
- Создай перегрузку низкоприоритетными сообщениями.
- Подай устаревшие и некорректные данные на вход сервиса.
- Проверь ручной takeover и отсутствие повторной опасной команды после reconnect.
Для недоверенной сети используй поддерживаемые механизмы подписи, фильтрацию и сетевое разделение. Храни схему, конфигурацию router и версии сервисов вместе. Отказоустойчивая система сохраняет базовый полёт при исчезновении companion и ясно сообщает, какая дополнительная функция потеряна.
Наблюдай систему как сервис
Собирай метрики частоты heartbeat, возраста ключевых сообщений, загрузки каналов, reconnect и отклонённых команд. Логируй system/component ID и маршрут, но не секретные ключи. Задай тревоги на деградацию до полного разрыва. После изменения topology повтори матрицу отказов: новый мост может создать цикл или незаметно поменять владельца команды.