KinematicsSolver

Решение прямых и обратных проблем кинематики для модели мультитела

Описание

KinematicsSolver объект содержит кинематическое представление модели мультитела, вокруг которой можно сформулировать, и для которого можно решить, кинематическая проблема. Анализ может быть стандартной инверсией или передать кинематику, или это может быть другой тип. Отдых различия только на переменных, известных и разыскиваемых, и этих многих расположений, возможен.

Новый объект содержит только некоторые кинематические переменные, вероятно, чтобы показать в кинематическом анализе. Они это наследовалось модели. Это также не имеет никакой индикации, которой переменные, чтобы вычислить, и чтобы можно принять для ее аргументов. Задачей подготовки анализа является одна из добавляющих переменных к объекту и присвоению их к подходящим ролям. Переменные выводят или из соединений или из пар системы координат:

  • Объединенные переменные

    Смещения объединенных примитивов. Они - переводы для призматических примитивов и вращения для вращательных и сферических примитивов. Сферические вращения связываются со вспомогательными переменными, чтобы выразить также векторные компоненты 3-D оси вращения.

    KinematicsSolver объект содержит все объединенные переменные, совместимые с базовой моделью от ее запуска. Те переменные являются снимком состояния модели, как это - когда объект создается. Вы не можете ни добавить, ни пропустить их.

  • Структурируйте переменные

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

    KinematicsSolver объект запускается без переменных системы координат. Те, которые это получает результат вызовов addFrameVariables. Можно пропустить их, если они становятся устаревшими. Используйте removeFrameVariables удалить некоторых за один раз и clearFrameVariables удалить их всех в одном вызове.

Рассмотрите роботизированную руку с шарнирными соединениями для ее плеча, колена и запястья. Вращательные углы каждый иск объединенная переменная. Положение руки относительно плеча, двух тел, которые обычно не соединяются через соединения, требует группы переменных системы координат — один каждый для x, y и перемещений положения z между телами, или, более точно, между системами координат, локальными для них.

Источник переменной не определяет свою роль в анализе. Объединенная переменная может быть входным параметром или выходным аргументом. Так может переменная системы координат. KinematicsSolver объект распознает два входных типа: цели, чтобы стремиться и предположения, чтобы запустить анализ с, последний, чтобы сместить решение, когда альтернативы существуют.

Цели и выходные параметры показывают в типичном анализе. Предположения менее распространены, но ценны в проблемах с несколькими решениями, как средние значения, чтобы сместить решатель к одной подходящей мысли. В роботизированной руке предположение для колена помогает сохранить свой угол поворота в естественной области значений 0–145 степени во время анализа. KinematicsSolver объект предоставляет методы для каждой роли:

  • Целевые переменные

    Используйте addTargetVariables возразите функции, чтобы присвоить соединение и переменные системы координат как цели. Используйте removeTargetVariables понизиться один или некоторые от KinematicsSolver объект и clearTargetVariables пропустить их всех в одном вызове.

    Цели работают с протестом: конфликты с ограничениями в модели, некоторые изложенные все еще другими целями, могут сохранить их всех с того, чтобы быть точно удовлетворенным. Цели ведут, но не обеспечивают соединения и тела в место для анализа. Неизвестные решены для любой настройки мультитела, которую целям удается произвести.

  • Выходные переменные

    Используйте addOutputVariables возразите функции, чтобы присвоить соединение и переменные системы координат как выходные параметры. Используйте removeOutputVariables понизиться один или некоторые от KinematicsSolver объект и clearOutputVariables пропустить их всех в одном вызове.

  • Угадайте переменные

    Используйте addInitialGuessVariables возразите функции, чтобы присвоить соединение и переменные системы координат как предположения. Используйте removeInitialGuessVariables понизиться один или некоторые от KinematicsSolver объект и clearInitialGuessVariables пропустить их всех в одном вызове.

Смотрите фигуру для сводных данных переменных и их ролей в KinematicsSolver объект. Объект может иметь объединенные переменные (J) и структурировать переменные (F). Они могут служить целями (T), чтобы вести блок во время анализа, как предположения (G), чтобы сместить решение к подходящей настройке, и как выходные параметры (O), неизвестные, чтобы решить для и отчет относительно. Переменные, присвоенные как цели, не могут удвоиться как предположения, но каждый из них может удвоиться, как выведено.

