恭喜大家完成[连载0]——[连载3]的基础教程,通过教程的学习相信大家已经可以控制小车的运动了吧^_^,现在就让我进入另一个有意思的领域——机械臂。放在最前面和大家提一个醒,不要觉得自己不是搞机械臂的,你就不去研究机械臂,实际上机械臂的很多算法都是非常标准基础的。比如你要研究人形机器人,每条胳膊和腿就可以看成一条机械臂。
本节主要介绍如何将三维模型,导入到vrep中,vrep自带例程中这部分讲的实在是太烂,条理不清楚,我这里抛砖引玉,用动画和截图的方式将过程记录下来,并总结一些我使用的经验,希望能让大家快速入门。

前言

vrep是一个很好的工具,大家如果开始使用之后更能体会的到,但是由于宣传少、用户少,我现在所知道的国内也就十几所大学有用到的,而且大部分是研究生。依稀记得本科用adams非常痛苦,MSC公司的软件设计不仅其丑无比,而且正版费用特别高,所以才做此教程,为vrep的推广尽自己的一点贡献。

此教程是基于vrep 3.5.0版本制作的,初学可以先安装此版本进行学习,后面再使用更新的版本。(旧版下载链接:链接:https://pan.baidu.com/s/1PIl5t-Pwx2dawOIHfzDelA提取码:qirx)

本节介绍

在推出连载1之后,很多同学问我贴纸是怎么制作的,本节就介绍如何将三维模型导入到vrep中,并进行不同的处理。这个示例采用PUMA560的模型,PUMA560机械臂是多本机器人书籍中介绍的一种机械臂,资料也非常多。

  • 本节先介绍如何将三维模型导入到vrep中并建立实际仿真模型;
  • 下一节介绍PUMA560得DH矩阵描述,控制机械臂实现一定功能;
  • 再下一节介绍如何利用Matlab Robotic Toolbox,来控制机械臂

本节的安排如下:

  1. 导入前准备工作
  2. 导入模型并简单处理
  3. 提取关键特征,添加运动关节
  4. 提取实体特征

完整的例程模型请点击

step1 准备工作

首先要在建模软件中建立机械臂模型,我这里用的是soildworks,建模完的效果如下图:

图1 PUMA560机械臂模型

请注意,下面的经验很重要!!!我就不全部加粗了!!

  1. 导入过程是一个体力活,前期的一点问题可能会导致后面非常麻烦!!!
    首先,上图的建模结果是“不可以”直接导入到vrep。因为在导入过程中,vrep会保留原来的坐标系关系,也就是说导入到vrep中就是和图1中的样子一样的,具体可以看图2,从图2中可以看出各个臂处于比较随意的状态,这对于vrep这种软件后期调整起来非常麻烦,因此我们要提前调整好机械臂的位置,使其处于一个便于调整的位置,见图3。

图2 调整前的机械臂 soildworks视图(左) vrep视图(右)

图3 调整后的机械臂 soildworks视图(左) vrep视图(右)

至于怎么调整,一般团队里都有搞机械的小伙伴,和他们说一下要求就可以了,把该对齐的面对齐就可以了。

  1. 现在已经准备好了要导入的模型(本节例程模型请点击),那么需要转成什么格式呢?vrep支持好几种三维格式的导入,但是就我自己的使用体验来说,转成STL格式最方便,而且大部分的建模软件可以很容易转成stl格式,本文也是基于stl格式进行讲解。
    不同的软件导出的stl格式也是需要注意的,以soildworks为例,选择文件-另存为-保存类型(stl),在选项里选择精细选项。如果你是新手并且模型的规模较小的话,建议选择精细模式,否则你需要根据需求选择精细程度。

图4 导出stl过程

导出stl格式之后,会在文件夹中生成文件,这里需要注意的是有的软件导出后是一个stl文件(将装配体整体导出),soildworks导出的一堆stl文件(每个零件单独一个文件)。如果是一个文件的话,后面会增加一步,不要紧的。

好,到这里导入工作已经完成了,接下来我们将stl文件导入到vrep中。

Step2 导入模型并简单处理

点击菜单栏中的file - Import - Mesh..,具体见图5,找到刚才导出的stl文件,快捷键Ctrl + a选择所有的stl文件,然后点击确定。此时会弹出一个对话框,由于建模软件的坐标系和vrep的不一样,这里选择Y轴朝上,点击OK完成导入,导入的结果见图7。

图5 导入stl文件

图6 导入后的对话框

图7 PUMA650导入后结果

从模型树上可以看到,导入的模型按照不同的零件已经分开,如果你的建模软件导入的是一个整体的话,需要增加一步操作,具体见图8。

图8 将一个整体分解成多个零件
vrep导入过程会随机的改变颜色,所以你导入进来的样子可能和我的不一样。

完成导入后需要整理一下零件,将一些零件进行命名,同时将不需要的一些零件删掉。我们发现导入12个零件,先浏览一遍导入的零件(见图9),发现底座上安装了六个螺栓(见图10),对于仿真是没有用处的,因此删掉。

图9 浏览一遍导入的零件

图10 对仿真无用的螺栓

现在将剩下的零件进行重命名,便于识别。我们用puma560_link0_vision作为起始,依次命名,命名结果如图11.(对应中间文件名称为:vrep4_puam560_step2_1.ttt

图11 将零件重命名

Step3 提取关键特征,添加运动关节

上面的任务都比较简单,接下来将是一大堆体力活,我们要从导入模型中提取出圆柱体从而确定回转关节位置。
实际上stl文件导入进来的是一堆三角形组合,见图12,可见我们需要从这些三角形中提取出圆柱体,然后利用圆柱体去定位关节位置。主要原因是导入后的模型由于形状特殊,其自身坐标系有可能发生不同程度的旋转,因此最好的办法是从中间提取出vrep常用的primitive shape,即可用于后面的动力学仿真,也可以比较好的约束后续的坐标位置。

注意:由于vrep不同电脑下导入结果的会有细微差异,影响后面的具体操作,因此建议直接用vrep4_puam560_step3_1.ttt这个文件作为起始文件,大家后面的操作从这个文件开始。

图12 stl导入后为三角形组合

这里讲一个我自己的方法,我一般是比较喜欢将要调整的模型拷贝到一个备用的scene,这样所有操作都在这个备用的scene中,避免改坏东西。因此我们先新建一个scene,命名为puma560_backup,将puma560_link1_vision拷贝到这个新文件中,我们要从上面提取出两个圆柱体,从而找到机械臂的前两个回转轴。
选择puma560_link1_vision,点击工具栏左边的按钮(见图13),打开实体编辑界面。

图13 实体操作按钮

图13 实体操作动图

实体编辑界面具有三种操作:

  1. 三角形编辑模式(Triangle edit mode):这个模式下三角形是可见的,可以用来操作三角形从而提取出你需要的形状,常见的形状有长方体、圆柱体和球体。
  2. 顶点编辑模式(Vertex edit mode):这个模式下可以编辑顶点,用来调整模型的形状,还可以通过顶点生成dummy便于后续使用。
  3. 边编辑模式(Edge edit mode):这个模式下用来编辑边,可以从这里提取出边缘的形状。

3.1 提取joint1和joint2

我们这里主要使用第一种三角形编辑模式,现在提取第一个圆柱体,我们这里直接选择这个关节的底面,选择这个面上所有的三角形,对用鼠标挨个选择。选择有两种方式,第一种是直接在窗口中选择三角形,选择之后会改变颜色,也可以在左边的浏览窗口选择。我们先选择编号从251至298的三角形。(摁住Ctrl键,鼠标挨个单击,貌似没有其他的快捷方式,所以说是体力活……)点击提取圆柱体(Extract cylinder),点击确定,生成第一个圆柱体。由于这里选择的是一个底面,因此生成的圆柱体高度几乎为零。根据图15,退出形状编辑模式。

图14 选择第一个底面

图15 退出形状编辑模式

此时在模型树里可以看到多出一个Cylinder的实体,我们现在添加一个关节,将其位置与提取出来的圆柱体进行重合。按照图16的指示(这里分别提供了动图和静态图,方便大家看)进行操作,确定好第一个关节的位置。

如果大家对上述操作不是很熟练的话,请看连载1中图7的操作。

图16 将关节与提取出圆柱体进行重合(动图)

图16 将关节与提取出圆柱体进行重合(静态操作)

获得了第一个关节的位置之后,将其重命名为puma560_joint1,将其拷贝回到原来的文件中,这样第一个关节就完成了。

现在获取第二个关节,依然是使用puma560_link1_vision,进入形状编辑模式,选择Triangle 203 ——Triangle 250,提取第二个圆柱体,利用上述同样操作,得到第二个转动关节puma560_joint2。也将其复制回到原来的文件中,此时文件中应该是图17中的结果,(对应中间文件名称为:vrep4_puam560_step3_1.ttt

图16 提取第二个圆柱体

图17 整理好前两个关节

3.2 提取其他关节

由于后续提取其他关节为重复工作,提取过程与提取joint1和joint2类似,因此直接放在宝贝链接的Step3提取关节.docx文档中,大家自己打开看吧,就不占用教程篇幅了。

提取其他关节说明

至此,已经完成全部的关节添加工作,也是本教程中最繁琐的一项任务。

Step4 提取实体特征

上面的工作基本完成了运动学的部分,接下来的内容主要用来完善动力学的部分。由于导入的stl文件是mesh属性,实际上仅仅是一层薄壳,不具备动力学特征(质量和转动惯量,就是你点开始仿真,并不会自由落体),而且如果直接用导入模型的话由于细节太丰富,所以极大的影响仿真速度,一般都会将其简化成vrep自带的primitive shape或者是凸面结构(凹面结构物理引擎可能产生很诡异的现象)
在这里,考虑到机械臂的特性,我们将模型提取出为凸面体(convex shape),因为机械臂工作状态一般旁边不会有障碍物,因此用凸面体来来检测碰撞虽然占用了更多体积,但是一般情况并不会影响结果。

Step4_1 提取凸面体结构

由于提取凸面体会直接替换原来的结构,因此我们将机械臂的puma560_link0_visionpuma560_link5_vision六个结构拷贝到一个新的scene中,先选择puma560_link0_vision,执行下图的操作(Edit->Morph selection into convex shapes),这样就得到了第一个实体,对剩余的其他组件执行同样的操作。

提取凸面体结构

操作完成后,将各个部件重命名为puma560_link0puma560_link5,此时可以得到下图:(对应文件名为vrep4_puam560_step4_1_backup.ttt

全部提取为凸面体结构

设置动力学属性

此时电机开始仿真发现仍然没有自由落体,因为还没有设置动力学属性。接下来我们设置凸面体的质量respondable的属性。这里从**``puma560_link1**开始,根据下图设置动力学属性,注意local respondable mask`是仅点第一个对勾。

设置link1的动力学属性

根据同样的方式设置link2——link5的动力学属性,唯一差别为local respondable mask依次点第二个对勾、第三个对勾……例如第link5的属性为:(对应文件为vrep4_puam560_step4_1_backup2.ttt

link5的动力学属性

完成上述步骤之后,可以点击仿真按钮,应该会看到自由落体的情况。将这些凸面体拷贝回到原来的文件中,重新调整模型树,按照如下的方式进行排列,确定依赖关系,如下图:

整理好的模型树

我们发现拷贝回来的凸面体很丑,直接影响我们观看的心情,因此我们要将其隐藏起来,操作看下图(注意选择多个凸面体的时候按住Ctrl键

隐藏凸面体

此时点击仿真,发现机械臂会立即垮掉,原因是因为添加的关键无法提供足够的扭矩保持平衡,我们这里打开关节的位置控制模式,如下图:(注意要设置一下关节扭矩,默认2.5Nm太小了,这里先设置为100Nm)

设置电机为位置控制模式

(对应最终文件名称为:vrep4_puam560_step4_2.ttt

结语

这篇从准备内容到最后形成文稿,花费了我差不多两周左右的业余时间,真是内容有点多,以至于后面Step4里我都没有具体讲,实在是抱歉。但是也是恭喜大家能看到结尾,应该看完这篇文章的对vrep应该是真爱吧,我留一个微信,大家可以加我,欢迎多多交流~~

有同学说加载不了二维码,我直接放微信号大家搜索吧,微信号是monkey61_1,欢迎交流哈

u.wechat.com/MIXGPFx3pm (二维码自动识别)