Кинематика kinematics
Компонент(ы) предоставляет средства решения задач кинематики (прямой, обратной, мгновенной) и ряд вспомогательных преобразований.
Предоставляются разные интерфейсы: порты, операции.
Входные порты
Прямая кинематика
in_joints_sorted(JointState) --- состояние робота в угловой СК (отсортированная).
Обратная кинематика
in_limbs(CartesianState) --- состояние робота в декартовой СК (желаемая или реальная по датчикам).in_joints_seed(JointState) --- текущее состояние робота в угловой СК (отсортированное), первое приближение для решения задачи обратной кинематики.
Выходные порты
Прямая кинематика
out_limbs(CartesianState) --- состояние робота в декартовой СК (желаемая или реальная по датчикам).
Обратная кинематика
out_joints(JointState/JointLimbState) --- состояние робота в угловой СК (желаемая или реальная по датчикам).
Параметры
urdf--- описание робота (реализуются плагином).-
kinematics_chains--- структура с декларациями ресурсов-кинематических цепочек (реализуются плагином).|- chain1_name | |- first_link (string) | |- last_link (string) | \- parameter1 (дополнительные параметры, зависят от алгоритма) \- chain2_name -
Глобальные параметры решателя.
Операции
Приводятся упрощенные прототипы. Требуется расставить спецификаторы const и &, возвращаемые типы.
Все операции ClientThread, если они не имеют обратного эффекта на решатель (реентерабельны).
Такой выбор обусловлен меньшими накладными расходами при их вызове.
Прямая кинематика: предоставляет сервис dk
solveDK(string name, JntArray, Pose)solveVelDK(string name, JntArray pos, JntArray vel_in, Twist vel_out)solveForceDK(string name, JntArray pos, JntArray efforts, Wrench force)solveFullDK(JointLimbState, CartesianState)
Обратная кинематика: предоставляет сервис ik
solveIK(string name, Pose, JntArray)solveIKLimits(string name, Pose in, JntArray out, JntArray min, JntArray max)solveVelIK(string name, JntArray pos, Twist vel_in, JntArray vel_out)solveForceIK(string name, JntArray pos,, Wrench force_in, JntArray effort_out)solveFullIK(CartesianState, JointState)
Сервисы и плагины
- Требует загрузки:
RobotModelURDF--- средства загрузи кинодинамической модели.
Семантика исполнения
Операции прямиком транслируются в обращения к библиотеке кинематики.
Замечание: средства выделения в нужных кинематических цепочек из полного описания позы робота предоставляются плагином.
Детали реализации.
Из-за обилия операций следуют максимально повторно использовать код. Возможно, не так ценно реализовать полный интерфейс, как постараться избежать лишних накладных расходов (выделение памяти, копирование).
В плагин RobotModelURDF выносится функциональность по загрузке URDF, выделению цепочек, разрешению имен.
Он используются реализациями кинематики на базе различных библиотек.
Потенциальные библиотеки: KDL, RBDL, trac_ik.
Исключения и ошибки
TODO Уточнить, отсортировать.
- Некорректное имя цепочки
- Решение не найдено
- Нарушение ограничений (лимитов)