在本教程中,我们将构建一个六足行走机器人。要确保在您开始看本教程之前已经阅读了 BubbleRob 教程以及导入和准备刚性体教程。与本教程( “hexapod.dxf” ) 有关, 并由 LyallRandell 提供的 V-REP CAD 数据位于 V-REP 的安装文件夹的“cadFiles”文件夹中。与本教程相关的完整模型可以在 V-REP 的模型浏览器中找到。单击 [Menu bar --> File --> Import --> Mesh...],然后选择要导入的文件。另请参阅如何导入/导出形状的部分。打开一个询问有关网格缩放和网格定向的对话框,单击确定,在场景的中间导入了几种形状。这些形状也出现在主窗口左侧的场景层次结构中。根据原始CAD 数据的导出方式,导入的CAD 数据可能是不同的比例,处于不同的位置,甚至可以分一个单个形状的组。导入形状会随机分配颜色。导入的形状如下图所示:

如你所见,六足机器人有 6 条相同的腿。所以只用制作一条腿就可以,而不用单独制作每条腿,制作好之后,只需将其复制粘贴到正确的位置即可。在场景中选择要删除的形状(按 ctrl 键或 shift 键单击进行选择),然后按删除键(确保将脚指向虚拟环境的 x 轴):

导入操作使每个接脚还有 3 种形状,因此想要为接脚链和接脚伺服电机提供独立的形状,我们需要进一步细分这 3 种形状。选择 3 种形状,然后单击 [Menu bar --> Edit --> Grouping/Merging --> Divide selected shapes] 划分所选形状。你可以看到,这个操作将最接近机器人主体的形状划分为 3 个子形状,我们本来只想划分为 2 个子形状。要纠正这一点,请选择左右连接元素,如下图所示:

当两个形状仍然被选中时,单击 [Menu bar --> Edit --> Grouping/Merging --> Merge selected shapes] ,以便将它们合并成一个单一的形状。

在下一步,我们将添加接脚结构所需的关节。一种方法是将关节添加到场景中,然后指定其适当的位置和方向(通过坐标和转换对话框)。在你不知道确切的关节位置时,这是不可能的,所以我们必须从我们所拥有的形状中提取它们:

选择代表伺服电机的 3 种形状,复制(按 ctrl-c 或点击 [Menu bar --> Edit--> Copy selected objects] 复制所选对象),然后点击 [Menu bar --> File --> New scene] 新建一个场景,然后粘贴形状(按 ctrl-v 或点击 [Menu bar --> Edit --> Paste Buffer] 粘贴缓冲区)。我们现在在另一个场景(即场景 2 ),无论我们在这里做什么都不会影响初始场景。现在继续选中 3 台伺服电机,然后单击 [Menu bar --> Edit --> Grouping/Merging --> Merge selected shapes] 将其合并为单个形状。然后开启三角形编辑模式。现在构成形状的所有三角形都显示出来,并且可以对其进行操作。

将视图切换到第 2 页,并使用合适的视图工具栏按钮将相机移动到离形状更近的位置:

按shift 键选择构成伺服电机输出轴之一的所有三角形,如下图所示:

然后在形状编辑模式对话框中单击 Extract shape。对其他两个伺服电机输出轴进行相同操作(对于第三台伺服电机,您必须将视图切换到第 3 页,才能按 shift 键选择其输出轴):

将视图切换回第 1 页,离开编辑模式,然后删除那 3 个表示伺服电机的形状。现在提取的轴就变得清晰可见:

我们可以使用提取的形状精确定位关节。单击 [Menu bar --> Add --> Joint --> Revolute],将旋转关节插入场景。其默认位置为(0; 0; 0),默认方向为垂直。在关节仍被选中时,按 ctrl 键选择表示垂直输出轴的形状,然后打开位置和转换对话框,然后单击第 1 节底部的 Apply to selection

这只是将关节定位在与垂直输出轴完全相同的坐标!现在对另外两个关节和水平轴重复相同的步骤。现在所有关节就位,但是,只有首次添加的关节具有正确的方向。选择最后添加的两个关节,然后在方向和旋转对话框的第1部分中的 Alpha, BetaGamma 输入(-90,0,0),然后单击 Apply to selection。所有关节现在都处于正确的位置和方向。选择这 3 个关节,将它们复制到缓冲区(按 ctrl-c 复制),切换回初始场景(即场景1),然后粘贴到缓冲区(按 ctrl-v 粘贴)。这是现在你应该得到的场景:

现在你可以在关节属性对话框(可以双击场景层次结构中的关节图标来打开对话框)中调整关节尺寸(调节 Joint length 和 Joint diameter)。另外,我们想要 2 个水平关节在 y 轴上坐标为 0,垂直关节在 z 轴上的坐标与其伺服电机的坐标相同(在坐标和转换对话框中进行这些操作):

