KinematicsSolver

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

Описание

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

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

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

Создание

Описание

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

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

A 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', 'rad'

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

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

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

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

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

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

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

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

Пример: 'DefaultLinearVelocityUnit', 'in/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 модель. В частности, он вычисляет положение запястья робота для заданных углов плечевого и коленного суставов.

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

    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 для компонентов вращения. The statusFlag показывает, что все ограничения модели и целевые переменные удовлетворены.

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

    viewSolution(fk);

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

    closeViewer(fk);

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

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

    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. The statusFlag показывает, что все ограничения модели и целевые переменные удовлетворены.

    outputVec =
    
      -52.8384
      -71.6077
      172.9586
    
    
    statusFlag =
    
         1

  6. Визуализируйте решение в Kinematics Solver Viewer и определите, является ли оно разумным.

    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, чтобы обновить Kinematics Solver Viewer, чтобы визуализировать результаты.

    Front View

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

    closeViewer(ik);
Введенный в R2019a