KinematicsSolver

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

Описание

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

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

Чтобы сформулировать проблему кинематики, необходимо присвоить роли для соответствующих кинематических переменных. Существует три роли: цели, исходные предположения и выходные параметры. Переменные присвоены этим ролям с помощью addTargetVariables , addInitialGuessVariables, и addOutputVariables объектная функция. Чтобы решить задачу с присвоенными переменными, используйте solve объектная функция. Начиная с начального состояния, решатель пытается найти конечное состояние системы сопоставимым со значениями целевых переменных. Начальное состояние синтезируется с помощью значений переменных исходного предположения. Начальные состояния, которые не заданы переменными исходного предположения, инициализируются, чтобы обнулить. Значения выходных переменных получены на конечное состояние, возвращенное решателем. Если решатель не может найти конечное состояние, которое удовлетворяет всем целям, он пытается, по крайней мере, возвратить состояние, которое кинематическим образом выполнимо.

Создание

Описание

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

Модель должна содержать сеть Simscape Multibody, и необходимо загрузить модель в память прежде, чем создать ее KinematicsSolver объект. Если блоки модели имеют переменные MATLAB, необходимо численно задать те переменные в рабочем пространстве модели или рабочем пространстве MATLAB. KinematicsSolver объект игнорирует любые контакты и несколько параметров блоков соединений, как State Targets, Limits, Actuation и Mode Configuration. Например, во время анализа, два тела могут проникнуть друг друга даже при том, что существует блок Spatial Contact Force, который соединяет их. Набор параметров блоков к Run-Time оценены при создании объекта и не может быть изменен позже.

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

ks = simscape.multibody.KinematicsSolver(___,Name,Value) создает KinematicsSolver объект с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы.

Свойства

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

Максимальное количество итераций решателя в виде положительного целого числа. Можно задать это свойство после создания KinematicsSolver объект.

Пример: 50

Типы данных: double | int

Имя модели Simscape Multibody, из которого объект выводит. Это свойство доступно только для чтения.

Пример: 'sm_four_bar'

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'DefaultAngleUnit','rad'

Угловой модуль по умолчанию новых кинематических переменных в виде разделенной запятой пары, состоящей из 'DefaultAngleUnit' и вектор символов или строковый скаляр. Когда вы изменяете 'DefaultAngleUnit' свойство, изменение применяется только к новым кинематическим переменным. Существующие переменные не заменяются.

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

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

Угловой модуль по умолчанию новых кинематических переменных в виде разделенной запятой пары, состоящей из 'DefaultAngularVelocityUnit' и вектор символов или строковый скаляр. Когда вы изменяете 'DefaultAngularVelocityUnit' свойство, изменение применяется только к новым кинематическим переменным. Существующие переменные не заменяются.

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

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

Угловой модуль по умолчанию новых кинематических переменных в виде разделенной запятой пары, состоящей из 'DefaultLengthUnit' и вектор символов или строковый скаляр. Когда вы изменяете 'DefaultLengthUnit' свойство, изменение применяется только к новым кинематическим переменным. Существующие переменные не заменяются.

Пример: 'DefaultLengthUnit', 'в'

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

Угловой модуль по умолчанию новых кинематических переменных в виде разделенной запятой пары, состоящей из 'DefaultLinearVelocityUnit' и вектор символов или строковый скаляр. Когда вы изменяете 'DefaultLinearVelocityUnit' свойство, изменение применяется только к новым кинематическим переменным. Существующие переменные не заменяются.

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

