Webots串级机械臂建模仿真过程-详细!

576
3
2021年1月26日 09时35分

前言:

非常高兴能作为古月居的签约作者,以后将推出更有价值的文章,以供参考。

 

由于最近要参与一个等效为机械臂的项目,肯定需要做仿真,在加上好友青云同样想要学习机器人仿真软件,特此推出这个简单的教程,基于的环境是Webots-2020a。另外,在很早之前,自己也推出了一个舵轮底盘的教程,但是相对于机械臂来说,结构稍显简单。这次为构建一个三自由度机械臂作为参考案例。最终效果图如下

 

图片1

 

首先,在webots中建立一个工程,点击上方Wizards,新建工程为mii_hand。

 

图片2

 

然后,在建立环境,为hand.wbt, 一路确认。

 

图片3

 

然后,在左边列表栏,鼠标右击,Add new,展开Base nodes, 添加一个Robot节点。

 

图片5

 

添加后,左侧展开Robot节点,找到children,children很重要,后面不同组件的关系都是依据在children 下并行连接还是串行连接。这里我们需要给这个机器人添加一个主体形状,右击children, 点击Add New,找到Base node添加一个Shape, 需要配置他的几何形状(需要右击geometry, 然后Add New,在Base node下面)和外观(需要右击material, 然后Add New,在Base node下面),具体的配置如下,这是一个黄色的圆柱体。

 

图片6

 

有了具体形状,那么我们肯定还需要配置他的物理效果。首先需要为它添加碰撞边界,首先需要重新命名所建立的Shape, 点击Shape后在下方找到DEF,修改为BODY。然后在Robot节点下面找到boundingObject,右击添加,找到USE,具体如图所示,可以找到BODY(Shape)。然后,找到physics Physics,直接添加物理属性。这里如果不做修改,默认质量按 体积*密度。关键点如下图。

 

图片7

 

图片8

 

完成上述后,最后一览效果如下。此时,运行仿真,圆柱体就会立在地面上。

 

图片9

 

接下来添加机器人关节,需要为机器人添加铰链(HineJoint),在BODY shape 下面,右击添加Base node 下面中的 HingeJoint。

 

图片10

 

首先为铰链添加一个实体(Solid),先展开HingeJoint,同样上面的操作,添加Solid。

 

图片11

 

同样之前的操作,添加形状为 Cyliner,然后配置他的大小,颜色等。

 

图片12

 

图片13

 

配置大小,位姿,形状如下橙黄色圆柱体所示

 

图片14

 

接下来配置电机实体的碰撞编辑和物理效果,与之前的BODY操作一致。

 

图片15

图片16

 

接下来配置,铰链的位置信息,如下。其中,主要是axis 和 anchor ,分别的表述意思为轴朝向和轴坐标位置,仔细观察前面的实体左边,你会发现和圆柱实体中心重合,这符合旋转电机特点。

 

图片17

 

接下来为铰链添加设备,这里添加电机,当然还可以添加位置传感器,一般的电机API中可以返回位置信息,所以可以选择不用在添加。

 

图片18

 

接下来配置电机具体参数,其中有很多属性,这里只配置最大速度和最大扭矩,其他保持默认,该假设电机为理想的模型。

 

图片19

 

此时点击上方运行,可以发现铰链关节随主体一起运动(我这里对机器人添加干扰力,使其翻倒)。

 

图片20

 

接下来,需要给铰链添加延伸的肢体,相似的,在铰链关节下Solid的children下添加Solid,此时肢体的父坐标系就是电机的Solid。

 

图片21

 

由于,第一个肢体是一个L形的形状,需要两个长方体Shape拼接而成,此处,需要用到Group和Transform,前者可以理解为将多个Shape组合为一个对象,后者则是对对象的一个位移和旋转变换。

 

同样的流程,在肢体Solid下面添加Group

 

图片22

 

然后添加 Transform

 

图片23

 

在 Transform 下添加 Shape,配置形状,大小,及纹理参数。

 

图片24

 

同样的操作,配置第二个肢体第二部分

 

图片25

 

此时,需要配置肢体的碰撞边界时,只需要重新定义Group就可以,然后添加物理效果,具体配置如下图

 

图片26

 

然后,则需要配置下一个关节单元。在上面配置的肢体下面的children下面添加HingJoint,与上面同样的流程,电机属性一致,不相同的参数部分有以下所示,

 

图片27图片28

 

那么,同理,如果要进行下一段肢体的配置,则在 Motor2 下的Solid 下的children下,添加肢体的Solid即可。具体配置与上述同理,具体参数如下

 

图片29

 

然后,就可以配置第三个电机单元和下一段肢体。配置流程,同上述的过程,配置的效果如下

 

图片30

 

然后,运行仿真(我这里对机器人添加干扰力,使其翻倒),可以看到

 

图片31

 

初步总结:

 

配置的核心思想就是,一个实体或者组件,在父节点的children下就意味着,该实体或者组件坐标系从属父节点的坐标系。对于串级的机械臂,配置可以是K级坐标系在上K-1级坐标系下,这是一种比较容易理解的方法。当然,不只有这一种配置方法。

 

接下来,建立一个简单的控制器(python),驱动电机单元。点击上面的Wizards,点击New Robot Controller,一路next,

 

图片32

 

图片33图片34

 

我是使用 VSCode打开可以看到,

 

图片35

 

这一步很关键,需要将Robot下面的控制器修改为我们新建的控制器,展开Robot,找到controller,具体如下,

 

图片36

 

紧接着,编写控制器内容。这里我们简单调用那三个电机,跑到一个固定位置下。

 

图片37

 

最终运行的效果如下所示,可以见到机器人把手举了起来。

 

图片38

 

总结:

Webots构建机器人简易模型是非常容易的,建模方法不只有这一种。这个过程在给与一个简单的例子,方便大家理解。如果熟悉了整个流程,那么就可以很容易去构架其他的串级关节的机器人,比如构建一个四足机器人。

 

4(%[A6AZ4UI3)46_9M)6%MK

 

最后,如果有什么疑问,欢迎大家留言。

 

发表评论

后才能评论

评论列表(3条)

  • 2021年2月5日 上午11:10

    您好,我也在做webots仿真,涉及一个2自由度的机械臂,问题在这里描述有点费劲,可以加个wx请教一下您吗?15512437865