# 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-сервис остановки