KinematicsSolver объект готов к анализу, если необходимые кинематические переменные существуют, и их роли установлены. Для инверсной кинематики роботизированной руки, например, это достаточно, чтобы создать три переменные системы координат — один каждый для компонента перевода между системами координат руки и плеча. Объединенные системы координат являются нативными к объекту и доступными от запуска. Присвоение переменных системы координат как цели и объединенные переменные как выходные параметры подготавливает объект для анализа.

Чтобы запустить анализ, объект обеспечивает решатель. Вызовите его с помощью solve объектная функция. Функция принимает численные значения целей и предположений, как введено, чтобы вычислить выходные параметры. Часто, если заданные цели в пределах досягаемости, им можно удовлетворить. Такой результат не всегда возможен. Цель может быть вне досягаемости решателя, например.

Чтобы предупредить о таких проблемах, решатель возвращает не только фактические значения, достигнутые для переменных, присвоенных как цели, но также и серия флагов. Каждый дает полное состояние блока. Если какая-либо цель будет пропущена, или ограничение нарушено, или если решение оставит блок в сингулярной настройке и так с ограниченной подвижностью, это отразится там. Остаток появляется в векторе, указывающем, каким целям удовлетворили и которые не были.

Создание

Синтаксис

ks = simscape.multibody.KinematicsSolver(modelName)
ks = simscape.multibody.KinematicsSolver(modelName,Name,Value)

Описание

ks = simscape.multibody.KinematicsSolver(modelName) создает KinematicsSolver объект для модели называют в mdl. Объект содержит представление модели, подходящей для кинематического анализа. Представление является снимком состояния модели, как это - когда объект создается. Последующие изменения к модели не переносят на объект. Создайте новый объект, при необходимости чтобы получить те изменения.

Модель должна содержать сеть Simscape Multibody. Это должно также загрузиться к памяти — например, при помощи load_system команда. Если блоки параметризованы в терминах переменных MATLAB, те переменные должны быть численно заданы в рабочем пространстве модели или в рабочем пространстве MATLAB. Объединенные цели положения и входные параметры приведения в действие проигнорированы, как объединенный режим — расцепленные соединения всегда обрабатываются как нормальные. Набор параметров блоков к Run-Time оценены при создании объекта и не может быть изменен позже.

KinematicsSolver объект является объектом указателя. Переменная, созданная из него, содержит не копию объекта, а ссылки на него. Переменная действует как указатель или указатель. Изменение указателя изменяет также объект и все его остающиеся указатели. Копирование объекта KinematicsSolver и добавление переменной системы координат к копии, например, добавляют, что переменная системы координат к объекту и так также к любым другим указателям может иметь.

Можно сохранить объект в — и загрузить его от — файл MAT. Сделайте так, чтобы совместно использовать объект с коллегой или использовать объект через сеансы работы с MATLAB.

ks = simscape.multibody.KinematicsSolver(modelName,Name,Value) создает KinematicsSolver объект с новыми значениями по умолчанию для модулей угла или длины. Используйте Аргументы пары "имя-значение" DefaultAngleUnit и DefaultLengthUnit задавать новые значения по умолчанию.

Свойства

развернуть все

Это свойство доступно только для чтения.

Имя модели, из которой объект выводит.

Пример: 'sm_four_bar'

Типы данных: char | string

Это свойство доступно только для чтения.

Модуль угла для новых кинематических переменных. Значением по умолчанию является deg. Изменение в модулях по умолчанию влияет только на переменные, добавленные после изменения. Более старые переменные остаются в своих исходных модулях.

Пример: 'рад'

Типы данных: char | string

Это свойство доступно только для чтения.

Единица длины для новых кинематических переменных. Значением по умолчанию является m. Изменение в модулях по умолчанию влияет только на переменные, добавленные после изменения. Более старые переменные остаются в своих исходных модулях.

Пример: \in

Типы данных: char | string

Функции объекта

развернуть все

