您好,欢迎访问三七文档
V-REPBubbleRob教程写在前面:本教程是V-REP自带教程中,第一个教程的翻译版本,译者做过的部分都尽量做了翻译。但是限于时间仓促,前后加起来仅有1天翻译时间,译文中可能会存在未知的问题,也没有进行排版,看起来可能稍显凌乱。所以,仅供参考,建议有能力还是学习自带的Help中的英文原版。译文中使用的版本为Windows教育版的3.3.2.本文译者为清华大学自动化系硕士,同行可以加好友一起交流。本教程将通过设计一款简单的移动机器人BubbleRob来尝试介绍很多V-REP的功能。有关本教程的V-REP场景文件定位在V-REP的安装文件夹下的tutorials/BubbleRob文件夹。下面的图片展示了我们将要设计的仿真。由于本教程将涉及很多不同的层面,所以也需要看其他的教程,尤其是建立仿真模型的教程。首先,启动V-REP。仿真器展示一个默认场景。我们将从BubbleRob的机身开始学习。先用[Menubar--Add--Primitiveshape--Sphere]为场景添加一个直径为0.2的原始球体。调整X-size为0.2,然后点击OK。创建的球体将以默认方式出现在可视层1,并且状态是动态和可交互的(因为我们把“创建动态交互式图形”选项(Createdynamicandrespondableshape)保持在了开启状态)。这意味着BubbleRob的机身可以下落而且当与其他可交互模型发生碰撞时会有反应(也就是说,用物理引擎仿真)。我们看到,这就是模型动态特性(shapedynamicsproperties):选项:主体可交互(Bodyisrespondable)和主体为动态(Bodyisdynamic)选项是打开的。我们启动仿真(通过工具栏按钮,或者在场景窗口按control-space(实测无反应,译者注)),对创建好的球体按复制-粘贴(先[Menubar--Edit--Copyselectedobjects],再[Menubar--Edit-Pastebuffer],或者按control-c然后按control-v):两个球体将会碰撞并滚开。我们停止仿真:被复制的球将会自动的被移除(实测将会复位,译者注)。这个默认动作可以在仿真对话窗口(simulationdialog)中修改。我们也想让BubbleRob的机身能够在其他计算模块中可用(比如最小距离计算模块(minimumdistancecalculationmodule))。为此,我们打开这个模型的对象共同属性(objectcommonproperties)里的Collidable,Measurable,Renderable和Detectable(如果没有打开的话).如果我们想,现在(“现在”的意思可能是与之前的版本对比,译者注)也可以在形状属性(shapeproperties)中更改球的视觉外观。现在我们打开位置和传送对话框(positionandtranslationdialog)(即,译者注),选中表现BubbleRob的球体,在对话区的对象/项目传送&位置放缩操作(Object/itemtranslation&positionscalingoperations)中,在AlongZ中输入0.2。确保“相对于(Relativeto)”选项设置为对世界(World)。然后点击传送选择(Translateselection)。这会让所有被选中的对象严格沿着Z轴平移2cm,确实的把我们的球升高了一点。在场景层级(scenehierarchy)中,我们双击球的名字,使我们可以编辑它的名字。我们输入BubbleRob并按下enter。接下来我们将添加一个接近传感器,使得BubbleRob在接近障碍物的时候可以感知到:我们选择[Menubar--Add--Proximitysensor--Conetype]。在方位和旋转(orientationandrotationdialog)对话框里的对象/项目旋转操作(Object/itemrotationoperations)区中,给绕Y(AroundY)和绕Z(AroundZ)输入90,然后点击旋转选择(Rotateselection)。在位置和传送对话框(positionandtranslationdialog)里的对象/项目位置区中,给X-Coord输入0.1,给Z-coord输入0.12.现在,接近传感器已经正确地安装在了BubbleRob的机身上。在场景层级(scenehierarchy)中双击接近开关的图标,以打开它的特性对话框。点击“显示体积参数(Showvolumeparameter)”以打开接近传感器的体积对话框(体积的意思是传感器探测空间的体积,译者注)。我们调整偏置(Offset)为0.005,张角(Angle)为30,探测距离(Range)为0.15。然后,在接近传感器特性(proximitysensorproperties)里,点击“显示探测参数(Showdetectionparameters)”。这会打开“距离传感器探测参数对话框(proximitysensordetectionparameterdialog)”。我们取消“不允许探测,如果距离小于(Don'tallowdetectionsifdistancesmallerthan)”的勾选,然后关闭对话框。在场景层级(scenehierarchy)中,双击接近传感器的名字来编辑它的名字。我们输入bubbleRob_sensingNose然后按回车(enter)。选择bubbleRob_sensingNose,然后按住control并选择BubbleRob,然后点击[Menubar--Edit--Makelastselectedobjectparent](直接点击右键也可以,译者注)。这回将传感器和机器人的机身连接到一起。我们也可以在场景层级中把bubbleRob_sensingNose拖动到bubbleRob上,效果一样。这是我们现在得到的:接下来我们关心一下BubbleRob的轮子。我们按[Menubar--File--Newscene]建立一个新场景。在不同场景中切换非常方便,以工作在特定的元件上。我们添加一个大小为(0.08,0.08,0.02)的纯净原始圆柱体。至于Bubble的机身,我们在对象通用属性(objectcommonproperties)中选中Collidable,Measurable,RenderableandDetectable(如果没有选中的话)。然后我们把圆柱体的绝对位置设置为(0.05,0.1,0.04)绝对方位设置为(-90,0,0)(我们可以在坐标和传送对话窗口(Coordinatesandtransformationsdialog)中实现)。把圆柱体的名字改为bubbleRob_leftWheel。复制粘贴这个车轮,并设置它的绝对Y坐标为-0.1。把复制的这个车轮名字改为(bubbleRob_rightWheel)。选择这两个轮子(可以用Windows常用的操作方法,按住ctrl实现多选,译者注),复制它们,然后转换到场景1,粘贴。我们现在需要给轮子加关节(或电动机)。点击[Menubar--Add--Joint--Revolute]在场景中添加一个转动关节。再大多数时候,当添加一个新的对象到场景中时,这个对象将会在世界的原点。我们保持关节为选中状态,然后按住ctrl并选择bubbleRob_leftWheel。在位置和传送对话框(positionandtranslationdialog)里的对象/项目位置(Object/itemposition)区域,我们点击区域底部的Applytoselection按钮:这会把关节移动到左轮的中心。然后,在orientationandrotationdialog的Object/itemorientation中,我们做同样的操作:这将会使关节转到和左轮一样的方位。将关节重命名为bubbleRob_leftMotor。我们现在在scenehierarchy中双击关节的图标来打开jointproperties对话框。然后点击Showdynamicparameters来打开jointdynamicsproperties对话框。将enablethemotor和Lockmotorwhentargetvelocityiszero选中。现在我们为右电机做同样的操作,并将其重命名为bubbleRob_rightMotor。现在我们将左轮和左电机链接起来,右轮和右电机链接起来,最后将两个电机和BubbleRob链接起来。这是我们得到的结果:我们运行仿真并注意到机器人往后翻滚。我们丢失了与地板的第三个连接点。现在我们家一个小滑块(轮脚)。在新场景中,我们添加一个纯净的直径为0.05的原始球体,并且让球的Collidable,Measurable,Renderable和Detectable选项选中(如果没有选中的话),然后重命名为bubbleRob_slider。在shapedynamicsproperties中设置Material为noFrictionMaterial。为了使滑块和机器人的严格链接,我们用[Menubar--Add--Forcesensor]加一个力传感器。把力传感器重命名为bubbleRob_connection然后把它往上平移0.05.把滑块与力传感器链接,复制两个对象,换到场景1中粘贴它们。然后我们把力传感器沿着绝对的X轴方向移动-0.07,然后把它链接到机器人的机身。现在我们打开仿真,注意到滑块与机身之间有轻微的移动:这是因为两个对象(即:bubbleRob_slider和bubbleRob)碰撞在了一起。为了在动态仿真时避免这种奇怪的作用,我们必须告诉V-REP两个目标没有相互碰撞,我们通过以下操作来实现:在shapedynamicsproperties中,bubbleRob_slider的localrespondablemask设置为00001111,bubbleRob的localrespondablemask设置为11110000。如果我们再次运行仿真,会发现两个对象不再相互作用。这是我们我们现在得到的:我们再次运行仿真,发现即使在锁定电机的情况下,BubbleRob也只有轻微的移动。我们也尝试用不同的物理引擎运行仿真:结果将会不一样。动态仿真的稳定性与包含在内的非静态模型的质量与惯性紧密相关。我们现在尝试改正那个问题。我们选中两个轮子和滑块,在shapedynamicsdialog中,我们点击三次M=M*2。这个效果是被选中的所有模型的质量会被乘以8.我们为被选中的3个模型做同样的操作,然后再次运行仿真:稳定性增加了。在jointdynamicsdialog里,我们设置两个电机的Targetvelocity都为50.运行仿真:BubbleRob现在向前运动并最终掉下了地板。我们把两个电机的Targetvelocity重置为0.现在的BubbleRob是将来BubbleRob模型的基础。我们稍后将定义这个模型。同时,我们想定义一个包含Bubble所有部件的集合。为此,我们定义一个集合对象。点击[Menubar--Tools--Collections]以打开集合对话框。或者我们可以点击对应的工具栏按钮:在集合对话框里,点击Addnewcollection。一个新的集合对象显示在下面的列表中。现在新添加的集合是空的(没有定义)。当列表中新添加的集合项目被选中时,在场景层级中选择bubbleRob,然后在集合对话框中点击Add。现在我们的集合被定义为层级树中包含从BubbleRob开始的所有对象(集合的组成在Composingelementsandattributes区域中显示)。为编辑集合名字,双击它,然后重命名为bubbleRob_collection。关闭集合对话框。到此,我们想实现BubbleR
本文标题:V-REP中文教程
链接地址:https://www.777doc.com/doc-4253190 .html