3.7 KiB
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с диагностическим сообщением