frameVariablesПеречислите все кинематические переменные, сопоставленные с парами системы координат
initialGuessVariablesПеречислите все кинематические переменные, присвоенные как исходные предположения
jointVariablesПеречислите все кинематические переменные, сопоставленные с соединениями
outputVariablesПеречислите все кинематические переменные, присвоенные как выходные параметры
targetVariablesПеречислите кинематические переменные, присвоенные как цели
addFrameVariablesСоздайте кинематические переменные из избранной пары системы координат в объекте KinematicsSolver
addInitialGuessVariablesПрисвойте кинематические переменные из объекта KinematicsSolver как предположения
addOutputVariablesПрисвойте кинематические переменные из объекта KinematicsSolver как выходные параметры
addTargetVariablesПрисвойте кинематические переменные из объекта KinematicsSolver как цели
clearFrameVariablesПропустите все переменные системы координат из объекта KinematicsSolver
clearInitialGuessVariablesПропустите все переменные предположения из объекта KinematicsSolver
clearOutputVariablesИсключите все выходные переменные из объекта KinematicsSolver
clearTargetVariablesПропустите все целевые переменные из объекта KinematicsSolver
removeFrameVariablesПропустите избранные переменные системы координат из объекта KinematicsSolver
removeInitialGuessVariablesПропустите избранные переменные предположения из объекта KinematicsSolver
removeOutputVariablesИсключите избранные выходные переменные из объекта KinematicsSolver
removeTargetVariablesПропустите избранные целевые переменные из объекта KinematicsSolver
generateCodeСгенерируйте код С, чтобы запустить кинематический анализ объекта KinematicsSolver
setVariableUnitИзмените физическую единицу измерения кинематической переменной
solveЗапустите кинематический анализ для объекта KinematicsSolver

Примеры

свернуть все

