Files
lightweight-cobot/openspec/specs/motion-arbitration/spec.md
T

3.6 KiB

Motion Arbitration

Purpose

Определяет согласование конкурирующих источников движения, интерактивное управление TCP в Webots и семантику общей команды остановки.

Requirements

Requirement: Приоритет обычного движения

При включённой TCP-гизме цели обычного траекторного action SHALL иметь приоритет над низкоприоритетной командой гизмы.

Scenario: Цель MoveIt при активности гизмы

  • WHEN поступает обычная цель FollowJointTrajectory
  • THEN выдача новых низкоприоритетных целей блокируется до терминального результата контроллера

Requirement: Аренда приоритета

Сервис /cobot/tcp_gizmo/priority SHALL выдавать именованную аренду на конечный TTL по настенным часам и поддерживать продление и освобождение.

Scenario: Некорректный TTL

  • WHEN владелец пуст или TTL не находится в допустимом интервале (0, 60] секунд
  • THEN запрос аренды отклоняется

Scenario: Потеря аренды

  • WHEN продление аренды из сервера движения не подтверждено
  • THEN текущая операция движения прерывается с ошибкой приоритета

Requirement: Одна команда на жест

Гизма SHALL преобразовывать отпускание маркера в одну цель TCP с текущей эпохой состояния и SHALL отвергать устаревшую эпоху или недоступную обратную связь.

Scenario: Устаревшая эпоха

  • WHEN команда содержит эпоху, отличную от опубликованной в GizmoState
  • THEN цель не отправляется контроллеру и публикуется причина отклонения

Requirement: Безопасный переход приоритета

Новая высокоприоритетная команда SHALL ждать терминального результата уже переданной низкоприоритетной траектории до отправки контроллеру.

Scenario: Низкая цель ещё исполняется

  • WHEN поступает высокая цель во время исполнения цели гизмы
  • THEN высокая цель ожидает подтверждённого завершения низкой цели

Requirement: Общая остановка

/cobot/stop SHALL отменять текущую операцию планировщика и инвалидировать ожидающие операции; POST /stop дополнительно SHALL останавливать runner и прямую траекторию.

Scenario: HTTP остановка

  • WHEN клиент вызывает POST /stop
  • THEN веб-сервер останавливает последовательность, отправляет удержание/сброс прямой траектории и вызывает ROS-сервис остановки