55 lines
4.5 KiB
Markdown
55 lines
4.5 KiB
Markdown
# 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** подготовка инвалидируется, а эта траектория не отправляется контроллеру
|
||
|