MATLAB - 机器人逆运动学设计器(Inverse Kinematics Designer APP)

系列文章目录

 


前言

 


 

一、简介

通过逆运动学设计器,您可以为 URDF 机器人模型设计逆运动学求解器。您可以调整逆运动学求解器并添加约束条件,以实现所需的行为。使用该程序,您可以

  • 从 URDF 文件或 MATLAB 工作区导入 URDF 机器人模型。
  • 调整逆运动学求解器和约束条件。
  • 创建关节配置并导出航点。
  • 将求解器设置、约束和关节配置导出到 MATLAB® 工作区。

二、打开 Inverse Kinematics Designer App

 

  • MATLAB 工具条: 在 "应用程序 "选项卡上的 "机器人和自主系统 "下,单击 "逆运动设计器 逆运动设计器 "图标。
  • MATLAB 命令提示符: 输入 inverseKinematicsDesigner。

三、示例

3.1 创建逆运动学设计器

本示例演示了如何创建、加载和保存逆运动设计器会话,以及如何将机器人加载到会话中。完成文件作为 iksessiondata.mat 附后,以供参考。使用 inverseKinematicsDesigner 函数加载会话,或按照本示例创建会话。

3.1.1 创建

使用 inverseKinematicsDesigner 函数打开逆运动设计器。

inverseKinematicsDesigner


3.1.2 加载机器人模型

在命令窗口中使用 loadrobot 将刚体树(如 Universal UR5e)加载到工作区。importrobot 也可用于从任何机器人 URDF 文件中导入刚体树对象。

uniUR5e = loadrobot("universalUR5e");

单击 "新建会话",从对话框的表格中选择 uniUR5e,然后单击 "确定"。该表包含工作区中的所有刚体树对象。如果在表中没有看到您的对象,请确认该对象是否在工作区中,然后单击 "刷新"。

或者,您也可以使用刚体树下拉菜单,从机器人系统工具箱(Robotics System Toolbox™)附带的机器人模型列表中进行选择,然后单击 "确定",加载一个机器人。

4795a7dedcad453086aad96b4cb3a4ec.png

 现在,"场景画布 "包含机器人模型,"场景浏览器 "显示机器人的所有刚体。

b868f35fc2e8494695ecde36fff6de82.png

 

3.1.3 添加碰撞对象

要在 "场景画布 "中添加碰撞对象,工作区中必须有一个碰撞对象。为方便起见,本示例提供了一个简单的方框供您使用。有关创建碰撞对象的更多信息,请参阅 collisionMesh、collisionBox、collisionSphere 和 collisionCylinder。

加载 collisionobject MAT 文件,将名为 box 的 collisionBox 保存到工作区。单击 "添加碰撞对象",然后从表格中选择 box。单击 "确定 "将其添加到 "场景画布 "中。

f580046033b34e1aa4999a5660c67208.png

现在,"场景画布 "中包含了机器人和碰撞对象。在本示例中,我们将保留该对象,但如果要删除碰撞对象,请在场景浏览器中的场景下找到碰撞对象,右键单击碰撞对象的名称并单击删除。

 c2f54b673da64416a7a93a5a221a945a.png

在 "场景画布 "或 "场景浏览器 "中选择对象时,可使用 "场景检查器 "查看对象的位置和欧拉方位。列出的属性将根据所选碰撞对象的类型而改变。

3.1.4 保存会话

要保存此会话,请单击 "保存会话"。如果这是第一次保存会话,请命名文件并选择保存位置。文件将保存为包含所有会话数据和设置的 MAT (*.mat) 文件。

b5381c4143b1467fa905603c5d3e99ad.png

 

3.1.5 加载保存的会话

要加载会话文件,请单击 "Inverse Kinematics Designer(逆运动设计器)"应用程序中的 "Open Session(打开会话)",或以字符串形式向 inverseKinematicsDesigner 指定 MAT 文件。本示例中提供的会话示例为 iksessiondata.mat。

inverseKinematicsDesigner("iksessiondata.mat")

 ab47950bc14a42a6935f0b89a8f4be44.png

3.2 使用 "场景画布 "并移动机器人

本示例演示如何使用场景画布,并使用逆运动设计器应用程序在其中移动机器人。

加载现有会话 (ixsessiondata.mat),或参考创建逆运动设计器会话示例创建会话。

inverseKinematicsDesigner


3.2.1 场景画布控件

使用场景画布中的轴工具栏控制视图。

b5d8b54c8d8949729f2824fe83a2bae4.png 

 

要旋转场景画布,请选择旋转 3D 按钮并在场景中单击和拖动。

