通过逆运动学设计器,您可以为 URDF 机器人模型设计逆运动学求解器。您可以调整逆运动学求解器并添加约束条件,以实现所需的行为。使用该程序,您可以
本示例演示了如何创建、加载和保存逆运动设计器会话,以及如何将机器人加载到会话中。完成文件作为 iksessiondata.mat 附后,以供参考。使用 inverseKinematicsDesigner 函数加载会话,或按照本示例创建会话。
使用 inverseKinematicsDesigner 函数打开逆运动设计器。
inverseKinematicsDesigner
在命令窗口中使用 loadrobot 将刚体树(如 Universal UR5e)加载到工作区。importrobot 也可用于从任何机器人 URDF 文件中导入刚体树对象。
uniUR5e = loadrobot("universalUR5e");
单击 "新建会话",从对话框的表格中选择 uniUR5e,然后单击 "确定"。该表包含工作区中的所有刚体树对象。如果在表中没有看到您的对象,请确认该对象是否在工作区中,然后单击 "刷新"。
或者,您也可以使用刚体树下拉菜单,从机器人系统工具箱(Robotics System Toolbox?)附带的机器人模型列表中进行选择,然后单击 "确定",加载一个机器人。
?现在,"场景画布 "包含机器人模型,"场景浏览器 "显示机器人的所有刚体。
?
要在 "场景画布 "中添加碰撞对象,工作区中必须有一个碰撞对象。为方便起见,本示例提供了一个简单的方框供您使用。有关创建碰撞对象的更多信息,请参阅 collisionMesh、collisionBox、collisionSphere 和 collisionCylinder。
加载 collisionobject MAT 文件,将名为 box 的 collisionBox 保存到工作区。单击 "添加碰撞对象",然后从表格中选择 box。单击 "确定 "将其添加到 "场景画布 "中。
现在,"场景画布 "中包含了机器人和碰撞对象。在本示例中,我们将保留该对象,但如果要删除碰撞对象,请在场景浏览器中的场景下找到碰撞对象,右键单击碰撞对象的名称并单击删除。
?
在 "场景画布 "或 "场景浏览器 "中选择对象时,可使用 "场景检查器 "查看对象的位置和欧拉方位。列出的属性将根据所选碰撞对象的类型而改变。
要保存此会话,请单击 "保存会话"。如果这是第一次保存会话,请命名文件并选择保存位置。文件将保存为包含所有会话数据和设置的 MAT (*.mat) 文件。
?
要加载会话文件,请单击 "Inverse Kinematics Designer(逆运动设计器)"应用程序中的 "Open Session(打开会话)",或以字符串形式向 inverseKinematicsDesigner 指定 MAT 文件。本示例中提供的会话示例为 iksessiondata.mat。
inverseKinematicsDesigner("iksessiondata.mat")
?
本示例演示如何使用场景画布,并使用逆运动设计器应用程序在其中移动机器人。
加载现有会话 (ixsessiondata.mat),或参考创建逆运动设计器会话示例创建会话。
inverseKinematicsDesigner
使用场景画布中的轴工具栏控制视图。
?
?
要旋转场景画布,请选择旋转 3D 按钮并在场景中单击和拖动。
单击 "平移 "按钮,然后在场景中单击并拖动,即可在 "场景画布 "中平移。
选择 "放大 "或 "缩小 "按钮,然后单击并向上或向下拖动,可分别放大或缩小场景画布内的某个区域。
单击 "恢复视图 "按钮可恢复到原始默认视图。
使用预设的 "标记姿势目标 "约束等约束条件移动机器人。标记姿势目标约束是移动机器人最简单的约束。该约束在机器人模型的最后一个体上设置目标姿势。在本例中,标记体被设置为工具 0。在 "场景画布 "中,通过红色、绿色和蓝色的线性和圆形指示符,可视化所选标记体顶部的标记。单击并拖动线性或圆形指示符将分别改变目标位置和欧拉方向。颜色与 "场景画布 "左下方显示的坐标轴颜色相对应。
单击 "标记姿势约束 "打开 "约束 "选项卡。在 "约束 "选项卡中,设置以米为单位的笛卡尔位置、以度为单位的欧拉方向,以及位置和方向的权重和公差。标记体可以在 "约束 "选项卡的 "末端执行体 "列表或 "逆运动学 "选项卡的 "标记体 "列表中更改。单击 "应用 "保存任何更改,单击 "关闭约束 "退出 "约束 "选项卡。请注意,指定的欧拉角是使用 XYZ 序列计算的。
?
还可以通过清除或选择 "约束浏览器 "中 "标记姿势目标 "约束旁边的复选框来打开或关闭 "标记姿势目标 "约束。
移动 "目标标记姿势 "时,会设置目标姿势,逆运动学求解器会求解所选标记体到达目标姿势的配置。如果找不到目标姿势的解决方案,机器人将移动到最佳可用解决方案,而标记体将不会移动到标记姿势目标。这种解决方案可以通过 "约束浏览器 "中的约束图标直观地识别出来。图标上的红色 x 表示未满足约束条件,而绿色复选框则表示正在满足约束条件。
?
?要了解求解器未能求解的更多信息,请单击 "报告状态 "查看求解器求解的详细信息。迭代次数和随机重启次数分别列出求解器执行的次数。违反约束条件"(Constraints Violations)显示了可在命令窗口中显示的所有冲突的结构数组。如果求解器成功求解出目标姿态,状态将显示成功;如果求解器无法求解出目标姿态,则显示其找到的最佳可用解。退出标志(Exit Flag)提供了特定求解器算法执行的更多细节。有关不同退出标志类型的更多信息,请参阅 "逆运动学算法"。
要排除求解器无法求解的原因,请参阅 "解决约束冲突 "了解一些技巧。
本示例演示如何使用逆运动设计器创建关节配置,并使用场景检查器检查碰撞。本示例使用了 "创建逆运动设计器会话 "和 "使用场景画布和移动机器人 "中的数据和技能。在继续之前,请参考这些示例。
使用 inverseKinematicsDesigner 和 iksessiondata.mat 会话文件,在场景中加载具有基本碰撞对象的机器人。
inverseKinematicsDesigner
使用配置面板创建、修改和查看配置。
在移动机器人之前,单击 "存储配置 "保存机器人当前的关节配置,如场景画布所示。这将把配置添加到 "配置面板 "的表格中,其中包含默认配置名称、碰撞状态和每个关节的矢量值。双击相应元素可编辑每个配置的名称和值。将此配置重命名为 home,并将其值保留为 [0.00 0.00 0.00 0.00 0.00 0.00 0.00]。
创建另一个配置,但这次要使其与方框相撞。使用 "标记姿势约束 "将末端执行器设置为[-0.5 0.5 0]处的方框中心,然后存储配置。要在多个配置之间切换视图,请选择一个配置,单击 "捕捉到配置 "或单击 "向前或向后步进 "按钮,以步进方式切换当前配置。?
?
单击检查碰撞 > 检查所有配置更新所有存储配置的碰撞状态。要检查一个配置,请选择所需的配置,单击 "捕捉到配置",然后单击 "检查碰撞">"检查当前配置 "更新当前所选配置的碰撞状态。
?碰撞检查完成后,第一个和第二个配置的碰撞状态分别为 PASS 和 FAIL。选择碰撞检查失败的配置。场景浏览器中选定配置的主体会更新,显示红色 x 或绿色检查图标,分别表示该主体处于碰撞状态或无碰撞状态。在场景画布中,标记为 "碰撞中 "的体也将以红色高亮显示。请注意,法兰和工具 0 虽然看起来在位置上处于碰撞状态,但却被标记为无碰撞状态。这是因为这些机构只是框架,不包含碰撞网格。如果您打算检查碰撞,请在导入任何机器人之前确保机器人的实体包含碰撞网格。
在 "场景浏览器 "或 "场景画布 "中单击该框,选择该框,然后检查 "状态 "窗格。状态 "窗格包含位置、方向、碰撞状态以及自上次碰撞检查以来所有已知碰撞的列表。已知碰撞列表显示了与所选体发生碰撞的所有体。从列表中选择任何一个车身并单击 "检查选定车身",场景检查器就会切换到该本体。
?
要创建路径,请按顺序依次向表中添加配置。由于第二个配置与方框冲突,因此选择它并单击删除。
将目标标记姿态设置为方框后 [-0.9 0.0 0.1],并存储配置。该配置将成为目标配置,因此将其重命名为目标。
?
捕捉到 "原点 "配置,并在[-0.5 0.5 0.5]处的方框上添加一个额外配置,作为 "原点 "和 "目标 "之间的中间配置。如果需要修改配置,请捕捉到该配置,调整目标标记姿势,保存新配置并删除旧配置。单击 "移动配置 "按钮,在原点和目标配置之间移动新配置。
单击检查碰撞 > 检查所有配置检查所有配置是否发生碰撞。如果某个配置未通过,请进行必要的调整。
保存会话也会保存会话中存储的配置,但要将配置作为航点导出到 MATLAB? 工作区,请单击导出 > 配置。选择要导出的所有配置,在航点矩阵名称中指定航点矩阵的名称,然后单击导出。检查工作区中是否有包含航点的矩阵。请注意,航点矩阵的大小取决于导出配置的数量和机器人关节的数量,并将以行格式导出。本例中的航点矩阵尺寸为 3x6。