将关节重命名为 “hexa_joint1”,“hexa_joint2” 和 “hexa_joint3”(从机身到足部),双击场景层次结构中的关节名称即可重命名。现在来设置初始关节值,使得当接脚水平拉伸时,所有关节值都为零:在关节对话框中,在 Position 项,将“hexa_joint2”和“hexa_joint3”设置为-30 和+120。注意关节是否处于扭矩/力模式。对我们而言,我们想以逆运动学模式来控制这些关节,但是我们也想要将逆运动学结果应用为动力学位置控制值。为此,我们将在逆运动学模式中设置关节(在 Joint mode 中选择“逆运动学模式中的关节”)。除此之外,我们还激活了该关节的 Hybrid operation(这就向V-REP 表明,逆运动学计算结果将作为动态目标值应用于关节中)。单击 Apply to selection 以将刚刚执行的更改应用到所选的其他两个关节中。

在这一点上,我们应该配置形状的视觉外观,如果有必要,将它们分组,并为动态模拟准备相应的纯形状。关于如何完成这一工作,详情就不在此解释了,因为该步骤与导入和准备刚性体的教程非常相似。完成此步骤后,你就会看到以下场景(可见和隐藏的部分):

以上是“tutorials\Hexapod\ hexapodmiddle step.ttt”中的场景。注意事项如下:

已对对象进行相应的命名/重命名。

用于动力学的六足机器人的机体(“hexa_bodyRespondable”)被简化为 3 个立方体(中间的空间已被填充)。

因为纯球体在动态模拟中又稳又快,所以接脚的末端用纯球体来表示。

质量,惯性特性等性能都被设置为最佳。总是需要一些(大量的)测试才能找到合适的(即稳定的)参数。

连续链接元素不会引起碰撞响应(相应地要设置形状动力学属性对话框中的 Respondable masks)。

接下来,我们会链接当前机械装置的元素。先选择“hexa_link3Respondable” , 接下来选择“hexa_joint3”,然后单击 [Menu bar --> Edit --> Make last selected object parent]。对“hexa_joint3” 和“hexa_link2Respondable” ,“hexa_ link2Respondable” 和“hexa_joint2” , “hexa_ joint2” 和“hexa_link1Respondable”,“hexa_link1Respondable” 和“hexa_ joint1” 以及“hexa_joint1”和“hexapod”进行同样的操作。我们组装了第一个接脚。开始模拟并观察刚性对象是如何受关节限制的。还要注意的是,关节没有保持固定的位置,而是慢慢变化:这是因为我们还没有为表示接脚的运动链定义逆运动学任务。这正是我们接下来要做的。

点击 [Menu bar --> Add --> Dummy] 添加一个虚拟对象。将其重命名为“hexa_footTip”。现在将该虚拟对象置于接脚末端,也就是接脚与地面接触的地方。你可以通过使用对象操作工具栏按钮或使用坐标和转换对话框来实现此目的。在前一种情况下,将视图切换第 2 页,第 3 页,第 4 页,第 5 页或第 6 页上的正交投影视图来逐步调整位置是很有用的。一旦完成,虚拟对象的绝对位置应该接近(0.204,0,0)。接下来,将虚拟对象附加到“hexa_link3”(即将虚拟对象拖到场景层次结构中的“hexa_link3” ) 。然后复制并粘贴 “hexa_footTip” 并将该副本重命名为“hexa_footTarget”。

在这个阶段我们想要的就是让“hexa_footTip” 与“hexa_footTarget” 一致,同时使该附加机械装置对其进行自动调整(即让新的关节位置能够自动计算)。我们必须定义一个反向运动学任务:

首先,设两个虚拟对象为反向运动学解析的一个尖端目标对。双击场景层次结构中“hexa_footTip”的虚拟图标:这将打开虚拟属性对话框。在 Dummy-dummy linking 中,将“hexa_footTarget”指定为 Linked dummy。注意这两个虚拟对象是如何通过场景层次结构中的一个红色点画线连接起来的(两个虚拟对象也通过场景中的红线连接起来,但是由于这两个虚拟对象位置是重合的,所以不能看到这一条线)。在同一对话框中,Link type 已经是 IK, tip-target,这是默认值。这是你现在应该看到的场景:

现在打开逆运动学对话框,然后单击 Add new IK group。IK 组列表中显示了一个新项:“IK_Group”。选择该项目时,打开 IK 元素对话框(单击编辑IK元素),在 Add new IK element with tip 右侧下拉框中选择“hexa_footTip”。然后点击 Add new IK element with tip。关闭对话框,并将“hexa_footTarget”附加到“hexapod”中。逆运动学任务就准备好了!我们来测试一下。

