KinematicsSolver

Решите задачи кинематики для модели мультитела

Описание

KinematicsSolver объекты позволяют пользователям формулировать и численно решать задачи кинематики для своих моделей Simscape™ Multibody™. Можно использовать объект решить стандарт вперед и задачи инверсной кинематики, а также более общие проблемы с кинематическими системами с обратной связью и несколькими целями.

Проблема кинематики формулируется с помощью кинематических переменных. Эти переменные имеют скалярные значения, которые задают отношения между системами координат в соответствующей модели Simscape Multibody. Существует два типа кинематических переменных: соединение и система координат. Объединенные переменные соответствуют объединенным состояниям положения и скорости и автоматически созданы, когда объект создается. Можно просмотреть объединенные переменные с помощью jointPositionVariables и jointVelocityVariables функции объекта. Структурируйте переменные, соответствуют отношениям положения и скорости между произвольными системами координат в модели и должен быть задан с помощью addFrameVariables объектная функция. После того, как заданный, они могут быть просмотрены с помощью frameVariables объектная функция.

Чтобы сформулировать проблему кинематики, необходимо присвоить роли для соответствующих кинематических переменных. Существует три роли: цели, исходные предположения и выходные параметры. Переменные присвоены этим ролям с помощью addTargetVariables , addInitialGuessVariables, и addOutputVariables объектная функция. Чтобы решить задачу с присвоенными переменными, используйте 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 и добавление переменной системы координат к копии, например, добавляют, что переменная системы координат к объекту и так также к любым другим указателям может иметь.

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

Свойства

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

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

Пример: 'sm_four_bar'

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

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

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

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

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

Пример: 'rad/s''

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

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

Пример: \in

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

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

Пример: 'дюйм/с'

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

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

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

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

Примеры

свернуть все

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

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

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

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

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

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

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

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

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

    jointPositionVariables(ks)
    targetIDs = ["j2.Rz.q";"j6.Rz.q";"j7.Rz.q";"j8.Rz.q"];
    addTargetVariables(ks,targetIDs);

    На объединенные переменные ссылается положение в столбце ID объединенной таблицы переменных. Используйте jointPositionVariables(ks) определить который объединенные переменные задать. Записи j2. Rz.q, j6. Rz.q, j7. Rz.q и j8. Rz.q соответствуют соответственно колену, лобное плечо, стреловидное плечо, и соединения запястья.

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

    frameVariables(ks)
    outputIDs = ["Hand.Translation.x";"Hand.Translation.y";...
    "Hand.Translation.z";"Hand.Rotation.x";"Hand.Rotation.y";"Hand.Rotation.z"];
    addOutputVariables(ks,outputIDs);

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

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

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

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

  6. Просмотрите решение.

    viewSolution(ks);

  7. Закройте средство просмотра.

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

    ks.clearTargetVariables;
    ks.clearOutputVariables;

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

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

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

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

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

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

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

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

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

    frameVariables(ks)
    targetIDs = ["Hand.Translation.x";"Hand.Translation.y";"Hand.Translation.z"];
    addTargetVariables(ks,targetIDs);

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

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

    jointPositionVariables(ks)
    outputIDs = ["j2.Rz.q";"j6.Rz.q";"j7.Rz.q";"j8.Rz.q"];
    addOutputVariables(ks,["j2.Rz.q";"j6.Rz.q";"j7.Rz.q";"j8.Rz.q"]);

    На объединенные переменные ссылается положение в столбце ID объединенной таблицы переменных. Используйте jointPositionVariables(ks) определить который объединенные переменные задать. Записи j2. Rz.q, j6. Rz.q, j7. Rz.q и j8. Rz.q соответствуют соответственно колену, лобное плечо, стреловидное плечо, и соединения запястья.

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

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

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

    outputVec =
    
       52.8406
     -108.3936
        7.0457
       15.0565

  6. Визуализируйте решение в Средстве просмотра Решателя Кинематики и определите, разумно ли это.

    viewSolution(ks);

    Нажмите кнопку Front View на панели инструментов, чтобы просмотреть результат.

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

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

    addInitialGuessVariables(ks,"j2.Rz.q");
    guesses = -50;
    outputVec = solve(ks,targets,guesses)

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

    outputVec =
    
      -52.8406
     -108.3936
       55.5089
       43.6655
  8. Нажмите кнопку Update Visualization, чтобы обновить Средство просмотра Решателя Кинематики, чтобы визуализировать результаты.

  9. Закройте средство просмотра.

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

    ks.clearTargetVariables;
    ks.clearOutputVariables;

Введенный в R2019a