Типы данных: 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 модель. А именно, это вычисляет положение запястья робота для заданных углов соединений колена и плеча.

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

    mdl = 'sm_import_humanoid_urdf';
    load_system(mdl);
    fk = simscape.multibody.KinematicsSolver(mdl);
  2. Добавьте к объекту, fk, группа переменных системы координат для левого запястья. Задайте систему координат B left_wrist соединитесь как последователь и мировая система координат как основа. Назовите группу переменной системы координат Wrist. Объект теперь имеет шесть переменных системы координат — три для x, y, и z компонентов перевода и три для x, y, и z компонентов вращения.

    base = 'sm_import_humanoid_urdf/World/W';
    follower = 'sm_import_humanoid_urdf/left_wrist/B';
    addFrameVariables(fk,'Wrist','translation',base,follower);
    addFrameVariables(fk,'Wrist','rotation',base,follower);

    Примечание

    Пути в base и follower все пути к блоку от корня модели к выбранному порту желаемого блока. Этот пример выбирает порт W блока World Frame как основа и порт B left_wrist блок соединений как последователь.

  3. Используйте jointPositionVariables(fk) перечислять все объединенные переменные. Присвоение как цели объединенные переменные для колена (j2. Rz.q), лобное плечо (j6. Rz.q), и стреловидное плечо (j7. Rz.q).

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

  4. Используйте frameVariables(fk) перечислять все переменные системы координат и присваивать их в Wrist группа как выходные параметры.

    frameVariables(fk)
    outputIDs = ["Wrist.Translation.x";"Wrist.Translation.y";...
    "Wrist.Translation.z";"Wrist.Rotation.x";"Wrist.Rotation.y";"Wrist.Rotation.z"];
    addOutputVariables(fk,outputIDs);
  5. Решите прямую задачу кинематики, учитывая колено, лобное плечо, и плечо стреловидные углы поворота шарнира 30, 45, и 45 степени.

    targets = [30,45,45];
    [outputVec,statusFlag] = solve(fk,targets)
    outputVec =
    
        0.2196
        0.0584
       -0.0983
      135.0000
        0.0027
      -15.0000
    
    statusFlag =
    
         1

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

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

    viewSolution(fk);

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

    closeViewer(fk);

В этом примере показано, как вычислить инверсную кинематику для sm_import_humanoid_urdf модель. А именно, это вычисляет углы колена и соединений плеча, соответствующих желаемому положению запястья. Поскольку эта проблема имеет несколько решений, исходные предположения для углов поворота шарнира плеча используются, чтобы вести решатель к желательному решению.

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

    mdl = 'sm_import_humanoid_urdf';
    load_system(mdl);
    ik = simscape.multibody.KinematicsSolver(mdl);
  2. Добавьте к объекту, ik, группа переменных системы координат для правого запястья. Задайте систему координат B right_wrist соединитесь как последователь и мировая система координат как основа. Назовите группу переменной системы координат Wrist. Объект теперь имеет три переменные системы координат для x, y, и z компоненты перевода.

    base = 'sm_import_humanoid_urdf/World/W';
    follower = 'sm_import_humanoid_urdf/right_wrist/B';
    addFrameVariables(ik,'Wrist','translation',base,follower);
    

    Примечание

    Пути в base и follower все пути к блоку от корня модели к выбранному порту желаемого блока. Этот пример выбирает порт W блока World Frame как основа и порт B right_wrist блок соединений как последователь.

  3. Используйте frameVariables(ik) перечислять все переменные системы координат и присваивать их в Wrist группа как цели.

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

    Примечание

    Не все переменные системы координат необходимы в анализе. Можно использовать frameVariables(ik) чтобы перечислить все переменные системы координат и затем выбор желал переменных для вашего анализа.

  4. Используйте jointPositionVariables(ik) перечислять все объединенные переменные и присвоение, как выводит объединенные переменные для колена (j10. Rz.q), лобное плечо (j14. Rz.q), и стреловидное плечо (j15. Rz.q).

    jointPositionVariables(ik)
    outputIDs = ["j10.Rz.q";"j14.Rz.q";"j15.Rz.q"];
    addOutputVariables(ik,outputIDs);

  5. Вычислите углы поворота шарнира для колена и плеча, соответствующего положению запястья [-0.16,-0.12,0] m.

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

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

    outputVec =
    
      -52.8384
      -71.6077
      172.9586
    
    
    statusFlag =
    
         1

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

    viewSolution(ik);

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

    Front View

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

  7. Установите лобное плечо и плечо стреловидные объединенные переменные как переменные предположения и запустите анализ еще раз для вращений [90,90] deg.

    guessesIDs=["j14.Rz.q","j15.Rz.q"];
    guesses = [90,90];
    addInitialGuessVariables(ik,guessesIDs);
    [outputVec,statusFlag] = solve(ik,targets,guesses)

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

    outputVec =
    
      -52.8384
      108.3891
       55.5025
    
    statusFlag =
    
         1
  8. Нажмите кнопку Update Visualization, чтобы обновить Средство просмотра Решателя Кинематики, чтобы визуализировать результаты.

    Front View

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

    closeViewer(ik);
Введенный в R2019a
Для просмотра документации необходимо авторизоваться на сайте