51 lines
3.7 KiB
Markdown
51 lines
3.7 KiB
Markdown
# Motion Planning
|
|
|
|
## Purpose
|
|
|
|
Определяет публичные ROS-контракты планирования и исполнения суставных, декартовых и именованных движений через MoveIt 2.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Суставная цель
|
|
Action `cobot/move_to_joints` SHALL принимать ровно семь углов в радианах и коэффициент скорости, а результат SHALL содержать `success` и `message`.
|
|
|
|
#### Scenario: Допустимая цель
|
|
- **WHEN** клиент отправляет семь суставных координат и скорость
|
|
- **THEN** сервер планирует движение группы `iiwa_arm` от текущего состояния и сообщает стадии `planning` и `executing`
|
|
|
|
### Requirement: Декартова цель
|
|
Action `cobot/move_to_pose` SHALL принимать XYZ в метрах, KUKA ABC в радианах, скорость, планировщик и `frame_id`; ориентация SHALL интерпретироваться как ZYX: A=yaw, B=pitch, C=roll.
|
|
|
|
#### Scenario: Цель без frame_id
|
|
- **WHEN** action-цель содержит пустой `frame_id`
|
|
- **THEN** сервер использует `planning.default_frame` и планирует движение TCP из `planning.pose_link`
|
|
|
|
### Requirement: Выбор планировщика
|
|
Декартово движение SHALL поддерживать ключи `ompl`, `ptp`, `lin`, `circ`, `chomp` и отвергать неизвестный ключ с отрицательным результатом.
|
|
|
|
#### Scenario: Неизвестный планировщик
|
|
- **WHEN** получен ключ, отсутствующий в списке поддерживаемых
|
|
- **THEN** результат action содержит `success=false` и объяснение ошибки
|
|
|
|
### Requirement: Именованная цель
|
|
Сервис `cobot/move_to_named` SHALL принимать имя `group_state` из SRDF, масштаб скорости и ускорения; нулевой `accel_scale` SHALL означать масштаб, равный скорости.
|
|
|
|
#### Scenario: Неизвестное имя
|
|
- **WHEN** имя отсутствует в SRDF
|
|
- **THEN** ответ сервиса содержит `success=false` и сообщение об неизвестном состоянии
|
|
|
|
### Requirement: Сериализация операций
|
|
Сервер движения SHALL выполнять не более одной операции планирования и исполнения через общий планирующий компонент одновременно.
|
|
|
|
#### Scenario: Два запроса одновременно
|
|
- **WHEN** одновременно поступают две команды движения
|
|
- **THEN** операции сериализуются, а состояние одной операции не подменяет состояние другой
|
|
|
|
### Requirement: Результат исполнения
|
|
Сервер MUST различать успех, отказ планирования, ошибку исполнения и отмену; успешное построение плана само по себе не SHALL считаться успешным движением.
|
|
|
|
#### Scenario: План не исполнен
|
|
- **WHEN** контроллер возвращает ошибку исполнения траектории
|
|
- **THEN** результат команды содержит `success=false` с диагностическим сообщением
|
|
|