主要内容

KinematicsSolver

求解多体模型的运动学问题

描述

KinematicsSolver对象允许用户为他们的对象制定和数值求解运动学问题Simscape™多体™模型。您可以使用对象来解决标准正向和反向运动学问题,以及更一般的闭环运动学系统和多目标问题。

运动学问题由运动学变量表示。这些变量具有标量值,用于指定相应Simscape多体模型中帧之间的关系。有两种类型的运动学变量:关节和帧。关节变量对应于关节位置和速度状态,并在n对象已构造。您可以使用jointPositionVariables联合概率变量对象函数。帧变量对应于模型中任意帧之间的位置和速度关系,必须使用addFrameVariables对象的功能。定义后,可以使用frameVariables对象的功能。

为了制定一个运动学问题,你必须为相关的运动学变量分配角色。有三种角色:目标、初始猜测和输出。属性将变量分配给这些角色addTargetVariables,addInitialGuessVariables,addOutputVariables目标函数。要解决指定变量的问题,请使用解决对象的功能。从初始状态开始,求解器试图找到与目标变量值一致的系统最终状态。初始状态是用初始猜想变量的值来合成的。未由初始猜测变量指定的初始状态被初始化为零。输出变量的值是从求解器返回的最终状态派生出来的。如果求解器无法找到一个满足所有目标的最终状态,它将尝试至少返回一个运动上可行的状态。

创建

描述

ks=simscape.multibody.KinematicsSolver(模型名)创建一个KinematicsSolver中命名的模型的mdl.对象包含适合于运动学分析的模型的表示。表示是创建对象时模型的快照。对模型的后续更改不会传递到对象。如果有必要,创建一个新对象来捕获这些更改。

模型必须包含Simscape多体网络,在创建模型之前需要将模型加载到内存中KinematicsSolver对象。如果模型块具有MATLAB变量,则需要在模型工作区或MATLAB工作区中以数值方式定义这些变量KinematicsSolver对象忽略连接块的任何接触和几个参数,如国家的目标,限制,驱动,模式配置. 例如,在分析过程中,两个实体可以相互穿透,即使存在空间接触力连接它们的块。块参数设置为运行时在创建对象时计算,之后不能修改。

A.KinematicsSolver对象是句柄对象。从它创建的变量不包含对象的副本,而是对它的引用。该变量充当指针或句柄。修改句柄也会修改对象及其所有剩余句柄。复制一个KinematicsSolver对象并添加一个帧变量到拷贝中,例如,将帧变量添加到对象中,也添加到它可能拥有的任何其他句柄中。

ks= simscape.multibody.KinematicsSolver (___、名称、值)创建一个KinematicsSolver对象,其附加选项由一个或多个指定名称、值对参数。

属性

全部展开

解算器迭代的最大次数,指定为正整数。可以在创建KinematicsSolver对象。

例子:50

数据类型:|int

Simscape从中派生对象的多体模型名称。此属性为只读。

例子:“sm_four_bar”

数据类型:字符|字符串

名称-值对参数

指定可选的逗号分隔的字符对名称、值参数。的名字是参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“DefaultAngleUnit”、“rad的

新运动变量的默认角度单位,指定为逗号分隔对组成“DefaultAngleUnit”和字符向量或字符串标量。当您更改“DefaultAngleUnit”属性时,更改仅适用于新的运动学变量。不改变现有的变量。

例子:“DefaultAngleUnit”、“rad的

数据类型:字符|字符串

新运动变量的默认角度单位,指定为逗号分隔对组成“DefaultAngularVelocityUnit”和字符向量或字符串标量。当您更改“DefaultAngularVelocityUnit”属性时,更改仅适用于新的运动学变量。不改变现有的变量。

例子:“DefaultAngularVelocityUnit”,“rad/s”

数据类型:字符|字符串

新运动变量的默认角度单位,指定为逗号分隔对组成“DefaultLengthUnit”和字符向量或字符串标量。当您更改“DefaultLengthUnit”属性时,更改仅适用于新的运动学变量。不改变现有的变量。

例子:“DefaultLengthUnit”,“在”

