webots使用以及第三方模型导入装配、运动学仿真教程

因为项目需要使用机器人的运动学仿真,因此需要的使用相应的机器人运动学仿真软件。在查阅了一些资料以后,决定使用webots作为仿真的基本软件。

但是webots的使用教程,国内基本没有。仅在博客园的内的有一个系列博客,介绍了webots的使用的方法。但是没有提供相应的装配方法。webots自身的使用手册与用户说明已经够实用,但是大部分细节都没有介绍。因此经过一个周的学习与研究,了解掌握了webots进行的运动学仿真的基本方法。

1. webots模型的导出成VRML格式

工业机器人的模型一般在机器人生产厂商的官方网站提供了模型的下载。本人使用的是国内某工业机器人供应商生产的机器人,在官网内提供了1比1的机器人CAD装备体模型。格式是SolidWorks文件的。因此将其下载下来以后打开,如图所示。其装配结构如图所示。

图1 机器人的三维模型                                          图2 机器人的装备结构

工业机器人的运动主要是其六个轴的运动。因此,在进行运动学仿真时,需要将每个轴臂的装备体分别导出。webots支持导入的格式是VRML97格式。因此使用SolidWorks进行导出。VRML97格式的文件打开时是有自身内部的坐标系的。因此在导出的时候,为了方便后期在webots内部进行装备,需要对坐标系进行建立与确定。具体的步骤如下:

以工业机器人的第二臂与第三臂为例,其CAD模型在装备的时候是通过减速器连接的轴进行的。因此,为了方便控制第二臂的运动,建议将坐标系的原点建立在底座与第二轴连接处。原始装配体的原点就是建立在此处,因此可以直接导出。如图所示

图3 第二轴装配部的原点

在导出的时候,SolidWorks选择另存为VRML格式,点击选型,选择VRML97,标系选择默认,如图所示:

图4 导出VRML格式

第三轴装配部因为模型自身的坐标系没有的建立在二三轴的连接处,因此需要建立一个额外的坐标系,方便导出。建立方法不再赘述。导出的时候在图4里面需要选择相应的坐标系。

在导出的时候,需要记录每个轴坐标下,下一轴坐标系原点到本轴坐标系原点的空间坐标,方便在webots里面进行装配。

2.单轴模型的处理

由于直接生成的VRML文件,包含较多的点面信息,整体的文件较大,在仿真的时候会使整体的计算变慢,甚至webots直接崩溃。而且,生产厂商网站的提供的模型可能带有较多无用的点面信息,在webots里面,单轴无法直接生成相应的transform文件。因此需要的对单轴导出的模型进行处理。使用的软件是Meshlab。我们只是进行简单的处理,因此 meshlab软件也不需要实际掌握。具体的方法是:

点击File->import Mseh选择单轴VRML文件

点击Filter->Remshing、Simplication进行两个步骤 如图所示其中一个是将模型上面无用的孔洞抹去,另一个是降低模型的点面质量,减少文件大小。通过这样的方法生成的VRML文件大概都在几百k以下了

图5 meshlab处理

 

图6 未处理模型 与处理后的模型

可以明显看出来,处理后的模型在细节与孔洞方面大大减少。可以提高相应的仿真速度。

完成VRML文件处理以后,需要将文件导入webots进行初步处理。webots在2018年以后已经开源,我这里使用的是最新版本的webots。

在webots里面新建项目,文件->import VRML97 选择之间的简化VRML文件导入,便可以看到相应的模型以及我们之前设定的坐标系。右键transfer将其转变为solid类型;再右键Export为wpo文件即可完成单轴文件的处理。

3.webots模型的装配

首先说明,webots的项目树的组成以及思想不同于我们之前用到的SolidWorks等的项目树,其最大的特点是无论任何类型的结构,均存在一个Children节点,在这个节点内部可以定义任意的实体以及模型类型。因此整个webots的使用就十分灵活了。

工业机器人不同轴之前的转动,使用的均是HingeJoint节点,即只有一个转动自由度的连接节点。详情参考webots的使用手册。

整体的装配过程如图所示:

图7 装配流程

详细过程为;

首先将底座导入项目树,方法是项目树最下面一项右键新增,导出之前的wbo文件;

然后将底座的类型转换为robot,方式是右键transfer->robot,方便后期添加运动;

然后需要在此设定相应的参数;

在导入完成后,在Arm1的children节点下就有一个shape节点,将使用DEF命名为Arm1Body,在Arm1的参数里面BoundaryObject里面,点击使用Arm1Body。

设定相应的铰链节点,在Arm1的children节点下新增baseNodes 选择HingeJoint;

点击HingeJoint节点的endPoint选择baseNodes为solid,这时候在该节点的Children下导入之前设定完成的Arm2第二轴装配体,endPoint的类型为solid,所以在其参数BoundaryObject里面,点击使用Arm2Body。需要调整相应的六个自由度,保证第二轴的原点落在相应第一轴坐标系里面一二轴的连接处。

相应的Jointparameter选择HingeJointParameter,其中Position是转轴转过的角度,是我们之后使用Motor进行控制的参数,不需要变动;axis是铰链的转轴 根据机器人的具体转动进行选择;anchor是我们在步骤1里面建立的Arm2坐标系原点距离Arm1坐标系原点的距离坐标。

device节点选择相应的RotationMotor,并把它的名字改成Motor1。

到此为止边完成了第二轴与底座的装配。完成的项目树如图所示:

图8 底座与第二轴的项目树

该机械臂是一个六轴的机械臂,其装配过程是一个层层嵌套的过程,需要保证每个都细节完成,才能完成相应的运动装备。

4. 工业机器人的运动仿真

根据之前在HingeJoint里面定义的Motor的名字,新建一个控制器,使用控制器里面的获取motor的函数以及赋值函数,即可完成机器的控制

  1. Motor *Arm2Motor = robot ->getMotor("Arm2Motor");
  2. Arm2Motor->setPosition(i);

由于我的项目不涉及机器人的运动控制,不涉及相应的机器人运动解析,因此我的工作到此基本完成了。想要继续研究网上的资料 很多。

图9 完成的工业机器人运动

总结:

webots的使用只要理解了他的项目树的结构还是十分简单的,但是国内的资料太少了,手册上面说的还是十分全面的,但是并不是十分详细,在具体的使用过程中需要实际进行操作。

当初选用webots进行仿真的原因是看到他的介绍上对于web很友好,但是研究了一下好像并没有十分友好,只是提供了一个模型展示与动画导出的功能(捂脸),感觉被骗了;除此以外,还可以实现webots作为后端的服务进行运行,前端web实时展示相应的过程。现在只做到了在本地演示,要在网络端运行好像还挺麻烦。以后补上。

同时,现在在gayhub上面的已经有其相应的源码了,我觉着跑掉webGL建立模型的仿真还是可以的。

图10 本地仿真web实时展示

 

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页