# Direct Trajectories ## Purpose Описывает приём готовых суставных траекторий из JSON и CSV, их проверку перед публикацией и поведение остановки. ## Requirements ### Requirement: Форматы ввода HTTP API SHALL принимать JSON-точки через `POST /trajectory/send` и CSV-файл через `POST /trajectory/send_csv` с семью суставными колонками и временем от начала. #### Scenario: CSV с вариантами имён - **WHEN** CSV использует заголовки `joint_1`–`joint_7` и `time_from_start` - **THEN** колонки сопоставляются с `joint1`–`joint7` и временем `t` независимо от порядка ### Requirement: Конечные и допустимые точки Каждая точка MUST содержать семь конечных углов и допустимое время; траектория MUST укладываться в позиционные, скоростные, ускорительные и рывковые ограничения из конфигурации. #### Scenario: Недопустимый сустав - **WHEN** точка выходит за допустимый диапазон сустава - **THEN** HTTP API возвращает 422 и не публикует траекторию ### Requirement: Свежий неподвижный старт Прямая траектория MUST начинаться со свежего полного `/joint_states` и неподвижного робота; при ненулевом времени первой точки система SHALL добавить стартовую точку текущего положения. #### Scenario: Устаревшая обратная связь - **WHEN** возраст или временная метка `/joint_states` превышают настроенный предел - **THEN** запрос отклоняется с 409 без публикации #### Scenario: Нулевая первая точка не совпадает - **WHEN** первая точка имеет `t=0`, но отличается от измеренного положения больше допуска - **THEN** запрос отклоняется с 422 ### Requirement: Пересчёт времени Система SHALL при необходимости растягивать время траектории для соблюдения динамических ограничений и возвращать фактическую длительность и коэффициент масштабирования. #### Scenario: Быстрый сегмент - **WHEN** исходный интервал между точками требует превышения настроенных динамических лимитов - **THEN** опубликованная траектория имеет увеличенные интервалы и ответ сообщает `time_scale` ### Requirement: Граница проверки прямого пути Прямой траекторный API SHALL проверять суставные и динамические ограничения, но не SHALL заявлять проверку столкновений для промежуточного пути. #### Scenario: Траектория в допустимых суставных лимитах - **WHEN** клиент отправляет валидные точки без подтверждённой проверки сцены - **THEN** API может опубликовать траекторию, а ответственность за оценку столкновений остаётся вне этого API ### Requirement: Защита от замены и остановка Система MUST отвергать новую прямую траекторию во время ещё активной и MUST не публиковать подготовленную цель, если в ходе подготовки пришла остановка. #### Scenario: Остановка во время подготовки - **WHEN** `POST /stop` вызывается до публикации подготовленной траектории - **THEN** подготовка инвалидируется, а эта траектория не отправляется контроллеру