Files
lightweight-cobot/openspec/specs/motion-planning/spec.md
T

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