KinematicsSolver

Кинематическое представление модели мультитела, чтобы анализировать

Описание

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

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

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

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

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

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

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

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

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

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

Цели и выходные параметры показывают в типичном анализе. Предположения менее распространены, но ценны в проблемах с несколькими решениями, как средние значения, чтобы сместить решатель к одной подходящей мысли. В роботизированной руке предположение для колена помогает сохранить свой угол поворота в естественной области значений 0145 степенями во время анализа. Объект 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 и добавление переменной кадра к копии, например, добавляют, что переменная кадра к объекту и так также к любым другим указателям может иметь.

Примечание

Не сохраняйте объект 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

Для просмотра документации необходимо авторизоваться на сайте