首先,打开一般动态属性对话框暂时禁用动力,然后取消 Dynamics enabled。接下来,启动模拟,并在场景层级中选择“hexa_footTarget”。点击对象操纵工具栏按钮移动“hexa_footTarget”:接脚应该会随之移动。停止模拟并再次启用动力。

我们将通过一个接脚生成的运动来控制六足机器人,并将其延时应用到 6 个接脚上,其中每个接脚都会有不同的延迟。按照一个子脚本生成一个接脚的移动顺序来,并以 6 个附加的子脚本以延迟的方式应用该移动顺序来实现这种控制。选择“hexa_joint1”,然后单击[Menu bar --> Add --> Associated child script --> Non threaded]。我们只是附加一个子脚本到“hexa_joint1”对象中。

现在我们将接脚复制 5 次。选择构成接脚的所有对象(包括隐藏对象):从“hexa_joint1”到“hexa_footTip”。也要选择 “hexa_footTarget” 。确保除了“hexa_bodyRespondable” 和“hexa_body”以外,对其他对象进行复制并粘贴。打开方向和旋转对话框,在第2 部分中的 Around Z 项输入“60”(在Around X 和Around Y 两项保持为0)。确保该转换跟 World 有关,然后单击 Z-rotate selection。再次粘贴初始接脚,然后将 Around Z 项调整为 120,然后再次单击 Z-rotate selection。对其余 3 个接脚重复上述步骤(确保将旋转角度分别调整为 180°,240°,最后是 300°)。这是你会看到的场景:

把所有的接脚都接到机身上。选择“hexa_joint1#0”到“hexa_joint1#4” 的所有项目,然后选择“hexapod”,然后单击 [Menu bar --> Edit --> Make last selected object parent] 。在场景层次结构中,点击“ - ”图标来重叠所有的接脚树。选择 “hexa_footTarget#0” 到 “hexa_footTarget4#4” 的所有项目,然后选择“hexapod”,然后单击 [Menu bar --> Edit --> Make last selected object parent]

打开逆运动学对话框。请注意逆运动学任务是怎样再次被复制的。这是你会看到的场景:

关闭逆运动学对话框。点击 [Menu bar --> Tools --> Selection] 打开对象选择对话框,或按相应的工具栏按钮。点击 Clear Selection ,然后点击 Dummies:0/13。场景中的所有虚拟对象已被选中。取消选择(按 ctrl 键单击)不属于六足机器人的虚拟对象。我们现在选择了六足机器人上的12 个虚拟对象。现在打开对象的基本属性。在 Visibility layers 中,禁用第 3 层并启用第 11 层,然后单击Apply to selection。这只是将所有的虚拟对象发送到可见性层 11,实际上让它们不可见。如果您希望临时启用/禁用某些图层,请查看图层选择对话框。

接下来,按照与上述相同的步骤将所有关节发送到可见性层 10。

然后在场景中添加一个新的虚拟对象,并将其重命名为“hexa_base”。还可以将其发送到可见层 11。然后让它成为“hexapod”的的子机器人。“hexa_base”表示六足机器人的位置,即我们所选的位置(0; 0; 0)。

现在我们来定义六足机器人模型。正如你已经注意到的,当你单击六足机器人上的某个对象时,只有该对象被选中。但是我们现在想要的是使各个对象不被修改,并且选中整个机器人。对于构成六足机器人的每个对象,除了“hexapod”之外,在对象基本属性对话框中启用 Select base of model instead。现在清除选择,然后选择“hexapod”。在同一个对话框中,启用 Object is model base。现在单击六足机器人上的任何对象:整个机器人都会被选中:

现在将非线程的子脚本附加到“hexapod”。创建另一个场景(即场景3),并打开“hexapod.ttm”模型文件。双击“hexapod”的子脚本图标打开脚本编辑器。复制脚本,切换回初始场景(即场景1),双击“hexapod”的子脚本图标并粘贴脚本。对与每个接脚相关联的子脚本重复相同的步骤。注意与“六足机器人”的接脚相关联的所有子脚本是否完全相同。最后一个要素还是遗漏了:我们需要每个接脚以不同的时间延迟来应用移动序列。如果仔细观察这些接脚的子脚本,他们每个都会从脚本模拟参数中读取延迟值,并附上指令:

modulePos=simGetScriptSimulationParameter(sim_handle_self,'modulePosition')

你可以双击子脚本右侧的图标来打开脚本模拟参数对话框。在另一个场景中添加与六足机器人完全相同的脚本模拟参数。运行模拟。六足机器人现在应该就能运行了。

使用脚本来控制机器人或模型只是一种做法。V-REP 提供了许多不同的方式(也可以结合使用),可以看外部控制器教程,或者插件教程。

参考资料

1.V-REP官方文档:http://www.coppeliarobotics.com/helpFiles/