单击 "平移 "按钮,然后在场景中单击并拖动,即可在 "场景画布 "中平移。

选择 "放大 "或 "缩小 "按钮,然后单击并向上或向下拖动,可分别放大或缩小场景画布内的某个区域。

单击 "恢复视图 "按钮可恢复到原始默认视图。

3.2.2 移动机器人

使用预设的 "标记姿势目标 "约束等约束条件移动机器人。标记姿势目标约束是移动机器人最简单的约束。该约束在机器人模型的最后一个体上设置目标姿势。在本例中,标记体被设置为工具 0。在 "场景画布 "中,通过红色、绿色和蓝色的线性和圆形指示符,可视化所选标记体顶部的标记。单击并拖动线性或圆形指示符将分别改变目标位置和欧拉方向。颜色与 "场景画布 "左下方显示的坐标轴颜色相对应。

0bc77f260b9e4079bfe53c6e37addc2e.gif

单击 "标记姿势约束 "打开 "约束 "选项卡。在 "约束 "选项卡中,设置以米为单位的笛卡尔位置、以度为单位的欧拉方向,以及位置和方向的权重和公差。标记体可以在 "约束 "选项卡的 "末端执行体 "列表或 "逆运动学 "选项卡的 "标记体 "列表中更改。单击 "应用 "保存任何更改,单击 "关闭约束 "退出 "约束 "选项卡。请注意,指定的欧拉角是使用 XYZ 序列计算的。

 3f95a3c779044c4abbe7a876352eeeb9.png

还可以通过清除或选择 "约束浏览器 "中 "标记姿势目标 "约束旁边的复选框来打开或关闭 "标记姿势目标 "约束。

3.2.3 解决方案详情

移动 "目标标记姿势 "时,会设置目标姿势,逆运动学求解器会求解所选标记体到达目标姿势的配置。如果找不到目标姿势的解决方案,机器人将移动到最佳可用解决方案,而标记体将不会移动到标记姿势目标。这种解决方案可以通过 "约束浏览器 "中的约束图标直观地识别出来。图标上的红色 x 表示未满足约束条件,而绿色复选框则表示正在满足约束条件。

 

c3bbbce031ee44869e01621494323baf.png

1342ff72e2a645969a77aab7074d03e7.png

 要了解求解器未能求解的更多信息,请单击 "报告状态 "查看求解器求解的详细信息。迭代次数和随机重启次数分别列出求解器执行的次数。违反约束条件"(Constraints Violations)显示了可在命令窗口中显示的所有冲突的结构数组。如果求解器成功求解出目标姿态,状态将显示成功;如果求解器无法求解出目标姿态,则显示其找到的最佳可用解。退出标志(Exit Flag)提供了特定求解器算法执行的更多细节。有关不同退出标志类型的更多信息,请参阅 "逆运动学算法"。

8528eb2ea0564340aa23ea95b1234825.png

要排除求解器无法求解的原因,请参阅 "解决约束冲突 "了解一些技巧。

 3.3 创建无碰撞配置并输出航点

本示例演示如何使用逆运动设计器创建关节配置,并使用场景检查器检查碰撞。本示例使用了 "创建逆运动设计器会话 "和 "使用场景画布和移动机器人 "中的数据和技能。在继续之前,请参考这些示例。

3.3.1 加载会话

使用 inverseKinematicsDesigner 和 iksessiondata.mat 会话文件,在场景中加载具有基本碰撞对象的机器人。

inverseKinematicsDesigner


3.3.2 创建配置

使用配置面板创建、修改和查看配置。

在移动机器人之前,单击 "存储配置 "保存机器人当前的关节配置,如场景画布所示。这将把配置添加到 "配置面板 "的表格中,其中包含默认配置名称、碰撞状态和每个关节的矢量值。双击相应元素可编辑每个配置的名称和值。将此配置重命名为 home,并将其值保留为 [0.00 0.00 0.00 0.00 0.00 0.00 0.00]。

6fc5e741cd6648c8ab5d535ed8ca8324.png

创建另一个配置,但这次要使其与方框相撞。使用 "标记姿势约束 "将末端执行器设置为[-0.5 0.5 0]处的方框中心,然后存储配置。要在多个配置之间切换视图,请选择一个配置,单击 "捕捉到配置 "或单击 "向前或向后步进 "按钮,以步进方式切换当前配置。 

 e8ea8e4998714f72909cb6d5c6a96124.png

3.3.3 检查碰撞

