Об авторе →
Меню
← Все разборы
ARTICLEGUIDE

Практика

Что должен делать робот при потере связи

Heartbeat, таймаут, срок жизни команды, безопасная реакция и восстановление без самозапуска: архитектура failsafe мобильного робота.

10Z40 / EXPLAIN
ТИППрактика
СТАТУСДоступно
ДОКАЗАТЕЛЬСТВОПроверено независимо
ОБНОВЛЕНО14.09.2026
ПОСЛЕ МАТЕРИАЛА

Проверить карточку конкретной версии

Потеря связи — не момент, когда исчез значок Wi‑Fi. Для системы управления это переход от свежей команды к неопределённости: пакет задержался, пришёл не по порядку, передатчик исчез, приложение зависло или промежуточный контроллер продолжает повторять последнее значение.

Правильный вопрос — не «какой поставить таймаут», а как робот распознаёт устаревшее управление, какое состояние уменьшает риск и что требуется для возвращения движения.

Материал не описывает подтверждённую функцию «Зари 40». Надёжный failsafe платформы пока не доказан; ниже — архитектурная и испытательная рамка.

Пять состояний канала управления

Надёжная доставка не делает команду свежей

TCP, CAN, UART, Wi‑Fi, радио и ROS 2 решают разные части доставки. Подтверждение пакета может доказать, что данные дошли, но не что они ещё актуальны. Буфер и повторная передача иногда доставляют старую команду уже после восстановления канала.

ROS 2 разделяет несколько свойств QoS:

  • deadline — ожидаемый максимальный интервал между сообщениями;
  • lifespan — возраст, после которого сообщение считается устаревшим;
  • liveliness — признак присутствия издателя;
  • reliability — политика доставки, не задающая безопасную реакцию.

Свежесть данных, жизнь отправителя и факт доставки — разные вопросы.

Пять состояний вместо «есть / нет»

1. Нет установленной сессии

После включения приёмник не принимает мусор или сохранённую уставку за разрешение движения. Нужны валидная сессия, совместимая версия протокола и отдельное разрешение.

2. Команды свежие

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

3. Пакет задержался

Одна задержка не обязательно означает обрыв. Возможен предупреждающий или ограниченный режим, если он безопасен. Универсального времени нет: оно зависит от скорости, тормозного пути, частоты команд и расстояния до людей.

4. Команда просрочена

Локальный контроллер перестаёт повторять её и выполняет выбранную реакцию: остановку, удержание, управляемое торможение или другое безопасное действие. Выбор следует из опасностей машины.

5. Канал восстановился

Первый пакет не возвращает движение автоматически. Система проверяет состояние, очищает старую очередь и требует намеренного повторного разрешения. Восстановление и пуск — разные события.

Heartbeat не заменяет возраст команды

Heartbeat отвечает «отправитель присутствует», но приложение может продолжать heartbeat после зависания части, формирующей скорость. Нужно независимо контролировать:

  1. жизнь источника;
  2. возраст конкретной команды;
  3. номер или время сообщения;
  4. допустимость значения;
  5. состояние исполнительного контроллера.

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

Безопасное действие зависит от контекста

ArduPilot Rover допускает разные failsafe-действия: Hold, возврат, продолжение миссии или прекращение работы. Это показывает отсутствие универсального ответа. Возврат безопасен только при достоверной локализации, проходимом маршруте и достаточной энергии. В небольшой испытательной зоне остановка может быть разумнее автономного манёвра.

«Умное» действие требует доказательств всех зависимостей. Если позиция или окружение ненадёжны, продолжение движения увеличивает риск.

Failsafe нужен рядом с приводом

Если таймаут существует только в приложении телефона, зависший промежуточный контроллер может продолжать последнюю команду. Локальный исполнительный уровень должен уметь признать данные устаревшими независимо от интерфейса оператора.

оператор → пульт → канал → главный контроллер → контроллер привода → драйвер.

Для каждого перехода фиксируют частоту обновления, срок жизни команды, реакцию на молчание и условие восстановления.

Почему нельзя скопировать чужой таймаут

Слишком короткий даёт ложные срабатывания при джиттере. Слишком длинный оставляет движение после потери управления. Таймаут обосновывают через:

  • скорость и энергию движения;
  • задержку обнаружения и выполнения реакции;
  • тормозной путь и выбег;
  • частоту сообщений и измеренный джиттер;
  • качество канала;
  • расстояние до границы безопасной зоны.

Значения ArduPilot относятся к его стеку и не переносятся в другую платформу без расчёта.

Жизненный цикл команды

создано → принято → проверено → действует → истекло.

Истёкшая команда не возвращается к жизни из-за переподключения, повтора из буфера или перезапуска подписчика. ROS 2 lifespan иллюстрирует тот же принцип: просроченные сообщения отбрасываются.

Команды движения обычно не следует хранить как состояние для позднего потребителя. Настройки durability и очередей проверяют отдельно: полезное для конфигурации может быть опасно для скорости.

Восстановление без самозапуска

Проверяемая последовательность включает безопасное состояние установки, восстановленный канал, совместимую версию протокола, очищенную очередь, актуальную телеметрию, снятую причину failsafe, отдельное разрешение оператора и новую команду после разрешения.

Это рамка, а не универсальный алгоритм сертифицированной системы.

Матрица испытаний

Сценарий Что проверяется Критерий
передатчик выключен обнаружение и реакция безопасное состояние в обоснованном пределе
приложение зависло, heartbeat есть возраст команды heartbeat не поддерживает движение
пакеты задерживаются джиттер и режим нет неконтролируемого чередования
пакеты перепутаны sequence/time старая команда не заменяет новую
связь восстановлена очередь и разрешение автоматического движения нет
главный контроллер перезапущен локальный привод последняя команда истекает
разорван один сегмент локализация отказа нижний уровень достигает безопасного состояния

Тест начинают без возможности опасного движения; версии прошивки, протокола и конфигурации записывают вместе с результатом.

Статус «Зари 40»

Проектная документация требует определить поведение при потере связи, но проверенный failsafe пока не опубликован. Нельзя обещать автоматическую остановку, возврат или безопасное продолжение.

Фактологический материал появится после стендового теста: версия стека, командный путь, частота и формат сообщений, обоснованный таймаут, реакция, восстановление и журнал сценариев.

Связанные материалы: почему привод дёргается при включении, Stop и E-Stop и как устроены границы испытаний.

Источники

Контракт fail-safe, который можно проверить

Запишите шесть полей: событие-источник, как оно подтверждается, безопасное действие, локальная индикация, кто разрешает восстановление и где остаётся запись. Учебный пример: «нет подтверждённой команды дольше согласованного времени → запрет команды движения → локальный сигнал и запись → новое движение только после явного подтверждения». Время нельзя копировать из чужой прошивки: его обосновывают скоростью, зоной, измеренной задержкой и фактическим торможением. Пример ArduPilot Rover полезен как архитектура, но не как настройка для другой системы.

NEXT / ACTION

Проверить карточку конкретной версии

Вернуться к разборам →