exponenta event banner

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 объект игнорирует любые контакты и несколько параметров блоков соединения, например «Цели состояния», «Пределы», «Приведение в действие» и «Конфигурация режима». Например, во время анализа два тела могут проникать друг в друга, даже если существует блок пространственной контактной силы, который соединяет их. Параметры блока имеют значение 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' , изменение применяется только к новым кинематическим переменным. Существующие переменные не изменяются.

Пример: «DefureAnaseUnit», «rad»

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

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

Пример: DefureAngularVelocityUnit, rad/s

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

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

Пример: «DefureLengthUnit», «in»

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

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

Пример: DefureLinearVelocityUnit, 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Создание кода C для выполнения кинематического анализа объекта KinematicsSolver
viewSolutionОткрытие окна «Просмотр решателя кинематики» для визуализации решения «Решатель кинематики»
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

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

  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