Запустите прямую кинематику на модели гуманоидного манипулятора. Модель называют sm_import_humanoid_urdf, и это - часть установки Simscape Multibody. Для анализа задайте вращения запястья, колена и соединений плеча. Решите для перевода и вращения руки в мировой системе координат.

  1. Загрузите гуманоидную модель робота в память и создайте KinematicsSolver объект для его текущего состояния.

    sys = 'sm_import_humanoid_urdf';
    load_system(sys);
    ks = simscape.multibody.KinematicsSolver(sys);

    Объект содержит кинематическое представление модели и списка всех объединенных переменных, которые это содержит. Введите ks.JointVariables или jointVariables(ks) в командной строке MATLAB, чтобы перечислить те переменные при необходимости. Откройте модель для использования в качестве ссылки путем ввода ее имени в командной строке MATLAB.

  2. Добавьте к ks группа переменных системы координат для руки относительно мира. Задайте систему координат F left_hand подсистема как последователь и мировая система координат как основа. Назовите группу переменной системы координат Hand.

    base = 'sm_import_humanoid_urdf/World/W';
    follower = 'sm_import_humanoid_urdf/left_hand/F';
    ks.addFrameVariables('Hand','translation',base,follower);
    ks.addFrameVariables('Hand','rotation',base,follower);

    Объект получает свои первые шесть переменных системы координат — три для x, y, и z компонентов перевода и три для x, y, и z компонентов вращения, каждого от мировой системы координат до системы координат F руки. Введите ks.frameVariables в командной строке MATLAB, чтобы перечислить те переменные при необходимости.

    Пути в base и follower все пути к блоку от корня модели к порту блока, сопоставленного с желаемым портом. Тем портом является W в блоке World Frame для базовой системы координат и F left_hand блок подсистемы для последователя.

  3. Присвоение как цели объединенные переменные для левого запястья, колена и плеча.

    ks.addTargetVariables(ks.jointVariables.ID([2,6:8]));

    На объединенные переменные ссылается положение в столбце ID объединенной таблицы переменных. Используйте jointVariables определить который объединенные переменные задать. Записи 2, 6, 7, и 8 соответствуют соответственно колену, лобное плечо, стреловидное плечо, и соединения запястья.

  4. Присвоение как выходные параметры все переменные системы координат в Hand группа.

    ks.addOutputVariables(ks.frameVariables.ID);

    Не всем переменным системы координат нужна функция в анализе. Используйте frameVariables функционируйте, чтобы перечислить все переменные системы координат и определить, чтобы задать при необходимости.

  5. Решите прямую задачу кинематики, учитывая колено, лобное плечо, стреловидное плечо, и углы поворота шарнира запястья 30, 45, 45, и 15 степени.

    targets = [30,45,45,15];
    outputVec = ks.solve(targets)
    outputVec =
    
        0.2196
        0.0584
       -0.0983
      135.0000
        0.0027
             0

    solve функция возвращает значения выходных переменных. Значения сортируются в порядке переменных — компоненты перевода сначала, вторые компоненты вращения. Модули являются значениями по умолчанию m, для компонентов перевода и deg, для компонентов вращения.

  6. Очистите все целевые и выходные переменные, чтобы подготовить ks объект для другого анализа.

    ks.clearTargetVariables;
    ks.clearOutputVariables;

    Используйте тесно связанный removeTargetVariables и removeOutputVariables функции, чтобы исключить всего несколько целевых и выходных переменных из объекта, при необходимости. Используйте removeFrameVariables и clearFrameVariables если некоторые или все переменные системы координат более не необходимы для анализа.

  1. Загрузите гуманоидную модель робота в память и создайте KinematicsSolver объект для его текущего состояния.

    sys = 'sm_import_humanoid_urdf';
    load_system(sys);
    ks = simscape.multibody.KinematicsSolver(sys);

    Объект содержит кинематическое представление модели и списка всех объединенных переменных, которые это содержит. Введите ks.JointVariables или jointVariables(ks) в командной строке MATLAB, чтобы перечислить те переменные при необходимости. Откройте модель для использования в качестве ссылки путем ввода ее имени в командной строке MATLAB.

  2. Добавьте к ks группа переменных системы координат для руки относительно мира. Задайте систему координат F left_hand подсистема как последователь и мировая система координат как основа. Назовите группу переменной системы координат Hand.

    base = 'sm_import_humanoid_urdf/World/W';
    follower = 'sm_import_humanoid_urdf/left_hand/F';
    ks.addFrameVariables('Hand','translation',base,follower);
    

    Объект получает свои первые три переменные системы координат, один каждый для x, y, и z компонентов перевода от мировой системы координат до системы координат F руки. Введите ks.frameVariables в командной строке MATLAB, чтобы перечислить те переменные при необходимости.

    Пути в base и follower все пути к блоку от корня модели к порту блока, сопоставленного с желаемым портом. Тем портом является W в блоке World Frame для базовой системы координат и F left_hand блок подсистемы для последователя.

  3. Присвоение как цели переменные системы координат в Hand группа.

    ks.addTargetVariables(ks.frameVariables.ID);

    Не всем переменным системы координат нужна функция в анализе. Используйте frameVariables функционируйте, чтобы перечислить все переменные системы координат и определить, чтобы задать при необходимости.

  4. Присвоение, как выводит объединенные переменные для левого запястья, колена и плеча.

    ks.addOutputVariables(ks.jointVariables.ID([2,6:8]));

    На объединенные переменные ссылается положение в столбце ID объединенной таблицы переменных. Используйте jointVariables определить который объединенные переменные задать. Записи 2, 6, 7, и 8 соответствуют соответственно колену, лобное плечо, стреловидное плечо, и соединения запястья.

  5. Решите задачу инверсной кинематики, учитывая ручные компоненты перевода системы координат [16,-12,0] cm или, в единицах по умолчанию длины, [0.16,-0.12,0] m.

    targets = [0.16,-0.12,0];
    outputVec = ks.solve(targets)

    solve функция возвращает значения выходных переменных — углы поворота колена, лобное плечо, стреловидное плечо, и соединения запястья, каждый в модулях по умолчанию deg.

    outputVec =
    
       52.8406
     -108.3936
        7.0457
       15.0565

  6. Задайте выходные значения как положения шарниров в sm_import_humanoid_urdf модель и обновление блок-схема, чтобы визуализировать решение в Mechanics Explorer и определить, разумно ли это.

    for i = 1:length(outputVec)
    	path = ks.outputVariables.JointVariableInfo.BlockPath(i);
    	angle = num2str(outputVec(i));
    	set_param(path, 'PositionTargetSpecify', 'on',...
    	'PositionTargetValue', angle);
    end

    Выберите Simulink> Update Diagram в панели меню Simulink, чтобы обновить схему.

    Рука находится в нужной области кадра, но колено имеет неестественный поворот за пределами своей нормальной области значений движения. Решение является просто одним из нескольких, и лучший возможен путем определения вращения колена как переменной предположения.

  7. Установите переменную соединения колена — единственное, которому нужно руководство — как переменная предположения, и запустите анализ еще раз для предположения вращения колена -50 deg.

    ks.addInitialGuessVariables(ks.jointVariables.ID(2));
    guesses = -50;
    outputVec = ks.solve(targets,guesses);

    solve функция возвращает новое решение для углов поворота шарнира.

    outputVec =
    
      -52.8406
     -108.3936
       55.5089
       43.6655
  8. Задайте новые выходные параметры как положения шарниров в sm_import_humanoid_urdf модель и обновление блок-схема, чтобы визуализировать результаты.

    for i = 1:length(outputVec)
    	path = ks.outputVariables.JointVariableInfo.BlockPath(i);
    	angle = num2str(outputVec(i));
    	set_param(path, 'PositionTargetSpecify', 'on',...
    	'PositionTargetValue', angle);
    end

Введенный в R2019a