数据类型:字符|字符串

新运动变量的默认角度单位,指定为逗号分隔对组成“DefaultLinearVelocityUnit”和字符向量或字符串标量。当您更改“DefaultLinearVelocityUnit”属性时,更改仅适用于新的运动学变量。不改变现有的变量。

例子:“DefaultLinearVelocityUnit”、“/ s的

数据类型:字符|字符串

目标函数

全部展开

frameVariables 列出与坐标系对相关的所有运动学变量
initialGuessVariables 列出所有分配给初始猜测的运动学变量
联合概率变量 列出所有与关节速度相关的运动学变量
jointPositionVariables 列出与关节位置关联的所有运动学变量
输出变量 列出所有指定为输出的运动学变量
targetVariables 列出指定为目标的运动学变量
addFrameVariables 创建运动变量从选择帧对KinematicsSolver对象
addInitialGuessVariables 将运动学解算器对象中的运动学变量指定为猜测
addOutputVariables 从KinematicsSolver对象中指定运动学变量作为输出
addTargetVariables 从KinematicsSolver对象中指定运动学变量作为目标
setVariableUnit 改变运动变量的物理单位
removeFrameVariables 从KinematicsSolver对象中删除选择的帧变量
removeInitialGuessVariables 从KinematicsSolver对象中删除选择的猜测变量
removeOutputVariables 从KinematicsSolver对象中删除选择输出变量
removeTargetVariables 从KinematicsSolver对象中删除选择的目标变量
clearFrameVariables 从KinematicsSolver对象中删除所有的帧变量
clearInitialGuessVariables 从KinematicsSolver对象中删除所有的猜测变量
clearOutputVariables 从KinematicsSolver对象中删除所有输出变量
clearTargetVariables 从KinematicsSolver对象中删除所有目标变量
解决 对KinematicsSolver对象进行运动学分析
generateCode 生成C代码在KinematicsSolver对象上运行运动学分析
视图解决方案 打开“运动学解算器查看器”窗口以可视化运动学解算器解决方案
closeViewer 关闭“运动学求解器查看器”窗口

例子

全部崩溃

这个例子展示了如何计算的正运动学sm_import_humanoid_urdf模型。具体来说,它计算机器人手腕的位置为特定角度的肩膀和肘关节。

  1. 将人形机器人模型加载到内存中并创建一个KinematicsSolver对象。对象包含模型的运动学表示和它所包含的所有关节变量的列表。

    mdl =“sm_import_humanoid_urdf”;load_system (mdl);颗= simscape.multibody.KinematicsSolver (mdl);
  2. 添加到对象中,fk,一组用于左手腕的框架变量。指定B框架的left_wrist关节为从动件,世界框架为基础。命名帧变量组手腕.对象现在有六个帧变量,三个用于x,Y,Z三为翻译组件x,Y,Z旋转组件。

    基础=“sm_import_humanoid_urdf /世界/ W”;追随者=“sm_import_humanoid_urdf / left_wrist / B”; addFrameVariables(fk,“手腕”,“翻译”基地,追随者);addFrameVariables(颗,“手腕”,“轮换”基地,追随者);

    笔记

    的路径基地追随者是从模型根到所需块的选定端口的完整块路径W港口的世界框架Block as the base and theB港口的left_wrist连接块作为从动件。

  3. 使用jointPositionVariables(fk)列出所有的关节变量。将肘关节(j2.Rz.q)、肩前关节(j6.Rz.q)和肩矢状关节(j7.Rz.q)指定为目标关节变量。

    jointPositionVariables(fk)targetId=[“j2.Rz.q”“j6.Rz.q”“j7.Rz.q”];添加targetVariables(fk,targetId);

  4. 使用框架变量(fk)列出所有的帧变量并在手腕集团作为输出。

    帧变量(fk)输出ID=[“Wrist.Translation.x”“Wrist.Translation.y”...“Wrist.Translation.z”“Wrist.Rotation.x”“Wrist.Rotation.y”“Wrist.Rotation.z”];addOutputVariables(颗outputIDs);
  5. 在给定肘关节、肩前关节和肩矢状关节角度的情况下,求解正向运动学问题30.,45,45度。

    目标=(30、45,45岁);[outputVec, statusFlag] =解决(颗目标)
    outputVec=0.2196 0.0584-0.0983 135.0000 0.0027-15.0000 statusFlag=1

    这个解决函数返回输出变量的值。值的排序与输出变量的排序相同。的默认单位M对于翻译组件,和对于转动组件。这个状态标志表明所有的模型约束和目标变量都得到满足。

  6. 查看解决方案。

    viewSolution(颗);

  7. 关闭浏览器。

    closeViewer(fk);

