Кинематика kinematics

Компонент(ы) предоставляет средства решения задач кинематики (прямой, обратной, мгновенной) и ряд вспомогательных преобразований.

Предоставляются разные интерфейсы: порты, операции.

Входные порты

Прямая кинематика

  1. in_joints_sorted (JointState) --- состояние робота в угловой СК (отсортированная).

Обратная кинематика

  1. in_limbs (CartesianState) --- состояние робота в декартовой СК (желаемая или реальная по датчикам).
  2. in_joints_seed (JointState) --- текущее состояние робота в угловой СК (отсортированное), первое приближение для решения задачи обратной кинематики.

Выходные порты

Прямая кинематика

  1. out_limbs (CartesianState) --- состояние робота в декартовой СК (желаемая или реальная по датчикам).

Обратная кинематика

  1. out_joints (JointState/JointLimbState) --- состояние робота в угловой СК (желаемая или реальная по датчикам).

Параметры

  1. urdf --- описание робота (реализуются плагином).
  2. kinematics_chains --- структура с декларациями ресурсов-кинематических цепочек (реализуются плагином).

    |- chain1_name
    |  |- first_link (string)
    |  |- last_link (string)
    |  \- parameter1 (дополнительные параметры, зависят от алгоритма)
    \- chain2_name
    
  3. Глобальные параметры решателя.

Операции

Приводятся упрощенные прототипы. Требуется расставить спецификаторы const и &, возвращаемые типы. Все операции ClientThread, если они не имеют обратного эффекта на решатель (реентерабельны). Такой выбор обусловлен меньшими накладными расходами при их вызове.

Прямая кинематика: предоставляет сервис dk

  1. solveDK(string name, JntArray, Pose)
  2. solveVelDK(string name, JntArray pos, JntArray vel_in, Twist vel_out)
  3. solveForceDK(string name, JntArray pos, JntArray efforts, Wrench force)
  4. solveFullDK(JointLimbState, CartesianState)

Обратная кинематика: предоставляет сервис ik

  1. solveIK(string name, Pose, JntArray)
  2. solveIKLimits(string name, Pose in, JntArray out, JntArray min, JntArray max)
  3. solveVelIK(string name, JntArray pos, Twist vel_in, JntArray vel_out)
  4. solveForceIK(string name, JntArray pos,, Wrench force_in, JntArray effort_out)
  5. solveFullIK(CartesianState, JointState)

Сервисы и плагины

  1. Требует загрузки: RobotModelURDF --- средства загрузи кинодинамической модели.

Семантика исполнения

Операции прямиком транслируются в обращения к библиотеке кинематики.

Замечание: средства выделения в нужных кинематических цепочек из полного описания позы робота предоставляются плагином.

Детали реализации.

Из-за обилия операций следуют максимально повторно использовать код. Возможно, не так ценно реализовать полный интерфейс, как постараться избежать лишних накладных расходов (выделение памяти, копирование).

В плагин RobotModelURDF выносится функциональность по загрузке URDF, выделению цепочек, разрешению имен. Он используются реализациями кинематики на базе различных библиотек.

Потенциальные библиотеки: KDL, RBDL, trac_ik.

Исключения и ошибки

TODO Уточнить, отсортировать.

  1. Некорректное имя цепочки
  2. Решение не найдено
  3. Нарушение ограничений (лимитов)