56 lines
4.0 KiB
Markdown
56 lines
4.0 KiB
Markdown
# Motion Sequences
|
|
|
|
## Purpose
|
|
|
|
Описывает запуск последовательности суставных и декартовых целей, контроль её состояния и прекращение исполнения через веб-интерфейс.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Конфигурация последовательности
|
|
Runner SHALL читать JSON-файл с точками движения и параметрами выполнения и различать суставные и декартовы точки.
|
|
|
|
#### Scenario: Суставная точка
|
|
- **WHEN** точка конфигурации содержит суставные координаты
|
|
- **THEN** runner отправляет цель `MoveToJoints` и ожидает её результата перед следующей точкой
|
|
|
|
#### Scenario: Декартова точка
|
|
- **WHEN** точка конфигурации задаёт декартову позу
|
|
- **THEN** runner отправляет цель `MoveToPose` с заданным планировщиком и ожидает результата
|
|
|
|
### Requirement: Контроль последовательности через HTTP
|
|
`POST /sequences/start` SHALL запускать отдельный процесс последовательности, а `GET /sequences/status` и `GET /sequences/logs` SHALL показывать её состояние и ограниченный журнал.
|
|
|
|
#### Scenario: Запущенный процесс
|
|
- **WHEN** runner исполняется
|
|
- **THEN** `/sequences/status` возвращает `running` и идентификатор процесса
|
|
|
|
### Requirement: Повторы и запись
|
|
Runner SHALL выполнять заданное число итераций последовательности `home → waypoints → home`, выдерживать паузу между итерациями и при заданном `bag_path` записывать выбранные ROS-топики в MCAP.
|
|
|
|
#### Scenario: Две итерации без записи
|
|
- **WHEN** клиент задаёт `n_iterations=2` и пустой `bag_path`
|
|
- **THEN** последовательность из начальной, промежуточных и конечной целей выполняется дважды без записи rosbag
|
|
|
|
#### Scenario: Второй запуск при активном runner
|
|
- **WHEN** `POST /sequences/start` вызывается при работающем процессе
|
|
- **THEN** сервер отвечает 409 и не создаёт второй процесс
|
|
|
|
#### Scenario: Путь записи уже существует
|
|
- **WHEN** заданный `bag_path` указывает на существующий каталог
|
|
- **THEN** runner удаляет каталог перед созданием новой записи MCAP
|
|
|
|
### Requirement: Ошибка точки прерывает выполнение
|
|
Runner MUST прекращать последовательность при неуспехе цели и инициировать остановку движения, вместо перехода к следующей точке.
|
|
|
|
#### Scenario: Отказ action
|
|
- **WHEN** одна из целей возвращает отрицательный результат
|
|
- **THEN** остальные точки не отправляются, а runner завершает выполнение с ошибкой
|
|
|
|
### Requirement: Остановка активного процесса
|
|
Общая веб-команда остановки SHALL завершать активный процесс runner и предотвращать дальнейшую отправку точек.
|
|
|
|
#### Scenario: Остановка во время последовательности
|
|
- **WHEN** вызывается `POST /stop` во время работы runner
|
|
- **THEN** процесс останавливается до выполнения оставшихся точек
|
|
|