单击检查碰撞 > 检查所有配置更新所有存储配置的碰撞状态。要检查一个配置,请选择所需的配置,单击 "捕捉到配置",然后单击 "检查碰撞">"检查当前配置 "更新当前所选配置的碰撞状态。

27b75933f798450da7ae82f75dd1da41.png

 碰撞检查完成后,第一个和第二个配置的碰撞状态分别为 PASS 和 FAIL。选择碰撞检查失败的配置。场景浏览器中选定配置的主体会更新,显示红色 x 或绿色检查图标,分别表示该主体处于碰撞状态或无碰撞状态。在场景画布中,标记为 "碰撞中 "的体也将以红色高亮显示。请注意,法兰和工具 0 虽然看起来在位置上处于碰撞状态,但却被标记为无碰撞状态。这是因为这些机构只是框架,不包含碰撞网格。如果您打算检查碰撞,请在导入任何机器人之前确保机器人的实体包含碰撞网格。

b39a992e3d20487cbea725486945388d.png

在 "场景浏览器 "或 "场景画布 "中单击该框,选择该框,然后检查 "状态 "窗格。状态 "窗格包含位置、方向、碰撞状态以及自上次碰撞检查以来所有已知碰撞的列表。已知碰撞列表显示了与所选体发生碰撞的所有体。从列表中选择任何一个车身并单击 "检查选定车身",场景检查器就会切换到该本体。

6105aaa7a66d42bf96181ea635d51926.png

 

3.3.4 创建配置路径

要创建路径,请按顺序依次向表中添加配置。由于第二个配置与方框冲突,因此选择它并单击删除。

b068e1339e684d19a5aa356ba0e7844f.png

将目标标记姿态设置为方框后 [-0.9 0.0 0.1],并存储配置。该配置将成为目标配置,因此将其重命名为目标。

2ac82faac9c54530aaedd6e858d6095c.png 

捕捉到 "原点 "配置,并在[-0.5 0.5 0.5]处的方框上添加一个额外配置,作为 "原点 "和 "目标 "之间的中间配置。如果需要修改配置,请捕捉到该配置,调整目标标记姿势,保存新配置并删除旧配置。单击 "移动配置 "按钮,在原点和目标配置之间移动新配置。

f219104710da45b9869ba707249db0c4.png

单击检查碰撞 > 检查所有配置检查所有配置是否发生碰撞。如果某个配置未通过,请进行必要的调整。

3.3.5 将配置导出为航点

保存会话也会保存会话中存储的配置,但要将配置作为航点导出到 MATLAB™ 工作区,请单击导出 > 配置。选择要导出的所有配置,在航点矩阵名称中指定航点矩阵的名称,然后单击导出。检查工作区中是否有包含航点的矩阵。请注意,航点矩阵的大小取决于导出配置的数量和机器人关节的数量,并将以行格式导出。本例中的航点矩阵尺寸为 3x6。

1b662621ec594c7aa14db44fd03ea5a0.png

51c8a9b1913c4028b8257d75b20287cf.png

 

 

 

  • 22
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机械臂的逆运动学问题是指通过给定末端位置和姿态,求解机械臂各个关节的角度。在 MATLAB 中,可以使用 Robotics System Toolbox 来解决机械臂的逆运动学问题。下面是一个简单的 MATLAB 代码示例,演示如何使用 Robotics System Toolbox 求解机械臂逆运动学问题: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 添加机械臂连接点(关节) body1 = robotics.RigidBody('body1'); joint1 = robotics.Joint('joint1', 'revolute'); body1.Joint = joint1; addBody(robot, body1, 'base'); body2 = robotics.RigidBody('body2'); joint2 = robotics.Joint('joint2', 'revolute'); body2.Joint = joint2; addBody(robot, body2, 'body1'); % 设置机械臂末端的目标位置和姿态 target_pose = robotics.Pose([0.1, 0.2, 0.3], quat2rotm([0.1, 0.2, 0.3])); % 创建逆运动学对象 ik = robotics.InverseKinematics('RigidBodyTree', robot); % 配置逆运动学求解参数 ik.SolverParameters.MaxIterations = 100; ik.SolverParameters.SolutionTolerance = 1e-6; % 求解逆运动学问题 initial_guess = robot.homeConfiguration; % 设置初始猜测 [config, solutionInfo] = ik('end_effector', target_pose, initial_guess); % 显示求解结果 disp('关节角度:'); disp(config); % 显示求解信息 disp('求解信息:'); disp(solutionInfo); ``` 请注意,上述代码仅演示了如何使用 Robotics System Toolbox 进行机械臂的逆运动学求解。在实际应用中,你可能需要根据你的具体机械臂模型和控制要求进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值