相信大家在看完Vrep入门介绍之后已经开始摩拳擦掌,准备自己动手完成一个模型吧,下面就介绍如何制作一个可以前进和转向的小车。

Step1模型准备

说明:这个模型可以从零开始建立,也可以根据我给大家提供的起始文件,起始文件我放在淘宝上了,大家可以购买得到,收费的目的是为了让大家更加珍视这次Vrep的学习过程,希望大家不要半途而废,也是我坚持完成系列教程的动力所在。宝贝链接

起始文件

Step2构建驱动轮

这里搭建的小车为大家熟知的万向轮小车,通过小车后面两个轮子的速度匹配实现前进、转向、后退等运动,是最常见的小车运动形式之一。现在我们先构建一个主动驱动轮。
主动驱动轮的构建思路如下:

  1. 建立一个扁平状的圆柱体,作为驱动轮的实体
  2. 调整驱动轮的位置和方向,满足滚动的要求
  3. 设置实体轮子的动力学参数
  4. 将实体轮与贴纸轮组合,完成一个驱动轮构建
  5. 通过复制操作,完成两个驱动轮的摆放

2.1添加实体

向环境中添加一个圆柱体,从菜单栏依次选择[Menu bar --> Add --> Primitive shape --> Sphere],参数按照下图1进行配置,仅需要修改红框中的内容,得到图2中的结果。

图1 添加圆柱体对话框

图2 添加轮子实体后

2.2调整位置和方向

默认添加轮子的方向不符合滚动要求,需要将其竖直起来。首先在模型树选中刚加入的圆柱体Cylinder,点击旋转按钮,根据图3完成操作。

图3 旋转实体轮

调整轮子的位置,将相对于world坐标系的Z方向位置为0.1175(=0.235/2),设置过程见图4.

图4 设置轮子的空间位置

2.3设置实体轮子的动力学参数

关闭平移和旋转的对话框,双击模型树中,模型前面的图标,见图5,打开模型属性窗口。按照图6完成模型的质量属性和转动惯量属性修改。完成此项工作之后,可以尝试运行一下仿真,看看实体轮是否会运动。

图5 双击显示模型属性对话框

图6 模型质量属性和转动惯量属性设置

2.4与贴纸轮结合,完成一个主动驱动轮的设计

由于添加的实体圆柱轮看起来实在太丑,因此我为大家提供了一个贴纸轮,为什么叫做贴纸轮呢?是因为这个轮子只提供一个外观,并不参与到动力学计算中,就好像我在上面贴了一层图案。贴纸轮的获取方式请点击宝贝链接

好看的贴纸轮^-^

将贴纸轮位置设置与实体轮重合,我们这里采用一种更为便捷的方式,也是后面涉及到Vrep装配最常用的手段之一,请大家注意。
首先先用鼠标点选贴纸轮,然后摁住Ctrl键,选择实体轮,点击移动按钮,在平移对话框里选择Apply to selection,完成移动,具体过程见图7。移动后的效果见图8。

这里需要强调一下点击的顺序,先选择的是希望移动的部分,最后选择的是目标位置。这里希望将贴纸轮移动到实体轮这里,所以首先点击贴纸轮,然后点击实体轮。

图7 将贴纸轮移动到实体轮的位置

图8 移动后的效果

2.5通过复制操作,完成两个驱动轮的摆放

这里我们在学习两个操作,第一个是复制操作,第二个是调整模型树中的层次关系
用Ctrl按键同时选择实体轮和贴纸轮,利用快捷键Ctrl + c,Ctrl + v完成复制粘贴。
选择模型树中的LeftWheel_visual,用快捷键del将其删除(由于我们刚才已经复制产生了新的贴纸轮,就不需要原来的贴纸轮了)。
现在修改模型树中的模型名称,双击模型树的模型名称进入编辑状态,见下图,将Cylinder修改为RightWheel,将Cylinder0修改为LeftWheel,将RightWheel_visual0改为LeftWheel_visual

编辑模型名称

修改模型名称

现在调整模型树的层次结构,在模型树窗口中,鼠标拖动LeftWheel_visualLeftWheel上,拖动RightWheel_visualRightWheel上,完成后的效果如下:

模型树调整之后

Vrep简单易用主要体现在模型树的操作十分灵活,装配非常方便,灵活应用平移旋转工具调整好相对位置之后就可以用模型树固定下相对关系,对于组装复杂的模型非常便捷,大家后面会慢慢体会到。

完成上面的工作之后,将两个轮子按照XOZ平面对称放置,左驱动轮的设置如图9,右轮类似,将Y方向坐标设置为-0.25即可。

图9 左驱动轮的设置

最后的样子为下图:

步骤2完成图