这个例子展示了如何计算逆运动学sm_import_humanoid_urdf模型。具体而言,它计算对应于所需腕部位置的肘关节和肩关节的角度。由于此问题有多个解决方案,因此使用肩关节角度的初始猜测来引导解算器找到所需的解决方案。金宝搏官方网站

  1. 将人形机器人模型加载到内存中并创建一个KinematicsSolver对象。对象包含模型的运动学表示和它所包含的所有关节变量的列表。

    mdl =“sm_import_humanoid_urdf”;load_system (mdl);本土知识= simscape.multibody.KinematicsSolver (mdl);
  2. 添加到对象中,ik,一组用于右手腕的框架变量。指定B框架的right_wrist关节为从动件,世界框架为基础。命名帧变量组手腕.对象现在有三个帧变量x,Y,Z翻译部分。

    基础=“sm_import_humanoid_urdf /世界/ W”;追随者=“sm_进口_人形_urdf/右_手腕/B”;添加帧变量(ik,“手腕”,“翻译”基地,追随者);

    笔记

    的路径基地追随者是从模型根到所需块的选定端口的完整块路径W港口的世界框架Block as the base and theB港口的right_wrist连接块作为从动件。

  3. 使用frameVariables(反向)列出所有的帧变量并在手腕集团的目标。

    帧变量(ik)targetId=[“Wrist.Translation.x”“Wrist.Translation.y”“Wrist.Translation.z”];添加目标变量(ik、targetID);

    笔记

    分析中不需要所有的框架变量。你可以使用frameVariables(反向)列出所有的框架变量,然后选择所需的变量进行分析。

  4. 使用jointPositionVariables(ik)列出所有关节变量,并将肘关节(j10.Rz.q)、肩额关节(j14.Rz.q)和肩矢状关节(j15.Rz.q)的关节变量赋值为输出。

    jointPositionVariables(ik)输出=[“j10.Rz.q”“j14.Rz.q”“j15.Rz.q”];addOutputVariables (ik outputIDs);

  5. 计算肘关节和肩膀对应的手腕位置的关节角度(-0.16, -0.12, 0)

    目标= (-0.16,-0.12,0);[outputVec, statusFlag] =解决(本土知识目标)

    这个解决函数返回输出变量的值——肘部、肩正面和肩矢状的旋转角度,每个都是默认的单位.这个状态标志表明所有的模型约束和目标变量都得到满足。

    outputVec=-52.8384-71.6077 172.9586 statusFlag=1

  6. 在运动学求解器查看器中可视化解决方案,并确定其是否合理。

    视图解决方案(ik);

    点击前视图按钮,以查看结果。

    前视图

    右手腕在正确的位置,但右臂的姿势不自然。请注意,此解决方案是该问题的可能解决方案之一。金宝搏官方网站您可以指定肩关节作为猜测变量,以获得更好的解决方案。

  7. 将肩部前额关节和肩部矢状关节变量设置为猜测变量,并再次运行分析,以进行以下旋转:(90、90)度

    猜测=[“j14.Rz.q”,“j15.Rz.q”];猜测=(90、90);addInitialGuessVariables (ik guessesIDs);[outputVec, statusFlag] =解决(ik目标,猜测)

    这个解决函数返回一个新的关节角度的解。

    outputVec = -52.8384 108.3891 55.5025 statusFlag = 1
  8. 单击更新可视化按钮更新运动学求解器查看器以可视化结果。

    前视图

  9. 关闭浏览器。

    closeViewer(动力学);
在R2019a中引入