- [连载 0]Vrep入门介绍
- [连载 1]Vrep小车建模——前进和转向
- [连载 2]Vrep小车建模——内嵌脚本
- [连载 3]Vrep小车建模——matlab控制
- [连载 4]Vrep导入三维模型——PUMA560机械臂
- [连载 5]Vrep--Matlab Robitic Toolbox--PUMA560机械臂控制
- [番外 1]Vrep小车机械臂抓取
- [Lib库 1]CoppeliaSim差分避障小车的Simulink实现 (B站视频讲解)
- [Lib库 2]CoppeliaSim机械臂抓取的Simulink实现 (B站视频讲解)
-
知乎专栏:Vrep机器人动力学建模仿真
恭喜大家完成[连载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,来控制机械臂
本节的安排如下:
- 导入前准备工作
- 导入模型并简单处理
- 提取关键特征,添加运动关节
- 提取实体特征
step1 准备工作
首先要在建模软件中建立机械臂模型,我这里用的是soildworks,建模完的效果如下图:
图1 PUMA560机械臂模型
请注意,下面的经验很重要!!!我就不全部加粗了!!-
导入过程是一个体力活,前期的一点问题可能会导致后面非常麻烦!!!
首先,上图的建模结果是“不可以”直接导入到vrep。因为在导入过程中,vrep会保留原来的坐标系关系,也就是说导入到vrep中就是和图1中的样子一样的,具体可以看图2,从图2中可以看出各个臂处于比较随意的状态,这对于vrep这种软件后期调整起来非常麻烦,因此我们要提前调整好机械臂的位置,使其处于一个便于调整的位置,见图3。
图2 调整前的机械臂 soildworks视图(左) vrep视图(右)
图3 调整后的机械臂 soildworks视图(左) vrep视图(右)
至于怎么调整,一般团队里都有搞机械的小伙伴,和他们说一下要求就可以了,把该对齐的面对齐就可以了。
- 现在已经准备好了要导入的模型(本节例程模型请点击),那么需要转成什么格式呢?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 实体操作动图
实体编辑界面具有三种操作:
- 三角形编辑模式(Triangle edit mode):这个模式下三角形是可见的,可以用来操作三角形从而提取出你需要的形状,常见的形状有长方体、圆柱体和球体。
- 顶点编辑模式(Vertex edit mode):这个模式下可以编辑顶点,用来调整模型的形状,还可以通过顶点生成dummy便于后续使用。
- 边编辑模式(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_vision
到
puma560_link5_vision
六个结构拷贝到一个新的scene中,先选择
puma560_link0_vision
,执行下图的操作(
Edit->Morph selection into convex shapes
),这样就得到了第一个实体,对剩余的其他组件执行同样的操作。
提取凸面体结构
操作完成后,将各个部件重命名为
puma560_link0
到
puma560_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,欢迎交流哈
https://u.wechat.com/MIXGPFx3pmLt0sF7d6MEh-w (二维码自动识别)