3添加车身和万向轮

3.1添加车身

车身采用一个长方体即可,在[Menu bar --> Add --> Primitive shape --> Cuboid],设置参数如下图:

添加车身

将车身名称改为Car_body,点开平移对话框,设置其位置如下图:

更改车身位置

Car_body_visual移动到Car_body上,操作参考2.4与贴纸轮结合,完成一个主动驱动轮的设计,完成后效果如下(由于车身贴纸比车身小一点,所以看不到了):

车身贴纸与车身重合

将车身贴纸移动到车身下一层,修改车身动力学属性,如下图。至此已完成车身的构建,可以尝试运行一下仿真,看看效果。

车身动力学属性调整

3.2构建万向轮

真实的模拟万向轮相对麻烦一点,这里为了第一个教程的简便,我们采用一种投机取巧的办法,我们把万向轮抽象为一个与地面没有摩擦力的实体,即实现了万向轮的功能。

这种“投机取巧”的行为在后面的动力学仿真中会经常用到,通过合理的抽象,将一些次要功能简单化的实现,从而将注意力集中到核心问题上,达到自己的研究目的。这是我们用到的第一个投机取巧的功能,后续我会不断介绍一些小技巧,让大家能够更快更好的完成仿真。

鉴于大家已经认真完成上面的操作走到这里,下面我将不再细致的讲解已经说明的操作。
通过菜单栏添加一个球体(Sphere),设置球体直径为0.15,修改其名称为Universal_wheel,调整其空间位置如下图。将贴纸轮与球体重合,并修改层次关系。最后设置一下球体的动力学属性以,完成万向轮的构建。

万向轮设置

最后别忘了一点,我们需要设置万向轮与地面无摩擦,选择noFrictionMaterial

万向轮材料属性设置

完成上述内容后可以尝试运行一下仿真,发现车体迅速分解,下一节我们就添加约束关系。

4添加各部件约束,完成车体模型树构建

4.1将万向轮与车身固定

在Vrep中有两种方式可以将两个具有动力学属性的物体固定

  1. 采用力传感器(Force sensor)将两个物体进行连接,实现固连
  2. 采用GroupMerge将两个物体进行组合

我们这里先采用第一种方式,[Menu bar --> Add --> Force sensor],移动其位置,并按照下图设置模型层次。运行仿真,可以看到万向轮与车身不会分开。

力传感器添加

4.2添加驱动关节
驱动关节可以模拟机器人的驱动电机,能够实现速度控制、位置控制和力控制等。我们这里准备采用速度控制。

采用菜单栏命令[Menu bar --> Add --> Joint --> Revolute ],得到下图。将关节名字重命名为RightMotor

image.png

这里我们还是采用2.4节的位置调整方式,不过这次我们不仅要调整关节的位置,还需要调整关节的方向。调整关节位置依然是首先选择关节,然后选择右轮,然后选择位置选项卡,完成平移。

调整驱动关节位置

旋转操作类似,依次执行下图的操作,完成方向设置。

调整驱动关节方向

重复上面的操作,完成左轮的驱动关节添加,最后调整关节的模型层次树,最后结果见下图。运行仿真,发现车体没有解体,证明我们的车身结构已经搭建完成。

关节添加完成图

如果在完成车身结构搭建后,运行仿真发现车身会运动,可以选择不同的求解器,看看不同求解器的差别,下面将解决无缘无故车体运动的问题。
尝试不同的求解器试试

5完成全部工作

5.1设置可见和不可见属性
现在模型和帖子混在一起,既看起来丑,也没有发挥贴纸的作用,下面将简单的实体隐藏。
选择Car_body,打开属性对话框,按照下图设置,将其隐藏。

image.png

同理,对于非贴纸类型的,都隐藏,得到下图,是不是好看多了?

调整隐藏关系后

感觉车身位置略高,我们需要重新调整一下贴纸的位置,

修正车身高度

5.2设置关节驱动参数

关节需要打开Motor enable,使得关节能够输出扭矩,提供动力,将左右两个关节均按照下图设置,设置完成后尝试运行一下仿真。

关节驱动设置

可以看到模型可以运动,试着给两个电机不同的速度信号,实现转向。

细心的同学可能会发现给关节电机是正方向的指令,但是小车却是向后运动。这个没有关系,只要我们在给电机输入指令是注意一下即可。强迫症的同学请尝试旋转关节,将其正方向与小车前进方向对应,这里不再赘述。

结语

下一节教程我想介绍一下如何用内嵌脚本实现一些简单的功能,欢迎大家交换想法~~
到这里已经完成了本节的教程,实属不易啊,如果觉得不错请为我的文章捐赠,我会有更大的动力完成后面的教程