V-REP 六足机器人教程相关推荐

  1. 六足机器人的实现原理

    缘由: 在自然界和人类社会中存在一些人类无法到达的地方和可能危及人类生命的特殊场合.如行星表面.灾难发生矿井.防灾救援和反恐斗争等,对这些危险环境进行不断地探索和研究,寻求一条解决问题的可行途径成为科 ...

  2. STM32毕业设计——基于STM32+JAVA+Android的六足机器人控制系统设计与实现(毕业论文+程序源码)——六足机器人控制系统

    基于STM32+JAVA+Android的六足机器人控制系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于STM32+JAVA+Android的六足机器人控制系统设计与实现,文章末尾附有 ...

  3. 基于SIMULINK的六足机器人仿真

    六足机器人是机电高度集成的仿生系统,它的动态性能由其结构系统与控制系统一起决定.为了提高六足机器人整体的动态性能,对六足机器人进行集成优化设计.描述六足机器人系统的结构:根据六足机器人机构的几何特征, ...

  4. 12自由度六足机器人实现步态规划功能

    1. 运动功能描述 R111样机是一款拥有12个自由度的串联仿生六足机器人.本文示例实现12自由度六足机器人的行走功能,包括前进.后退.左转.右转. 2. 结构说明 R111样机由六个2自由度串联结构 ...

  5. 深度强化学习控制六足机器人移动个人学习笔记(一)

    深度强化学习控制六足机器人移动个人学习笔记(一) 注意事项 ubuntu18对应的ros版本不是Kinect gym算法执行中部分包要求Python不低于3.6 conda虚拟环境安装gym-gaze ...

  6. 基于Simulink的六足机器人运动控制仿真

    基于Simulink的六足机器人运动控制仿真 在机器人领域中,六足机器人是一种具有灵活性和自适应性的移动机器人.它们可以通过多足支撑和多足行走来克服崎岖地形带来的挑战,因此具有广泛的应用前景.在这篇文 ...

  7. 12自由度六足机器人实现蓝牙遥控

    1. 功能描述 R111样机是一款拥有12个自由度的串联仿生六足机器人.本文为这个六足机器人增加蓝牙遥控功能,可以通过安卓手机APP对机器人的动作实现遥控. 2. 电子硬件 在这个示例中,我们采用了以 ...

  8. 【毕设】六足机器人的设计

    苍天下的蓝耀__[毕设]六足机器人的设计 序 这个项目是我本科毕业设计作品,可实现功能有常规控制(前后左右移动.左右自旋).保持自平衡.三档变速及自主避障功能,历时三个月在家独立完成.应各位的请求写一 ...

  9. 白泽六足机器人_arduino_v1——零件准备

    导航在这里:白泽六足机器人_arduino_v1 1.主控板x1 Baize_ServoDriver_esp8266或者Baize_ServoDriver_esp32 如下图左边为 Baize_Ser ...

最新文章

  1. 最近微软购买了哪些域名?
  2. hikaridatasource 加密后登陆不上_渗透测试 | 突破前端JS加密限制
  3. LeetCode 1278. 分割回文串 III(区间DP)
  4. rfid技术及应用答案王佳斌_RFID技术智能仓储管理系统应用优势
  5. r语言中的shiny教程_如何使用Shiny在R中编写Web应用程序
  6. Redis 持久化(学习笔记五)
  7. 深入理解css之float
  8. 操作系统思考 第六章 内存管理
  9. 机器学习项目实战----信用卡欺诈检测(一)
  10. MongoDB 最大连接数 设置失效的异常分析
  11. npm配置镜像、设置代理
  12. 浏览器中的 HTTP 请求从发起到结束经历的所有阶段
  13. MT6577供放问题
  14. /etc/shadow文件是什么?
  15. 省级税务大数据平台应用建设的分析与思考
  16. js-打印1-100以内的质数(素数)
  17. 深度信念网络DBN的一个matlab实例
  18. 电子技术基础(三)__电路分析基础之重点__叠加原理
  19. 小旋风asp iis_ASP 4-绕.NET 4(和Visual Studio 2010)Beta 1的旋风之旅
  20. 世界战争2HTML5小游戏,[娱乐][PCD]SkyWarsReloaded —— 天空战争小游戏全新归来![1.8-1.13.2]...

热门文章

  1. 安装dvc6200时必须留意的事宜
  2. 2015(第四届)中国信息化和工业化融合发展高峰论坛第二天-黄培博士讲座课件...
  3. CSS文字单行隐藏和多行隐藏
  4. Springboot Vue 前后端先分离后结合,闻名已久,今日实战
  5. 行级别安全性设置——本地Power BI
  6. 正点原子STM32通过蓝牙下载程序
  7. CVPR论文解读 | 剁手有了新方法,明星同款边看边买
  8. 使用Batch管理VHD
  9. 推特中根据推文的id查找推文
  10. win11上帝模式怎么打开 Windows11上帝模式的设置方法