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

news2025/3/6 3:18:32

系列文章目录


前言


一、简介

通过逆运动学设计器,您可以为 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™)附带的机器人模型列表中进行选择,然后单击 "确定",加载一个机器人。

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

 

3.1.3 添加碰撞对象

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

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

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

 

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

3.1.4 保存会话

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

 

3.1.5 加载保存的会话

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

inverseKinematicsDesigner("iksessiondata.mat")

 

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

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

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

inverseKinematicsDesigner


3.2.1 场景画布控件

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

 

 

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

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

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

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

3.2.2 移动机器人

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

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

 

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

3.2.3 解决方案详情

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

 

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

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

 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]。

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

 

3.3.3 检查碰撞

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

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

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

 

3.3.4 创建配置路径

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

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

 

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

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

3.3.5 将配置导出为航点

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Http---HTTP响应报文

1. HTTP响应报文分析 HTTP 响应报文效果图: 响应报文说明: --- 响应行/状态行 --- HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述 --- 响应头 --- Server: Tengine # 服务器名称 Content-Type: text/html; charsetUTF-8 # 内容类型 Transfer-Encoding: chunked # 发送给客…

07 Vue3中的三元表达式

概述 三元表达式时JavaScript中比较常用的一种原生语法,能够在一行代码中实现if-else的分支逻辑。 在Vue的双大括号中,我们也可以使用三元表达式去实现一些简单的条件渲染。 基本用法 我们创建src/components/Demo07.vue,先尝试一下三元表…

“做开源犹如养护花朵,花开需要时间”|2023年度总结

你好,我是 Kagol。 2023年已经接近尾声,OpenTiny 从一颗种子🥑逐渐发芽🌱、出苗🌿、长叶🍃,希望明年能长成一棵大树🌲。 回顾 OpenTiny 开源这10个月,我们付出了非常多…

Windows电脑向ipad和iOS系统共享文件夹

Windows电脑向ipad和iOS系统共享文件夹 这个方案不需要下载任何软件,但是要求 iOS 和 Windows 在同一个局域网内。再大的文件都可以在 iOS13 自带的的“文件App”里实时显示,可以直接打开。这个解决方案需要你 Windows 电脑上登陆了微软账号&#xff0c…

Pytorch-RealSR超分模型

1.前言 RealSR 是一种基于学习的单图像超分辨率(SISR)模型,专门针对真实世界的图像。它由腾讯 AI 实验室于 2020 年提出。 RealSR 的核心创新是提出了一种新的退化模型,该模型能够更好地模拟真实世界的退化过程。该模型考虑了真实…

MFC静态链接+libtiff静态链接提示LNK2005和LNK4098

编译报错 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_infoAAEABV0Z) 已经在 libcmtd.lib(typinfo.obj) 中定义 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "pr…

Vue 的两种实现:VSCode 中配置 vue 模板快捷方式的过程

1、创建配置文件: 其一、打开 VSCode ,CtrlShiftP, 打开搜索框: 其二、输入:user, 并点击进去 Snippets:Configure User Snippets 其三、输入 vue3js 并回车: 其四、打开项目,发现配置文件 vue3js.code-sn…

存 储 管 理

(1) 存储管理的任务和功能是什么? 解: 存储管理的主要任务是: 支持多道程序的并发执行,使多道程序能共享存储资源,在互不干扰的环境中并发执行。方便用户,使用户减少甚至摆脱对存储器的管理,使…

ansible-playbook的Temlates模块 tags模块 Roles模块

Temlates模块 jinja模板架构,通过模板可以实现向模板文件传参(python转义)把占位符参数传到配置文件中去,生产一个目标文本文件,传递变量到需要的配置文件当中 (web开发) nginx.conf.j2 早文件当中配置的是占位符(声明…

【LeetCode:2866. 美丽塔 II | 单调栈 + 前后缀数组】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Shell三剑客:awk(格式化输出)

一、格式符 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法 % % 显示%自身 # [.#] 第一个数…

【c】无限制输入字符

我们做题有时候会碰上这种的输入,一直输入字符, 下面附上两种解决办法 方法1: char s[10000]; int i0; int arr[1000]{0}; while(scanf("%c",&s[i])!EOF) { i; } 这样你就可以一直输入&#xff0…

重温经典struts1之自定义类型转换器及注册的两种方式(Servlet,PlugIn)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量&a…

多任务数据采集

进程:操作系统中资源分配的基本单位 线程:使用进程资源处理具体任务 一个进程中可以有多个线程:进程相当于一个公司,线程是公司里面的员工。 一 多线程 多线程都是关于功能的并发执行。而异步编程是关于函数之间的非阻塞执行&…

python中整数和浮点数的运算

任意两个数相除时,结果总是浮点数,即便这两个数能够整除。例如: 在任何运算中,只要有操作数是浮点数,结果总是浮点数。例如:

【计算机系统结构实验】实验3 Cache性能分析

3.1 实验目的 加深对Cache的基本概念及其工作原理的理解; 掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处; 理解常见替换算法(LRU与随机法)的基本思想以及它们对Cache性能的影响。 3.2 实验平台 实验平台…

论文解读:Informer-AAAI2021年最佳论文

论文背景 应用背景 训练的是历史数据,但预测的是未来的数据,但是历史数据和未来数据的分布不一定是一样的,所以时间序列应用于股票预测往往不太稳定 动作预测: 基于之前的视频中每一帧动作,预测下一帧这个人要做什么…

Yolov5水果分类识别+pyqt交互式界面

Yolov5 Fruits Detector Yolov5 是一种先进的目标检测算法,可以应用于水果分类识别任务。结合 PyQT 框架,可以创建一个交互式界面,使用户能够方便地上传图片并获取水果分类结果。以下将详细阐述 Yolov5 水果分类识别和 PyQT 交互式界面的实现…

PHP数组定义和输出

数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。 PHP中的数组与Java的数组不一样,需要有key(键)和value(值),相当于Java中数组和键值对的结合。 数组的定义 …

12.21_黑马数据结构与算法笔记Java

//最近在复习,,java的进度会比较慢一些 目录 219 排序算法 基数排序2 220 排序算法 java排序 221 排序 e01 根据另一个数组次序排序 222 排序 e02 根据出现频率排序 thinking:关于比较器 223 排序 e03 最大间距 解法1(超出内…